One of the most rewarding aspects of working with technology in a library involves finding ways to solve day-to-day problems and to shape its computing environment to best meet the needs of its staff and users. It's great to find ways to support the organization in ways not necessarily possible with the out-of-the-box automation systems that comprise its official technical infrastructure. For a library to be able to extend and enhance its technical environment, it's helpful to have one or more staff members with the ability to write or modify scripts and programs.
Not all libraries may need in-house programming capacity - the vast majority don't. But if your responsibilities include involvement with the library's technical infrastructure, or if you manage technology and you are thinking about the skills needed as your organization moves forward, you might think about where computer programming falls into the mix of skill sets to cultivate. This month's column takes a look at some of the opportunities, advantages, and caveats involved with having a programmer on staff.
Acquiring Programming Skills
Gaining mastery of a programming language enables a wide realm of possibilities in solving problems. In libraries, some of the common tasks include extracting or transforming data, creating utilities that address gaps in functionality not available in other products, or finding ways to connect applications. With even a basic level of proficiency, you can begin to accomplish useful tasks. Once you gain a higher level of mastery, opportunities to make important contributions to your library, or even to the broader community of libraries, greatly expand.
Library programmers arrive at their station by many different paths. Some will come with training in computer science and programming. These individuals will have great technical skills but have to work hard to learn more about library-specific issues. Libraries deal with data in quirky ways that may seem unusual to those coming from an IT background in other industries. Alternately, many others begin with experience or education in the library profession and gravitate toward technology, so they may have picked up some level of programming skills along the way. It's the blend of experience with library issues and knowledge of professional programming concepts and techniques that can produce an outstanding library programmer. The cultivation of a great library programmer blends two areas of expertise -facility with one or more programming languages and a strong knowledge of the idiosyncratic realm of the data structures, protocols, and standards that pervade our profession.
Gaining a detailed knowledge of MARC records, for example, ranks as an important prerequisite to dealing with data issues related to integrated library systems and other core bibliographic applications. This knowledge involves not just the details of record structure but also at least some understanding of how each of the major fields functions. learning the rules that govern the fields, subfields, indicators, leaders, and other components of the MARC record can be challenging but will pay off for those wanting to work with this aspect of library data. Similar examples pervade other aspects of library automation in which knowledge of the practice and traditions of the discipline will benefit the software developer.
Many systems librarians have taught themselves how to write programs. It's a great approach as long as you make sure that the techniques learned fall within the mainstream of professional prograinming. It takes awhile to work up to the point of developing programs that not only work as intended but that also perform efficiently and that do not contain security problems. Teaching yourself how to program should be consistent with your preferred learning style. Some like to jump in and start learning through doing, often following a trial-and-error approach and using books or documentation for reference along the way. Others prefer a more systematic approach, such as reading a book or two or taking a class before jumping into writing code.
Advancing through higher levels of programming proficiency will open up new opportunities. Those just getting started may not necessarily be able to independently author new scripts or programs right away. Many start by modifying or extending existing scripts to meet local needs. This approach allows one to begin to absorb programming techniques by working closely with code written by more advanced programmers. At the next level of advancement, a library programmer gains the ability to write new programs from scratch, often in the form of scripts that extract data or perform finite tasks. A more advanced programmer develops more advanced scripts or works with higher-level languages to create new applications. Advanced programmers, or software development engineers, often work in teams that might also include software architects, interface designers, analysts, quality assurance specialists, and technical writers to create largerscale software applications. This level of work has traditionally taken place in commercial companies that develop library software, but we're seeing more examples in recent years of libraries becoming involved in major software development projects.
For inspiration, conversation with others with similar interests, or for help with specific problems, tune in to the code41ib discussion forum. For information on subscribing see http://code41ib.org.
Selecting a Programming Language
Once you're ready to delve into the realm of programming, you'll need to think about the best programming language to learn. For some, the choice may be predetermined by the needs of ongoing projects, by the requirements of existing applications, or by other factors. But if you are just getting started, then you may have the opportunity to choose which of the available options suits your own proclivities and fits the organization's potential needs.
A variety of prograinming languages find active use in libraries. The right choice for you will depend on factors such as what you already know, what your colleagues use, and the kind of work you want to accomplish. For lighterduty projects or web-oriented tasks, one of the scripting languages such as Perl, PHP, or Ruby on Rails should work well. For more complex, enterprise-level projects, you will want one of the fullfledged prograinming languages such as Java or one of the variants of C. Dozens of options exist, but I'll mention a few of the major ones that I observe in common use in libraries.
JavaScript. All programmers working on web-oriented projects should have at least a basic understanding of JavaScript. This language finds extensive use in web browsers to enhance the interface or pass information between the browser and a web server. Its eventoriented approach allows you to create dynamic and interactive webpages. Keep in mind that this language finds use only within webpages and isn't useful for stand-alone utilities or programs or server-side processing of web applications. JavaScript provides one, and the most popular, approach to working with HTML page elements defined in the Document Object Model (DOM).
Perl. This venerable tool has been around since the mid-1980s and happens to be the one I use the most. Its strengths include broad support among computing platforms, an immense universe of modules that provide specialized functions, support for either procedural or object-oriented code, and powerful capabilities for manipulating textual information. Perl has a special place in the library automation realm. It is the main language of the open source Koha ILS and much of Evergreen, and it is the official reporting language used for SirsiDynix Symphony, as well as many of the other major proprietary ILS products. While those of us who have been around awhile grew up with Perl, I notice that it isn't as popular with the newer generation of emerging programmers.
PHP. PHP currently ranks as the most popular scripting language for web programming. It's supported in almost all web server environments and is a much more accessible language. It's not well-suited for general-purpose programming tasks, but it provides a great way to get a fast start at developing web-based applications. To name a library-oriented example, VuFind uses PHP programming in conjunction with the Apache SoIr and Lucene search technology to form an open source discovery system. I notice that newly minted librarians who focus on technology are more likely to have experience with PHP than other programming languages as they come out of library schools.
Ruby on Rails. As we move from conventional to more leading-edge development environments, Ruby on Rails stands out as one gaining interest. An application framework based on the Ruby programming language, Ruby on Rails has quickly earned a reputation for being able to support rapid development and leaner, more efficient code. It's not a language that I've had the chance to explore, but it's definitely one to consider for emerging library developers. The Blacklight discovery system created at the University of Virginia stands out as an example of a library application based on Ruby on Rails.
Larger-scale development projects demand languages with more efficiency and complexity than the scripting languages I've mentioned. Fullfledged programming languages such as C and Java require much more training, practice, and experience to master. In the hands of professional software engineers, these languages can be used to create major software products. C, or one of its more objectoriented variants, C++, finds use in applications that demand great efficiency, such as those involved with high-performance communications or applications that interact directly with hardware components.
The Issue of Sustainability
As the library becomes involved in creating its own scripts, utilities, or customized applications through the skills of its in-house programmer, it's vital to ensure sustainable and supportable results. As with any other personnel role in the library, it's not wise to become overly dependent on the specific skills of any given individual. Employees come and go. Technology personnel often have the most opportunities elsewhere in the library and vendor community as they enhance their skills and build experience. Given this reality, always make sure that the work accomplished by library programmers is well-documented so that any future individuals in that position can step in to provide ongoing support and development.
Any significant involvement in custom development needs to be done as part of the organization's defined technology strategy. I've seen lots of cases in which technical staff have started projects on their own, under the radar of management. This has caused problems down the line. But I'm also aware of lots of examples in which the creativity of library programmers has led to important contributions that would not have happened if they waited for official approval. The best scenario would allow creativity to flourish but to also find its place within the official strategies and priorities as its fruits become a significant part of the library's technology infrastructure.
In recent years, I observe that libraries are taking a more active role in the creation of software and are dealing with many more integration issues. We're entering a phase of library automation in which open source components find use in all aspects of library operations. The current trajectory of trends in libraries spells more need for personnel adept at programming and with other advanced technology expertise. Now might be a great time to consider expanding your library's repertoire of skills to include more programming capacity.