Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Programming Language Specialization Dilemma 569

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."
This discussion has been archived. No new comments can be posted.

Programming Language Specialization Dilemma

Comments Filter:
  • Good News! (Score:5, Insightful)

    by multipartmixed ( 163409 ) on Saturday March 21, 2009 @01:23PM (#27279927) Homepage

    Nobody expects a recent graduate to write a kernel or a banking app!

    So, do whatever makes you happy until you get a job.

    • Re:Good News! (Score:5, Insightful)

      by Anonymous Coward on Saturday March 21, 2009 @01:26PM (#27279953)
      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.
      • by interstellar_donkey ( 200782 ) <pathighgate AT hotmail DOT com> on Saturday March 21, 2009 @01:59PM (#27280239) Homepage Journal

        Specialize in LOGO. There are so few turtle masters out there that you're sure to get a job!

        • by schamberlin ( 1354695 ) on Saturday March 21, 2009 @02:25PM (#27280499)

          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.

          • by AmaDaden ( 794446 ) on Saturday March 21, 2009 @02:56PM (#27280829)
            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.
            • by OeLeWaPpErKe ( 412765 ) on Saturday March 21, 2009 @04:03PM (#27281539) Homepage

              You forget to mention that there are basically 2 principles you need to know in order to learn both java and C# in a VERY fast way :
              1) memory allocation principles
              2) scripting languages
              (and if you want to really excell)
              3) generating code

              1 will be more (much more) than adequately covered in any C++ course. C++ is like a "galactic conquest kit (some assembly required)" of programming languages. It can do anything. Anything any other language can do, can be done in C++. Java is more an "IKEA" language, compared to C++'s "metal shop". Everything "typical" is done for you in Java, but you have to add a few screws here and there. But getting a chair that's really "your kind of chair" ... not going to happen. And a less-than-average C++ programmer is going to be a good C# and Java programmer. Generics are lacking in Java, and that's being polite.

              2 will be covered with something like perl or python. Especially if you cover list comprehensions (compare them to SQL for example)

              And if you are a good programmer, but you want to be the best one in the state, you'll need to add 3 to your repertoire. LISP is a good language to learn to see these principles in action. Imho linux shell is also a good language for this. Or using linux shell to generate configuration files. That sort of thing.

              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 realise these are not many good problems for these solutions. The point is to learn to use them, get a feel for what they can do.

              Use C# for what it's good for : use all the features of C# 3.0. Use the UI designer, get to know it's advantages.

              With java you want to use it's libraries. Use a few contraint satisfaction libraries. Write a J2EE application, say the bookstore bullshit. Admire the endless exceptions of the typical server.

              And spend the rest of your education learning maths. Algebra, as much as possible. Theoretical logic. Only when those 2 subjects are sufficiently covered start with analysis. Don't forget to get at least an introductory class about numbers (e.g. when/why do multiplications fail on calculators and computers, what are fixed points of matrices ? What happens when floating point numbers differ too much in matisse from the solution of the calculation you're making, ...)

              The more algebra and logic you know, the easier algorithms will become.

              • by Stiletto ( 12066 ) on Saturday March 21, 2009 @09:19PM (#27284301)

                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.

                • Re: (Score:3, Informative)

                  At my job, we *do* use a lot of the more advanced features of C++. We overload almost every operator in our classes, we've got a rather complex class tree, and extensive use of templates (especially in the reference counting system). I would think that "lowest common denominator" code would be more indicative of a codebase ported from C or something.

                  I guess what I mean to say is that you should be able to turn out the simpler functional stuff yourself, but understand how the more complex stuff works. I'm s
              • by DoofusOfDeath ( 636671 ) on Saturday March 21, 2009 @09:27PM (#27284365)

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

                • Re: (Score:3, Insightful)

                  by kabloom ( 755503 )

                  Learn all of the features of the language, then take a solemn oath not to use them in production code.

            • by eonlabs ( 921625 ) on Saturday March 21, 2009 @07:26PM (#27283375) Journal

              The way I've seen it, C++ would be the way to go, particularly if you force exposure to namespaces and the precompiler.

              Java basically amounts to a really clean API over C++ with some minor nuance differences. C doesn't expose you
              to object oriented programming, which although will give you a better understanding of memory manip, will not
              give you the experience a typical company will hope you've exposed yourself to.

              C# is another step away from C++ and is likely not too bad to pick up as an extension off it.

              As for topics to consider, really look into the weirdness that unions introduce (playing with floating point numbers
              on a bit level is a good way to get into this). Figure out how to deal with collections, including an overview of
              the differences between search and sort algorithms. You don't need to know how to write them as much as how to
              select one or figure out how to write them when you need to. Cover synchronization on multiprocessor architectures.
              Get a VERY good feel for inheritance and UML. It sucks to learn and the tools for it are usually quite painful to
              play with, but the time it can save in the end when working in a team of 10 on 100,000 lines of mixed languages is
              remarkable.

              Remember that working on a piece of code that is 100k lines or more is going to take you months to get used to, will
              be too large for you to think about in its entirety unless you've been working on it since the beginning and have
              forgone anything resembling a social life, and will also be complex and challenging and possibly very fun.

              You should get used to version control. Try RCS, not because it's the latest and greatest, but because you're likely
              to see it. CVS is newer (old) and more likely to be the incumbent tech at an arbitrary company. Subversion is great
              and if you get into a place that uses that, you should be quite happy. I've also seen perforce and a couple others.
              Cultural choice, and it's dependent on the size of the code and how many engineers drive decisions at a high level.
              It also depends on how often the company picks up new projects.

              For an idea of what I do, my primary language of choice is AVR assembly. I like playing close to hardware in bit gritty
              RISC architectures. From there, it's C (smaller file sizes than C++ by far unless you're crafty), C++, Java.

              Java makes for a very nice prototyping language, and it encourages some commenting and coding practices in a way I can
              approve of, even if its "we'll take care of it" view of memory management is something I don't quite agree with.

              Otherwise, good luck!

          • Re: (Score:3, Interesting)

            by Nursie ( 632944 )

            Hey,

            C is still number 2 language after java I'll have you know. C is still alive andd well and running most of your stuff.

            There are lots of positions for a good C programmer. You have to be good though.

            • by Simon Brooke ( 45012 ) <stillyet@googlemail.com> on Saturday March 21, 2009 @06:42PM (#27282975) Homepage Journal

              Hey,

              C is still number 2 language after java I'll have you know. C is still alive andd well and running most of your stuff.

              There are lots of positions for a good C programmer. You have to be good though.

              The same is true of COBOL, but you wouldn't advise anyone to learn COBOL. The man who lives across the road from me served his apprenticeship as a wheelwright. By the time he'd finished, no-one was using horses and carts any more. So that was not a very useful trade to learn.

              Yes, there are lots of jobs for good C (and COBOL) programmers, but there are lots of good C (and COBOL) programmers. The number of jobs needing these skills is shrinking faster than these guys are dying or retiring, so if you choose either of these languages, every job you go for you'll be up against people who are not only better than you but also more experienced than you.

              In any case the principal skill of a software person is not knowing language X, it's being able to learn (and become productive in) new languages, new libraries and new technologies quickly. The reason why this industry is fun to be in is because it changes so rapidly.

              The final thing to say is, if you're getting a degree from a University where they only taught you C, C++ and Java, the first thing to do is go and do a masters at a proper University. There's nothing wrong with any of those languages as such, but they're so closely related to one another that if that's all you've learned then most of computer science is a closed book to you.

      • by Hooya ( 518216 )

        And most of the people in the applicant pool know .Net/C#. Wouldn't you want to set yourself apart and go after the less 'popular' jobs for which there is bound to be less competition?

        • Re: (Score:3, Interesting)

          by vux984 ( 928602 )

          I'm not sure how 5000 applicants competing for 500 jobs is better than 50 applicants competing for 5.

      • Re:Good News! (Score:5, Interesting)

        by dgatwood ( 11270 ) on Saturday March 21, 2009 @02:17PM (#27280413) Homepage Journal

        I would argue the exact opposite, actually. If a large percentage of jobs are in .Net/C#, there's a good chance that there are equally large numbers of candidates flocking to apply for those jobs, and that the number of applicants is likely to exceed the number of jobs by a significant margin. If you want a job that will be robust against economic problems, specialize in something that requires more unusual specialization. Learn Objective-C, for example. Either start your own company selling iPhone apps or hunt for jobs elsewhere doing Mac programming. Even though the number of jobs seems very limited, companies have a hard time finding qualified candidates in this area, so if you can fill the slot, you have a good chance at getting the job. The same isn't necessarily true for C# jobs.

      • Re: (Score:3, Funny)

        by metamatic ( 202216 )

        You can bash microsoft all you want, but most of the job postings (at least around here) are for .Net/C#

        Where is "here"? Redmond, Washington?

      • Re:Good News! (Score:4, Informative)

        by iapetus ( 24050 ) on Saturday March 21, 2009 @03:21PM (#27281129) Homepage

        I did a few searches of UK jobs paying reasonable salaries recently (as part of a discussion of job availability in languages, not because I'm looking, obviously), and Java came out (marginally) on top, over C/C++ with C# a reasonable chunk back. Wouldn't be surprised to see the same breakdown for entry level jobs.

      • Re:Good News! (Score:4, Insightful)

        by Anonymous Coward on Saturday March 21, 2009 @04:23PM (#27281707)

        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.

    • Re:Good News! (Score:5, Insightful)

      by Anonymous Coward on Saturday March 21, 2009 @01:45PM (#27280117)

      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.

      • Mod parent up (Score:5, Insightful)

        by artor3 ( 1344997 ) on Saturday March 21, 2009 @02:10PM (#27280333)

        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.

        • Re: (Score:3, Insightful)

          by ahabswhale ( 1189519 )

          Well said.

          I would also suggest that any new graduate be prepared to do a lot of after hours studying to bone up on whatever frameworks, architectures, and tools your company is using. Your first couple of years of work in the corporate world should involve well over the 40 hours you're required to spend in the office (or whatever the norm is in the UK). Think of yourself as a sponge. I know this sucks because you might be a bit tired of all the studying from your college work but you'll be glad you did a

    • Re: (Score:3, Insightful)

      The vast majority of programmers *never* get to the level where they can write an OS kernel or a multithreaded banking app. You're much more likely to be maintaining code that puts up a user interface and connects to a commercial database.

      • Re: (Score:3, Insightful)

        by micheas ( 231635 )

        That is just depressing.

        Linus Torvalds made the statement that you can write a kernel in six months with no prior knowledge. Proof, he did it.

        I don't think of myself as a programmer, more a sys admin, but I have written multiple programs over 5,000 lines (maybe they shouldn't have been that long, but they worked for the task at hand.)

        Personally I would advise going out and finding some $40 dollar piece of hardware that linux doesn't support, and write a driver for it.

        Nice resume padding, and you'll get a fu

    • Re:Good News! (Score:5, Interesting)

      by rossifer ( 581396 ) on Saturday March 21, 2009 @01:48PM (#27280145) Journal

      Nobody expects a recent graduate to write a kernel or a banking app!

      Even more precisely, nobody expects a recent graduate to really know how to write good enough code. That's something a new graduate should expect to learn in their first three to six months on the job.

      The expectation is that you already know how to learn languages. The issue with only learning C, C++, and Java is that they all use a related syntax and they are all statically typed. This is not enough variety. I would suggest that before you hit the real world you learn at least one language that isn't the same. Python, Ruby are excellent choices at this time. Lisp, Haskell, Erlang are also possibilities if you'd like to explore functional programming.

      Something else a good developer is usually expected to do is adapt to the coding conventions in the current project. I have found, however, that many if not most developers are completely and unable to adapt to team conventions. They have their "best way" and can't write code any other way.

      If I can provide one piece of advice to help you with your success in programming: remember that conventions are not for you. They're for the people who come after you. Having consistent and readable code is more important than whether or not you like indentation with tabs or spaces.

      • by BrokenHalo ( 565198 ) on Saturday March 21, 2009 @02:05PM (#27280279)
        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.
        • by HiThere ( 15173 ) <charleshixsn@@@earthlink...net> on Saturday March 21, 2009 @03:56PM (#27281463)

          That was excellent advice for the earlier generations of processors. I'm not convinced that it's a good idea now. But something similar could be achieved:
          Learn to write programs in JVM machine code.

          Or Parrot. Or Python Virtual Machine. Or MIX, even.

          Actually, Mix might be the best, but it's a bit more limited. But modern processors are too complicated for this to be a useful learning tool, and you don't want to REALLY start assembly language programming. A new generation of processors will break everything you've ever written.

          For the purpose, Parrot machine code would probably be best. JVM the most useful.

          OTOH, you might also consider LUA. It's not a great language, per se, but it's an excellent adjunct to C or C++.

          Part of the problem is that there are a number of directions to go, and a limited amount of time. You really NEED to learn some sort of assembler, and for that I would recommend Parrot. It looked like a reasonably simple code, and reasonably well documented. But I'm not sure that this is the right time.

          An alternative is to pick a language and start learning to use it's standard libraries and how to manipulate files. (When I was in college, I never got taught how to use files, and I regretted this for years, until I had backfilled the knowledge on my on time.) If you pick C++ STAY AWAY FROM TEMPLATES!! That's advanced work. (Yeah, use them for simple generics, but don't do anything fancy. They only exist to make your life simpler. Once they stop doing that, avoid them.)
          I can't give any comparable advice for C. In C and C++ both you need to restrain your use of macros and pointers. Prefer arrays over pointers. Prefer references over pointers. (And acknowledge that sometimes they are necessary evils...but they remain evil.)

          My advice against pointers is symmetric to the standard advice against program jumps (AKA "Go to considered harmful") and in favor of structured programming (i.e., while loops, do loops, and function calls). I'm not sure that structured programming is even mentioned anymore as it's become so dominant. The same reasons it became dominant argue against the use of pointers. (You'll note that Java essentially eliminated the use of pointers. It's a [slightly] more recent design than C++, and not as close to the metal. But the efficiency cost of Java was more due to garbage collection and a virtual machine than it was to the elimination of pointers. [E.g., see Digital Mars D, which is about as efficient as C++, but severely limits the need for pointers.])

          P.S.: Re:

          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.

          That's a really obnoxious attitude. Different languages are designed for different situations. If you're writing code in a hurry, you don't want to worry about lots of unnecessary fiddling details that would be very important if you had plenty of time and really needed to optimize execution. So you'd use different languages. If you use C where you should use Ruby, everyone will be very unhappy with you, and likewise for the converse. Actually, I think that C is almost always the wrong choice. Most work that's done in C should really have been done in Ada...but the people doing it already knew C, and it was "good enough", so that's what they used. Don't ever, however, make the mistake that this prove that it was optimal. (Except in the sense of the costs of causing the programmer to learn a new language.) Ada would even often be a better choice in places where C++ is chosen, though less frequently. With Java the division is less clear cut. Where Java is used because the programmer didn't know C or C++, then the same comments apply. In many other cases, however, Java is a better choice. (Java is less efficient, but it has dynamic capabilities that are very difficult to manage in Ada.

          Things get more complicated when you start to include complex libraries, such as Lua. In that case C + Lua is frequently a superior choice to Ada...because Lua interacts better with C and is only used when a bit of dynamic behavior is appropriate.

    • Re:Good News! (Score:4, Insightful)

      by Hooya ( 518216 ) on Saturday March 21, 2009 @02:09PM (#27280317) Homepage

      After over about 15 years of programming, i ended up with varying degrees of experience with roughly about 10 languages (not counting shell scripting). ALL of it helps in becoming a better programmer in any of the languages - I can't say I'm a good programmer but I can say that I'm better than I used to be because of the various perspectives the different languages gave me.

      I can't say that the same will work for you - you may want to specialize in a particular language. In my case, having the somewhat broad experience has allowed me to get promoted to a position where if I need a specialist, I can hire someone.

      That said, don't learn lisp unless you want to curse at every other language out there. Ignorance is bliss sometimes.

      But you have plenty of time to discover the joys (and pain) of programming - just pick something you like and plow at it, but keep you mind open for other possibilities and other languages and learn those as the need comes up. Just don't use the same hammer for everything as some people are prone to do.

      But above all, play with the language you like - you'll get good at it and you'll find the job you like. Learning a popular language just because there are a lot of jobs for that language means you'll end up with a job you won't like - after all you don't need the thousands of jobs - you need just the one.

      I learned the languages I liked - Lisp, Python, Erlang, R (among others) - and have the one job I like - the Director of IT for a smallish company; 10 year anniversary coming up.

      Don't chase the thousands of jobs for languages you don't like much - find the language you like, get good at it and find the one job you like.

      Oh, and no one expects a recent grad to write a multi-threaded banking app.

      But if you do pick up an OO language, learn the concepts of OO and not treat it like a purely procedural language. Like, learn how to truly use dynamic binding and inheritance and not if-then-else etc. The same goes the other way also. OO is not always the answer - learn functional programming etc. Which, surprisingly, will give you a better understanding of OO and vice versa.

      I'll get off the soap box now.

    • Re:Good News! (Score:5, Insightful)

      by Shisha ( 145964 ) on Saturday March 21, 2009 @02:10PM (#27280331) Homepage

      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++).

    • Exactly. Kernels aren't written by single people, unless your Linus or have a LOT of spare time on your hands.

      So long as you can demonstrate that you have a basic to intermediate understanding of how programming languages work, and how to apply that understanding to different problems in different environments, you'll be okay.
  • by Anrego ( 830717 ) * on Saturday March 21, 2009 @01:24PM (#27279929)

    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.

    • Re: (Score:3, Insightful)

      by ThePhilips ( 752041 )

      +1 to "learn new stuff quickly". +1 to "a little assembler". +1 "really messed up language ... to see the other side".

      Languages themselves matter little. Biggest hurdles are the custom libraries and business case of the company. With libraries, one has no choice other than sit down and read all the code. With business case ... well one can only understand that with time: few people/few companies would openly admit that their business case e.g. is selling cheap buggy software (and that's about 90% of sof

  • Visual Basic. (Score:2, Insightful)

    by XPeter ( 1429763 ) *
    All kidding aside, you should invest a good amount of time learning all three of the languages. In my high school we have an intensive technology program which teaches VB, C, C++, Java, Java Script, MIA and CAD. Not to long ago I asked my teacher why we needed to learn all these programs and languages. He responded by simply saying in his technology career, he's never had a job that used just one language. He also added that since the economy is shit employers will hire the people with the most experien
    • Re: (Score:3, Insightful)

      by Dahamma ( 304068 )

      He had to master the Linux kernel as well as VB because these are the languages the servers run on.

      Who the heck modded this "insightful"? It makes no sense whatsoever. Linux is not a language, Linux has nothing to do with MS Visual Basic, and servers don't "run on languages". It's just a collection of random buzzwords.

      Anyway, it's great you are already interested in programming in high school, but spend more time understanding the technology and less on the buzzwords!

  • Java for internet code monkeys, C++ for anything to do with graphics, visualization, or that needs to be efficient. C# for windows GUI stuff, and the only good use of C I can think of is for writing drivers or firmware stuff. Java will probably have the most job opportunities, but thats just because most jobs are for internet code monkeys.
  • Practice (Score:5, Interesting)

    by adisakp ( 705706 ) on Saturday March 21, 2009 @01:27PM (#27279955) Journal
    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.
    • Re:Practice (Score:5, Insightful)

      by adisakp ( 705706 ) on Saturday March 21, 2009 @01:29PM (#27279971) Journal
      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.
    • Re:Practice (Score:4, Insightful)

      by slashkitty ( 21637 ) on Saturday March 21, 2009 @01:34PM (#27280023) Homepage
      This is the right answer of course. However, I'm worried about any computer science grad that hasn't been doing this all along. If you don't do computer programming for fun, are you sure you even want to get into programming?
      • I'm in this boat unfortunately. I have an Associate Degree in Computer Programming but have never really liked doing it when I'm not at work. I have a bunch of great ideas, most quite profitable when I actually do them, but I'm seldom motivated enough to do it frequently.

        However I do have uncanny natural gifts with SQL and anything to do with getting data in or out of a database (including ETLs), so those pay the bills quite nicely.
      • by adisakp ( 705706 )
        Exactly, I took comp sci and electrical engineering in college but I started writing programs in Basic on Apple II's in high school for fun and continued to work on non-class related programming side projects. I've been programming now professionally for nearly 20 years and I still do side projects to learn new languages and techniques and to keep my skillset sharp.

        If you're not doing any programming outside of your class work, you probably don't enjoy the field and then you're not really going to ever
  • COBOL (Score:5, Interesting)

    by flyingsled ( 1475035 ) on Saturday March 21, 2009 @01:27PM (#27279959)
    If you're thinking of banking apps, think COBOL (at least here in Canada). Bunch of those programmers are near retirement too...
  • Forget'em (Score:4, Funny)

    by oldhack ( 1037484 ) on Saturday March 21, 2009 @01:28PM (#27279965)
    Do your best to forget everything you've learned in CS, and go to nursing school. You'd be happier and live longer. :-)
    • Well, it's not nursing (which will soon be overpopulated) but studying medical records might be a good move.

      • Re: (Score:3, Insightful)

        Nursing will be overpopulated? When it costs at least half what a medical degree costs, but pays substantially less?
  • I would go for C++ because it is very rich and powerful. Once you got that in depth, manipulating languages such as Java or C# would be a breeze, because their object model is simplier than C++'s. C is nice but I feel it is part of history now.
  • Focus on learning how to program properly and efficiently. Learn correct resource-management and security practices and study algorithms. If you master programming in general, you can master any language withing a matter of weeks. Certainly too short a period to make your career based on that decision.
    • Re: (Score:3, Interesting)

      by fermion ( 181285 )
      Exactly, concentrate on techniques. Moving languages requires an understanding of the how the language approaches a problem, and what the typical errors and pitfalls are, and such an understand only comes with long use. For instance, I remember being 17 after a few years of writing Fortran, and seeing a non descript error appear. I knew what it was, and realized at that point I understood the language. The same thing happened in C after a few years.

      What can and should be learned in school is the vario

    • by Logos ( 80812 ) on Saturday March 21, 2009 @02:09PM (#27280321)

      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.

  • It's sad to see programs that purport to be about computer science cover only a few popular procedural languaages.

    • Re: (Score:2, Funny)

      by godrik ( 1287354 )
      I would say OP should broaden his mind and learn a functionnal language such as caml [inria.fr]. He will probably never use them professionally but they are so enlightening.
    • Re: (Score:3, Insightful)

      It's sad to see programs that purport to be about computer science cover only a few popular procedural languaages.

      "we covered 3 programming languages: C, C++ and Java"

      Could you perhaps expand on how C++ and Java are "procedural" languages, rather than, say, object-oriented [wikipedia.org] or generic programming [wikipedia.org] languages?

    • Re: (Score:3, Insightful)

      by tkelechogi ( 813782 )

      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.

  • C is good for low-level kernel/embedded/high-performance stuff. If that's what you're into, head in that direction and learn C 'til you know it backward.

    It sounds like you're going for general "employability", though, in which case either C++ or Java is good (I like C++, but I've never really done anything in Java). Regarding Fortran, for some reason I'm under the impression that it's mainly job security for the old-timers nowadays?

    However, I really think you should pick what you want to do and then lear
  • skillsets (Score:5, Insightful)

    by Phantom of the Opera ( 1867 ) on Saturday March 21, 2009 @01:32PM (#27279995) Homepage

    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.

  • Why not web stuff? (Score:3, Interesting)

    by mgkimsal2 ( 200677 ) on Saturday March 21, 2009 @01:36PM (#27280035) Homepage

    While it's good you've got solid grounding in C/C++/Java, there's quite a lot going on in the software world centered on the web. Taking your logic skills and applying them to the web arena may net you the "commercial ready" skillset you're thinking of much faster than just trying to hack away at Linux kernel code.

    Most of these will make traditional CS people cringe a bit, but there's plenty to learn from and contribute to in the worlds of PHP, Perl, Python (Pylons, Django, etc), JavaScript, Ruby (Rails), Groovy (Grails), Flex/ActionScript, Silverlight, ASP.Net (new MVC framework out).

    The tried and true recommendations of "pick an open source project and dive in" probably apply here as much as anywhere. The development cycles tend to be faster and more iterative using these technologies (broadly speaking) and you'll find plenty of people to learn from and, with your background, plenty of solid grounding in fundamentals to contribute.

    As someone else already said, no one is going to expect a recent grad to be writing banking software (threaded or not). Few people actually *write* core banking software anyway. You'd more likely be writing web frontends for bank admin and report generation processes.

    Remember that you can generally change direction later on as well. Just because you've studied Java for a few years doesn't mean your future is set in stone as a Java dev. Look at C# - there might be plenty there you'd like too.

    Good luck in whatever you choose!

    • Re: (Score:3, Insightful)

      by Anrego ( 830717 ) *

      I dunno.. I'd be careful of web work. Once you get pegged as a "web developer" it can be hard to get a traditional programming job.

      That's not to say you shouldn't pursue a career in web stuff if you have an interest.. but having 5 years as a PHP developer on your resume is a hard stigma to shake if you decide you want to get into more traditional programming languages.

      In other words... I'd think long and hard about taking a web programming job if it's not really what your interested in. Sure.. it means mone

      • I dunno.. I'd be careful of web work. Once you get pegged as a "web developer" it can be hard to get a traditional programming job.

        There's certainly an element of truth in that, but as long as you've got some "traditional" experience on the CV as well, web programming is a large and sometimes quite lucrative field. I wouldn't recommend going straight into it out of university unless you're going into serious web development (with the graphic design, usability and so on as well), but if it's of interest, I don't see any harm getting a bit of experience with it early in a career, perhaps as a side project outside of your main job if noth

  • Direction (Score:3, Interesting)

    by holophrastic ( 221104 ) on Saturday March 21, 2009 @01:36PM (#27280037)

    You really have a number of paths to select, "computers", as you know, isn't exactly unified.

    If you start your own company, or work for a small company, it doesn't matter what language you use because the client doesn't tend to care. What matters is that in your chosen language, you can do just about anything within the scope of small business. That tends to mean business logic and basic interface.

    If you're working for a very large corporation, with a team of programmers, then you needn't have anything more than the basics. Large corporations will take you for your general breadth. On day one, you'll be shown what to do. On day two, you'll be altering small and isolated parts of very large projects. By the time you're the one maknig large changes, you'll realize that you don't need language-specific knowledge so much as you needed to study their particular implimentation of a project that is more structure than language.

    Finally, if you're a consultant or programming contractor, it won't matter which language you select because there is always someone with eneds in any major language.

    Fifteen years ago, I was in the second world. This large corporation was using embedded perl, and moving to JSP -- before there was documentation for it.

    Ten years ago, I went the first way. I started working for small companies and then I openned my own. My clients have no technical knowledge. So I make sure that no matter what the request, I can do it when I control all of the technical aspects. I'm also in the web world and the custom business software world. I chose Perl, JScript, HTA's, and MySQL. I stop short of programming activex controls and device drivers -- which would have occasionally helped, but I farm those out as small C/C++ executables and tiny projects to someone like you for a few hundred or a few thousand dollars. The last one, for example, registered a protocol (like http:/// [http] that decrypted resources on-the-fly so my crummy little HTA (think web-site in a file with no security restrictions) could have encrypted content on the CD.

    In another twenty years from now, I'll move to the third world.

    So, in summary, pick what you like, and then lower your head, bend your knees, and charge in that direction. Don't do what our parents said. Don't "keep your options open". Slam doors behind you. Holding all of those doors open stops you from actually going through any of them. And besides, most of those doors don't have locks; so let them close.

  • Listen to Norvig (Score:5, Interesting)

    by Phs2501 ( 559902 ) on Saturday March 21, 2009 @01:37PM (#27280041)
    Read this:

    Teach Yourself Programming in Ten Years [norvig.com]

    Peter Norvig knows what he's talking about.

  • by Kupfernigk ( 1190345 ) on Saturday March 21, 2009 @01:37PM (#27280051)
    You cannot get from a degree - about theory and how to learn - to becoming a commercial anything in a few months. You are looking at a year post graduation before you know anything. Anything else is unrealistic. I know this advice may seem unhelpful, but I have to tell you that by the time all my kids graduated, they already had a year of work experience, internships, and time spent working abroad (as did I, all those years ago. I learnt a lesson there). None had the slightest trouble getting jobs. That's your competition.

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

  • Be a doctor instead (Score:2, Interesting)

    by Anonymous Coward
    Since you're a final year student this advice is probably a bit late... but I've been programming for 20 years, and every few years a new language or API comes out that you must learn to stay competitive. It gets old, plus you're competing against decent developers in the East that are paid way less... In retrospect for my career it would've made sense to just be a doctor... you only learn the body once, it doesn't change and you can easily make $100k/yr till you're 70.
  • It won't be worthwhile to specialize in any language. It's time to get a job and some real-world experience.

    As a CS grad, you should be able to pick up any language within a few weeks. This is your main selling point versus those that have already specialized within a certain area. A few extra months of specialization won't help; if you do you'll likely restrict yourself to only those jobs and have to compete against those with years of experience.

    Instead, make good use of your current flexibility (and rela

  • Those are going to open the most doors for you. As a developer fresh out of school, you're unlikely to get a job that would require C (mostly for low-level work, as you pointed out in your summary).

    It's important to realize, though, that knowing a language only takes you so far. It's the libraries and other things built on top of the language that really give you some tools to build on. If you go the Java route, it's worthwhile to look at the enterprise side of things, learn some swing, beans, etc. If you g

  • we didn't cover any of these languages in sufficient depth for me to claim that I have commercial-ready experience.

    I've got news for you. Very few people in the software industry can make that claim. Spend more time on thedailywtf if you need illustration ;-)

  • A knowledge of programming in general, an understanding of algorithms, of complexity and basic security issues, will put you ahead of a lot of "consultant programmers" I have met.

    Recruiters generally think C and C++ are the same thing, and so do HR departments.

    If you enjoy what you do, and are good at it, you'll get better and be an asset to any slave-farm^H^H^H^H^Hcorporation.

    Contribute to an open source project or two, perhaps.

    Having said that, what university is teaching computer science students only th

  • I work in an IT consulting company, and I'm seeing a strong move away from C/C++, to Java, among our customers.

    Let me qualify that a bit: very technical developments (games, drivers, graphics stuff...) seem set to remain C/C++. The rest (all business apps) are moving over to Java and C#.

    There still is some market for pure Web development (php, AJAX...), but not as much as Jav, and more in IT companies than at end-users'. Mobile phone development is still very much in flux, a bunch of proprietary platforms.

    F

  • by wdhowellsr ( 530924 ) on Saturday March 21, 2009 @01:47PM (#27280137)
    If you are going to work in the UK or in the US you need to look at the job offers. I would start with entry level contract positions since they will usually give you a chance faster than a full time position. In addition you will be able to work three or four contracts and get a feel for what you like.

    http://www.computingcareers.co.uk/jobs/programmer-developer/ [computingcareers.co.uk] are jobs in the UK.

    http://www.careerbuilder.com/Jobseeker/Jobs/JobResults.aspx?SB%3Asbkw=computer+programming&SB%3As_freeloc=&SB%3Asbfr=30&sbsbmt=Find+Jobs+%C2%BB&cid=US&excrit=QID%3DA6656194759657%3Bst%3Da%3Buse%3DALL%3BrawWords%3Dprogramming%3BCID%3DUS%3BSID%3D%3F%3BTID%3D0%3BENR%3DNO%3BDTP%3DDRNS%3BYDI%3DYES%3BIND%3DALL%3BPDQ%3DAll%3BPDQ%3DAll%3BPAYL%3D0%3BPAYH%3Dgt120%3BPOY%3DNO%3BETD%3DALL%3BRE%3DALL%3BMGT%3DDC%3BSUP%3DDC%3BFRE%3D30%3BQS%3Dsid_unknown%3BSS%3DNO%3BTITL%3D0%3BJQT%3DRAD%3BJDV%3DFalse&IPath=QHKCV [careerbuilder.com] are jobs in the US.

    You will notice that the UK has a lot more need to C++, JAVA and C and the US, no matter how much you hate Microsoft, has more SQL, Visual Studio, C# and other .Net and Web Based programming jobs.

    I specialize in the n-tier web and windows application with Visual Studio, C#, Asp.net, and other Web Technologies and never want for work in the Orlando, FL area.

    Good Luck and unless your married, program and read about programming every waking moment. If you are married unfortunately I can't help you. This is coming from someone married for twenty-three years. I got all my computer geek out of the way before I married her.
    • > ...no matter how much you hate Microsoft, has more SQL...

      Since when does Structured Query Language have anything in particular to do with Microsoft?

  • was to build a program that reflected an idea I had in my head. Sometimes the ideas weren't that great and the program fizzled out but other times I had a good enough idea that kept my attention and I was able to hone my programming skills at the same time. Of course this is not as good as contributing to a larger project or having some kind of formal experience but it was something. Granted, my career isn't actually as a developer but a systems engineer but I like programming on the side and in the process
  • Fortran?? (Score:4, Informative)

    by Bill, Shooter of Bul ( 629286 ) on Saturday March 21, 2009 @01:50PM (#27280167) Journal
    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.
  • by presidenteloco ( 659168 ) on Saturday March 21, 2009 @01:54PM (#27280197)

    Seriously, I am getting really tired of reading incoherent code written by coders with post-grad degrees. This code is like:

    "When the box disk smiles, go down to the
    hairy river,
          axe
    the question, be not
    sequitur music library))

    Or like this: i ( a n 0 ][ ][H1 NK strat

    Learn literate programming, world modeling using occam's razor, appropriate
    factoring and abstraction, elegance and analogy, then really learn at least one language and its libraries like the back of your hand.
    C++ = fast and ugly, and dangerous, unless you
    really work against it to make it beautiful and safe.
    Java = a beautiful baby that grew up into an old man before its time, burdened by layer upon heavy
    layer of painful baggage from a failed enterprise.

    Python or Ruby = really nimble and powerful if you are good enough to avoid making a godawful mess, because they won't protect you from yourself.

  • Most companies understand the level of experience someone coming right out of college has. You don't need to be an expert as long as you're willing and able to learn. Being a good programmer is far more helpful than being an expert in any particular language (presuming you can get past the HR-department to a technical interview. College job fairs can be really helpful for this).

    If you want to be a better programmer, learn to program in a functional language like Lisp, Scheme, Ocaml, Eiffel or F#. It'll

  • by cetialphav ( 246516 ) on Saturday March 21, 2009 @01:57PM (#27280231)

    Do not worry about language knowledge as much as domain knowledge. The thing that prevents you from writing an OS kernel is not that you do not know C well enough, it is that you do not know enough about what it is than an operating system must do.

    Languages are easy to learn and they come and go with the times so there is no point in specializing in any particular one. Where you really want to specialize in is the domain you will program in.

    If you will go into networking, then you need to know all about how protocols and networks work. If you go into the financial field, you will need to know the financial models. If you go into an embedded field, you will need to understand the OS kernel, and drivers, and power management.

    Languages are the easy stuff; it is the domain knowledge that is difficult. It is also the domain knowledge that makes you really valuable to businesses.

  • by intrico ( 100334 ) on Saturday March 21, 2009 @02:07PM (#27280293) Homepage

    What you need to do is really take a step back and ask yourself, "What sort of programming do I want to do ...what really excites me? Device driver development? Multimedia application development such as an MPEG encoder? Game Development? GUI Application Development? Web-based development? Firmware development? Engineering and scientific applications?"

    The languages typically used are very different for each of the different programming focus areas listed above.

    The most helpful thing to remember is that different programming languages are different tools that fit different types of jobs (especially when you're under time and other resource constraints in the real world), therefore you should be careful not to get too attached and/or biased towards a favorite language. However, it is okay to have a favorite, since being really good in one language makes it much easier to pick up other languages.

  • C.

    if you really don't feel comfortable in any of those languages, C is the only real choice. both C++ and Java, but especially C++, are absolutely horrid languages to start with. C++ will positively rot your brain. C is still very widely used, although it doesn't get the hype and isn't growing very fast (comparatively), and perhaps more importantly is a great basis for learning - and later, actually programming in - other languages. it much more clearly illustrates the important concepts common to a very w
  • In school, your teachers focus on higher level languages like Java that are easier to teach with because they ignore lower level programming issues. However, in the real world, people still need to deal with all of these problems.

    Higher level languages sweep low level problems under the rug, but they don't make them go away. You may be surprised someday to find that your Java programs can and DO leak memory if you aren't careful. To be a top notch developer you really do need to understand how higher level

  • C++ (Score:3, Interesting)

    by shutdown -p now ( 807394 ) on Saturday March 21, 2009 @02:15PM (#27280387) Journal

    Out of those that you've listed, you should definitely consider C++ a priority. Here's why.

    First of all, it gives you C essentially for free. Yes, there are differences, but they are minor enough. The general philosophy is radically different, too, but it's much easier to adjust from C++ to C than vice versa (if you go C++ -> C, you will always remember what you missed, but you'll know how to work around it; if you go C -> C++, you'll just be annoyed by all the RAII stuff that gets in your way, and probably just end up writing C code with C++-style comments).

    Java is on a slow decline. It's still the most popular language out there by and large, but it hasn't seen any significant advances in the last few years. With Sun not feeling well, it's quite likely that it will be taken over by IBM, and that will seal its fate as COBOL-2. It's not that you'll run out of Java job offers anytime soon - new stuff will keep being written, and there's always need of maintenance for existing code, but it's not going to be much fun, especially when you compare your toolset with other guys on the block ("what do you mean, no closures?..").

    As for C++, it's still the language of choice for writing desktop software on any platform, and even in the "enterprisey" Java/.NET/whatever solutions there are often bits and pieces that are best left to C++ for performance reasons, or just because there's a C++ library available that does that thing. Picking up Java (or C#, or VB) after C++ is generally pretty easy (and there is plenty of literature catering precisely to such a transition - google "Java for C++ developers" etc). Furthermore, I've found that people who are looking for senior Java or .NET developers often want at least some C++ experience as well. I guess it shows that you're less inclined to treat things such as GC as "magical", which can matter [msdn.com].

    By the way, while you're at it, have a look at C++0x. Draft standard is already there, and compiler providers are racing to get it implemented. I don't know about g++ release schedule with respect to that, but Visual C++ will have bits and pieces (such as e.g. lambdas) in the upcoming major release, and there are
    new Microsoft libraries that rely on them heavily (e.g. google for "Parallel Patterns Library"). If you know that stuff when no-one else does, that's another one in your favor.

    Of course, as others have suggested, learning just one or two languages is not good enough these days, anyway. Learn something functional. If you want to be pragmatic, go for F# on Windows, or OCaml on Unix. Haskell is worth studying just for the pure aesthetic beauty of the language, even if you'll probably never use it except as a glorified calculator. Same for Scheme.

  • Applications and games software (the typical uses for C and C++) will be increasingly outsourced to cheaper labour markets and these cheaper labour markets are catching up in their skillsets and experience. You'll be increasingly unable to point to these programmers and class them as incompetent or unable to communicate with Westerners.

    Open source software development is increasingly wiping bare the number of market segments available for commercial software development. Yes, more free software for all, but

  • Figure out which of the three you enjoy using the most and then specialize on that one. This is something you are going to be doing day in and day out, so do the one you'd most like to spend your time doing. There are jobs for all of them out there. As long as you like what you do, and that comes across, you'll be fine with any of them.
  • As a C programmer who has also hired other C programmers, I can tell you, there are not as many jobs for C, but there is also a shortage of good C programmers. If that is the language you want to learn, go for it! You will have no problem finding a job.

    The important thing I would say is to get really good at one language. Work on a large project so you can get over the wall of confusion that comes with looking at a 20,000 line program for the first time. Figure out how to understand complex code that
  • Seriously - if you've studied C/C++/Java to a reasonable level, picking up other procedural/OOP languages like Pascal, C# should be a no-brainer.

    These days, though, you rarely get paid to write stand-alone code from the ground up - you'll have to deal with complex APIs, application frameworks, communication protocols, database servers etc. If all your Java work was done using AWT or Swing and you get a job using SWT then you'll be on a learning curve (and that's just the GUI/forms end - let alone the rest

  • Forget Fortran (Score:3, Informative)

    by eh2o ( 471262 ) on Saturday March 21, 2009 @02:36PM (#27280623)

    If you want to do scientific/numerical programming, learn Matlab, Mathematica, Python + NumPy / Sage, IDL (for astro) and maybe even Perl (for biotech). If you want to do statistical reporting you need to learn R, SPSS, etc, and get a masters degree in Stat because no one will trust you otherwise.

    If you want to stick to the "ordinary" corporate world (meaning, everything else), forget all that and focus on SQL, XML, web services and refine the skills in Java, C#, VB.net etc.

  • Interview (Score:3, Insightful)

    by br00tus ( 528477 ) on Saturday March 21, 2009 @02:47PM (#27280727)
    The important thing is passing the interview, not being ready for the job. If you get in the door, you can always spend extra hours at night doing assignments if you don't know what you're doing. You also need to have the technical skill to answer job interview questions. Go to Joel on Software or other sites which have sample interview questions on what some basic questions you may be asked are. If I were you, I would do C on my own time, and concentrate on one language. You say Java and C++. Being 2009, I would focus on Java. But if you're more comfortable with C++, that makes a fine second choice. C# is another possibility. I would focus on just one though. Even people with years of so-called experience often miss simple questions about their primary language, so learn it, and learn it well. Also learn how to do algorithms as people will ask you for samples during interviews, especially if you just got out of school.

    I would also check out a few projects on Slashdot, play around with a few and start contributing to them. Some project leaders are out to sea, so do one where you can contribute and the team leaders appreciate help. Put it on your resume. You'll learn a lot.

  • 3 Languages? (Score:5, Insightful)

    by Beetle B. ( 516615 ) <{beetle_b} {at} {email.com}> on Saturday March 21, 2009 @03:29PM (#27281215)

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

  • by Draek ( 916851 ) on Saturday March 21, 2009 @09:05PM (#27284201)

    ...as a former math student now back in the gentle arms of programming ;) I'd recommend learning math, or more specifically logic. Forget assembly, forget C, forget specific programming languages, making a computer do what you want isn't as important as knowing what you need done in the first place.

    No, I won't suggest that picking up a new language is trivial, or even easy. They all have their own individual warts that are sometimes difficult to deal with, styles of programming they encourage and others they actively discourage. But a poorly-structured program is a poorly-structured program in any language, and learning to pre-visualize how it all comes together is a skill that transfers between all languages and programming styles, in my experience.

  • by cplusplus ( 782679 ) on Sunday March 22, 2009 @12:48AM (#27285555) Journal
    They're all the same. Okay, there are some minor differences, but they're all based on the same concepts and principles. There's one thing I've learned over the years- it's that if you understand the concepts of computer science and programming in general, you can use any programming language. When I interview candidates for a job, I don't focus too much on what languages they know... I want to know how they think. I want to hire the person who can grab a good reference book and know what to search for when they want to do something. Learning the syntax of a language is trivial, learning the concepts of computing is not. Some people have it, most don't. I hope that's what you got out of your education. The syntax, tips, tricks, and gotchas of any language can be picked up pretty quickly if so.
  • by mkcmkc ( 197982 ) on Sunday March 22, 2009 @12:59AM (#27285615)

    A "Computer Science student" where? Joe's HyTech Typing Academy and Storm Door Company?

    Seriously, a good school will give you exposure to the ideas in a variety of programming languages drawn from across the spectrum. Ideally you'd be have some sense of the best ideas in (and worst flaws of) a dozen or more languages drawn from

    • Lisp (or Scheme)
    • Haskell (or Ocaml)
    • Prolog
    • Smalltalk
    • Forth
    • Pascal (or Modula-2/etc)
    • Python (or Ruby, and Perl)
    • Eiffel
    • Ada
    • Assembly
    • a couple of cutting-edge languages I haven't even heard of

    and yes, some C, C++, and Java. You may not ever use most of these languages, but it's quite likely you'll benefit from being able to see things from their perspective. University is a time to learn fundamental concepts--it's not a trade school.

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

    Hell, if you are going to go as far as assembly, you also should go one step further: write an OS from scratch.

    Well, I did that back in 1980, in C and Assembly, and it did teach me the fundamentals of how a computer really works, and it helped later with writing efficient C code, etc.

    Alas, in today's world, that's not an approach I would recommend. But you should have an understanding about what's going on under the hood if you are writing good C++ code, especially when it comes to threading/multitasking on multicore computers (which are common as bread today!)

    You want an edge up? Spend some time learning about threading on multicore systems, and understand how to write code to leverage that for performance.

    On the Java front, don't fall into the trap of using Java Threads as a poor substitute for a sound queuing design. Threads are very expensive, yet Java almost encourages you to allocate and drop threads on the fly. Don't do this. Learn to use threads sparingly, yet effectively to leverage performance on multicore systems.

    If you are writing GUI applications, the intelligent use of threading can greatly enhance the user experience. Users should never have to wait for an operation to complete that they will have no need to manipulate after the fact. Here's where using a batch queue and a background thread to process those batches would be a welcome win for the users of the application. In fact, even if the user will be manipulating it later, clever design to make it appear quick wins the day.

    Well, now that I am on the GUI front, do spend some time learning about proper UI design if that is the area you wish to go. Go the extra mile to make things easy for the user and intuitive. Design in a fashion to annoy the user the least. They'll love you for it.

    In today's web-driven Internet world, you don't need much C++, unless you are writing MMORPGs. Languages that will carry you far for Web development are PHP, Python, Perl and HTML. It is also essential to know something about interacting with databases, and that means SQL. MySQL is the most popular for web development, though some shops prefer Microsoft solutions and you'll see Sql Server in use.

    So many languages, so many systems, so little time. Do your due diligence with your market and see what's in demand. Certain combinations can put you way ahead of the crowd, like knowing good software engineering approaches and also good database design techniques. This stuff takes years to acquire and unfortunately, they are rarely taught well in school.

    Forget having a life for the first five years and get yourself good and grounded. Afterward, you can REALLY have a life when your career is going well and you'll look very attractive to the babes. :-)

The Tao is like a glob pattern: used but never used up. It is like the extern void: filled with infinite possibilities.

Working...