ProgrammingAdvanced

< Programming Tutorials | Programming | Program Debugging >

1.  Advanced topics

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.

1.1  Algorithms and data structures

1.2  Design Patterns

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.

Similarly to Design Patterns, there are Analysis Patterns? and Refactoring Patterns?. (haven't found a good link yet)

1.3  Extreme Programming

XP - Extreme Programming is a "deliberate and disciplined approach to software development". The main reference site is http://www.extremeprogramming.org/.

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 Optimize Last.
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."

1.4  UML

UML Unified Modeling Language has been, and possibly still is, the holy grail of software development. Not everybody agrees, anyway.


< Programming Tutorials | Programming | Program Debugging >