Hello HN, I'm a physics student diving into his second year and in 1 year I'll probably start my bachelor thesis. The topic I'd like to dive into in more detail is Nonlinear Dynamics and Complex Systems (for my bachelor thesis and my future in physics). I think it has a lot to do with programming and finding good algorithms.
I have some programming experience (PHP, Javascript, little Python) but I would not call myself a good programmer. I just lack too much knowledge about computer science. I'd really like to change that and prepare for the future with 2-3 books on the topic so that I won't end up as a physicist doing his programming stuff in Fortran.<p>Right now, I'm attending the Stanford "Design and Analysis of Algorithms I" online class to get a first introduction to algorithms, but that's not enough for me.<p>I'm asking you what is the best approach in my case to become a better programmer with application to physics, especially nonlinear dynamics and complex systems?
In my Master's work I'm using NumPy and SciPy, which are Python packages to do very fast numerics, but there is indeed a lot of Fortran, and there's also a lot of Mathematica.<p>It's not completely related, but the idea of expressing complicated physics ideas in simpler code form has been handled in Scheme in the book Structure and Interpretation of Classical Mechanics, free to read from here:<p><pre><code> http://mitpress.mit.edu/SICM/book.html
</code></pre>
You might also look up the textbook <i>Computational Physics</i> by J.K. Thijssen (full disclosure: I am working underneath this professor at the TU Delft), but it's not quite for your particular niche -- I don't think in my physics education proper I was ever really taught about chaos or bifurcation diagrams or solitons, except to mention that it existed.
The R language (<a href="http://www.r-project.org/" rel="nofollow">http://www.r-project.org/</a>) might lend itself well to your more intense mathematical demands. There are packages with specific to some of your concerns (e.g. Nonlinear Dynamics: <a href="http://cran.r-project.org/web/packages/tsDyn/" rel="nofollow">http://cran.r-project.org/web/packages/tsDyn/</a>).<p>That said, R is sort of a quirky language in some respects and does not tend to encourage as disciplined approach to software engineering as a language like Python.
Introduction to Algorithms by Cormen et al would be a good place to start if you're going the theoretical way. Very mathmatical and not so practical - I read this myself at uni and I learned a ton.<p><a href="http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844" rel="nofollow">http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...</a>