Slashdot Mirror


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."

16 of 569 comments (clear)

  1. Good News! by multipartmixed · · Score: 5, Insightful

    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()?
    1. Re:Good News! by Anonymous Coward · · Score: 5, Insightful

      Spend a couple of months learning C#. You can bash microsoft all you want, but most of the job postings (at least around here) are for .Net/C#. In todays economy, if you want a job, you need to know what employers want, not so much what you want.

    2. Re:Good News! by Anonymous Coward · · Score: 5, Insightful

      Learn three things and you'll be fine.

      1. Learn how to say "I'm not sure"
      2. Learn how to ask somebody for help.
      3. Learn how to ask "do you have anything I can help with".

      A smart graduate who wants to help the more senior people out, and understands that it's ok to let the senior people know that you need a bit of guidance/help, is worth more than a half-dozen wanna-be kernel driver gods.

    3. Re:Good News! by Shisha · · Score: 4, Insightful

      Think about what sort of programming you would like to do. Remember that writing software is only a way of solving some wider problem, so think what should that be? What would you love doing? To get anywhere as a programmer you have to undersand and enjoy working in the wider field. Very few people end up writing OS kernels or other "programming for the sake of computers". The rest of us make tools for other people (Word processors, painting programs, CAD, banking software, databases, you name it). Think which of these above would you enjoy working on.

      Once you've decided on that, choose any language you like, and start working on some small relevant project. Once you have something put the link on your CV. At our company, once we get someone's CV and it looks good, we go to google and find what the guy has done. Publications, software projects etc. Then we decide whether to interview. During the interview we'll talk about that. We don't care whether the person can do Java or C++ if they're graduates. (even though we prefer C++).

    4. Re:Good News! by Anonymous Coward · · Score: 4, Insightful

      Learning a given language is stupid because it paints you into a corner.

      Learn to think.
      Learn the concepts.

      Take the comparative programming classes.

      Learn algorithms, data structures and so on, then the rest will just happen.

      Its like any other profession. Understand the theory and practice practice practice.

      Great golfers can use all the clubs.
      Great pilots can fly anything reasonably well.
      Great chefs can use everything in the kitchen.

      If you want to be great (which translates to being in demand in the market place) study your craft, not individual tools.

    5. Re:Good News! by Gorobei · · Score: 4, Insightful

      Hey, if you have good math and logic skills, I don't much care what languages you actually know, and I trust you'll be up to speed on what I use within a few weeks.

      If, on the other hand, you spent n years in school to learn a specific programming language, it doesn't really matter which one you learned, because I'm not going to hire you.

  2. Re:Practice by adisakp · · Score: 4, Insightful

    Oh, and FWIW, it's best to learn several languages -- for example, Java / C# / C++ (and even C) are all fairly similar so they're easy to learn together. Once you learn one of them well, the others should come much more easily.

  3. skillsets by Phantom+of+the+Opera · · Score: 5, Insightful

    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.

  4. Re:Learn Programming, not Language by Logos · · Score: 5, Insightful

    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
  5. Mod parent up by artor3 · · Score: 5, Insightful

    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.

  6. Re:You are done studying. Get a job. by RyuuzakiTetsuya · · Score: 4, Insightful

    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.
  7. Forget C and Fortran by schamberlin · · Score: 4, Insightful

    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.

    1. Re:Forget C and Fortran by AmaDaden · · Score: 5, Insightful

      Parent is dead on. As for C#, it's a rival to both Java and C++ (mostly for non-games). The problem of course is it's a MS language. I would recommend that any SlashDot reader go with Java or C++ over C# because they are better documented, more standards compliant, cross platform (Mono is nice and all but it's no substitute for MS C# from what I hear) and Open Source(Java was closed for a long time but it is finally Open and GPLed).

      But honestly your language is the LEAST important thing you can try to learn now. Make sure you have a good grasp on SQL, UML, XML, design patterns and basic scripting. I just graduated college as well and these things were never really taught. They were all there but tend to get glossed over and taught only in small chunks as needed.

    2. Re:Forget C and Fortran by Stiletto · · Score: 4, Insightful

      The important thing is not to force each language and use the "lowest common denominator" but really learn a language in order to appreciate it's differences from the others. You can write procedural programs in each of these languages trivially. DON'T. If you learn C++, use template metaprogramming and multiple inheritance (of templated classes, passing through template parameters up the inheritance chain). Use operator overloading for everything from combining 2 lists, write the complex number class everyone writes. Write a sparse matrix class if you're up to it. Learn boost. Learn ANTLR ...

      I'd like to recommend the exact opposite. Your co-workers will thank you.

      95% of what you are going to see in commercial software is "lowest common denominator" code. For a C++ project, for instance, that means, it will look like C with classes. You're not going to see any clever use of the language. You're not going to see templates (besides USE of template classes such as STL). You're not going to see very interesting uses of inheritance, function pointers, polymorphism, etc.

      And if you start barfing all those language acrobatics into the code base, your co-workers are going to hate your guts. By and large, your co-workers want to go to work, do their job, and go home to play with their kids. If they have to sit there and figure out that what they're looking at is your overloaded () operator because it's a neat way to implement the "Visitor" design pattern, or something, it makes their job harder, they're not going to like you, and the whole project is going to suffer because the code is no longer readable to the team.

      Learn the basics of the language REALLY WELL and be able to crank out functional, readable, SIMPLE code, quickly.

      Of course, this whole post applies only if you're going to write software for a living. If you're learning a language for the challenge and fun of programming for yourself, disregard.

    3. Re:Forget C and Fortran by DoofusOfDeath · · Score: 5, Insightful

      If you learn C++, use template metaprogramming and multiple inheritance (of templated classes, passing through template parameters up the inheritance chain). Use operator overloading for everything from combining 2 lists, write the complex number class everyone writes

      Do you realize how insanely bad of a C++ program would typically result from programming that way? I actually had to re-read that paragraph two times to realize that you weren't telling him about pitfalls common to many new C++ programmers.

      There are at least two kinds of idiomatic programming in C++: (1) using, as much as you can, every language feature that distinguishes C++ from C, or (2) using the language features that tend to lead to good, maintainable code and eschewing the rest. I think you're directing him towards (1).

  8. 3 Languages? by Beetle+B. · · Score: 4, Insightful

    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.