Contents

  1. Libraries
  2. Scripting
  3. Tools
  4. Small snippets
  5. SHA1
  6. Codesearch
  7. Stuff that I need to check out
  8. Books
  9. Comments
Valid XHTML 1.0 Strict

Open source for programmers

Here is a random list of open source software I regularely use and like. This list is geared toward C/C++, since that is what I mainly code in.

Libraries

Scripting

Tools

Small snippets

SHA1

If you need SHA1, and nothing more, simply copy the code from RFC 3174.

Codesearch

You can find a lot of code with Google's Codesearch. Make sure you don't violate the open source licenses when copying the code.

Stuff that I need to check out

Books

Speed

Knowing your programming language inside out is nice, but it doesn't necessarrily make you a good programmer. Knowing algorithms and data structures makes you a good programmer.

Think about it this way: A Visual Basic program with a good algorithms can easily outperform an assembly-inlined C++ program with a poor algorithm.

If you want to see this in action, check out Project Euler. Want to find the 50th million Fibonacci number? No problem. There is a way to calculate it directly.

A good book about algorithms is Introduction to Algorithms by Cormen et al.

It's also crucial you know how operating systems work. One book here is Tanenbaum's Operating systems.

C

There is one book every C-programmer should have a copy of: K&R's The C programming language.

Even seasoned C programmers should be able to find something of interest here.

If you're interested in hacking (by which I actually mean cracking) and the undergruond programming culture, you should have a lot of fun reading phrack. As said before, these guys know their networking and operating systems pretty well, and so should you. It'll make you a better programmer knowing about how your code can be exploited.

Another good resource for security minded people is Daniel Bernstein's UNIX security holes course. For example, you might be surprised seeing how well meaning code, running as root, and a few symlinks can give you system-wide read access.

For dessert you have The International Obfuscated C Contest. It contains some of the most brilliant, insane and hilarious code I've ever seen.

C++

Get The C++ programming language for reference. You should supply this with a guide to STL usage; many recommend Josutti's STL book.

To avoid blowing your leg off (and getting some laughs along the way), read the Effective C++ series by Scott Meyers.

There is also the excellent C++ FAQ online. Don't buy the book, the online version is much more humorous.

If you are determined to go over the top with C++, you need Modern C++ Design by Andrei Alexandrescu. (But if your only ambition is to go over the top, I'd recommend switching to a language like Haskell.)

Networking and UNIX

Get UNIX Network Programming by W. Richard Stevens. There is also the Advanced books by the same author. There are many other good books, but his are well known for their insight and detail.

Writing shared/dynamic libraries

See http://people.redhat.com/drepper/dsohowto.pdf. Ulrich Drepper maintains the GNU C library. He's brilliant, but quite notorious for his direct and confrontational style, which I happen to like (as long as I'm on the sidelines).

Reading source code

If you don't read the source of the stuff you use, start doing it right now!

Recently I went through the git source by Linus Torvalds. Beginning with the first release, I read my way up through the various versions. This gave me a good impression of how a master programmer pieces together a big project from scratch. Highly recommended.

The bare bones

Some ridiculous people claim they don't need to know anything about assembly, but that is, of course, pure nonsense. :)

You should at the bare minimum step-debug your code with a disassembler to see what is actually going on. Prepare to be amazed how dumb your compiler can be.

How to become a guru ?

Ask Eric S. Raymond!

 

blog comments powered by Disqus