Monday, November 28, 2011

Learning to Write Code

Learning to write code was one of the most exciting, and yet intimidating, challenges that I've faced in library systems work. Not only are there many languages out there in which to write code, all with strong and weak points in specific contexts, but each language is a large entity to grasp. I think it is somewhat important to note that two separate challenges exist. One is the process of designing the logic, which is on the whole independent of the programming language and the other is the writing of the script - that is, embodying the logic in a specific programming language.

In addition, once one becomes familiar with one language, there are many concepts and practices which are transferable to other languages. There are subtle syntax nuances, however, that make each way of writing something unique. A very basic example is the "if....elseif.....else" structure of PHP. In JavaScript "elseif" becomes "else if" whereas in Python it becomes "elif". But once you remember that, you proceed in the same manner in each language.

I use a variety of resources to learn a language, typically using them as references. Most languages have a web site with a user guide/manual, like PHP's http://www.php.net/. This is the primary authority. Then tutorial-based web sites such as http://www.w3schools.com/ are very handy. Formal books are diverse. My favorites are usually published by O'Reilly, a publisher with which I became familiar during my MLIS studies, as some of my texts were their work. Lastly, on specific issues I frequently conduct internet searches and often end up reading discussion forums where practitioners help each other online. My preferred forum is http://stackoverflow.com

As I said before, knowing where to find the answers is key.

The MLIS and Preparation for a Systems Role

A few years ago when I earned that golden ticket, the Master of Library and Information Science degree, I knew next to nothing about programming, web design, and relational databases. These are the three areas into which I was thrown at the outset of my career. My MLIS program offered very little at all to prepare me. I took one mandatory and one elective course related to computer technology.

The mandatory course was an overview of computers in libraries, with a very basic web design component. This introduction to HTML got me drooling. I took the elective course which involved more advanced HTML projects and the use of CSS. I motored through that course and did just about all the assignments before the semester was half way through. I was hooked on web design then.

It's good to see that several MLIS programs are now introducing increased technology courses to prepare people for this dynamic area of librarianship. I wonder if such a specialization as a Systems Librarian track exists yet or whether we still rely on people with computing degrees to enter librarianship.

Competencies

I've been reading that oh-so-appropriate book, The Accidental Systems Librarian, by Rachel Singer Gordon. One area which the book addresses and which really peaked my interest, somewhat defines my challenge, and helps guide my learning, is that of competencies. There's so much to deal with.
  • Hardware, software, and the sundry appendages to library computers - especially when the library is struggling to update them in a timely manner - seem to need continuous attention.
  • The library web server and all services upon it need maintaining and keeping up to date. New services must be configured.
  • The library proxy server must be maintained to facilitate remote access to subscription resources.
  • Third party services must be maintained and configured, such as the ILS and other subscription tools like the Journal A-to-Z list, discovery service, and link resolver.
  • Multiple programming languages must be learned to create original solutions or to customize existing services.
  • Network and firewall issues, some of which are in the hands of the IT department, must be overcome.
  • Collaboration with library colleagues who may understand little about systems and who only know what it is that they want to get done without knowing if/how it can be accomplished.
There's a lot to cover and none of it stands still. It's always changing. I think it's more important to know how/where to find answers rather than to try to have all the answers memorized. Solutions need to be as efficient and future-proof as possible.

Not the beginning!

This is not the beginning of my journey in systems librarianship. It began when I landed my first job as a librarian and one third of my role was to begin learning code to be able to assist the Systems Librarian with routine systems chores. Or did it? Perhaps it began when I was in my early teens with a Commodore 64 and, using Basic, I wrote short scripts to provide my younger sister with computer-based stories or math games. Little did I realize that when I volunteered in my high school library and spent free time writing short scripts to animate, multi-colorate, and nauseate a welcome message on a library computer, that I had sailed prophetically close to my future career! Either way, it was not part of a grand scheme of mine. Just as becoming a librarian was a quiet realization that the library career matched well with the logical mind with which I am equipped, moving into library systems was an equally logical step.

I love programming. I enjoy the learn-as-you-go self-education that comes with learning various programming languages. Much like learning a foreign language, I have experienced the plateaus where it seems hard to proceed upon the upward journey. I have enjoyed the revelations which open up new possibilities and applications of what I've learned. I love this creative outlet. I revel in developing coded solutions to library problems.

My goal is to achieve a Systems Librarian/Head of Library Systems role in which I can support the library's ever-increasing dependence on technology for the ongoing success of library functions. As my knowledge grows, I look forward to helping train those whom I supervise and to equipping them for success in their roles.