Recommendations & Reviews

Recommended books

Numerical Recipes for Fortran or C or C++: If you do any numerical work or scientific computing, then you should read this book. It's a fantastic book that provides the theory and example code for common problems in scientific computing.

The Feynman lectures on physics: If you're interested in a comprehensive guide to introductory and intermediate physics, then this is a great place to start.

Mathematics of classical and quantum physics: A solid graduate level book covering the vast majority of mathematics required to understand modern physics.

Mathematics for physicists: Another solid graduate level book covering the mathematics that physicists will find useful. It's a great complement to `Mathematics for classical and quantum physics'.

ESSENTIAL HTML fast: This is a really good, direct and easy-to-read book explaining the basics of HTML, forms and CSS. I skimmed through this book in an hour and then created this website from scratch.

Recommended computer languages and libraries

In my experience, it's incredibly beneficial to speak both an interpreted and compiled language. Interpreted languages are ideal for prototyping and rapid development, but are often too slow for complex or numerical work. This is because interpreted languages are compiled at run-time, which adds to the execution time. Particularly for programs where the same section of code is iterated many times and re-compiled each iteration. The advantage is that interpreted languages used dynamic memory management, which is why they're ideal for prototyping and rapid development. Compiled languages complement interpreted languages because they are far more powerful, allow direct manipulation and access to computer memory and the most efficient execution of computer code. The downside is that it requires a lot more time and effort to write compiled code.

Interpreted languages

Perl: This is my favourite interpreted language. Perl is ridiculously flexible, has a lot of libraries available and is perfect for reading and processing text files. The biggest problem with Perl is that it's flexibility allows people to write Perl code that is virtually incomprehensible. Perl's biggest problem is that there's no correct way to write code. This can present a bit of a barrier to learning Perl from other people's example code. Perl can also be called from the command line, which is a great feature for an interpreted language. I often use Perl as a wrapper for running batch jobs.

Matlab: A great interpreted language for numerical work and visualisation. Matlab uses pre-compiled functions and a language based on vectors to do numerical work and visualisation without needing to be a compiled language. The down side is that Matlab loses a lot of its efficiency when not using pre-compiled functions, working with data that can't be put into vectors and matrices or involves parsing text. Matlab has a huge! library of functions, so for numerical work and visualisation Matlab is great.

Awk: A good alternative to Perl.

IDL: I don't have a lot of experience with IDL, but it seems like a good alternative to Matlab that is widely used in Universities around the world.

Python: In my opinion, this is the best alternative to Perl. It's eminently more read-able than Perl however, as it uses a modular design and imposes syntax requirements. This makes Python much easier to learn from example code. Python can't be called and executed from the command line like Perl though, although it's not a big deal.

Perl Database Language (PDL, pronounced Piddle): This is an extension of the Perl language that incorporates the functionality and design philosophy of IDL and Matlab. A lot of people who like IDL have found PDL to be a good alternative.

SuperMongo (SM): This is a great interpreted language purely for plotting purposes. It's capable of some basic numerical work, but it absolutely shines when used to do visualisation and creating publication quality plots.

Compiled languages

C/C++: This is my go-to compiled language. It's incredibly powerful and if you speak one, then it's fairly easy to learn the other. The strict syntax requirements make C/C++ very easy to read if you didn't write it.

Fortran: This language has some serious limitations in terms of memory management and the syntax requirements are stricter than C/C++. Fortran is still widely used throughout the world as a legacy language. If you're interested in speaking a computer language that will make you valuable, then Fortran is a good language to add to your repertoire.

Computer libraries

PGPLOT: As far as I'm concerned, this is the benchmark for graphics libraries. If you need to generate scientific plots and you're looking for a library, then I would emly recommend you look at this library. It's ridiculously powerful and has a lot of functions. To install pgplot on Mac, google `pgplot Urania's Blog' for a good, detailed set of instructions.

nrutil: The numerical recipes library. Fantastic library. If you're using code from the numerical recipes book, it's a good idea to incorporate this library.

gsl: The GNU scientific computing library. This is a great open source library for scientific computing.

Staff space
Public