Programming Language Specialization Dilemma
aremstar writes "I'm a final-year Computer Science student from the UK. During my studies, we covered 3 programming languages: C, C++ and Java. The issue is that we didn't cover any of these languages in sufficient depth for me to claim that I have commercial-ready experience. It's one thing being able to write simple programs for class assignments, but those are quite different from writing something as complex as the Linux kernel or a multi-threaded banking app. I'm thinking of spending a few weeks/months studying in order to specialize in one of those languages. Fortran also entered my consideration, as it is great for numerical computing and used by many financial institutions, banks, etc. In terms of skill requirements in job ads, my (brief) experience suggests that most programming jobs require C++, with Java a close second. C — unfortunately — doesn't appear as much. My question is: if you were in my shoes, which language would win your time investment? My heart suggests C, with a little bit of Fortran to complement it, but I'm a bit worried that there might not be enough demand in the job market."
Nobody expects a recent graduate to write a kernel or a banking app!
So, do whatever makes you happy until you get a job.
Do daemons dream of electric sleep()?
Honestly... a general knowledge of programming is the best you can hope for.
Every shop has their own specific tool stack and custom libraries and documentation process. They are also going to need you to be very knowledgable in one or more very specific areas. There's no way you're going to be able to get yourself ready for any.. or even many jobs before hand. The important thing is that you can learn new stuff quickly.. digest existing code.. present your ideas in a digestible way to a diverse group of people (managers, other developers, testers, clients).. work in a team.. and not let your ego get in the way.
First several months at any new shop are spent learning their way of doing things .. they expect that. It's why programming shops put such a heavy emphasis on the hiring process. The company will invest a lot of money on you before you make them any.
C++, C, and Java are kinda the standard trifecta these days. I'd suggest doing a little assembler, and maybe a really messed up language like Perl just to see the "other side" (pre-emptive defense: I love Perl.. but common.. it is pretty messed up). One thing I would recommend though that I didn't see in your post is a good knowledge of technical writing. You can have the perfect answer.. but if you can put it on paper in a clear and understandable manner.. what's the point.
The best way to get programming experience is thru practice. Either work on your own personal projects or contribute to a larger shared (OSS) project. That's the only way you're going to become a better programmer. Classes are merely an introduction to the ideas.
Programming classes are like piano lessons. You're not going to become a concert pianist thru basic lessons without lots and lots of outside practice on your own.
If you're thinking of banking apps, think COBOL (at least here in Canada). Bunch of those programmers are near retirement too...
Do your best to forget everything you've learned in CS, and go to nursing school. You'd be happier and live longer. :-)
Fuck systemd. Fuck Redhat. Fuck Soylent, too. Wait, scratch the last one.
To succeed, you need a competency in far more than just a language. I'm sorry, its not that easy.
Get at least a basic level of understanding in the following :
* how to talk to and effectively use databases
* how to talk to hardware
* networking
* sys admin work
* presentation work
* regular expressions
* grep/find
* create a simple web page
* run a basic web server
* file permissions and ACLs
* build system
* shell
* source control systems
* the relationship of assembly to C
* that memory and processing power are limited resources
Pick a scripting language to know at a reasonable level. It will come in use when you want to quickly transform data or even write some of your program that's in your favorite language. That is the equivalent of your swiss army knife and duct tape kit.
As for a language, strongly know the basics for any OOP language, procedural language and functional language.
Don't expect to be spoon fed details of what you have the program. Learn why this program is being written. If you are programming a spectral analysis program, learn about that subject enough to know how your program is going to be used.
Learn to understand why the program is written, and what the audience will use it for.
Learn to communicate clearly.
Learn to ask questions when you are not sure.
Teach Yourself Programming in Ten Years
Peter Norvig knows what he's talking about.
I think you are asking the wrong question. Your problem is to get a job from which you can become a fully experienced programmer. That possibly means getting a job working in support or relatively low level IT and progressing from there. So you need to put that several months of effort into job finding.
Unless you are a really gifted programmer - in which case, quite honestly, you would not need to be asking the question - your main problem is to learn enough about some business area so that you can actually contribute. If you get a job in a company that uses Delphi, or does everything with stored procedures in SQL, learn Delphi or SQL and be thankful.
Someone with a computer science degree should be able to pick up any technology to solve a problem in an appropriate way. You are supposed to understand the concepts behind problem solving, algorithms, data lifecycles and persistence, man/machine interaction, communications protocols, and other stuff like that at an abstract level. Then you look for a problem to solve where you can apply the concepts to design a solution. Your question - C++, Java or C - is like an engineer graduating from Purdue and asking "I want a job in engineering. Should I learn Bridgport, Haas or Hurco machining centers?" The answer of course is "Whatever your employer uses".
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
I work with many financial institutions, Not once have I ever heard Fortran Mentioned. Usually Java or COBOL, depending on when the app was written. Don't get me wrong, I love Fortran 95. Or at least I prefer it to COBOL.
Well.. maybe. Or Maybe not. But Definitely not sort of.
I know this will seem foreign to most of the current generation of graduates, but I would suggest a strong grounding in assembly coding for any processor. If the programmer really understands assembly, s/he should "intuitively" acquire a sound grasp of what makes a good program written in C, Fortran or whatever.
Many of the current commercial languages belong in toyland. They are designed for programmers who really don't have any idea about managing resources efficiently.
you can master any language withing a matter of weeks
Not really, but you can be *proficient* and a *productive contributor* in a matter of weeks.
Mastery of a language takes longer because it's more about mastering of all of the little quirks, warts, conventions and whatnot that only come with experience with a certain platform than it is about syntax and transliteration of general programming techniques to the new language.
Still, I agree with the overall sentiment: Focus on being a good programmer and learning new languages (and being a valuable contributor) takes care of itself.
We are agents of the free
These are probably the most important "skills" any recent graduate can have. Companies expect new graduates to be a blank slate. College, especially a BS, is just to give you the background your going to need. After that, it's a question of acknowledging when you don't know something, finding someone who can help you, and, whenever you have down time, finding someone you can help.
In fact, one of the best things you can do during an interview when asked a hard technical question is to admit you don't know, and say that if faced with that problem in real life, you'd ask a coworker for help.
The idea is that you can apply computer science to any language you want to learn.
Which is great, except that with such a narrow range of languages to start with, the OP won't have the kind of general background knowledge and breadth of experience to do that yet. The saying that a good programmer can learn a new language in a week is bull and always has been, and it seems that this particular CS course has not covered as wide a range of languages as we might hope for.
To the original poster, while you still have an opportunity to do it easily, I strongly recommend exploring a few other languages, even if only to the level of basic familiarity that you now have with C, C++ and Java. You may not realise it yet, but those three languages are all more similar than different in the grand scheme of things, and there are more ways to solve programming problems than fairly low-level, imperative, statically typed programming with C-like syntax. To expand your thinking a bit, I would recommend at least learning:
Most of these are immediately commercially relevant in large commercial fields anyway, and functional ideas (though perhaps not dedicated functional programming languages) are becoming more and more important. For bonus points, a bit of Lisp, Smalltalk and some sort of assembler wouldn't do you any harm either, but these are less directly applicable for most commercial roles. On the flip side, some exposure to .Net, probably via C#, is a valuable commercial asset even if it's rather similar to what you've already learned through C++ and Java: jobs working the typical Microsoft tool stack (C#/.Net libraries/ASP.Net/SQL Server...) are a big field.
The important thing is that you don't have to master each of these at this stage. Just play around enough, even with simple toy programs, to get the basic feel for the different approaches and understand that the C/C++/Java way is not the only one (and certainly not the best one for all jobs).
And all the while you're doing this, remember that a programming language is just a tool to express ideas. The more general CS knowledge — general data structures and algorithms, design skills, understanding specific fields such as database theory, graphics and operating systems, and so on — is every bit as important, whatever language you use.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
I'm a CS student and I learned python well enough to migrate a mysql database in under week.
CS shouldn't be about the programming but problem solving.
Non impediti ratione cogitationus.
If you're doing this to gain experience that will help you land a job, forget about C or Fortran.
Otherwise, it depends on what kind of software job you're looking for. Games and application development tend to be C++. Web-related software is more likely to involve Java.
It's sad to see programs that purport to be about computer science cover only a few popular procedural languaages.
I get your point, but I'd go one further. It's sad to see computer science being equated to programming.
I'm a final-year Computer Science student from the UK. During my studies, we covered 3 programming languages: C, C++ and Java.
And the other two languages were...?
Beetle B.