What 'computer science' knowledge do you think is most important?Excellent question, Marius!
Knowing a range of languages, knowing the internal details of the machines, strategies of how to structure your code, anything else?
I can give you an answer based entirely on my experience in the computing field. Like you, I did not have a computing background, until I threw myself to the wolves, so to speak, by entering graduate school in computer science.
By far the most important knowledge is that of algorithm development. You're going to be using a computer as a tool to find out whatever it is you actually want to find out. So, knowing how to use it well is what's going to take you the farthest.
When I say "algorithm development," what I mean is understanding how to convert the math into something a computer can do, and going about it in an intelligent, systematic, and efficient manner.
I think it is important to know one programming language well. By "well," what I really mean is that you should be able to write a fairly complicated code without much peeking at a book or online. Notice I say "without much peeking," because I have a memory like a sieve so storing certain things, like precisely how to open and write to a file or just exactly what the name of the floor function is, is a low priority due to the limited capacity of my brain. But you should be fluent enough in the programming language so that your limited vocabulary is not a major stumbling block in writing code. (What I often do when I'm in the depths of development is to write myself a comment in the place I need to open the file, and then come back later with the proper syntax.)
Once you know one programming language, it is relatively easy to pick up on how other languages work, and you should be able to do a decent job of updating other people's codes or using them as subroutines. Of course you would want to write original code in your preferred language whenever you can.
As for what programming language, I'm not interested in starting a programming language war, but if you're wanting to do the sorts of things I'm envisioning that you want to do, you'll want to be fluent in some sort of mainstream programming language such as C++, C, or FORTRAN. Personally, the vast majority of the work I do is in C++ these days, and I'd recommend it because C and FORTRAN are more limited in terms of what you can do with them. To me, it's really nice to be able to write using just about any type of programming paradigm: procedural, object-oriented; you name it, you can do it with C++. Of course, C++ also enables you to shoot yourself in the foot that much easier. I would suggest Java, which is a little safer than C++, but programs in Java run slower than programs in C++, and more importantly, Java doesn't have all the stuff that you will need for your codes, such as parallel extensions.
And speaking of parallel, I'd recommend reading up on MPI (Message Passing Interface, the industry standard parallel libraries), because parallelism is very important and very useful, especially if you're writing a big simulation code (in that case, parallelism is essential). If you're not familiar with MPI, there are a whole bunch of really good tutorials out there. (If you want a bigger picture tutorial that will teach you how to use a supercomputer, google for supercomputing crash course, and take the first link.)
As for the other stuff, a basic understanding of how a computer works is helpful, just so that you can learn to think like a computer. If you can think like a computer, that will help you to program the computer. But don't get worried about all the little details, because you want to write code that is platform-independent since for all you know, we are on the verge of a new computer model. (In fact, we will need to come up with one soon, as the current paradigm will soon stagnate.) Let a crazy computer scientist who actually enjoys this sort of thing optimize your code so that it will run fast on the latest machine! (Note: I am not that sort of computer scientist. I am crazy in a different way.)
I hope this has been a helpful answer, Marius, and if you have any other questions or need me to explain something further, please do not hesitate to ask.
Got a question for the Applied Mathematician? Leave it as a comment, or e-mail me!
