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:
  • by junglebeast ( 1497399 ) on Saturday March 21, 2009 @01:24PM (#27279933)
    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.
  • by Anonymous Coward on Saturday March 21, 2009 @01:31PM (#27279991)

    I see more and more of this in the bank where I work. Microsoft seem to have slowly but surely dominated this area by virtue of the ease-of-use of their development toolkits.

    C++ tends to be restricted to the very old (1990s) applications that were developed when C++ was 'trendy' and before people realised what an unmaintainable nightmare of complexity it represented.

  • by Anonymous Coward on Saturday March 21, 2009 @01:42PM (#27280091)
    The idea is that you can apply computer science to any language you want to learn.
  • 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.
  • 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 Anonymous Coward on Saturday March 21, 2009 @02:08PM (#27280307)
    As someone who works on embedded applications every day, I can tell you that C is not (only) a part of history.
  • Java in banks (Score:1, Informative)

    by Anonymous Coward on Saturday March 21, 2009 @02:12PM (#27280363)

    Disclaimer: I've worked at the two biggest banks in the world; I'm currently employed at one of the largest, if not the largest bank in the world.

    Java dominates the banking environment because banks have a policy of hiring cheap, incompetent idiots off of the street.

    Paradoxical?
    Remember that bank management is trying to make the IT experts expendable -- they really dislike the fact that an expert will say "stick it where the Sun don't shine" and up and leave when the management tries to pull their usual bullshit. Hence they hire cheap idiots.

    And cheap idiots use Java, because that's all they really know. Unfortunately, what they don't know is how to develop fast applications that make efficient use of Oracle databases, which happens to be exactly what most banking applications require!
    From my experience in working in Oracle support and engineering, most of these incompetent Java idiots have never even seen a SQL*Plus prompt, let alone written SQL or even *GASP!* PL/SQL code. (The guy cranking all the PL/SQL code is driving an expensive sports car, which should tell you something.)

    Those Java idiots which have figured out how to connect to an Oracle database (using JDBC thin, what else?), use GUI tools to *generate* SQL code; unfortunately for them, the generated SQL code is total garbage, resulting in major DB performance issues.

    Which then a guy like me must fix, usually by finding perverse ways of Oracle running their garbage code faster.

    The reality is disgusting, really.

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

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

  • by HiThere ( 15173 ) <charleshixsn@ear ... .net minus punct> 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.

  • 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 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:Good News! (Score:2, Informative)

    by tomhudson ( 43916 ) <barbara,hudson&barbara-hudson,com> on Saturday March 21, 2009 @10:11PM (#27284677) Journal

    The point I was making is that writing multi-threaded code isn't as big a deal as everyone seems to make out.

    Also, "banking apps" are not millions of lines of c or java code. Your web-based banking app probably isn't. COBOL is also still very much a force on the back end for many of those apps, and java servlets are one of the more popular back-end connectors.

    And your assumption that I was referring to derivatives trading? Why? Because it's "newsy"?

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

  • by khellendros1984 ( 792761 ) on Sunday March 22, 2009 @04:45AM (#27286515) Journal
    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 still in the learning phase, having graduated about a year ago, but I am immensely glad that I learned a few of C++'s quirks before starting to work.
  • 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. :-)

  • by Eirenarch ( 1099517 ) on Sunday March 22, 2009 @12:13PM (#27288335)
    "Java or C++ over C# because they are better documented, more standards compliant" Really? How is that? My experience shows that C# is much better documented and as standards compliant as Java. However we're on /. so I guess C# automatically loses 50% documentation points here.

The one day you'd sell your soul for something, souls are a glut.

Working...