On this page... (hide)
As you go beyond the basics of programming, and you start write longer and more complex code, it does pay off to spend a little time learning how to design software, and how to handle a long term project which may be subject to considerable changes along years. The first point is to learn about well-known basic algorithms and data structures, so that you will not need to reinvent the weel; Patterns are very useful guides on how to design and implement cases which are often recurring in coding; and finally, Refactoring and Unit Tests are well established methods to deal with the hard fact that programs do need to grow and change in time.
- OpenCourseWare: EI & CS (ZA mirror)
suggested: 6.001, 6.042, 6.046, 6.854, 6.897
- Ask Slashdot: Advanced Data Structures? quite a few useful answers
Design Patterns are another important tool for a programmer. Patterns offer a general repeatable solution to commonly-occurring problems in software design - so that you don't reinvent the weel.
- http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/patterns/ Tutorial
- http://www.hillside.net/patterns/ Library
It might seem too "extreme", but many concepts of XP are actually a very good guide for the undisciplined Physicist/programmer - especially the Test First, Refactor Mercilessly and
Unit Tests and Integrate Often are two other fundamental parts of XP of which you should be aware, even if your project is so small that you might think you don't need them. Anyway, not everybody thinks XP is a good idea.
Plenty of information on Refactoring, and good links, can be found on Wikipedia.
Let me also repeat: "Premature optimization is the root of all evil."