IT'S DEPENDS, there isn't a one good answer for this question.
Programmer is a general world to identify a someone who writes computer software.
Now, out there there is software of all kinds.
For example, using wikipedia as a source of generalization we can meet 3 great generalization:
- system programming
- programming software
- application software
In the first field system programming develop device drivers, operating system, servers, so for example you can follow an operating system course.
but what about programming software ? here as wikipedia wrote you can code compilers, debuggers, interpreters, linkers, text editors, so, a course in automate theory, language theory, language and compilers can be useful.
Not we can talk about application software of any kind:
- video games : algebra, physics, object oriented courses ?
- mathematical software : mathematical courses ?
- image editing: mathematical, physics, algorithm courses ?
- industrial automation: mathematical, physics, algorithm, robotic courses ?
- medical software: biology, medical, what else course ?
- a lot of stuff here : a lot of courses here .
As you can see there is a lot of course you can follow and will become useful for your work.
In my experience, I'm a system software engineering and application software in the security (you want follow a security course?) field, starting from a little very experience in programming i am getting more interesting in algorithms and distributed system and again i feel uncomfortable in the simplicity of the general purpose application i wrote (sniffer, network intrusion detection system, protocol dissector and detector, etc).
As you have sourly learned in theoretical computer science! have you fllow this courses ? :P
You have learned for example that all computer language can be fitted in a set of computable mathematical function and for example if your experience get my same path, soon you be uncomfortable in this little set of calculus and like me you can start to see how developing software is not so engaging and amazing because the same DESIGN PATTERN come back again an again (have you follow design pattern courses?) and for example you can start to get more interest in WHY and HOW language can be translated in mathematical function and starting to learn that computer language is not so very complex! you can soon for example be more surprised about person and psychology, and you can get more interest about it and become a good project manager! have you follow the courses about software life-cycle ?
So now, what is the MUST-HAVE course in your CS career ?
I suggest to learn as much as you can learn in all field, specially in theory field, because in common work field you can feel soon really bored about the little complexity around you, and becoming a full time worker you have really less time to learn how things really work and much more time to see how people with strong theoretical knowledge have projected things to work and give to you the possibility to code to get food at home.
there is a wrong sense of reality in computer science.
computer scientist for example sometimes is really far away from software developer.
take a look at the wikipedia explanation.
have fun with life :)
my 2 cents.
sorry for my really bad English.