Back to article
Programming Guide Gets Down to the Metal
Nothing gawk-y About It
July 31, 2005
Of all the languages available for the Linux platform few have as a long a heritage as awk. Awk has been a standard part of Unix almost from its inception, with the early versions including awk and using it's text processing and manipulation capabilities within some of the standard scripts used to manage the OS.
GNU awk, more affectionately known as gawk, is a compatible version of the awk language--the language is open standard and other awk implementations exist--and it continues to be maintained and developed by Arnold Robbins. Arnold is in fact a long time proponent of open source, has worked with GNU for many years and written numerous books on sed, awk, and other open source technologies.
I talked to Arnold about his latest book, Linux Programming by Example: The Fundamentals, his work with GNU, and what it means to be a maintainer of a GNU project.
LinuxPlanet: Linux Programming By Example takes a slightly different approaching to teaching Linux programming. Could you tell us a bit about the reasoning and approach of this book?
Arnold Robbins: The "Software Tools" books exemplarized the idea that one of the best way to learn about programming is by reading other peoples' programs. And I think this is true; I learned a huge amount reading Software Tools and also by reading code written by people more experienced than I was.
I'd been wanting to write a book on using the Linux/Unix system calls, and here we are today with an abundance of Open Source and Free Software, code that often provides excellent examples of what to do in order to put the kernel to work for you.
I also felt that many programming books use examples that are small and self-contained and easy to present, but not very practical. I wanted to use "real world" code, as much as possible. I think the book succeeds in achieving these various goals.
LP: Do you think there's a need for such low-level programming guides?
Robbins: Yes, I do. It's wonderful to program at a higher level of abstraction, such as what Java and Python give you, or in a different way, what the shell gives you.
But there are times when you've got to get as close to the metal as you can, and that calls for C or C++ and direct system calls. Besides, I think it's kind of neat to see the clear relationship between the way the Unix system calls work and the semantics made available at the shell level (I/O redirection, piping), and that in fact it's not really such difficult dark magic after all.