Become a fan of Slashdot on Facebook

 



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.

  • Visual Basic. (Score:2, Insightful)

    by XPeter ( 1429763 ) * on Saturday March 21, 2009 @01:24PM (#27279931) Homepage
    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 experience and knowledge. Another instance would be an uncle of mine who works at Goldman Sachs. He had to master the Linux kernel as well as VB because these are the languages the servers run on. In the end, I think you should spend more time mastering what you know and then expanding your horizon.
  • 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 MikeOtl67of ( 1503531 ) on Saturday March 21, 2009 @01:28PM (#27279967) Homepage
    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.
  • 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.
  • by John Hasler ( 414242 ) on Saturday March 21, 2009 @01:31PM (#27279989) Homepage

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

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

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

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

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

    by SirYakksALot ( 223217 ) on Saturday March 21, 2009 @01:46PM (#27280125)

    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.

  • by Anrego ( 830717 ) * on Saturday March 21, 2009 @01:49PM (#27280161)

    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 money for the short term.. but you might get stuck there.

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

  • 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 blankinthefill ( 665181 ) <blachancNO@SPAMgmail.com> on Saturday March 21, 2009 @02:00PM (#27280245) Journal
    The problem with this is that the other major programming paradigms work in ways that can be absolutely baffling if you don't work in them at all. Sure its great to be able to learn on your own, but I think that programs should at least try to give you at least a rudimentary base in all the major paradigms. This not only widens your skill set, but often can help you solve problems in ways that would not be apparent to people who have never worked outside one paradigm.
  • 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.

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

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

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

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

  • by Timothy Brownawell ( 627747 ) <tbrownaw@prjek.net> on Saturday March 21, 2009 @02:12PM (#27280359) Homepage Journal

    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?

  • by RyuuzakiTetsuya ( 195424 ) <taiki@c o x .net> on Saturday March 21, 2009 @02:16PM (#27280399)

    I'm a CS student and I learned python well enough to migrate a mysql database in under week.

    CS shouldn't be about the programming but problem solving.

  • Join a project (Score:2, Insightful)

    by greenfield ( 226319 ) <samg+slashdot@unhinged.org> on Saturday March 21, 2009 @02:24PM (#27280489) Homepage

    I'm a little surprised that you weren't taught any functional languages, like Lisp, Scheme, or ML. It seems like a tragic hole in your college education. From a practical standpoint, it won't necessarily effect your ability to get hired at a bank, but it is surprising. Practically, unless you are working on low-level hardware or kernel code, I would focus on a high-level language like C++, Java, or C#. For C# you can download the free version of Visual Studio; for Java download Eclipse or NetBeans; for C++ learn to love emacs.

    More importantly, join a mid-size to large open source project and contribute code. This will teach you important skills that you can only get by programming with other people: the need to use revision control, how to code to different coding standards, and the necessity of coding reviews.

    A thorough understanding of revision control is a fundamental part of any professional programmer's skill set. If you have a chance, learn more than one revision control system.

    You might want to spend some time learning about relational databases. You should have a good understanding of SQL and concepts like normalization and joins. On the open source side, you can learn about concepts using PostgreSQL or MySQL with InnoDB. On the closed source side, you can download Microsoft's SQL Server Express or Oracle. Both are free for personal development purposes.

    Again, a good way to learn professional software development is to work in an public open source project. You'll work with people of different backgrounds and different skill levels. As an added bonus, it's an easy way to show your work (and code) to a prospective employer.

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

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

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

    Learn to RTFM, the rest is BS.

  • by tkelechogi ( 813782 ) on Saturday March 21, 2009 @02:31PM (#27280557)

    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.

  • Re:Forget'em (Score:3, Insightful)

    by ShadowRangerRIT ( 1301549 ) on Saturday March 21, 2009 @02:41PM (#27280673)
    Nursing will be overpopulated? When it costs at least half what a medical degree costs, but pays substantially less?
  • 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.

  • 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.
  • Re:Good News! (Score:3, Insightful)

    by micheas ( 231635 ) on Saturday March 21, 2009 @03:01PM (#27280887) Homepage Journal

    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 fun project.

  • by jwhitener ( 198343 ) on Saturday March 21, 2009 @03:06PM (#27280947)

    How much do you enjoy purely programming? Just cranking out code with nothing else to do?

    If the answer is, "I live for it, bring it on" then either C# or Java will get you many opportunities. In my world, Education, the dominate language is Java. But really, studying for a few months won't get you up to speed at all. You just need to find a programming job that is willing to hire a newbie and let him learn on the job.

    If the answer is, "Well I enjoy it, but I'm not sure I want to get locked in a code monkey cubicle just yet", then find a more generic programming/analyst job.

    That is what I did fresh out of college some 11 years ago. Smaller IT shop, but for a big company who's business was not IT. It allowed me to learn multiple languages and systems, learn about the business world, learn what I liked and didn't like, but most importantly, the assignments were varied, so I never got bored.

    One month, the project would be, make the VMS Lab system with database X, feed data to the Windows NT machine with database Y, based on some trigger event in database X, using any language you want. We don't care, just do it.

    Next month, make a web site that allows managers to enter their budget information and save it as an excel spreadsheet, and also put it in our SQL server, and generate reports x y and z on spending for us. Oh, and we don't have any web servers yet, so you need to install us one.

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

    by Anonymous Coward on Saturday March 21, 2009 @03:13PM (#27281039)

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

    You don't have to move to Butfuk, Montana where the first 5 are...

  • 3 Languages? (Score:5, Insightful)

    by Beetle B. ( 516615 ) <beetle_bNO@SPAMemail.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 ThePhilips ( 752041 ) on Saturday March 21, 2009 @03:49PM (#27281419) Homepage Journal

    +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 software development market).

    My only personal advise would be to refrain as much as possible from: (1) Windows and (2) Java. They both have the effect of BASIC on programmers, rendering them impotent few years later. Or in other words: do not start career on Windows or with Java, they both quickly make developers incapable of looking outside of a box.

  • Re:Java Was:C++ (Score:3, Insightful)

    by shutdown -p now ( 807394 ) on Saturday March 21, 2009 @03:54PM (#27281453) Journal

    The next major release of Java (Java 7) is going to be 100% open source. Even if Sun (or IBM for that matter) drops the language, which is very unlikely, Java is going to persist as it has a strong community.

    I don't think IBM would let Java drop and die. Nor would Google, for that matter. Both have invested too much into it. But neither seem to be particularly interested in evolving it further as a language or a platform. Today, Java is the conservative choice - that's part of its strength, but that's also what spells out its eventual demise. There's nothing wrong with that - there's always a need for a stable "legacy" platform, even if it's outdated, and Java is a good candidate for that role. But it's something worth keeping in mind when making career choice.

    Note that it wasn't my argument, anyway. I foresee Java to be supported for decades to come. Just not in a dominant ("forall X. Must be written (X) => let's write X in Java!") role it used to be.

    OSS - yes, that's a strong argument in favor of Java, but on its own it's not sufficient. If it's not good enough, who cares if it's OSS or not?

    ) It's true that the evolution of the Java language has been quite slow and conservative in the past. But I believe that the rise of new dynamic and hip languages with indeed cool features didn't pass Sun without notice. Java 7 is going to have closures, for example.

    I'm sorry to tell you, but Java 7 won't have closures [blogspot.com]. It won't have a lot of other stuff [puredanger.com] that was hoped for, either - e.g. no RAII in form of "do" blocks (similar to C# "using"), no generics reification, no properties... basically it's going to be a very minor change as far as language is concerned. And there is no plan to have those in Java 8 either (indeed, there's no Java 8 schedule for now at all!). In fact, we don't even have a JSR for Java 7 yet, so God knows when that is going to be released, even...

    It may come as a further blow that the guy who had the most deep and thought-out proposal for closures in Java [javac.info] - Neal Gafter - has joined Microsoft [weiqigao.com] to work on .NET languages. Here's what he had to say about closures in Java [infoq.com], and Java in general [blogspot.com], since then.

    As for Groovy (and I think you should've mentioned Scala). It's all great, but the tooling is nowhere near as mature as that of Java - I mean IDE, debugging, and so on. Meanwhile, in .NET land, I have first-class lambdas complete with type inference in C#, so the question of support doesn't even enter into it - it just works.

  • 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:2, Insightful)

    by tomhudson ( 43916 ) <barbara,hudson&barbara-hudson,com> on Saturday March 21, 2009 @04:37PM (#27281845) Journal

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

    Okay, I've seen this a few times in this discussion, and have to ask "why not?"

    If you're doing it in java, the multi-threading is essentially free - it's built in.

    If you're doing it in c or c++, there are enough examples on the net on how to use threads, and enough sample code, to get you started.

    If you can't get your head around threads, your only other option is stateless code - might as well just learn php and write web apps.

  • Re:Mod parent up (Score:3, Insightful)

    by ahabswhale ( 1189519 ) on Saturday March 21, 2009 @05:09PM (#27282145)

    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 and so will your employer. You never stop learning in this profession but the initial load is usually pretty intense so brace for it.

    One final bit of advice...
    Do not worry about compensation at all. The best thing you can do is to find a place that has great mentors and a great environment. You want to come away from your interview with the impression that these people know what they are doing. Most developers are defined by their early experience and if it sucks then they tend to suck through their career (at least that's what I typically see in my many years in this business). Once you get good, the money will come later (trust me).

    Good luck to you and welcome to the wonderful world of bit twiddling!

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

    by Gorobei ( 127755 ) on Saturday March 21, 2009 @05:26PM (#27282317)

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

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

  • Re:Visual Basic. (Score:3, Insightful)

    by Dahamma ( 304068 ) on Saturday March 21, 2009 @06:08PM (#27282695)

    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!

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

    by Gorobei ( 127755 ) on Saturday March 21, 2009 @06:37PM (#27282931)

    My multi-threaded banking app blew up this week: Euros magically turned into an instance of some random user class.

    A big banking app (I'm assuming derivatives trading rather than retail batch processing) probably has a 20 million LOC code base from 3 or 4 source languages and several hundred developers. Pure java, etc, is not an option.

    There are probably only a few hundred programmers in the entire word that I would trust to multi-thread these types of apps, and even then, it's usually cheaper to just spin up another compute farm and have people refactor the apps to work nicely in a distributed fashion.

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

  • 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:You're nuts! (Score:3, Insightful)

    by JoeMerchant ( 803320 ) on Saturday March 21, 2009 @10:40PM (#27284825)

    I've totally lost count of how many languages I know...but a quick count says it's at least 30.

    (sarcasm)Did you applied for a position at my company last week? Expert in 30 languages, diverse technologies too...(/sarcasm)

    I have used 30+ "languages" in my life, but there's a world of difference between using and knowing in depth. Anyone who presents themselves as "expert" in more than a half-dozen evolving technologies has revealed a great deal about what a low standard they hold for an "expert" ranking.

  • by marcosdumay ( 620877 ) <marcosdumay&gmail,com> on Saturday March 21, 2009 @10:59PM (#27284921) Homepage Journal

    While you can pretend something at the C/C++ stack, at Java or C# you'll be forced to use the heap. If you don't understand how the heap works, you'll never understand what your code is really doing.

    And, yes, the heap will be completely hidden from you. But that only makes it harder to learn and understand it, not less important.

  • Easy doesn't pay (Score:2, Insightful)

    by stormcoder ( 564750 ) on Sunday March 22, 2009 @12:40AM (#27285513) Homepage Journal
    Most software is still embedded. Combine that with, any joker can become competent with Java or C#. There are a lot of low paying jobs dealing with Java or C# that you see advertised. Competent C and C++ developers are harder to find and consequently earn more money. I constantly am getting calls from recruiters looking to bring me in on C/C++ jobs, especially, for medical devices and military systems. This stimulus bill that Captain dumbshit just rammed through the legislative branch contains a lot of funding earmarks for medical and military. So I expect that this trend will only increase. Get familiar with the MISRA coding standard and understand how to design reliable systems in C and C++.
  • 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 kabloom ( 755503 ) on Sunday March 22, 2009 @01:30AM (#27285841) Homepage

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

  • by Anonymous Coward on Sunday March 22, 2009 @05:48AM (#27286693)

    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.

    That is pure 100% BS. I work for a large insurance company, we are one of the worlds largest public insurers, w/ a $3billion annual IT budget. We use all the tricks J2EE knows especially stuff like polymorphism and inheritance, two of the most powerful tools of OO.

Remember, UNIX spelled backwards is XINU. -- Mt.

Working...