C Programming
If it has been a while since you programmed in C, or if you really
know Java rather than C, these might be the right references for you.
Many of these are shamelessly cribbed from the CS
4410 web pages.
Software Carpentry
In the feedback from past versions of this course, many students
(mostly not from formal computer science backgrounds) told me that the
most useful things they learned were everyday software development skills
for UNIX environments, like how to use make or how to use version
control. If you feel like you would like to pick up these skills in a
less ad hoc fashion, you may be interested in the slides and videos for
the online Software Carpentry
Course put together by Greg Wilson.
UNIX programming tools
Even if you don't feel like going through the software carpentry
course, there are some UNIX tools that you should really know about. They
will make your life much easier.
- emacs or vi -- I know, you can always get away with writing your
code on your laptop and using sftp to shuttle it back and forth to the
cluster. Trust me, your life will be easier if you are able to make
minor changes using one of the common UNIX editors. I tend to use emacs
when I will be writing for a while, and vi for quick edits, but your
mileage may vary.
- Make -- it's ancient and quirky, but it's still the standard build
system for most Unix environments. You'll get Makefiles whenever I give
you code. The Sun
tutorial is a good starting point, and the documentation for
GNU Make is also okay. You can also Google "UNIX Make" or "Makefile
tutorial" or the like and find other tutorials. I also like the
O'Reilly Make
book.
- Version control -- the old standard choice was CVS, and you can read
here about using CVS on the CSUG machines. Subversion is a natural successor to
CVS, but these days I personally use Git for new projects.
- Shell -- you will probably use the Bourne again shell (bash) as
soon as you log into the crocus cluster. It's helpful to know a bit
more than the standard cd and ls commands, if only so that you can
better understand Makefiles (see above), and for this I recommend the
Advanced Bash-Scripting
Guide.
Programming lore
If you're an okay programmer but feel like you should sharpen your
skills, here are a few books that I enjoyed that you might enjoy as
well.
-
The Pragmatic Programmer -- this is along the same lines
as Greg Wilson's software carpentry, but I personally find the
presentation more appealing. Maybe that's because I prefer books to
slides.
- Code
Complete -- this book is thicker than The Pragmatic
Programmer, largely because it covers more material. It's a classic. I
bought the first edition well over a decade ago; that edition remained
in print until the second edition was published a couple years
back.
-
The Practice of Programming -- written by Kernighan and
Pike, this book brings the same sort of matter-of-fact approach to
common programming ideas that Kernighan and Ritchie brings to the C
programming language.
- The Art of UNIX
Programming -- the title of this book describes the content,
but I enjoyed this book just as much for the style. Eric S. Raymond is
very opinionated, and does not mind letting you know those opinions. He
also has been a UNIX guy for a long time, and has some interesting
insights.