Slashdot Mirror


Programming Language Specialization Dilemma

aremstar writes "I'm a final-year Computer Science student from the UK. During my studies, we covered 3 programming languages: C, C++ and Java. The issue is that we didn't cover any of these languages in sufficient depth for me to claim that I have commercial-ready experience. It's one thing being able to write simple programs for class assignments, but those are quite different from writing something as complex as the Linux kernel or a multi-threaded banking app. I'm thinking of spending a few weeks/months studying in order to specialize in one of those languages. Fortran also entered my consideration, as it is great for numerical computing and used by many financial institutions, banks, etc. In terms of skill requirements in job ads, my (brief) experience suggests that most programming jobs require C++, with Java a close second. C — unfortunately — doesn't appear as much. My question is: if you were in my shoes, which language would win your time investment? My heart suggests C, with a little bit of Fortran to complement it, but I'm a bit worried that there might not be enough demand in the job market."

569 comments

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

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

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

    --

    Do daemons dream of electric sleep()?
    1. Re:Good News! by Anonymous Coward · · Score: 5, Insightful

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

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

      Learn three things and you'll be fine.

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

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

    3. Re:Good News! by SirYakksALot · · 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.

    4. Re:Good News! by rossifer · · Score: 5, Interesting

      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.

    5. Re:Good News! by Anonymous Coward · · Score: 0

      I agree

      Additionally, you don't specify what kind of computer science degree you're getting, but in my case: computer science != programming.

      The design patterns, algorithms, data structures etc. are probably much more important. Knowing how to correctly apply those is much more valuable than being able to code 1000 lines a day.

      Finally, if you really are getting a computer science degree and not a programming degree, I'm a bit worried it didn't include some of the "stranger" languages such as functional languages, or logic languages. Not necessarily in a level that you're able to fluently program in them, but more than enough to open your eyes about alternative ways to solve problems. That significantly improves your programming in "normal" languages such as Java and C++ as well.

    6. Re:Good News! by interstellar_donkey · · Score: 5, Funny

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

      --
      The Internet is generally stupid
    7. Re:Good News! by Anonymous Coward · · Score: 0

      Sage advice to be certain. Something else to remember is that, and I'm going to be very unpopular for stating it, learning anything related to programming a computer in college is just wasting your money. You could have saved 3 years and thousands of dollars by buying a few programming books, picking up a compiler/interpreter, and then programming some examples.

      I wasted 2 semesters at DeVry before I realized that no college that cost under $10,000/semester was going to teach me anything that I couldn't learn on my own better(and this is the important part) BEFORE a textbook came out on the subject for my degree. I mean it was 1988 and the bastards weren't going to teach us C, which was the hot programming language at the time. WTF!?!? I'd be a fucking idiot if I continued there. And for the record, back then it was $3800/semester to attend there so I know I was getting ripped off.

      Seriously, at this point I have spent less on learning over 125+ languages than I spent on 1 semester of college. And I made $125+/hr while they were still doing minimum wage and paying for school.

      OR, you could have that piece of paper that really doesn't get you as far as you would like to think.

    8. Re:Good News! by Hooya · · Score: 3, Insightful

      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.

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

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

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

    10. Re:Good News! by Hooya · · Score: 1

      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?

    11. Re:Good News! by Anonymous Coward · · Score: 1, Funny

      That is the most +1 Insightful thing I have ever said. Mod parent up.

      I know what you're thinking, how could I be my parent? It involves a condom and a timemachine and I don't like talking about it.

    12. Re:Good News! by MrCrassic · · Score: 1

      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.

    13. Re:Good News! by dgatwood · · Score: 4, Interesting

      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.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    14. Re:Good News! by Tanaka · · Score: 1

      I agree with this. Easier to get a job with C# skills, and it's future is looking very strong, with mono, silverlight making ground.

    15. Re:Good News! by m.ducharme · · Score: 1

      Indeed. When I took comp sci 15 or so years ago, we did Pascal, Modula 3, Scheme, and an emulated assembler, all by my second year, after which I gracelessly washed out (combinatorics was my ultimate downfall). By second year I'd learned enough about several different language groups that I was able to help the science majors with their FORTRAN homework, without ever having studied the language. If you've graduated a decent Comp Sci program, you should have learned how to pick up the basics of any language, fairly quickly.

      --
      Rule of Slashdot #0: You and people like you are not representative of the larger population. - A.C.
    16. Re:Good News! by Anonymous Coward · · Score: 1, Insightful

      Learn to RTFM, the rest is BS.

    17. Re:Good News! by thhamm · · Score: 1

      1. Learn how to say "I'm not sure"

      i think that's the most important attitude, and he seems to have it. i know so many 'programmers' who think they're some kind of professional geniuses worth a million bucks because of some simple assignments they've done. some good grades seem to prove this for them. some of them are so 'good' to the point where they go searching for bugs in gcc, libc, kernel, whatever, though they just made some common mistake - like we all do - but see their debugger pointing at something else. i had people explaining me their code is correct because no tripped segfaults prove that it's correct.

      this all gets really stupid if they're so lazy they don't want to learn from more experienced guys. (just look at those fscking EXT4 bashing threads recently)

      just don't be like that. i wouldn't even dare claiming i am an expert or even good C/C++ coder. the only thing i would claim is that i am getting better and gaining more experience by the day. keep on learning, i'd say is the most important issue here.

    18. Re:Good News! by vux984 · · Score: 2, Interesting

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

    19. Re:Good News! by Anonymous Coward · · Score: 0

      It's also not THAT much different from Java.

    20. Re:Good News! by Anonymous Coward · · Score: 0

      If I bashed Microsoft all I wanted then I would have no energy for anything else :)

    21. Re:Good News! by metamatic · · Score: 2, Funny

      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?

      --
      GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
    22. Re:Good News! by Anonymous Coward · · Score: 0

      Looking at the UK job market, it is scary just what they expect recent graduates to be able to do.

    23. Re:Good News! by micheas · · Score: 2, Insightful

      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.

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

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

    25. Re:Good News! by Z00L00K · · Score: 1

      C, Java and Erlang.

      The step between Java and C# is not that bad, but be aware that a too strict focus on Microsoft platforms can also be a risk in the long run.

      Specialize in trying to learn how to be portable between platforms.

      Fortran isn't a bad language, but it's used only in specialized applications. It has some advantages in multi-core solutions provided that the compiler supports it.

      Erlang is an interesting language to know, and is probably more useful than you first realize.

      But what's important to learn is how to break down a problem into components. This regardless of programming language. Writing everything in one humongous block of code makes it hard to follow and maintain.

      And make sure to learn tools like splint (for C) and FindBugs (for Java) and to understand the responses they give. This will be a learning experience in how to write code that has a low bug percentage. These tools doesn't protect you from strategic faults and system design faults, but it can catch a lot of those pesky errors that can cause problems at inconvenient moments in the future.

      Learning to program is learning a strategy. It takes years of experience before being good, and only a few can be excellent. And even the excellent developers are making mistakes.

      What's important is also to avoid getting stuck in a certain sector, make sure that if you have skills like Fortran and Cobol, don't promote them too much or you will be known as a Cobol programmer and be overlooked when trying to find new interesting jobs.

      Another perspective in selecting languages to learn is the availability of useful development tools. Java has Eclipse and a lot of other additional tools and plugins to help the programmer. C isn't that well supported, but it's a simpler language from some perspectives and there still exists tools like splint and PurifyPlus.

      Forget about which language that has the largest amount of libraries. A huge amount of libraries is like a huge forest, it's easy to get lost. But you shouldn't avoid a language on this criteria. Some languages doesn't need huge libraries as much as other languages do.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    26. Re:Good News! by iapetus · · Score: 3, Informative

      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.

      --
      ++ Say to Elrond "Hello.".
      Elrond says "No.". Elrond gives you some lunch.
    27. Re:Good News! by zefram+cochrane · · Score: 2, Interesting

      Parent has a good point. I have taken my fair share of programming coursework, but learned most of my current skill-set on my own. This did not include C#, but did include C++, Java, Perl, Python, and Fortran. When interviewing for a job, these languages interested the company. However, when they came back with an offer, it was for coding in C# for a particular need they had.

      If you already know a bit of C++ and Java, C# is not difficult to pick up, and is used heavily with the .NET environment in many businesses today. I'll be the first to admit...as a diehard Mac/Linux user, it hurt to have to program for the Windows environment and using M$ tools...but it's really not as bad as I originally made it out to be.

      Also important, is to realize that no company that will be hiring a graduate straight out of a BS/BA will expect them to be able to write a massive program immediately or on their own. Most programming houses will have you working in a development team, of which you will slowly integrate, and will only be working on small pieces of a much larger program.

    28. Re:Good News! by Anonymous Coward · · Score: 0

      Except that OP is in the UK, so won't be paying for hardware with dollars, and won't be writing a resume.

    29. Re:Good News! by Anonymous Coward · · Score: 0
      A real college does not try to teach you programming languages. They try to teach you concepts and theory, illustrated with a particular language only because you have to use something.

      Devry is not "college". It never has been or will be. It's "career education" that trains (not teaches, trains) you to perform certain entry level tasks.

    30. Re:Good News! by micheas · · Score: 2, Funny

      So buy with Pounds and pad the CV.

      Unfortunately that requires paying with real money instead of dollars.

    31. Re:Good News! by ILuvRamen · · Score: 1

      If you're going to learn C# you might as well learn VB.NET and ASP.NET too because I always see that on job listings too. It's hard to practice ASP.NET yourself because who the heck owns a windows server available to them? But VB is really easy. Everyone hates on it because it's "not real programming" or some other BS like that. Look, I learned real programming, you learned real programming, so let's learn VB. I'm an absolute VB.NET expert because that's what modern companies use to develop non-critical, non-backbone apps fast. If you don't know it, you're only going to get jobs with out of date companies that still write all their apps in C++. When you have to trick the programming language just to use strings as a datatype, it's time to update to a younger programming language. With VB you can add and subtract time in one line. How many lins of code does that take in C++? So that's what most companies are switching to simply to save development time even though the apps are bulky, use a lot of memory, and run slower.
      What the major problem is that you went to one of those long term colleges that teach programming theory and then you graduate and have no idea how to actually program in real life. You need to have the background on how it works but seriously, you need to learn a commonly used language solidly too so you can do something other than teach a programming class. I on the other hand took programming basics in high school with C++ and we learned all about how programming really works. Then I repeated that type of class in the 2 year technical college I went to and then had 3 semester of intro to VB, intermediate VB, and advanced VB. I'm not some spoiled programmer that only learned VB and doesn't even know how variables work or how objects work behind the scenes, etc AND I can throw together some seriously awesome apps really fast. A few months after I graduated, I wrote an entire XML to 3rd party database translation application that's fully automated and meant for the most basic, non-geeky user. It works perfectly, looks great, has a good, efficient design, and I wrote it all in a month. Now a huge number of agility events in the US (the thing with the dogs on ESPN) use my software along with my boss' online signup program that creates the XML file. That's right, I as a 2 year college graduate that specialized in VB put together a nationwide software solution months after graduating. In fact, you may want to consider taking some VB or other modern language classes at a technical college instead of learning it on your own. I've heard that most 4 year college graduates around here have to come to my college to get trained in actual programming because their college only taught theory and they kept getting fired from jobs for sucking at actual programming :P

      --
      Google's Super Secret Search Algorithm: SELECT @search_results FROM internet WHERE @search_results = 'good'
    32. Re:Good News! by Anonymous Coward · · Score: 4, Insightful

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

      Learn to think.
      Learn the concepts.

      Take the comparative programming classes.

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

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

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

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

    33. Re:Good News! by tomhudson · · Score: 1, Insightful

      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.

    34. Re:Good News! by digitig · · Score: 1

      Another possibility if you have good skills in math and logic (and don't mind working with folks with crew-cuts) is to learn about formal methods and go for Ada. Mission-critical software (at the level of criticality where you have to use formal methods) is a small niche, but not many can do it so if you turn out to be one of the few that can then it may be worth a look.

      --
      Quidnam Latine loqui modo coepi?
    35. Re:Good News! by Anonymous Coward · · Score: 0

      4. Learn how to READ code. Not step through it with a debugger, but READ code and understand what it does. Go grab a decent size project from sourceforge or whatever and just READ the code. Write down what it does. Then build it and runit and see if you're correct.

      People tend to gloss over the skill of just READING code, but don't let them sway you. It's a real skill and you should become proficient at it as soon as possible.

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

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

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

    37. Re:Good News! by Gorobei · · Score: 1

      It is depressing, and also very true.

      "Programmer" covers a wide range of skills, just like "lawyer." It is absurd to think the B-grade in-house counsel is suddenly going to morph into a expert free-speech supreme court advocate, and it's absurd to think a code-monkey struggling with C++ syntax really thinks about micro-kernels in her spare time.

    38. Re:Good News! by pipatron · · Score: 1

      In the first, you have to be better than 4500, the latter you have to be better than 45.

      --
      c++; /* this makes c bigger but returns the old value */
    39. Re:Good News! by Alexandra+Erenhart · · Score: 1

      I'd hope his college/university/whatever taught him exactly what you're saying. At least when I went to university, they taught me C as a base to understand how programming works, the logic behind it, and the basics of designing/writing/testing&debugging. From there, all the programming languages are really the same, with their own little differences. Like some other posted in here, knowing a standard programming language (C for example), some UML, SQL, and how to write a program, really puts you in a position to learn absolutely anything else. I'm glad my courses did teach me that

    40. Re:Good News! by Gorobei · · Score: 2, Insightful

      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.

    41. Re:Good News! by SlashV · · Score: 2, Funny

      Considering your logic, he's already ahead of one !

    42. Re:Good News! by Anonymous Coward · · Score: 0

      Asking for help is good, but you should always remember that it's best if you only ask a question once. Remember to be considerate with your peer's time. It all comes down to paying attention when you make the questions, asking for clarifications if necessary, taking notes, and showing them you appreciate their help by trying not to make them same questions over and over again.

      Of course it also depends on how long you've been at the job. A newcomer is always expected to make many many more questions than an old timer.

    43. Re:Good News! by Anonymous Coward · · Score: 0

      I'd agree about DeVry not teaching but I've seen courses at other "real" colleges and sadly they are no different. A friend went to the local university and was taught all sorts of "concepts and theory" but still can't program BASIC. He spent 7 years there and now what does he do? He's the tech support guy for my ISP and I don't mean he's a field tech..I mean if I need my RDNS changed or the like, I call him and I put in a ticket for someone more knowledgeable to handle it.

    44. Re:Good News! by VGPowerlord · · Score: 1

      Pssh, what are you on? Microsoft doesn't like dog food!

      No, seriously, off the top of your head, name two (non-Research) applications Microsoft writes that require the .NET framework to run.

      --
      GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
    45. Re:Good News! by ClosedSource · · Score: 1

      On the other hand, most kernel programmers don't know how to put up a decent user interface and may be clueless about relational databases.

      It doesn't matter either way. There are all kinds of skills needed for a project and it's meaningless to try to rank them.

    46. Re:Good News! by arevos · · Score: 1

      At least when I went to university, they taught me C as a base to understand how programming works, the logic behind it, and the basics of designing/writing/testing&debugging. From there, all the programming languages are really the same, with their own little differences.

      You're not very familiar with a wide variety of programming languages if you think that. It's true that many languages are conceptually similar to C, but there are many more that are very different from it.

      For instance, in C you might write a factorial function like:

      long factorial(int n) {
          long f = 1;
          for (int i = 2; i <= n; i++)
              f *= i;
          return f;
      }

      Whilst in, say, Factor, you'd write it:

      : factorial ( n -- n! )
          1 [ 1+ * ] reduce ;

      Or in Haskell:

      factorial = product . enumFromTo 1

      Still think programming languages only have small differences?

    47. Re:Good News! by ClosedSource · · Score: 1

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

      All you need to know about Lisp is that you must agree that it's the greatest language ever. Anytime there is an argument about a programming language feature just say "Lisp had that years ago". It doesn't matter if it's true or not - most of your coworkers are faking it too.

    48. Re:Good News! by dossen · · Score: 1

      Well, just off the top of my head... Anything using the Sharepoint framework would be CLR code (I can't say if it's pure or not - but that hardly matters, the point of being able to have both managed and unmanaged code is to use what's right for the job). That would be products like Office Sharepoint Server and Team Foundation Server.

    49. Re:Good News! by iamflimflam1 · · Score: 1

      0. Learn how to use Google. That way you won't waste people's time by asking them questions that have been asked millions of times already.

      --
      "Some days even my lucky rocketship underpants don't help."
    50. Re:Good News! by ClosedSource · · Score: 1

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

      I wouldn't call it free, but it is built in. In the sense that all java-based GUI apps are multi-threaded whether you want them to be or not.

    51. Re:Good News! by sdhoigt · · Score: 1

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

      Isn't the order more like 3-1-2 for a college graduate? ;)

    52. Re:Good News! by mgessner · · Score: 1

      Your answers are correct, but they don't address the OP's question.

      When the company is looking at a resume, they're not going to know anything about the applicant's ability to ask those three questions.

      OP: I do embedded systems, which are all in C or C++ (in Europe, I'm told Ada is popular in some areas). My windows developer friends all do C#/.Net, and/or C++.

      --
      "Sometimes the truth is stupid." - Lawrence, creator of Prime Intellect
    53. Re:Good News! by lucifron · · Score: 1

      C#? Really..?

      According to tiobe, Java, as well as C++, beats C# and VB combined..

      http://www.tiobe.com/content/paperinfo/tpci/index.html

    54. Re:Good News! by RupW · · Score: 1

      No, seriously, off the top of your head, name two (non-Research) applications Microsoft writes that require the .NET framework to run.

      SQL Server Reporting Services is almost entirely .NET. SQL Servers 2005+ have .NET components. Visual Studio has .NET components. The newer Microsoft Dynamics apps. PowerShell, if that counts, is also entirely .NET. As the other guy said TFS - I don't know about SharePoint.

      Most of Microsoft's stuff is not new products, they continue to develop existing lines like Office or Exchange. There are huge legacy codebases behind those - it doesn't make sense to go back and port them to .NET. New stuff they write in .NET - there just isn't that much high profile that's entirely new.

    55. Re:Good News! by RupW · · Score: 1

      It's hard to practice ASP.NET yourself because who the heck owns a windows server available to them?

      Who needs a windows server? You can host ASP.NET apps in Apache. Visual Studio 2005+ comes with a lightweight testing web server that runs ASP.NET. (I expect the free Visual Studio does too but I don't know for sure.) And if you must have IIS then XP Pro comes with IIS (albeit with connection limits) as does Vista Business or better.

    56. Re:Good News! by Quothz · · Score: 1

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

      It's only a better deal if you're good. The 50-applicant pool is likely to have a narrower bell curve and fewer high-quality applicants. Someone in the top 1% overall would be equal to 50 from the first pool, and possibly one person from the second.

      Of course, there's other factors involved, but broadly speaking, a high-ability person can stand out more easily in a niche.

    57. Re:Good News! by Jack9 · · Score: 1

      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.

      There's no evidence of an adequate number of applicants yet...primarily indicated by the large number of postings. Few people choose C#, but there is plenty of work if you know it to any degree.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    58. Re:Good News! by Anonymous Coward · · Score: 0

      The only thing it expects you to do is to solve their problems... which I hope you can do. Programming languages should be a piece of cake if you understood your courses.

    59. Re:Good News! by tomhudson · · Score: 1, Informative

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

    60. Re:Good News! by sketerpot · · Score: 1

      Writing a basic kernel is really not as hard as it sounds. The trouble comes if you want a more elaborate kernel, that supports a variety of hardware, and does this with a minimum of bugs, and is secure. I recommend writing a kernel, actually. It's pretty fun.

    61. Re:Good News! by Gorobei · · Score: 1

      I assumed that "banking app" was shorthand for "high-performance, complex app." Maybe the OP just meant an end-of-day retail banking job, and, if so, your comment about it being trivial to multi-thread applies.

      I also assumed it referred to derivatives trading because that's where banking runs into the issues under discussion. Maybe I'm just naive and somehow missed a giant area of compute complexity in banking, but I'm pretty sure that is not the case.

    62. Re:Good News! by JoeMerchant · · Score: 1

      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.

      I'd focus on developing portable skills, rather than narrower focus languages like C#, objective C, etc.

    63. Re:Good News! by tomhudson · · Score: 1

      I don't know ... the issues in the article were computer languages and jobs. A lot of people tossed in the "multi-threaded banking app" as an example, when it's totally bogus. An explanation about financial derivatives - there's no multi-threading required. You can (and people do) do it with a spreadsheet.

    64. Re:Good News! by whosaidanythingabout · · Score: 1

      I would put it a bit differently. In school you are actually learning how to learn efficiently. If you ever lose the desire to learn you will be left behind. Hopefully you have learned the 3 points of the parent post already. In addition you should have the desire and the capability to learn and create on your own.

      I am not a programmer by degree and have a grand total of 1 credit hour of formal programming from my engineering school. In 20 years since graduation I have used C, C++, FORTRAN, VB, .NET, VBscript, Perl, Python, PHP, HTML, SQL, Java, numerous shell languages and so on. I would say the most important ingredients are

      1. the desire to learn
      2. interest in the solution

      For you, with programming being your primary occupation, this learning will hopefully be faster paced. You will find that once you have become proficient in several languages that the others become easier to learn. Then your responsibility is to determine which tool is most appropriate for the task. The one skill that I find is used more than others is SQL. This one language will be used over and over with other languages and is very important in a wide variety of user facing applications.

      When starting out you should look for a company that is developing software that interests you. If you are writing code for something that does not interest you, you will soon be bored and lose the desire to learn as you should. In some cases this may be a necessity in order to make money and gain experience but job hopping will become tiresome as well. Ultimately you want to gain expertise in programming and in a field of interest to you. When this comes together you have a greater opportunity for longterm success.

    65. Re:Good News! by marcosdumay · · Score: 1

      That's maybe news for some people, but the law of big numbers only work for numbers that are big.

    66. Re:Good News! by Gorobei · · Score: 1

      Hmm, citing Cato on derivatives is like citing my 4 year old on cats: yes, you'll get a strong opinion, but it won't be very useful to you.

      Last week we added >1K cpus to our derivatives pricing compute farms. We'd love robust multi-threading. We'd love a ton of other things too. At the end of the day, the markup needed to sell exotic derivative X is strongly related to cost to simulate X's behavior in millions of possible worlds. I've had discussions were I tell the sales/trading team a single sale is going to cost them $100K/year in compute power just to track risk. If I could say $50K/year through multi-threading, they would get much happier.

    67. Re:Good News! by marcosdumay · · Score: 1

      "It doesn't matter if it's true or not"

      It is true, for any feature that you think of. Lisp is made in a way that makes it so. But of course, every programmer uses that feature by a different syntax.

      If you tought C++ or Perl had too many paths to solve a problem, you won't be at bed with Lisp's infinite ways.

    68. Re:Good News! by Anonymous Coward · · Score: 0

      For low values of kernel, maybe. Did you ever take a look at Linux 0.0.1? It's hardly what I'd call "complete".

      You can make the kernel version "Hello World!" within an afternoon, within 20 minutes if you take the hack route.

    69. Re:Good News! by tomhudson · · Score: 1

      Guess you missed the story about how, for several years, one trading house has been using the wrong figures in deciding their derivatives trading because of a simple cut-n-paste error ... and how, when they found out, their reaction was "oh well."

      I've had discussions were I tell the sales/trading team a single sale is going to cost them $100K/year in compute power just to track risk. If I could say $50K/year through multi-threading, they would get much happier.

      You seem to misunderstand the nature of multi-threading. It doesn't reduce the number of cpu cycles you need - it just allows you to do stuff in parallel, so that you can spread the same workload to more cpus, or handle more than one task at a time. There's additional overhead for threading, so the total number of cycles to complete a single set of calculations, divided among many threads, is more, not less. Being able to spread the workload among multiple cpus means you finish sooner, not that you've saved compute cycles.

      Take monte carlo analysis - 1,000,000 threads each doing one simulation, instead of 1 thread doing all 1,000,000 simulations, won't save you any time if they're all on the same core. Spreading it out to a compute farm will let you finish the task quicker, but the expense (in terms of cpu cycles) is still the same, so your cost is the same. And of course, there are some portions that won't be possible to parallelize (same as if it takes 9 months for one woman to make a baby, it won't take 1 month for 9 women to make a baby).

      BTW - I chose monte carlo analysis because we now know it's actually a good example of GIGO - garbage in, garbage out - when it comes to financial analysis. Instead of being a method to "brute-force" the calculation of risk, it turns out to be dependent, like pretty much everything else we try to calculate, on the original assumptions. It only seems to work because everyone plays pretty much by the same rules, with the same underlying assumptions, and much of the time, these assumptions are "good enough." Same as with the original use wrt the original use in the design of the A-bomb. If the original assumptions hadn't been reasonable, educated ones, it wouldn't have worked. Ultimately, you want to come up with a price - a single number - and this is a serious problem, because that number is susceptible to the underlying assumptions being wrong at least some of the time, and possible wrong enough to be catastrophic in outliers. We've now learned that, contrary to our assumptions, hedging doesn't reduce risk when the risk is spread too widely, and is too large. Excessive hedging and derivatives formulation does exactly that - it removes the natural firewalls that prevent the "house of cards" of cascading failures, and results in positive feedback loops that are unrelated to the actual underlying markets. The real problem, of course, is that it's still easier to make a buck arbitrading risk than it is to actually produce something of value.

    70. Re:Good News! by Gorobei · · Score: 1

      You sound like an intelligent person opining on a topic you know nothing about. I'm sure you wow the crowd at the local Olive Garden.

    71. Re:Good News! by tomhudson · · Score: 1

      ... and you've already proven that you have no clue as to how multi-threading actually works, which is what this whole thing is about.

      As for the rest, I think that the current financial crisis has proven the emperor has no clothes.

      Some hedging makes sense. What has been going on for the last decade, doesn't. It's a work of fiction that too many bought into, same as rating sub-prime (or any) mortgage as AAA. WTF would ANY mortgage be rated triple-A when RE prices go into cyclical declines all the time? Oh, right, the "numbers" said otherwise. The more degrees of separation of a derivative or hedge from the underlying product, the more likely that it's not realistic. Eventually, the luck runs out, an outlier event happens, or someone gets a serious case of the shorts. While the odds for any one time period are small, over a longer period of time, it approaches certainty.

      For another example, look at the futures market for energy last year. Steve Jobs wasn't the only one running a reality distortion field.

    72. Re:Good News! by Gorobei · · Score: 0, Redundant

      You want to actually quote a statement I made about multi-threading that was incorrect?

      Feel free to assert my lack of understanding about multi-threading. Feel free to explain how you are the expert on exotics. Guess it's good to keep your mind occupied between making the customers' lattes.

    73. Re:Good News! by khellendros1984 · · Score: 1

      And in Prolog:

      factorial(0,1).
      factorial(N,F) :-
      N>0,
      N1 is N-1,
      factorial(N1,F1),
      F is N * F1.

      Prolog's one of my favorite languages to point out when I'm told that all programming is essentially the same.

      --
      It is pitch black. You are likely to be eaten by a grue.
    74. Re:Good News! by ultranova · · Score: 1

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

      Java's multithreading support is about the same as pthreads in C/C++ - easy to use, but make a single mistake in synchronization and it'll either deadlock or corrupt data.

      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.

      But a banking app is inherently stateful - your account has a certain balance, for example. Database can help with synchronizing, but that too requires you to understand the possible problem areas - and that, in my experience, is where the biggest problems happen: people simply don't comprehend that there could possibly be a problem in whatever "clever" synchronization-avoiding solution they come up with.

      That's what causes the most problems in multithreaded apps (and perhaps in apps in general): some programmer thinks he's being very clever, and being very wrong.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    75. Re:Good News! by khellendros1984 · · Score: 1

      I just recently started working (10 months ago, now), and that is exactly what I do. Don't know how? Try to figure it out for a bit, but know when to admit defeat and ask someone who's a bit more experienced. My employer was pleasantly surprised when I started producing useful code after just a month or two working. I attribute that to the way I jumped into the work, asked when I got stuck, and picked up the things I needed to know as quickly as possible.

      --
      It is pitch black. You are likely to be eaten by a grue.
    76. Re:Good News! by Hognoxious · · Score: 1

      1. Learn how to say "I'm not sure"

      In an ideal world, yes. In the real world, that can get you fired and replaced by an Indian. He doesn't know either, he's on the phone to his mates but since nobody understands him they don't realise that's what he's doing.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    77. Re:Good News! by pete23 · · Score: 1

      As the technical owner of a realtime derivative pricing service in a large investment bank, i can report that graduates are perfectly capable of doing work in complex multithreaded applications! obviously, the right level of support, review and testing needs to be in place, but when doesn't it?

      technology stack - lots of java for middle tier business logic and distribution, C++ for core pricing algorithms.

    78. Re:Good News! by borroff · · Score: 1

      Whenever I see people advising functional languages as a means to expanding one's programming experience, I always see Lisp, Haskell and Erlang. Everyone seems to ignore Ocaml and F#. In particular, with many commenters advising .Net exploration, I'm surprised F# doesn't come up more often. A bunch of Microsoft's financial extensions to Excel are written in F#. Many F# programs are valid Ocaml.

      I don't have a dog in this fight, but find it curious that these two languages are mostly omitted.

    79. Re:Good News! by Anonymous Coward · · Score: 0

      Actually I have to disagree with this. During the 3rd year (of 4) of my university course we had to do a 6 month industrial placement. During this placement students in the past have, for a wide variety of companies from banks to industrial systems manufacturers to games developers, written code for the linux kernel, written applications that became microsoft flagship products and even spent their entire placements optimising a company's portfolio of software.

      If you come out of a computing course I think you are often expected to be capable from the off. I have come across numerous people that are now writing code in banks that did not do computing courses, these are the people that nobody expects to jump right in.

      On the question of which language, I have to agree with some of the comments below. Learn C and C++ well, not to the point of writing fancy code that nobody understand, although you at least should have the knowledge to understand somebody elses flamboyant style. If you have those two under you belt you will be able to adapt to most of the other main languages pretty quickly.

      I would suggest adding to that python and learning how to use linux inside out and back to front (my distro of choice is ARCH as it gives you the control of Gentoo without waiting hours for some of the larger apps to compile). There is a shortage of skilled linux sys admins and for a lot of companies who maintain a few linux servers this is a big plus (and also commands a higher salary).

      I may get flamed for this but I would also suggest learning php and how the apache server works. There are a lot of opportunities out there for good php developers and based on the languages you know already it will take you all of no time to get the basics in your head.

      Stay well away from fortran, it may be useful but it's day is past. Any company out there still using it tends to want mission critical software written years ago to be maintained and they are not going to put a graduate programmer on it.

      On a side note, I'm very suprised that your university only taught you those 3 languages. At my university most non-computing degrees would be made to learn those languages. For the computing course we have to learn, on top of those, assembly, ANTLR, prolog, haskell, php, javascript, matlab (optional), SQL, bash scripting, UML and XML, just to name a few. On top of this we have a second year project to write an out of memory process killer and a swap disk block device driver for the linux kernel.

      My final suggestion can only be look to get into a financial company. You will work a lot harder than in a tech company but the banks do seem to expect slightly less of your abilities as a graduate.

    80. Re:Good News! by TheTurtlesMoves · · Score: 1

      We had the same policy. Even to the point we would hire physics and Math grads over Comp Sci majors.

      --
      The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
    81. Re:Good News! by Anonymous Coward · · Score: 0

      With VB you can add and subtract time in one line. How many lins of code does that take in C++?

      With a Time class and overloaded add and subtract operators you can do it in one line in C++ too.

    82. Re:Good News! by tomhudson · · Score: 1

      Already did -

      I've had discussions were I tell the sales/trading team a single sale is going to cost them $100K/year in compute power just to track risk. If I could say $50K/year through multi-threading, they would get much happier.

      Multi-threading doesn't reduce the cost of a computer run - it's like hiring 10 painters for 1 day instead of 1 painter for 10 days - the cost is the same (actually, the "multi-threaded" painting costs more, because now you have to coordinate activities, and you need more drop-clothes and paitbrushes and rollers, instead of just moving them from room to room - there's more overhead with threaded approaches).

    83. Re:Good News! by Gorobei · · Score: 1

      Hmm, you seem to have problems understanding "if" statements. I guess UNC only teaches those in post-grad.

    84. Re:Good News! by ClosedSource · · Score: 1

      Well, done!

    85. Re:Good News! by vux984 · · Score: 1

      It's only a better deal if you're good.

      Most people aren't especailly good. Half of them are below average. So this advice only benefits the statistical outliers? The people who don't need help getting a job anyway, because they are probably choosing from multiple offers already?

      Of course, there's other factors involved, but broadly speaking, a high-ability person can stand out more easily in a niche.

      A high ability person is going to be fine anywhere.

    86. Re:Good News! by Anonymous Coward · · Score: 0

      MS actually did the right thing with C# and involved a number of the key C++ players in its design,.. hence it does not suck much at all. Also it is largely a transliteration of Java (with a little of the cruft removed) so they could hardly have gone wrong anyway.

      So, C# is a fine language and probably the best one to learn if you want to make money (Python is far better if you want to enjoy your life).

      The real point is learn to "program" and the language is ALMOST inrelevant. Plus, some problems are well suited to certain languages.For example PHP is tailored to web programming whilst ASP.NET tries to bend HTTP traffic to look like an event-driven programming model, hence for web work PHP is almost always the better solution.

    87. Re:Good News! by tomhudson · · Score: 1

      Well, if you wish to continue in this vein, your lack of understanding of context is "interesting", for values of "interesting == 0".

      Otherwise, why mention multithreading and cost-savings in the same sentence? Do you always talk in non sequiturs?

    88. Re:Good News! by Gorobei · · Score: 1

      "interesting", for values of "interesting == 0".

      Normal people use quotation marks for a reason. You seem to use them like little girls use hearts instead of dots.

      I don't really understand your passive-aggressive attitude. It's perfectly fine to be second-rate. We, as a society, need people like you to teach XML, make our lattes, and mow the lawn. Work hard, go home, drink a domestic beer, and be thankful for your $50K/year.

    89. Re:Good News! by tomhudson · · Score: 1

      Don't like it when you're caught in your bullshit, do you? You don't really understand your own job, and you got caught out in a tech forum trying to BS your way with buzzword bingo. You don't understand multi-threading, you don't understand the problem of "initial conditions" in any form of analysis, and you haven't yet given a single reason why any of what I've pointed out is wrong.

      We, as a society, need people like you to teach XML, make our lattes, and mow the lawn. Work hard, go home, drink a domestic beer

      I don't know what "society" you come from, but I'm sure I'm not a part of it. My domestic beer is quite drinkable compared to, say, what you find in the US. As for XML, after a quarter-century in the business, I have yet to see a case where it actually brings anything to the table that can't be done better, quicker, and more dependably with other techniques. Lattes? Never made or drank one, never will.

      Now, back on-topic ... instead of being a poseur, why not explain how, in your dimension, multi-threading somehow can be expected to reduce the number of clock cycles and expense by half when running a horde of simulations? Or just fuck off like a good little fraud. Stop trying to run with the big dogs and go back to your momma's basement.

    90. Re:Good News! by Gorobei · · Score: 1

      Lattes? Never made or drank one, never will.

      Glad you're so open to new experiences. Get back to your 7-11 counter and stop bothering the intelligent people.

      I've always wondered what a troll looks like in the open ocean. More sad than interesting, but you do make funny splashies as you drown.

    91. Re:Good News! by tomhudson · · Score: 1

      And you STILL haven't been able to contradict a single technical point I made. Like I said, a simple (and simple-minded) fraud.

      What a maroon!

      As for the trolling charge, sure, I love exposing know-nothings, poseurs and bloviating gasbags. It gives me practice for doing the same thing at work, when someone suffering a brain-fart tries to push for something particularly destructive. BTW - we're STILL waiting for your alternate universe explanation of how multi-threading can reduce the cost and number of cpu cycles for massive simulation runs, especially when the intermediate calculations can't be shared between instances, so you can't stair-case the runs.

      It's funny, but when it comes to the concepts, either you grok on a gut level, or you don't - and you don't. And it shows. Keep flailing about ... you may yet get the hang of it. Or not. In the meantime, everyone's laughing at you - but that's not exactly a new experience for you, is it? (and no, don't bother answering - it's a rhetorical question).

    92. Re:Good News! by Gorobei · · Score: 1

      You haven't made any technical points. We aren't laughing with you, we're laughing at you.

      Are you the laughingstock hedge fund Tom Hudson, or the laughingstock Tom Hudson CS PhD? Be happy - most people can't even do comedy well.

    93. Re:Good News! by Anonymous Coward · · Score: 0

      Years from now, when you look up "owned" in the dictionary you'll see a picture of Tom Hudson.

    94. Re:Good News! by dave87656 · · Score: 1

      About 6 months ago there was a large study done on what programming languages and skills were found most in the want ads in the US (I can't remember who did it or where I saw it). Java was first by a large margin but C# was growing faster on a percentage basis.

    95. Re:Good News! by foniksonik · · Score: 1

      50 competing for 5 is a LOT better.... what happens when one of the 5 don't work out? What's the odds you'll get called back when it's now 4500 : 1 as opposed to 45 : 1

      Being a fish in a small pond is always better for job security, even if you're a small fish.

      The biggest problem with going after a niche job description is that you're almost required to relocate.

      --
      A fool throws a stone into a well and a thousand sages can not remove it.
    96. Re:Good News! by Xest · · Score: 1

      No, there's a lot of C#/.NET jobs out there because there aren't enough quality candidates to fill them.

      If you keep an eye on UK job sites you'll see the same .NET jobs posted weeks on end (okay, well now the economy is down the shitter, not quite so prominently as they were 6 months+ ago). Also, as most universities teach Java you'll find that junior Java roles pay less and are less common because they are filled quickly due to so much competition. I've seen quite a few junior Java roles paying as low as £18k p/a whereas I've not seen C# and .NET jobs paying that little- they're usually around £20k - £25k scaling up to about £30k - £35k for good developers with at least 18 months - 2 years experience.

      After this you'll certainly have to consider moving on to something like C++ or simply speciallising towards Oracle skills or similar to start applying for the £40k+ p/a jobs. Either way, in the UK jobs market for junior/graduate developers C#/.NET is far and away the best option right now because they pay okay wages and are easy to get.

    97. Re:Good News! by vux984 · · Score: 1

      50 competing for 5 is a LOT better.... what happens when one of the 5 don't work out? What's the odds you'll get called back when it's now 4500 : 1 as opposed to 45 : 1

      Your math is off. the odds of 1 of the 5 not working out is the same as 100 of the 500 not working out. So its 4500:100 as opposed to 45:1 which is a wash. And actually, the 4500:100 is more reliable; because the larger the the pool the more it behaves the way its statistically "supposed" to. Suppose the odds are that 1 in 5 employees doesn't work out.

      Then with 5, there is pretty good odds that all of them will work out. With 500, the odds that all of them will work out is extremely unlikely.

    98. Re:Good News! by Fulcrum+of+Evil · · Score: 1

      Actually, the 45:1 is a better deal - at that scale, recruiters can afford to read every resume without any sort of preculling, and are more likely to remember you. With 5000 applicants, they may just throw their hands up and interview the guy who knows one of the devs first.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    99. Re:Good News! by Greg_D · · Score: 1

      My LOGO is so awesome that they call me Master Splinter.

    100. Re:Good News! by vux984 · · Score: 1

      Actually, the 45:1 is a better deal - at that scale, recruiters can afford to read every resume without any sort of preculling

      Only if the odds of them preculling mine are somehow biased against me. If the odds are completely fair, then its a wash.

      And if the pre-culling is biased, who's to say the pre-culling isn't biased in my favor? Strikes me that if pre-culling is biased, for every applicant that is pushed down another applicant is raised up. Bummer for those that its biased against, but net result for the entire pool of applications: its a wash.

    101. Re:Good News! by Fulcrum+of+Evil · · Score: 1

      You're missing the point: 5000 candidates is qualitatively different from 50 when dealing with open positions. If you manage to get an in house interview, there are likely only 10-15 others to compete with for memory. With the larger group, that's impossible, and you may not be able to get in through normal channels period. Also, your argument rests on a lot of optimistic wishing - not a good basis for job searches.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    102. Re:Good News! by Icco · · Score: 1

      I don't understand why people are unwilling to sit down and figure something out. For instance, try sitting down and writing a kernel module. Companies don't care that you have extensive abilities, but rather can you work with their code, figure out how it works, so you can fix bugs and add new features. I suggest you spend time with whatever language you enjoy and maybe find a job you're interested in and start using the language that company uses.

      --
      -- There is a fine line betwen genius and insanity, i have erased that line.
    103. Re:Good News! by youdinttellme · · Score: 1

      lol!

  2. Don;t worry `bout it.. by Anrego · · Score: 5, Interesting

    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.

    1. Re:Don;t worry `bout it.. by Tablizer · · Score: 1

      a general knowledge of programming is the best you can hope for.

      Yes, but in practice most companies do their hunt for specific "tools". I had difficulty transitioning from a dying language once because I could not claim sufficient experience in my new target language, and I didn't want to lie[1]. These language/tool transitions can be rough. The interviewers didn't value general programming and IT knowledge much, they wanted a jillion years experience in X and only a jillion years in X.

      It's also true that I stayed with the dying language longer than I should have because I felt it a very useful language and hoped for a popularity comeback with the next release. It just didn't have the latest buzzwords and was picking up legacy cruft that scared away newbies. A shame.

      [1] My competition was lying, so perhaps this was a mistake. I wanted a clean conscious, but the transition was hard on the family.
         

    2. Re:Don;t worry `bout it.. by Anrego · · Score: 1

      Sure.. but we're talking about coming out of school here.

      I totally agree with your point though. In my case it's worse.. I work with proprietary languages on proprietary hardware pretty much used solely within my company. It's awesome stuff.. and I love what I do.. but if I ever go to change jobs.. I'm relying solely on the things I mentioned in my original post.

    3. Re:Don;t worry `bout it.. by ThePhilips · · Score: 2, Insightful

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

      --
      All hope abandon ye who enter here.
    4. Re:Don;t worry `bout it.. by crispytwo · · Score: 1

      When hiring, I don't look for specific languages usually, just an ability to do good work. Along with the previous post, I suggest to everyone to pick up a scripting language like Perl or Python.

      On top of that, I look for what you do in your spare time. Write something that's either cool or useful to you. Build it like an artists portfolio. This is far more impressive than "I know how to write code in 'abc' language".

      You will find, in your career, that the programming language is less important, but the end results are very important. Picking the most appropriate one makes all the difference in getting to that goal efficiently and quickly. You will learn at least another 5-10 languages, all with varying degrees of competence. For example, I've done work in 3 different assembler languages, 4 (very) different versions of C, pre and post STL in C++, C#, Java 1.0 and on, PHP, Perl, Fortran 77, Oracle PL, and 3 or so custom scripting languages... What's that, 20 different languages? All for work. I knew a handful of other ones that I never used for work.

      The point is,
      if (the_landscape_changes) you_will_with_it or die;

      choose, learn, do, make mistakes, re-learn, do

      If I can see that in a new hire, you will be on the top of the heap.

    5. Re:Don;t worry `bout it.. by tkjtkj · · Score: 1

      "You can have the perfect answer.. but if you can put it on paper in a clear and understandable manner.. what's the point." I guess one point would be to learn to read one's own text before showing it to the world! ;) I assume your "can" was meant to be "can't".

      --
      "There are 11 kinds of people: those who know binary, those who don't, and those who could not care less!"
  3. Visual Basic. by XPeter · · Score: 2, Insightful

    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.

    --
    "The difference between genius and stupidity is that genius has it's limits" - Albert Einstein
    1. Re:Visual Basic. by Anonymous Coward · · Score: 0

      Depends on the job. Certainly many jobs that do in-depth programming will be for a single-language group, and extensive experience with that--or a closely related--language is what people will look for on your resume.

      It doesn't mean you don't need to be able to handle scripting, or to do fixes in other languages, but generally a long list of "I know all this stuff" is a sign that you've never learned any language on the list in any depth at all. Otherwise you'd highlight that language, right? IMHO, much more attractive on a young grad's resume is usually a sign that they've done a decent sized project in a single language.

      I should add, that's for a coding job. Definitely a lot of interesting computer jobs consist of handling internal support for whatever comes up, and for those the long list approach probably works better.

    2. Re:Visual Basic. by Anonymous Coward · · Score: 0

      he was programming in the linux kernel?

    3. Re:Visual Basic. by Dahamma · · Score: 2, Insightful

      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!

    4. Re:Visual Basic. by Repossessed · · Score: 1

      Nor does Goldman Sachs run Linux, they run a Microsoft stack on top of Citrix.

      --
      Liberte, Egalite, Fraternite (TM)
    5. Re:Visual Basic. by XPeter · · Score: 1

      Let me clear a few things. One, I didn't mean to say that Linux was a language. Two, Goldman infarct does have servers that run off Ubuntu.

      --
      "The difference between genius and stupidity is that genius has it's limits" - Albert Einstein
    6. Re:Visual Basic. by Anonymous Coward · · Score: 0

      the linnux kernal and vb! holy shit that's liek the exact oppsitye

  4. depends on what you do, but probably C++ by junglebeast · · Score: 2, Informative

    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.

    1. Re:depends on what you do, but probably C++ by kbrasee · · Score: 1

      Java will probably have the most job opportunities, but thats just because most jobs are for internet code monkeys.

      I have yet to see a monkey that can write JMS web services in a distributed JEE environment.

    2. Re:depends on what you do, but probably C++ by joss · · Score: 1

      Quite right. Monkeys have too much common sense to learn all that j2ee crap.

      --
      http://rareformnewmedia.com/
    3. Re:depends on what you do, but probably C++ by kbrasee · · Score: 1

      Ah, but it's much simpler now. They took the '2' out, so it's just JEE.

  5. On the right path by thetoadwarrior · · Score: 0

    I think you're right in thinking C++ or Java. I don't think you could go wrong with either of those. But if you think you may go down the game development route then naturally go with C++.

  6. Practice by adisakp · · Score: 4, Interesting

    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.

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

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

    2. Re:Practice by slashkitty · · Score: 3, Insightful

      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?

      --
      -- these are only opinions and they might not be mine.
    3. Re:Practice by Sebilrazen · · Score: 1

      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.

      --
      "There are no facts, only interpretations." --Friedrich Nietzsche.
    4. Re:Practice by adisakp · · Score: 1

      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 be a great programmer.

    5. Re:Practice by jfbilodeau · · Score: 1

      I have to disagree. It's true that syntactically, they are similar, but coding in C++, Java or C# requires very different mindset. Mastering a language is not just getting familiar with the syntax or the standard library.

      --
      Goodbye Slashdot. You've changed.
    6. Re:Practice by m3talsling3r · · Score: 1

      If you haven't decided this before going in to college you are probably not a likely candidate for the real world of programming. In my experience at least.

      --
      My sig is as boring as you...
  7. COBOL by flyingsled · · Score: 5, Interesting

    If you're thinking of banking apps, think COBOL (at least here in Canada). Bunch of those programmers are near retirement too...

    1. Re:COBOL by clicktician · · Score: 2, Interesting

      COBOL developers are in demand at many large, multinational corps. Mastercard, for example, uses it heavily. Text books on COBOL are rare, and few have studied it in formal education. The best part is that offshore's don't offer COBOL skills, so job security is quite high.

      --
      Son, someday all this will belong to your ex-wife.
    2. Re:COBOL by bar-agent · · Score: 1

      One of three job postings I found a couple weeks ago was for COBOL. I wish I knew it.

      --
      i'd hit it so hard, if you pulled me out you'd be the king of britain [bash.org]
    3. Re:COBOL by borroff · · Score: 1

      At some point in time, aren't we going to have to port COBOL to some other language? We're going to be losing COBOL experts to old age soon, for goodness sake, never mind the machines they run on may become unsupportable!

      Personally, I've started poking at COBOL, just so I can understand the process of migrating our computing infrastructure to new systems. We don't have as much COBOL code as others may, but what we do have is at the core of our reporting infrastructure.

    4. Re:COBOL by Acer500 · · Score: 1

      The best part is that offshore's don't offer COBOL skills, so job security is quite high.

      MWHAHAHA that's what you think... COBOL was taught over here (Uruguay) until 2004 (I had to take it - ouch - I'm still trying to forget).

      However, banks and such don't think of offshoring the COBOL code for some reason, so the "job security" bit still stands.

      Besides, you'd have to offer me A LOT of money (for what offshoring usually costs - think USD 3000 or more) for me or my former classmates to pick up COBOL after we got spoilt on other languages - we already earn what is considered a lot of money here - in my case, close to USD 2000 before taxes - the bad thing is government and retirement funds take 60% of that, while in the US I'd probably keep most of it.

      --
      There are three kinds of lies: lies, damned lies, and statistics.
  8. Forget'em by oldhack · · Score: 3, Funny

    Do your best to forget everything you've learned in CS, and go to nursing school. You'd be happier and live longer. :-)

    --
    Fuck systemd. Fuck Redhat. Fuck Soylent, too. Wait, scratch the last one.
    1. Re:Forget'em by John+Hasler · · Score: 1

      Well, it's not nursing (which will soon be overpopulated) but studying medical records might be a good move.

      --
      Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
    2. Re:Forget'em by Anonymous Coward · · Score: 0

      Why didn't you tell me this 14 years ago? (lol)

      anyway... 14 years and counting... very happy ca-clipper, delphi, php, c, c++ and everything you throw at me programmer.

    3. Re:Forget'em by ShadowRangerRIT · · Score: 2, Insightful

      Nursing will be overpopulated? When it costs at least half what a medical degree costs, but pays substantially less?

      --
      $_ = "wftedskaebjgdpjgidbsmnjgcdwatb"; tr/a-z/oh, turtleneck Phrase Jar!/; print
    4. Re:Forget'em by Unidan · · Score: 1

      Funny thing, a good friend of mine dropped out of the ITS program we were in to become an RN. She's been trying to get into nursing schools for the last year and having many issues. Turns out there aren't enough programs out there currently that are scaled enough to meet the demand of the sheer number of students pursuing nursing careers. Remember when they used to beg for nurses?

    5. Re:Forget'em by sketerpot · · Score: 1

      Nursing schools are all running at or over capacity because of the huge number of people wanting to be nurses. Whether they should become nurses is a moot point.

    6. Re:Forget'em by dangitman · · Score: 1

      Screw that! I'm skipping nursing school and going straight into the nursing home.

      --
      ... and then they built the supercollider.
    7. Re:Forget'em by sohp · · Score: 1

      Mod this +1 Insightful.

    8. Re:Forget'em by ShadowRangerRIT · · Score: 1

      From what I've heard, the problem is that it's expensive to train nurses, and the schools can't get enough money to do so. Even if they are at or over capacity, it's still possible for the capacity itself to be less than the eventual demand for trained nurses.

      --
      $_ = "wftedskaebjgdpjgidbsmnjgcdwatb"; tr/a-z/oh, turtleneck Phrase Jar!/; print
  9. C++'s still a lot to say by MikeOtl67of · · Score: 2, Insightful

    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.

    1. Re:C++'s still a lot to say by Anonymous Coward · · Score: 1, Informative

      As someone who works on embedded applications every day, I can tell you that C is not (only) a part of history.

  10. Learn Programming, not Language by pm_rat_poison · · Score: 2, Interesting

    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.

    1. Re:Learn Programming, not Language by fermion · · Score: 2, Interesting
      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 various levels of architecture for developing a piece of software. Composite and structured programming in which data is isolated and a minimum knowledge of the data exists outside the relevant functions. We did this even before we had fancy OO programming. Factoring code into base units and refactoring to improve legibility. I have been on some interviews where all i did was write the functions that would be needed to solve the problem, and that was enough. If one has the write architecture, and code money can fill in the blanks.

      Some of this requires classes. I would not be able to write a kernel because I have not had OS architecture, or microprocessor architecture, or even complier design, though I have written simple compilers. I think that these are wonderful things to know, but on my interviews what they wanted was a CS degree, preferable masters, and the ability to put some code on paper.

      --
      "She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
    2. Re:Learn Programming, not Language by Logos · · Score: 5, Insightful

      you can master any language withing a matter of weeks

      Not really, but you can be *proficient* and a *productive contributor* in a matter of weeks.

      Mastery of a language takes longer because it's more about mastering of all of the little quirks, warts, conventions and whatnot that only come with experience with a certain platform than it is about syntax and transliteration of general programming techniques to the new language.

      Still, I agree with the overall sentiment: Focus on being a good programmer and learning new languages (and being a valuable contributor) takes care of itself.

      --
      We are agents of the free
    3. Re:Learn Programming, not Language by ickpoo · · Score: 1

      Additionally there is the libraries that accupany the langauge to master. Just knowing the language well isn't enought.

      --
      I am not a script! .Sig?
    4. Re:Learn Programming, not Language by Anonymous Coward · · Score: 0

      Focus on being a good programmer and learning new languages (and being a valuable contributor) takes care of itself.

      I can't agree with the gp & p enough.

      Also, always ask yourself if there is an easier way of accomplishing something. Get the answer, but don't obsess over it. It may be that the easier way doesn't scale, or it's only the easier way after scaling is required. Be curious but be able to come back to the task at hand.

      Personal experience will teach you this. For me it was when I used reflection where an interface would have sufficed. I still hit myself for that one.

    5. Re:Learn Programming, not Language by Fallingcow · · Score: 1

      Hell, I find that I can grasp the basic idea of most languages that are remotely similar to the ones I'm used to after looking over just a couple of moderately-complex examples. Give me some sort of ability to search for built-in functions and I can start writing working, clean code on day one.

      The libraries? Oh, man, that's where all the work is. A large and specialized library--say, the GTK lib--takes way longer to learn than most languages, and is vastly more important for getting serious work done. Figuring that out was a big "ah ha" moment for me.

      Example: someone who doesn't know Perl but who's used GTK in, say, Python will be light-years ahead of a person who knows Perl but has never used GTK, if they're both tasked with writing a GTK app in Perl.

  11. Procedural only? Sad by John+Hasler · · Score: 2, Insightful

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

    --
    Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
  12. Microsoft C-Hash would be my suggestion by Anonymous Coward · · Score: 0, Informative

    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.

    1. Re:Microsoft C-Hash would be my suggestion by Tablizer · · Score: 1

      C++ tends to be restricted to the very old (1990s) applications

      1990's is "very old"? Sheesh, now I really feel old.
           

  13. Depends what you want to do! by AaxelB · · Score: 1

    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 learn the skills necessary, rather than going the other direction.

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

    To succeed, you need a competency in far more than just a language. I'm sorry, its not that easy.

    Get at least a basic level of understanding in the following :

    * how to talk to and effectively use databases
    * how to talk to hardware
    * networking
    * sys admin work
    * presentation work
    * regular expressions
    * grep/find
    * create a simple web page
    * run a basic web server
    * file permissions and ACLs
    * build system
    * shell
    * source control systems
    * the relationship of assembly to C
    * that memory and processing power are limited resources

    Pick a scripting language to know at a reasonable level. It will come in use when you want to quickly transform data or even write some of your program that's in your favorite language. That is the equivalent of your swiss army knife and duct tape kit.

    As for a language, strongly know the basics for any OOP language, procedural language and functional language.

    Don't expect to be spoon fed details of what you have the program. Learn why this program is being written. If you are programming a spectral analysis program, learn about that subject enough to know how your program is going to be used.

    Learn to understand why the program is written, and what the audience will use it for.
    Learn to communicate clearly.
    Learn to ask questions when you are not sure.

    1. Re:skillsets by deodiaus2 · · Score: 2, Interesting

      Look at this site which rates languages by popularity of use:
      http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

      My suggestion is to read Kernigan's The Practice of Programming .
      Debugging the Software Development Process by Microsoft Press

    2. Re:skillsets by Anonymous Coward · · Score: 0

      I would add working in a team. Internships are a great way to get this experience and often lead to a job offer after graduation. You will learn a bunch from your peers and even more from experienced full-timers if they are truly interested in developing potential new hires (otherwise you might want to concentrate on *other* companies as potential employers).

      In a well run internship program you will also get great constructive criticism on all aspects of your programming skills.

      An internship is also a great way to check out some of the diverse roles you will potentially fill after graduation.

      You might be able to get similar experience cooking up a project with your schoolmates. A local non-profit might benefit from your work.

    3. Re:skillsets by MrCrassic · · Score: 1

      You're probably right, but there are very few ways to learn ALL of that while you're in school, unless you're very self-determined. I think that all of those skills can be learned as one garners more experience in the working world.

    4. Re:skillsets by TheLink · · Score: 1

      Yeah some of that stuff is what I try to figure out how to do when learning a new language.

      But there's a few more things I'd add: signal and exception handling, logging, process control and management.

      I found these also important for my programs. While you should be able to do these in most languages, the details sometimes get in the way of actually doing it :).

      There's another thing to learn - the conventional or idiomatic way of doing "usual" stuff in the new language. Often there's more than one way to do something, but if you do it in some unexpected way, it makes it harder for others.

      While the usual language tutorials might be nice, they are often useless for teaching "how the top programmers in this language like to do important real world stuff". So it's helpful if you can get hold of real life source code examples of what people consider as good code.

      BTW it seems I disagree with at least one popular convention. The convention when daemonizing a program seems to be you direct stdin, stderr and stdout to "/dev/null/" (close then reopen them to /dev/null).

      I on the other hand prefer to direct stderr and stdout to a log. Because daemon programs should NOT be sending anything to stderr and stdout. So if something is leaking out, it means there's a bug somewhere (whether in your code or someone else's code).

      I've found it easier to find those bugs when stuff goes to a log than when it goes to "/dev/null/".

      --
    5. Re:skillsets by purpledinoz · · Score: 1

      On top of that, I would recommend being really comfortable with the following:
      - Try to get comfortable with memory management in C++. Maybe read up on strategies to avoid and track down memory leaks.
      - Advanced language features of C++, Java, and C# (generic types, function pointers/delegates, LINQ for C# 3.0, etc...) - The libraries available for the languages. Get to know what's in the Java and C# frameworks. This is easy because it's standard and the documentation is available online. As for C++, I'm not a C++ developer, so i have no clue. All I know is that there is a standard library, and a crap load of other libraries out there.
      - The basics of web applications: PHP, ASP.NET 2.0, JSP (or whatever is the latest for Java).
      - GUI deveopment: Win32 and MFC (C/C++), WinForms (C#), WPF (C#), etc.

      In my experience, the MOST important aspects of software development are:
      - Gathering requirements for the software you need to write. Without a proper requirements spec, it's impossible to know exactly what you need to build, and if what you built performs what it needs to perform.
      - Choosing the right technologies. For example, for the UI, do you use ASP.NET? WinForms? For data storage, do you dump to a file, or use a database? As a junior developer, you probably won't have to make these decisions, but you should try to expand your knowledge of all the technologies out there.

    6. Re:skillsets by Anonymous Coward · · Score: 0

      Exactly! I have a similar list I have been putting together for a while now. I call it my programmer finishing school :)

      I would add to this that you should pick an editor and learn it WELL. This seems to be a lost art as the only "editing" keys people seem to use these days are the arrow and delete keys (I just have to walk away, I just can't watch people be that inefficient).

      My list of critical skills beyond the ability to write code is something like:

      * Source Code Control
      * Bug Tracking
      * Unix-Command Line
      * Regular Expressions
      * Editor
      * Data Driven design
      * Debuggers
      * Profilers
      * Google

    7. Re:skillsets by Phantom+of+the+Opera · · Score: 1

      Absolutely.

      Working effectively within a team is crucial.

      Unfortunately it is not always a positive experience. You'll have to know what points to push and which ones not to push. You'll have to learn how to deal with prima donnas, slackers, pets of the CEO, control freaks, those who need lots of encouragment, etc.

      It can be rewarding with the right mix of people. As always though : do more than is expected of you.

    8. Re:skillsets by iapetus · · Score: 1

      That's the end goal, sure. But a lot of that you will learn through working, not through theoretical study or practice on toy products.

      At the end of the day, you need none of the things listed above. What you need is a willingness and an ability to learn on the job, an ability to think through problems rather than give up because you don't know the answer, and the ability to explain your thinking, especially when you're disagreeing with people who in theory should know more than you do.

      If I could find a graduate with all of those skills, I wouldn't much care whether he/she had experience in the target environment.

      --
      ++ Say to Elrond "Hello.".
      Elrond says "No.". Elrond gives you some lunch.
    9. Re:skillsets by Anne+Thwacks · · Score: 1
      He is in the UK -

      Best learn plumbing and Polish, and forget about programming. Most of us with a lifetime in IT have barely had 60% employment.

      --
      Sent from my ASR33 using ASCII
    10. Re:skillsets by tomhudson · · Score: 1

      BTW it seems I disagree with at least one popular convention. The convention when daemonizing a program seems to be you direct stdin, stderr and stdout to "/dev/null/" (close then reopen them to /dev/null).

      I on the other hand prefer to direct stderr and stdout to a log.

      That would make sense, except that now, the right (wrong) error can now try to fill up your hard drive instead of just going to the bit bucket in the sky. If you really want, you could define a macro or command-line parameter to avoid redirecting, then redirect the output to a log file on the command line. Or have it respond to a SIGHUP to re-read a config file, so you can dynamically change its' behaviour.

    11. Re:skillsets by Anonymous Coward · · Score: 0

      I totally agree.

      whatever language you learn (C, C++, Java, Eiffel or other), what is important is not the language, but how what yuo write is interpreted by the computer.

      If you create a program in Java by inserting the magic keyword "static" whenever the compiler complies, you missed the case (and screw your program).

      If you feel better with VB.Net with option strict off and option explicit off, you certainly worte bugs a customer will find for you, wich is usually anoying (at least).

      But if you know what a computer is, what an OS is, what a database is and what is a compiler or a VM, you usually know what to use and when, and if you don't know a language, you should guess 90% of its base functionnality (and guess what it does and what it should not do).

    12. Re:skillsets by deodiaus2 · · Score: 1

      As other programmers have pointed out, there are things to learn beyond just languages alone, e.g. exception handling, memory management, multi-threading and semephores. Try to learn things that transend languages alone.
      Syntax comes and goes, but software engineering is an art. You have learn to write clean code and learn how to modularize functionality. This sort of thing is not learned out of a book alone, but rather by looking at good examples and trying to imitate the style.
      Finally, I should add that learning a business domain or scientific niche is perhaps just as important. Someday, you might find yourself landing a job not because you are the best hot shot programmer around, but rather that you have skills and understanding in a problem someone needs solved. This is especially true if you are going to be working for people who are not strict programmers themselves. A lot of times, your bosses might take it for granted that you know how to program. They want to know that you understand the problem enough and know how to solve it with minimal supervision. Othertimes, the choice of a programming language and tools has been set before you got involved and you will be asked to complete a task or to take the project in another direction. You might hate the previous choice of tools, but changing those on an established task is going to cause you brand new headaches and undue conflict. I once jokingly said that we should drop our old tools (AS400 & DB2) and techniques on our current project. This went in direct conflict with my boss's opinion to his yearly summery to upper management. Not only was he pissed that I made such an off the cuff remark during a meeting, but he pointed out that a migration like that was an onerous task, the end result of which would have not really contributed to something that business people would value as important. Business people don't care about software issues if they don't see a direct and immediate return on investment. Moreover, a project might have hidden and undocumented features, which will only surface after a migration is complete. Some bass ackwards feature that you though should have been eliminated off the face of the Earth is going to come back and haunt you because an financial audit fails to verify its existence. This is the real world of programming, so hold onto your coconuts!

    13. Re:skillsets by TheLink · · Score: 1

      "error can now try to fill up your hard drive "

      That's a feature! It makes the error easier to detect.

      Why have the error fill /dev/null. I don't see how that's a good idea.

      Just because nobody sees the errors doesn't mean there isn't a bug.

      I prefer to reach a "low bug" state ASAP. Gives me more time waste on Slashdot and other silliness :).

      So far most (all?) of the stuff going into the logs are due to bugs in other people's code (libs, modules etc).

      --
    14. Re:skillsets by tomhudson · · Score: 1

      I prefer to reach a "low bug" state ASAP. Gives me more time waste on Slashdot and other silliness :).

      I'd love to do that, but the powers that be always decree that we don't have time to do it the proper way - so we end up wasting multiple times doing it the wrong way and trying to recover ...

      Whoever said "good, fast, cheap - pick two" was a bloody optimist.

      So far most (all?) of the stuff going into the logs are due to bugs in other people's code (libs, modules etc).

      You're lucky - I'm finding other people's bugs that I've patched months ago being re-introduced on a regular basis from sloppy committers. "What do you mean, svn doesn't automatically merge changes?" So rather than locking them out, or trying to explain again the need for manually resolving differences, I just keep a private fork of the affected files and upload those instead. PITA.

    15. Re:skillsets by TheLink · · Score: 1

      If you're keeping private forks, maybe you could try git for that. svn is not so good for having lots of private versions.

      I often did have to help to fix other people's stuff too. Or workaround them. There was a case where a range of set top boxes were broken and not passing DHCP broadcast replies to Vista machines (Vista requests for dhcp broadcast replies by default), if the ethernet broadcast address was used (ff:ff:ff:ff:ff:ff).

      It was too hard to get the vendor to fix hundreds of buggy set top boxes at customer sites (it's really their fault though so they should have fixed it).

      The workaround I came up with: add an option to send a dhcp reply frame with a IP broadcast address (255.255.255.255), but the ethernet unicast address of the dhcp client (vista machine). The DHCP RFC doesn't really say you can't do that, but, it doesn't say you can do that either ;).

      --
    16. Re:skillsets by tomhudson · · Score: 1

      I hear you. At some point, you just want to fix the darn thing any old way and move on, rather than continue to butt heads with those who don't want to learn from history (and are doomed to repeat the same mistake over and over and ...)

      Of course, at some point you end up saying "f**k it" and move on to somewhere else, where, hopefully, you get, if not fewer problems, at least a NEW set of problems. After all, sometimes a change is almost as good as a vaction.

      I think Scott Adams had it right with his OB5 (Out By 5) plan. If the business is run properly, everyone should be able to leave promptly at 5PM, every day. If people have to work extra to fix bugs, or to meet unreasonable deadlines, it's a sign that management is out to lunch. The funny thing is, the serious work by people like Charles Deming backs Adams up pretty much 100%, so I think Adams wasn't proposing it "tongue-in-cheek."

    17. Re:skillsets by TheLink · · Score: 1

      Actually someone I know used to work in a Swedish company (I think), and out of habit he was staying in the office later than the rest.

      After a few days, one of the bosses asked him whether anything was wrong- whether he lacked training, or there were other problems so he couldn't finish his stuff on time, stuff like that.

      To me, working is good, but it's not much point spending most of your life at work (even if you enjoy it a lot, there should be some balance). Computers should be doing that 24/7 stuff anyway, not humans.

      But of course, I'm a lazy person :).

      --
  15. My suggestion... by sixteenbitsamurai · · Score: 1

    Good old C. Nothing beats C. Also C++. The important thing to remember is once you develop your skills in one language, it's easy to reapply those skills when learning the next. So really, once you master a programming language you will find you can do just about anything in any other language just by learning the syntax and keyword structure. My point is, your design skills should come first. And C or C++ are good places to develop those skills.

    --
    Yeah, that just happened.
    1. Re:My suggestion... by kkrajewski · · Score: 1

      Bart Simpson: "Good old rock. Nothing beats rock."
      (that said, I love C.)

  16. Why not web stuff? by mgkimsal2 · · Score: 2, Interesting

    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!

    1. Re:Why not web stuff? by Anrego · · Score: 2, Insightful

      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.

    2. Re:Why not web stuff? by Anonymous Coward · · Score: 0

      The annoying thing about those languages though is how fleeting their vogue is. I'm sure there are countless other posters who have also experienced this, as soon as you pick up one of the web languages, they seem to be out of style. Agreed, they are mostly very similar, but probably still not worth the time and effort if one does not know which language they'll be using in the industry. Take it from a guy who spent years learning PHP to end up in an ASP.NET job. Its more important to learn the ideas behind the web, such as Data Access and User Profiles, etc.

    3. Re:Why not web stuff? by Anonymous+Brave+Guy · · Score: 1

      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 nothing else.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    4. Re:Why not web stuff? by Anonymous Coward · · Score: 0

      Don't sweat the "web developer" label. You can easily break free. I started a few years back as a "web developer" doing PHP, then some Java web services. Now I'm working with C#, and while I still do mostly web development, I've done several "real" apps. Recently, one required a custom file format for high-performance MJPEG capture. AVI libs couldn't grab the frames fast enough to not drop frames. Multithreading just caused headaches and didn't solve the issues. So I wrote a simple direct-to-disk format that can be written sequentially and be of any arbitrary size. It's native .Net so there's no COM Interop overhead. It's quite fast and allows some of the processing overhead being done inline before to be postponed for batch processing.

      I'd have to say that C# can cure PHP-itis. It's a similar syntax, but it can help you jump from "web developer" to "developer". How?

      Well, C# is great as an ASP.Net language. It's powerful and concise, yet "easy" because it's a managed runtime language. It's not clunky like VB, and it isn't crufty like Java. Yet it shares the C-like syntax of Java, PHP, C++, et al that you're probably already used to.

      But once you've learned it, you can use the exact same language, libraries, and code in a Winforms app. This will get you back into the groove of writing on-iron apps with minimal fuss.

      From there, you can either get comfortable with it and keep making stuff in C# (Mono makes this viable for Linux, too), or you can keep going and translate your experience into bare-metal languages like C and C++. Or if you want, you can just stick with the .Net stuff and learn a new programming paradigm. For example, throw in a bit of functional programming, once F# becomes a first-class .Net language (with the .Net 4 release).

      Instead of burdening junior programmers with all of the historical minutiae and bare-metal skills, we should teach them the basic theory of why/how computers work, then teach them practical-yet-easy high-level programming. Then send them on the path to lower-level knowledge as they want or need it. Pointer math is not useful knowledge when working with PHP, Java, .Net CLR languages, or, honestly, most C++ stuff. Let the objects abstract that away and you only need minimal knowledge of it and why it works. If someone starts into heavy-duty usage, then they should learn it.

    5. Re:Why not web stuff? by mgkimsal2 · · Score: 1

      I don't disagree - principles and concepts are important. Being able to implement them in at least two languages demonstrates (imo) a solid understanding of the ideas themselves. I just think that it's easier to get exposed to many of those ideas that have 'commercial' application, and in a more rapid timeframe, in the web dev arena, which is why I'd suggested it. If the OP had stated he wanted to go in to chip design, or compiler design, or something more specific, I probably wouldn't have mentioned web tech :)

    6. Re:Why not web stuff? by mgkimsal2 · · Score: 1

      As someone with a lot of PHP experience who is moving in to more Java (via Groovy) I tend to agree. Getting stuck with any 'label' is as much your own doing as that of the people doing the labelling, in whatever profession (just imo). I've done enough C# to see the appeal, and would agree that going down a .net path would be a good choice for many people, for many of the reasons you identified.

    7. Re:Why not web stuff? by Pjerky · · Score: 1

      So by stigma you mean someone that adapts to changing times and learns many new technologies? I am down with that. I think the stigma is all in your head. Classic programming doesn't force you to branch out into other technologies (SQL, XML, web services, etc) as much as web development.

      What is wrong with being a web developer in a time when more and more applications are being ported to a web-based setup? One of the many great things about being a web developer is you get to work with a very wide variety of technologies and other programming languages (Javascript, C#, VB, Java, Ruby, etc).

      This would look great on a resume showing that you can pick up new programming languages and adapt to an ever-changing world instead of classic programmers that get stuck on the same programming language for decades. Go where the money is going, that is towards the web. The signs are there, desktop apps are on their way out and the world is becoming more and more cloud-based. The great thing about web development is you get to learn so many things that branching out into new apps and technologies will eventually become a breeze because you have already had to learn so much.

      Also, if you use a language like PHP you don't have the frustrating issue of the stuttering debug method. Write code, save, compile, run code... problem found, trace bug, apply fix, save, recompile, run code... crap another issue, trace bug, apply fix, save, recompile, dang it a syntax error arrgg, fix code, save, recompile, test.....(you get my point). With PHP it is more like write code, save, test, found a bug, fix bug (tracing info comes with specific line numbers in errors, hooray), save, test, fix another thing, save, test, sweet it works!

      I would think long and hard about becoming a stagnant desktop developer. Don't let the classical programmers confuse you!

      --
      The Mind Is Speculative and Interpretive. So speculate all you want and interpret this 00101101 01001110!
    8. Re:Why not web stuff? by Anrego · · Score: 1

      Ehe.. didn't mean to start a flame war here.. but this guy sounds like he would prefer traditional programming over web programming.. my point was more don't do something you don't want to do as opposed to don't do web programming because it makes you less of a man.

      That being said.. I hate web programming ;p

      I _especially_ hate interpreted languages. That "Compile" stage is there for a reason. Compiling eliminated a lot of the "overhead" of OOP processing. In a language like PHP.. the more you try to use an object oriented approach (or add any additional complexity for the purpose of maintainability).. the more you slow down execution. I also hate weakly typed languages. It's my general opinion that it's fundemental to good design to be able to say that this variable is an "X".

      As for everything going web based... I've been hearing that since 1996. While I think some applications do lend themselves more to a web platform.. I think certain categories of applications are always going to want to run on (and only on) the client side.

      I see this whole webapp boom a lot like Java applets and Flash. With any new technology people go nuts and try to use it for everything. Then at some point everyone calms down.. the erection subsides.. and a small subset of useful products emerges. Right now everyone is having a collective orgasms to get everything from documents to graphics programs on the web but I suspect eventually a lot of it will fade away and life will go back to normal.

      I consider myself lucky. I've found a nice niche beneath the desktop. I write low level code and higher level management code for custom and very specialized hardware. If the bottom fell out of this (which I doubt.. but you never know).. I could always transition back to desktop.. but I`ll become a tech support representative before going web programmer.

    9. Re:Why not web stuff? by mgkimsal2 · · Score: 1

      So, use a compiled language and do web stuff. .Net and Java are two platforms that encourage compiled languages (groovy/ironpython/etc notwithstanding) and they're not going away any time soon.

      Between Flash, client-side tech like google gears, html5 canvas and other progressive tech, 'web' development can be as advanced or as basic as you want it to be.

      The OP was also concerned about 'commercial' development experience. It's going to be easier to get that, and get it fast, in the web dev arena (in most areas, anyway).

      There will always be a niche for low-level stuff - hardware drivers, embedded systems, etc. - but that's clearly not where the future of professional/commercial software development lies. Telling the OP what you think they want to hear rather might not serve them well in the long run.

  17. Direction by holophrastic · · Score: 2, Interesting

    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:/// 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.

  18. Listen to Norvig by Phs2501 · · Score: 5, Interesting
    Read this:

    Teach Yourself Programming in Ten Years

    Peter Norvig knows what he's talking about.

    1. Re:Listen to Norvig by Anonymous Coward · · Score: 0

      As you killed his server ... ;-)

      Teach Yourself Programming in Ten Years[google cache]

  19. "Specialisation is for insects." Heinlein by toby · · Score: 1

    n/t

    --
    you had me at #!
  20. To repeat the advice I was given years ago by Kupfernigk · · Score: 3, Insightful
    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".

    --
    From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
    1. Re:To repeat the advice I was given years ago by MrCrassic · · Score: 1

      As a fourth-year Computer Engineering student with over a year of corporate working experience, I can recommend that starting in tech support is probably the BEST way to learn how to maneuver your way through the corporate environment (if that's where you ultimately want to stay). There is no other tech job that I can think of (or that I have worked) that allows you to meet and chat with an extremely diverse number of people and learn so many skills while on the job. Additionally, you get to learn about people, which will help you significantly in understanding how requirements are written and passed on to the developer.

  21. Be a doctor instead by Anonymous Coward · · Score: 2, Interesting

    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.

    1. Re:Be a doctor instead by azgard · · Score: 1

      Funny, I am a (young) developer from the East you speak of (I am from Prague, working for an American company), and here it's exactly the opposite. The programmers here routinely make twice as much as doctors.

      This only shows that free market or capitalism is never fair; it just is.

      The point about not learning the body again holds thought; on the other hand, basic principles in IT stay the same, and I work in mainframes now, which is akin to archaeology sometimes.

    2. Re:Be a doctor instead by foniksonik · · Score: 1

      This advice makes sense in a down economy but you have to remind yourself how boring that sounds. Learn it once and do the same thing for the rest of your life? Why not just skip a degree, go to work flipping burgers, save all your money and buy a franchise like a SubWay or a Gas Station... you'll still make 100k a year and never have to learn anything new.

      --
      A fool throws a stone into a well and a thousand sages can not remove it.
  22. Practice / Learn Designing / Learn WxPython by Anonymous Coward · · Score: 0

    For a job it is best to learn some more java and perhaps dotnet (c#).

    If you have had some more practice (in a team of 5: 1 project manager, 2 other programmers, 1 dba), you will learn, that design is more important than programming.

    In the future WxPython will probably be almost as popular as java. It is easier to learn than java. Start with Python and later add wxwindows components to make GUI programs.

    Fortran indeed is a nice language. But I do not see it very often anymore.

    Regards,

    Sjaak Wijnen.

    P.S.: You will see the word coward above the message, because I was to lazy to create an account.

  23. Re:Procedural only? Sad by godrik · · Score: 2, Funny

    I would say OP should broaden his mind and learn a functionnal language such as caml. He will probably never use them professionally but they are so enlightening.

  24. You are done studying. Get a job. by AlXtreme · · Score: 1

    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 relative cheapness) and land yourself an entry-level programming position in an area that sparks your general interest. If after a few years on the job you'd like to apply for a job that requires experience, you now are able to.

    --
    This sig is intentionally left blank
    1. Re:You are done studying. Get a job. by RyuuzakiTetsuya · · Score: 4, Insightful

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

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

      --
      Non impediti ratione cogitationus.
    2. Re:You are done studying. Get a job. by Pjerky · · Score: 1

      Here Here! Amen to that brother!

      --
      The Mind Is Speculative and Interpretive. So speculate all you want and interpret this 00101101 01001110!
    3. Re:You are done studying. Get a job. by Anonymous Coward · · Score: 0

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

      What the hell? This makes as much sense as saying, "I learned plumbing well enough to translate a poem from French to English." The two things have nothing to do with each other.

    4. Re:You are done studying. Get a job. by RyuuzakiTetsuya · · Score: 1

      There were specific requirements to this dump. Most notably, the source for this dump was done by someone who didn't understand my request and gave it to me in Access format instead of say, something way more MySQL friendly. I also lacked any tools on my workstation to get clean data. So I had to go from MDB->Excel XML->MySQL. Python's XML parsing sounded reasonably good, so I went for it.

      --
      Non impediti ratione cogitationus.
    5. Re:You are done studying. Get a job. by Anonymous Coward · · Score: 0

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

      That is, without a doubt, the best advice. Languages are secondary. I've never met a grad student with
      the proper problem solving skills to cope with even the simplest of real-world problems.

  25. Re:Procedural only? Sad by Anonymous Coward · · Score: 1, Informative

    The idea is that you can apply computer science to any language you want to learn.

  26. Java or C# by j1mmy · · Score: 1

    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 go the C++ route, definitely spend some time on boost.

    Regardless of what choice you make, it's almost always worthwhile to learn SQL and a thing or two about how databases work.

    1. Re:Java or C# by Anonymous Coward · · Score: 0

      There are plenty of new-grad jobs requiring C.

  27. it's normal by Lord+Ender · · Score: 1

    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 slashdotter who didn't build his own computer is like a Jedi who didn't build his own lightsaber.
  28. Do not panic! by speters · · Score: 1

    First thing to remember is that if you are coming out of school, employers will assume you do not have much experience with any single language unless you've had some sort of internship. They may hire you to work on completely different languages. What really helped me was Eric Raymond's Hacker HowTo, although if you are thinking you'd like to do web work, I'd really consider adding some JavaScript experience.

  29. Don't worry about it by Ankh · · Score: 1

    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 three languages, and all procedural? You should know at least one fuctional, non-procedural language, e.g. pure scheme, ocaml, xslt or xquery, prolog, would all be candidates, even if your university forgot to teach lambda calculus :D

    The value of a declarative language isn't that you will get a job programming in LISP (although you might) but rathar that it gives you a different toolset, a different way to think about problems that turns out to be useful in a lot of other places.

    --
    Live barefoot!
    free engravings/woodcuts
  30. How about all three? by edivad · · Score: 1

    If you like programming (otherwise I got bad news for you), learn all three. With preference to C/C++. But the fact that you're asking the question, kind of reveal that you've not much passion for CS, and that you'll likely be just another 9-5, into software development just to get a job, average programmer.

    In which case I'd rather focus more on Java, and whatever language-of-the-day is now current at Microsoft.

  31. Java + tools by obarthelemy · · Score: 1

    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.

    Furthermore, when I'm renting out devs/consultants, my customers look not only at the bare language experience, but also at experience with the platforms including libraries/tools...: not Java but J2EE+Jboss... It may serve you well, instead of listing C++ and Java on your resume, to have Java + J2EE +... other enterprise Java tools. You're not hedging your bets, but you look like you provide more immediate value.

    Marylin Monroe seems to be advocating RoR, though:

    "Salome did it with veils.
    Abe Lincoln did it with rails.
    Toledo did it with scales
    The Chinese built that Wall. ...
    They'll give you medals if,
    They'll love your high notes if,
    You'll meet the Colonel if,
    You'll rule the barnyard if,

    If you specialize!
    I specialize."

    --
    The Cloud - because you don't care if your apps and data are up in the air.
  32. Language Experience by prefec2 · · Score: 1

    It is hard to give you an advice here. However, I would go with C, because C allows you to program in imperative and functional. You may also use structs to simulate object oriented features.

    But honestly that will not help you writing better Java programs. You just understand better how such things like Java could be made. Also you will see the C++ is a rather ugly language.

    The real thing with programming experience is, that you can transform an algorithm of some sort into an elegant expression in the target language.

    I can tell you that. I learned programming with Basic. And after Basic, I perfected my abilities to divide and encapsulate problems with Pascal. Then I learned C, which allowed me to incorporate ways to think from assembler with those from Pascal. At the same time I learned Scheme, which taught me to use recursion more often. and that function can be a powerful tool. Also I had to learn Modula-2 which is just a Pascal remake.

    I also learned Objective-C (O-C) which borrowed its object behavior from smalltalk. And I must say O-C is much more elegant than C++ which I learned afterwards. With these languages I learned to program with objects (in combination with Object Pascal). At last I learned Java. And Java has many properties of O-C.

    I also used Fortran 77 which has a nice feature called common blocks. And Prolog which could be a mess.

    I can say normally you can transfer your programming skills between languages so it is wise to use a simple one first. What you have to relearn all the time, is the set of libraries, frameworks, components used together with these languages. They change and they have different concepts.

    For example: You have Swing, AWT, and SWT as Widget-Toolkits for Java. They support different ways of solving UI problems. Swing supports MVC, but this is not always a good idea to use the Swing way to do it. SWT is only a widget set and you have to do the data modeling, but this can make things easier in other situations.

    For such things: Learn the stuff on the job.

    The more you learned the more you see that these frameworks are very similar. You find structures in their concepts which you have learned studying CS.

     

    1. Re:Language Experience by Anonymous Coward · · Score: 0

      C is about as far away from functional as you can get.

  33. Intermediary by jlebrech · · Score: 1

    I think intermediary languages are overated, the languages that matter the most are SQL, and HTML, Javascript. CSS can be an afterthought once you have working navigation.

    If you create a web service based framework the intermediary language will get underused (asp.net, php, perl)

    but it is good to know advanced concepts that you can transpose on to other languages.

    this is one thing HR do not understand, is that once you know how to do it RIGHT with one language you will look for the equivalent technique in the new language. They just want X years experience in such a language.

    i've had asp.net for 2 years and sql for 4 years. and there are still bloated job descriptions that cause my cv to get blocked in the HR machine.

  34. Language is largely irrelevant by Anonymous Coward · · Score: 0

    Thinking you can program commercially from just learning a programming language is like thinking you can repair a german car because you take a class in speaking german. The language is less than ten percent of the knowledge you need to program successfully. You have to learn the laws, regulations, business processes, and information flows within a business before your can develop useful software. The language is just the screwdriver you use to assemble the machinery.

  35. Look at the Classifieds by wdhowellsr · · Score: 2, Informative

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

    1. Re:Look at the Classifieds by John+Hasler · · Score: 1

      > ...no matter how much you hate Microsoft, has more SQL...

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

      --
      Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
    2. Re:Look at the Classifieds by wdhowellsr · · Score: 1

      Your right but I have never been offered a job that mentioned SQL that meant anthing other than Microsoft SQL. Usually the just mention the database system if they want experience in Oracle or DB2.

    3. Re:Look at the Classifieds by Anonymous Coward · · Score: 0

      Since clueless middle-management basically hijacked the term to mean Microsoft's unimaginatively-named "SQL Server" database software.

      That's when.

    4. Re:Look at the Classifieds by Nethemas+the+Great · · Score: 1

      The classifieds and job boards are a very good place to get a feel for what's desired in your specific marketplace. Find an industry/specialization that interests you and see what skills mid-level positions are looking for.

      That said, while it might disappoint you to hear this, what you know is very unlikely to land you your first job out of college. If landing a position is your goal (which I assume it must) then you need to focus on your grades and your soft skills. You might be a genius at enterprise application development but if your GPA is sub 3.0 (possibly higher depending on the company) you won't even be considered. In this economy with so many organizations having IT hiring freezes the ones that are hiring can afford to be "very" picky. Your academic record needs to come with a glowing halo.

      It's only after you've landed the job that the extra studying will pay off. Along those lines I would most definitely focus on learning the more abstract skills such as "best practices", design theory, transaction theory, development processes (RUP, test driven development, agile practices, etc.). In general, syntax is a pretty easy thing to learn. Proper application of that syntax is another story entirely.

      If you want to be an asset to your employer then being able to efficiently write simple, elegant, clean code that's flexible in the face of evolving requirements is essential.

      --
      Two of my imaginary friends reproduced once ... with negative results.
  36. My method of practice... by glitch23 · · Score: 1

    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 my skills did get better than they were while I was in college. YMMV.

    --
    this nation, under God, shall have a new birth of freedom. -- Lincoln, Gettysburg Address
  37. Learn C first by Anonymous Coward · · Score: 0

    I think C is the right way to go: it's a small, clean kernel of truth in this crazy programming language world, and you can tackle pretty much the whole language without being some amazing guru. And as an added bonus, its syntax is what C++, Java, C#, etc are based on.

  38. Fortran?? by Bill,+Shooter+of+Bul · · Score: 3, Informative

    I work with many financial institutions, Not once have I ever heard Fortran Mentioned. Usually Java or COBOL, depending on when the app was written. Don't get me wrong, I love Fortran 95. Or at least I prefer it to COBOL.

    --
    Well.. maybe. Or Maybe not. But Definitely not sort of.
    1. Re:Fortran?? by dbcad7 · · Score: 1

      I am not a programmer (well not professionally, I dabble) but your advice of learning the language that is common in the industry he is interested in is good. In this particular case, I would also suggest to him to learn about banking, finance, and accounting... years back I was working at a company, and we got a new system for accounting.. the company reps that supplied it, knew databases backwards and forwards, but really had little understanding of a simple thing like calculating sales tax, which the new system was doing completely wrong. To work in a specialized field requires some knowledge of how things are done it that field.

      --
      waiting for ad.doubleclick.net
    2. Re:Fortran?? by Bill,+Shooter+of+Bul · · Score: 1

      I wasn't really recommending that he specialize in a language, just trying to correct a misconception he had. but yes domain relavent information is always helpful, as long as you understand that you are not going to be the expert in the domain. Sometimes Programmers get it in their head that they know how everything should work. Which is great, but they often offer advice without knowing enough about the industry. Although, in rare cases ( such as the housing CDO blow up) anyone with half a brain (and who also thought longer term than two three years) would have realized the disaster was coming.

      --
      Well.. maybe. Or Maybe not. But Definitely not sort of.
  39. IPHONE SDK by Anonymous Coward · · Score: 0

    Go write an app for the itunes store. Keep your day job.

  40. C C++ assembler by Anonymous Coward · · Score: 0

    If your heart says C, do it. Work with C and C++, and study the assembler output generated by the compiler (gcc -S). Once you understand C you can do anything else. I interview people for embedded and Linux positions, and it's too damned hard to find people who really know what's going on. Yeah I don't expect a new grad to know how to optimize cache accesses in a trie search program, but... surprise me. You'll get hired anywhere doing work you don't hate. My guess is, if you like C, you'd probably rather be doing embedded or system/app programming than business IT, Windoz certified .NET, Java, and website maintenance. So go for it!

    Also do some object oriented C, like device rivers or programs with function pointers, so you know how C++ OO works.

  41. Mod parent up by godrik · · Score: 1

    So true. So enlightening.

    1. Re:Mod parent up by ahabswhale · · Score: 2, Insightful

      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!

      --
      Are agnostics skeptical of unicorns too?
    2. Re:Mod parent up by xaxa · · Score: 1

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

      I learn about the frameworks etc on company time. I don't see anything wrong with this, and 36 hours still feels like a lot of time out of the week, compared to university, so they aren't getting any more!

    3. Re:Mod parent up by spiffmastercow · · Score: 1

      Worse than that, good programmers (like I used to be) become crappy programmers (like I am now). I went from a great hobbyist/student doing a lot of work in C to being a crappy C#/ASP.NET programmer. Now whenever I write something for fun using C I end up with memory leaks because I forget to deal with the memory management. And it's all because I followed the money.

    4. Re:Mod parent up by Anonymous Coward · · Score: 0

      And with the state of most Computer Science programs today, that something you're not going to know is everything.

      Unless you go into some very special field: game programming, data engine programming, NASA, etc; you will never use pretty much any of the programming techniques you learned in college. It's sad, but true. You probably won't get a chance to write that balanced binary tree or that really cool cocktail sorting algorithm. The truth is, that code has been written already. You'll find a class online that does what you need and use it.

      The following are a few things that I wish every programmer knew and that will be helpful for you in your career, maybe it live long and prosper. OK, I'm writing to a bunch of geeks, so sue me.

      4. Learn THE language. I mean UML (Unified Modeling Language). Not understanding basic UML would be equivalent to a home builder not being able to read blue prints.

      5. Read about TDD (Test Driven Development). C# or Java, the language you'll end up using at work will ALMOST certainly be one of these two languages. I love both of these language for business development. One of the many things that they have in common are some really great TDD libraries. TDD is a must. Read about it, learn it, live it.

      6. Interview the company that's hiring as much as they are interviewing you. This is probably the most important thing I can teach anyone getting into this business. Working for a company that has a poor development team can end up doing your career more harm than good. Make sure that they're using at least some form of TDD. Ask the developers that interview you which software patterns they use on a regular basis. It's OK if you don't know the answer, as long as you get the feeling that they do. Your goal is to go to a company where you can learn and grow your skill set.

      And no getting caught smoking pot in the parking lot. Inside joke, but yeah, don't do it. =)

  42. Heart - Job - Language by Anonymous Coward · · Score: 0

    If possible, you really want a job you love, motivation is everything. So concentrate on what you'd like to do, investigate some companies, maybe even ask them for advice.
    "Backwards Induction" is a fancy name of reasoning from your goal to your means-to-get-there.

  43. Learn how to write comments and name things truly by presidenteloco · · Score: 2, Insightful

    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.

    --

    Where are we going and why are we in a handbasket?
  44. A functional language or programming tools by KeithIrwin · · Score: 1

    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 be tough since you're used to imperative languages, but in the end, it'll warp your mind in a good way.

    If you're not willing to do that and just want to feel up-to-speed and ready to work, the best thing to do would be to learn your programming tools. Get familiar with a source control package such as Subversion or Visual Source Safe and an IDE like Eclipse, NetBeans, or Visual Studio. These are fundamental tools which almost every programmer uses almost every day, but which are seldom covered by universities (don't ask me why).

  45. Be practical, be realistic. by Anonymous Coward · · Score: 0

    If I were interviewing you for a job, knowing that you are a soon to be new graduate, I would ask you questions like:

    Why is Fortran better for numerical calculations? (follow up: is it still true?)
    How do you perform compiler enforced encapsulation in C?
    How do you decouple interface and implementation of classes in C++?
    How does "everything on the heap" effect runtime performance of Java?

    Now, in all honesty, I don't care about the actual answers too much, but your answers provide insight into the level of understanding of the core concepts rather than superficial syntax. If you understand the concepts at their core, then as far as I'm concerned, you go in the "yes" pile instead of the "no" pile (the "yes" pile would be further trimmed base on other criteria).

    Anything that helps you understand core concepts, skewing toward industry standard langauges (C++/C#/Java) is a good thing to learn. Others have mentioned functional programming languages (APL, Fourth, Haskell, etc...). If this helps you learn the core concepts, then by all means learn them. I think people who learn functional languages are better off in the long run (you can learn them later though, while you are working), but I tend to shy away from people who are rabid functional guys (I once had an interview candidate who insisted that we were stupid for not writing our entire environment in Haskell).

    As others have said, as a new college hire, you wouldn't be responsible for a kernel or a banking app. More than likely you'll be thrown in a corner, given bugs to fix, documentation to write, or other, non-romantic coding tasks until a level of trust is established with the team.

  46. Domain knowledge is more important by cetialphav · · Score: 2, Insightful

    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.

  47. Re:Procedural only? Sad by blankinthefill · · Score: 2, Insightful

    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.

  48. Nobody expects a recent CS graduate to do much by Unoriginal_Nickname · · Score: 1

    This is why software companies have to resort to trivia games, quizzes on software minutiae, fizzbuzz and goddamn *riddles* to find out if someone is actually capable of doing the job.

    Computer science is not a code writin' certificate, it's a degree in the science of studying computation. If you want to be successful in writing software and getting paid for it, you have to take responsibility for your own success. It's vital to study independently: teach *yourself* how to use the theoretical concepts you learn in class. Track down summer internships, so you have a chance to prove that you have these abilities later on.

    1. Re:Nobody expects a recent CS graduate to do much by ClosedSource · · Score: 1

      "This is why software companies have to resort to trivia games, quizzes on software minutiae, fizzbuzz and goddamn *riddles* to find out if someone is actually capable of doing the job"

      Actually, the don't have to and they shouldn't. The hiring process has become rather self-delusional. It isn't really possible to determine if someone is capable of doing a particular job unless the skills required are simple enough that a real-world trial can be performed in a few minutes (e.g. pick up that heavy box).

      You would think that a person with a scientific approach wouldn't waste their time with a process that has no evidence of success.

  49. "There are no answers, only choices" by Corson · · Score: 1

    If you plan to work in the "heavy" industries: Java. If you plan to work in the gaming industry: C++. If you plan to do Web development or system administration: Python, Perl, PHP, .Net, Java, Javascript. If you plan to be an independent/freelance desktop/database software developer: Delphi.

  50. Going against the grain... by BrokenHalo · · Score: 5, Interesting

    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.

    1. Re:Going against the grain... by oh_bugger · · Score: 1

      The fact is managing resources isn't as essential anymore for software to work. You can write software which is constantly dividing and the user wouldn't notice any slow down. Nowadays the biggest (well, most sensible) requirement is modularity for future growth of the software. Companies look for people who can write code which will be useful to the company over and over again. They don't want to hire programmers who will be completely rewriting projects every time the spec changes. This is the current state of typical software companies writing apps for businesses. Resource management isn't usually considered when hiring a new dev unless they're developing something high performance or low level.

      --
      Go home and shave your giant head of smell with your bad self
    2. Re:Going against the grain... by arevos · · Score: 1

      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.

      C or Fortran, perhaps, but once you start to get into higher level languages, knowing assembly language isn't very applicable. Knowing how to program well in assembly doesn't mean you know how to program well in, say, Ruby or Lisp.

    3. Re:Going against the grain... by Anonymous Coward · · Score: 0

      IOW: Assembler is the Latin of programming languages.

    4. Re:Going against the grain... by HiThere · · Score: 4, Informative

      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.

      --

      I think we've pushed this "anyone can grow up to be president" thing too far.
    5. Re:Going against the grain... by tomhudson · · Score: 1

      I was under that impression as well, but it turns out that, at some places, assembly is making a comeback among grad students - those who know it are generally held in higher regard by their peers, which won't hurt in any hiring process.

    6. Re:Going against the grain... by happyemoticon · · Score: 1

      It really depends on what your software is going to do. If you're writing desktop business apps, performance is definitely not a concern. Most of their processing power is lost as waste heat anyway, so play it fast and loose. However, I think you can get pretty damn fast by avoiding silly mistakes that betray a general ignorance of the way computers actually work, and that is valuable in most settings - especially if you're going to be reusing that code, right?

    7. Re:Going against the grain... by Anonymous Coward · · Score: 0

      I agree that understading the fundamentals of processor logic are interesting, claiming that it's mandatory in order to be able to appreciate the costs involved in programming an application is absurd. That's similar to claiming that in order to be able to drive a car efficiently, you must understand the chemical processes involved in combustion .

      As long as a developer can appreciate the differences between O(1), O(log(n)), O(n) and worse then they'll be in good shape. But even that only comes into play when the program goes live.

      Honestly, what's better than understanding a particular language, or math, is good trouble shooting skills. Knowing how to break down a problem will be of much greater use.

      ----
      P.S. You put it in quotes which implies... something, I don't even know what, but a programmer who starts referring to intuition sounds like they're up a creek.

    8. Re:Going against the grain... by Estanislao+Mart�nez · · Score: 1

      C or Fortran, perhaps, but once you start to get into higher level languages, knowing assembly language isn't very applicable. Knowing how to program well in assembly doesn't mean you know how to program well in, say, Ruby or Lisp.

      I don't think either GP's suggestion nor your retort are quite satisfactory. You are right that learning assembly doesn't mean you can program well in higher order languages like Ruby or Lisp; in fact, I'd say that the point applies just as well to C or C++, since programing a large system in those languages requires understanding of how to break down a large problem domain to organize your software into pieces that are relatively easy to understand, write and maintain. GP is right that some understanding of assembly is very important; however, too much of knowledge about assembly is just irrelevant to programmers, and spending a lot of time learning it is counterproductive.

      The best topic to understand here, the correct compromise, is to learn a bit about compilers. The real value of understanding assembly for a programmer in a high-level language is to get an understanding of what the code is going to compile down to, and this is just as true for Lisp as it is for C. Going into assembly at any more depth than required to understand compilers at a general level is counterproductive.

      GP is wrong that knowledge of assembly gives one an "intuitive grasp of what is a good C or Fortran program"; it gives one a grasp of what C or Fortran code can be compiled tightly. This is a very good skill to have, but programs that compile tightly can be just as badly organized otherwise as any other program.

    9. Re:Going against the grain... by Trep · · Score: 1

      I can definitely second learning assembly. In my sophmore year of college, I borrowed an AVR (8-bit RISC processor) development board from one of the labs in my school, and learned to program it in assembly. Prior to this, I didn't have a real understanding of what the compiler did, or how my code was actually executed. Learning assembly was really a computing revelation for me.

      Admittedly, I am an EE and generally work at a lower hardware level than I think the poster is imagining, but I think it is worth while none the less. My suggestion is take a simple 8-bit processor (AVRs are great! Check out avrfreaks.net) and get a $50 dev board (or even simulator), and learn on that. If you try to do assembly on an x86, I think you will be overwhelmed.

      Of course, even doing embedded systems, I don't write anything in assembly (I use C or C++, some C# and perl for PC side things). And you certainly won't either. But understanding it makes you see the code you are writing differently. Plus, its often useful when debugging to be able to view and understand the disassembly (OK, this doesn't apply so much for something like C# or java).

      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.

      A few years ago, I didn't think I would ever say this, but I love C# for all of the PC utility applications I tend to write. You are right, many languages like this are not particularly run-time efficient, but they are fast, easy, and powerful for development.

    10. Re:Going against the grain... by Anonymous Coward · · Score: 0

      The biggest reason for using higher level languages is productivity. Just like almost no one hand builds cars anymore, not many programmers need to get into the bits and bytes of a computer program.
      But the drawback of higher level languages and prebuilt controls is, what to do if something goes wrong or the control doesn't do exactly what you want it to do. Then you need to know the some of the nuts and bolts of the language to troubleshoot it and/or make your control do what you want. Usually not to the bit level, but to the base language in which the control is written.
      I have only been programming professionally for a little over three years now, but what I found to be the most useful is a solid background in how to program. And I mean how to do OO, how to handle data structures, efficient code design, how to debug, how to test code etc.
      If you are familiar with C-style syntax, picking up most languages will be easy. One exception I know about is Visual Basic for syntax.
      Writing clean, clear, and sufficiently commented code is important. Not just for other coders, but for yourself when you have to look again at your own code months later.

      Another thing to consider is where you want to be and what kind of programming you want to do.
      For BIOS, embedded apps, device drivers, or efficient code, C or assembly might be the way to go.
      For standalone desktop apps, Java/Swing and C++/C#/.Net would be the most popular languages.
      For web programming, C#/ASP.Net or Java/J2EE/JSF or PHP might be where you want to focus. Regardless of which base language for web programming, you will need to be familiar with Javascript/HTML/CSS, and XML.

      Things like Perl/Python/PHP seem to be popular in small shops. At medium to large enterprise level, Java/JSF/J2EE and C#/VB/.Net seem to be the big winners.
      And if you do database access, you will need to be familiar with SQL. The flavors of SQL are similar. Transact-SQL (MS SQL Server) and Oracle seem to be the most popular for medium to large businesses and MySQL for up to medium-size businesses.
      You should become familiar with a popular IDE, such as Visual Studio or Eclipse. Again, it's for productivity reasons. I like Eclipse better than Visual Studio, because to me it is easier to dig out the details of configuration and adjust them if the tool proves inadequate. I especially like BIRT better than Crystal Reports, because if things go wrong in BIRT, it's all laid out in an XML file so you can see what's going on. Crystal Reports isn't like that and it can be a pain to troubleshoot.
      Get familiar with a good debugger. I've only used the ones in Eclipse and Visual Studio, so I don't know how others are.

      One last, but very important point: Keep your skills up to date. Whatever job you are in and whatever skillset you have, it won't last forever. You will want to move around and the languages, processors, tools, etc. will change and be updated. Today, most programs are written for single core processors, but tomorrow you will write for multi-core processors. Today Java 1.6/J2EE and C# 3.0/ASP.NET 3.5 rule the roost. Tomorrow it will be newer version with newer functions and some of the ones you use will be deprecated. Standards change. Browsers change. It was painful to go from IE6 to IE7 for webapps, and now I'll have to deal with IE8. And before any of you get snarky, and suggest firefox or chrome, my customer currently requires IE7, will soon require IE8, and won't consider anything else.

    11. Re:Going against the grain... by arevos · · Score: 1

      GP is wrong that knowledge of assembly gives one an "intuitive grasp of what is a good C or Fortran program"; it gives one a grasp of what C or Fortran code can be compiled tightly. This is a very good skill to have, but programs that compile tightly can be just as badly organized otherwise as any other program.

      You make a good point, and I agree. I was thinking along the lines that even an assembly language program has to be structured, and that structure isn't completely different to a language like C. But yep, programming efficiently and programming well are two different subjects only distantly related to each other.

    12. Re:Going against the grain... by Draek · · Score: 1

      If the programmer really understands assembly, s/he should "intuitively" acquire a sound grasp of what makes an efficient program written in C, Fortran or whatever.

      Fixed that for you. For 95% of cases, however, I'll take the simple, straightforward version rather than the assembly-like one, even if it's a couple orders of magnitude slower.

      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.

      Do you? and I don't mean just computational resources, but also programmer time, budget, etc. All of which are usually affected negatively by 'old-school' languages such as Fortran, C, and *specially* assembly.

      --
      No problem is insoluble in all conceivable circumstances.
    13. Re:Going against the grain... by jwildstr · · Score: 1

      I'll agree with your second point (about managing resources), but not the first, unless I'm misunderstanding you. In general, unless you're doing an operating system or something ludicrously performance sensitive, knowing assembly coding is overkill. Knowing how to read it might be useful down the road, but it's not important for a first step. It leads to attempting to optimize your code off the bat for the processor...and remember, the best way to write code is to write some thing simple that works first, and then worry about optimizing.

      Unless you're indicating that he should have some basic grasp of what assembly is, I'd say learning assembly (much less acquiring a "strong grounding" in it) is not necessary; if you need it for a job, they'll expect you to acquire it on the job.

    14. Re:Going against the grain... by Anonymous Coward · · Score: 0

      This can work well as a hobby; Atmel AVR is a simple 8-bit controller that you can do lots of stuff with, is dirt cheap (less than $100 for a dev kit) and you're at bare silicon.

      Some variants have USB (and have free code for implementing a HID class), and others have DMA - both concepts that will be helpful for driver writing.

      Not to mention that there is a well supported community site in www.avrfreaks.net and GCC/G++ for when you learn when better to use C/C++ than assembly.

    15. Re:Going against the grain... by DoofusOfDeath · · Score: 1

      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.

      I think you're dead wrong. In many, many situations, minimizing program complexity, development time, and bugs is a far more pressing concern than minimizing CPU time, memory usage, etc.

      Understanding assembly has its benefits, but I'd much rather work with someone who's learned how to keep a 100k line program maintainable and correct, than someone who's learned how to write something in 50 assembly instructions rather than 60.

      I have the feeling that you and Mel would get along just fine.

    16. Re:Going against the grain... by JoeMerchant · · Score: 1

      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.

      It's a good knowledge to have, but a bad way to deliver a project (of any significance) on schedule.

      You can develop your own libraries, etc. and become somewhat more efficient, but I'd hate to have to rebuild my toolchain every time I change architectures.

    17. Re:Going against the grain... by BrokenHalo · · Score: 1

      I think you're dead wrong.

      Well, thanks for your input. ;-)

      I never suggested that we return to the 1970s and use assembly code for everything. You and the previous posters taking a torch to my butt have missed the point. Sure, there are more "modern" and productive ways to code, but the point I was making was that it is a Good Thing to know and understand how a program actually works. It is a Good Thing to get into the habit of giving at least some thought to making your code efficient. If you don't, then you can't take any pride in your work.

      I never said that everybody should become a Real Programmer. But if all you can say about your work is that it is maintainable, then you might just as well go find a job as a public servant.

    18. Re:Going against the grain... by Hognoxious · · Score: 1

      Lots of things are good, but that doesn't make them necessary. What's more, there are only so many hours in a day.

      If you're hacking out some horrid in-house accounting or payroll system, learning the quirks and foibles of the underlying processor architecture & instruction set isn't the best investment of your time. And it won't impress chicks either.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    19. Re:Going against the grain... by plopez · · Score: 1

      Fortran 95 is OO.

      --
      putting the 'B' in LGBTQ+
  51. It depends what you want to work on by intrico · · Score: 2, Insightful

    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.

    1. Re:It depends what you want to work on by theoneandonlyed · · Score: 1

      I'm going to second this. I was lucky enough to fall into something that matched what I wanted to do, and what I specialized in, when I got laid off 3 months after graduating. What that was, was working with networking protocols (obscure ones, unproven ones, rarely implemented ones with errors in the specs, you name it). Contrary to what has been said about not writing a kernel your first year, I was handed a rather large book of standards & protocols and given a somewhat comparable mandate (on a smaller but still very ambitious scale). In any case, the job was C, so I did C, and I became very good at C (and used my Assembly knowledge to impress the boss when he had a bug in his code one day - as mentioned by others, practice saying "how can I help?") It being a government contracting environment, where I was on-site and treated almost like a gov't employee, I was able to and did drag C++ in and learn on the job at the first opportunity - but only when it was appropriate to the task. I have moved on, but that early experience led me to a new company, a more complex and commercially viable version of the same router, and that's what I do now, and still mostly in C. And I still drag other (OO) languages in when appropriate, and I wake up happy every day. Do what interests you first. The language will be dictated at first by requirements; later you'll either have different requirements, or you'll figure out what languages interest you, and if you're lucky they'll be appropriate. And you may be writing the requirements. You should have taken a course called "Programming Language Concepts" or similar, and the main thing you should have taken away from that class is that when you have a hammer, everything looks like a nail. Programmers tend to write everything in the language they are comfortable with (often because it's the only way to get it done right and on time). But, that class should also have given you the tools to understand, evaluate, and be able to become fluent in new languages quickly. Again, your education is about learning how to learn, how to think about Computer Science problems, and obtaining a nice collection of reference books along the way. At the end of PLC, you should have realized that it's best to carry more than a hammer. If you were coming to work at my company, I'd say be fluent in C, and at least competent in either C++, Java, or C#, so if you had to go balls to the wall on any of them, you could. Play around with Python, Ruby, or both as much as you can. And learn Perl, awk, shell scripting, and basic UNIX shell commands as much as possible - those are powerful tools that can do a lot for you with minimal effort. This will all take time, but you will end up with a toolkit, and the ability to choose the best language for the job, whatever the job may be, as well as the ability to evaluate and learn the "hot new languages" as they come along. Finally, remember two things: 1) You should always be learning; both on the job and on your own. Sorry pal, but you signed up for a lifetime of further education. 2) Half of your job is to be a computer scientist. The other half is knowing your company's/customer's business. These percentages vary depending on the domain you choose to work in. Hopefully your professors got this across to you, because you signed up for a lifetime of learning your customers' business as well.

  52. This guy's got it! by Anonymous Coward · · Score: 0

    This is the BEST advice. To the commentator that said "it's sad..." - no - what's sad is when I get a recent grad that "knows" 15 different languages but can't code moderately complex algorithms. There's dozens of people that "know" how to code in different languages, but fail beyond moderately complex algorithms (most recent grads fall into this category...from surprisingly "reputable" institutions).

    Databases are often places that could be beneficial in huge ways where technical expertise is lacking. Unfortunately, if you failed or chose not to get an internship or three prior to graduating, plan on spending your first 2 years learning how to navigate at the ground level and getting a general idea of what it is that you don't want to do, then move on.

    Based on what I've seen in contracting, communication is the key to everything. If you can communicate, can identify when you don't know the answer (eh, get over the ego) and are willing to work at it with someone, everything else will come in time.

    The job will dictate the specific needs. Defense industries don't expect much from a new hire for the first year, most (non web related) private companies will give you between 3 and 6 months to fully grasp the situation. If you can't figure it out from there, head back to grad school and choose a management degree.

  53. C and C++ will stay... Java is buzz from 1995... by Anonymous Coward · · Score: 0

    Seriously, "Compile once, run everywhere."... WTF?

    Make me laugh by modding me a troll...

  54. in your shoes by CrashandDie · · Score: 1

    I was in your shoes not so long ago (8 months).

    Fresh with a CS degree, I had been programming for the best part of the past 10 years (call me a nerd) and had a clear advantage over the other students. Hell, I even taught classes.

    Anyway, I was more focused on C++ rather than Java. I much prefer OOP anyway so even though C is a language I quite like, I discarded it. I spent the past 3 years coding only in C++. Every assignment I had, I did in C++, and then I did it in the requested language (or the other way around). No matter if it was a web app or whatever, I always made sure I managed to write the equivalent in C++. This allowed me to learn the advantages but also the shortcomings of the language. Yes, no matter what people say, every language also has shortcomings.

    This was in Southern France. I moved to London in August, and started working on getting a job. Long story short, in the end there were two opportunities, I had both job offers on my desk, and I could choose whichever I wanted. One needed me to move to Peterborough, but gave me a nice relocation package (quite amazing for a first job), the second one was in Central London. The main difference between the two jobs was I what was going to be doing. The one in Peterborough was as junior C++ developer. I'd be porting apps to Linux/Mac. The one in London was as a Technical Consultant, for a company that deals with credential management, PKI, all that stuff. I'd be writing docs, giving advice, deploying products, no programming, or very little, and most of that very little would be Java.

    I chose the Technical Consultant position, and I don't regret it one bit. The thing is that if, as I, you *enjoy* programming, I suggest you don't become a professional programmer. Keep it your hobby. Sure, if your job requires you to do a little bit of it (I've spent about 3 weeks coding for the company since October), well your knowledge won't be lost.

    If you want to take a coding position, then I would suggest Java. We deal with a lot of banks, and I do see a whole lot of Java going round. More than C++. Why? I don't really know.

    I think you could also simply call and ask. Just go hunt for names on LinkedIn and ring them up. Find companies that you like, or that do stuff that you feel could motivate you sufficiently and ask them. Plus, if later you're prospecting for a job, you can always cite the name, you never know.

  55. Mod parent up by artor3 · · Score: 5, Insightful

    These are probably the most important "skills" any recent graduate can have. Companies expect new graduates to be a blank slate. College, especially a BS, is just to give you the background your going to need. After that, it's a question of acknowledging when you don't know something, finding someone who can help you, and, whenever you have down time, finding someone you can help.

    In fact, one of the best things you can do during an interview when asked a hard technical question is to admit you don't know, and say that if faced with that problem in real life, you'd ask a coworker for help.

  56. Learn by Doing by jps3 · · Score: 1

    University is to teach you to think, and learn how to analyze, approach and solve problems in a general manner. This is especially so for undergraduates. Since computer science is such a HUGE field, there's no way for a 4 year program to make anyone an expert. But hopefully through your experience there you can think, think clearly, and apply that thinking and rationality to problem solving.

    However, what you need now is EXPERIENCE. That just takes time, and it takes practice. (Think of the "Karate Kid," with the mantra "wax on, wax off". My martial arts instructor also used to tell a story of his teacher who had asked his teacher, the grandmaster, how he learned to strike so effectively. The answer was he did it 1,000 times, which gave him a good idea how to improve during the next 1,000, which helped improve the next 1,000. And so on.)

    Get out. Do. Gain experience. Experience is the ultimate teacher. :-)

  57. yeah, yeah, all that "it depends" stuff. then... by anothy · · Score: 1

    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 wide set of languages, without obscuring things in a ton of junk.

    i've done hiring for a handful of projects now, mostly C, Perl, and Limbo (one C++ project, but that was only because i knew the developer was smart enough to ignore most of C++ which isn't C). finding Limbo programmers is, well, very hard, but that's not really all that important if you're hiring real engineers or computer scientists. i've never been on a project where we needed a bunch of code monkeys; that sort of thing has a different set of constraints. even for the perl stuff, i hired real CS people who didn't know perl before hiring code monkeys who did. cognitive ability, mental agility, and real CS skill all trump knowing a particular language. if you know C well, you're in a much better position to learn whatever's needed for the job at hand than if you learn C++ or Java.

    note that i'm assuming here that you want to be a Computer Scientist or an Engineer, not just a code monkey. if that's a bad assumption, learn C# and VB and we probably shouldn't talk to each other about technology very much.

    also, complain to your CS department. you got screwed.

    --

    i speak for myself and those who like what i say.
  58. They teach you to learn :) by nicuramar · · Score: 1

    I don't know how it generally is in other countries (than Denmark, where I am from), and I don't mean to sound arrogant or anything, but the CS education here aims to teach people to be able to use whatever language someone throws at them with a minimal effort.

    The taught ML and Java when I got my degree, but these only served to exemplify functional and object oriented languages respectively. I code in C# in the job I have now, and knowing C, C++, a little Java and others, it was a no-brainer to adapt.

    1. Re:They teach you to learn :) by xaxa · · Score: 0

      I don't know how it generally is in other countries (than Denmark, where I am from), and I don't mean to sound arrogant or anything, but the CS education here aims to teach people to be able to use whatever language someone throws at them with a minimal effort.

      UK universities range from best-in-the-world standard to not-very-good, with a couple hundred in between. Since the article only mentions C, C++ and Java (no Prolog, Lisp or Haskell etc) I'd guess the guy didn't get in to one of the better ones.

      I went to one of the best ones. I was taught functional programming (and we happened to do lab work in Haskell) and object oriented programming (and we used Java and C++), and so on. Since getting a job I've met people who've just been taught Java, and don't really understand what the code they write actually does (simple eg they write static to try and get rid of the "!" mark in Eclipse, but don't really know what it does).

  59. Depends on what you want to do with your code by Anonymous Coward · · Score: 0

    Learning any language in particular isn't very helpful in and of itself. To do anything useful, you will need to interface with and use libraries, databases, hardware components, toolchains, source control systems, widget toolkits, etc. You're not going to pick up all of these things right off the bat, so you're going to need to figure out what specifically interests you and then work in that area. Do you like developing user interfaces? Making hardware come alive? Seeing your stuff running on the web?

    C is going to be primarily useful for OS and driver development, and other low-level coding or embedded applications. But for you to be really useful in those arenas, you're going to need to understand a lot more about hardware, hardware interfaces, etc.

    C#/Java is for the web. You'll want to complement with other web technologies, scripting, etc. When people say "C#", often they really mean ".Net" even though those are really two separate things. Becoming familiar with .Net frameworks (or the analogous Java libraries) would be a valuable use of time.

    C++ is a general middleware language. From here, you could eventually move down into hardware land (actually C++ has been gaining popularity in this arena), or develop user interfaces, or slide over into managed languages like C#. If you don't know where you want to go yet, I'd probably suggest spending your time on C++.

  60. Re:Procedural only? Sad by Timothy+Brownawell · · Score: 2, 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 or generic programming languages?

  61. Java in banks by Anonymous Coward · · Score: 1, Informative

    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.

  62. Balance, my child by TheKingAdrock · · Score: 1
    Contrary to some of the posts here, I think it's a good idea to pick one language to focus on, but to balance that with learning more general design/algorithm/etc. skills.

    Don't get too caught up with the latest buzzwords. Do read a lot of books, and a lot of code, and do write small projects.

    Pick one language, I'd suggest C++ or C#, to get very good at. As time passes buy every good book on that subject area, and really master the language and common idioms. Alternate time learning about that language with learning about more general things (operating systems, Win32 internals, Linux kernel, whatever you're interested in).

    Consider the fact that you'll potentially be doing this for a very long time, and don't expect that you'll be an expert in anything in a year or two. It will take time. Hard work does pay off though.

    My other suggestion is to read at least one soft-skill book for every two hard-skill books you learn, even if the soft-skill book is somewhat related to programming (e.g. a book on productivity for programmers). Examples would include books on time management, influencing others, communication skills, etc. Over time these skills pay off at least as much as the core programming skills, if not more.

  63. Re:Procedural only? Sad by Anonymous+Brave+Guy · · Score: 3, Interesting

    The idea is that you can apply computer science to any language you want to learn.

    Which is great, except that with such a narrow range of languages to start with, the OP won't have the kind of general background knowledge and breadth of experience to do that yet. The saying that a good programmer can learn a new language in a week is bull and always has been, and it seems that this particular CS course has not covered as wide a range of languages as we might hope for.

    To the original poster, while you still have an opportunity to do it easily, I strongly recommend exploring a few other languages, even if only to the level of basic familiarity that you now have with C, C++ and Java. You may not realise it yet, but those three languages are all more similar than different in the grand scheme of things, and there are more ways to solve programming problems than fairly low-level, imperative, statically typed programming with C-like syntax. To expand your thinking a bit, I would recommend at least learning:

    • a dynamically-typed scripting language (I'd probably suggest Python, but something like Perl or Ruby would do just as well);
    • a functional language (Haskell or OCaml are probably the best documented); and
    • JavaScript (useful if you're ever thinking of doing web work, but also as an example of a rather different way to do OO than the C++/Java approach, and of a mid-range language with C-like syntax but both dynamic and functional features integrated).

    Most of these are immediately commercially relevant in large commercial fields anyway, and functional ideas (though perhaps not dedicated functional programming languages) are becoming more and more important. For bonus points, a bit of Lisp, Smalltalk and some sort of assembler wouldn't do you any harm either, but these are less directly applicable for most commercial roles. On the flip side, some exposure to .Net, probably via C#, is a valuable commercial asset even if it's rather similar to what you've already learned through C++ and Java: jobs working the typical Microsoft tool stack (C#/.Net libraries/ASP.Net/SQL Server...) are a big field.

    The important thing is that you don't have to master each of these at this stage. Just play around enough, even with simple toy programs, to get the basic feel for the different approaches and understand that the C/C++/Java way is not the only one (and certainly not the best one for all jobs).

    And all the while you're doing this, remember that a programming language is just a tool to express ideas. The more general CS knowledge — general data structures and algorithms, design skills, understanding specific fields such as database theory, graphics and operating systems, and so on — is every bit as important, whatever language you use.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  64. C is still pretty valuable by sentientbrendan · · Score: 1

    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 tools are built from lower level components.

    In industry, not being able to find developers who understand C and low level programming issues is a common complaint.

    Also, C is probably one of the easier languages to pick up. Learn C well, and complement it with a higher level language like Python or, if you must, Java.

    C++ is also valuable if you need to write lots of high performance code, but being truly competent at C++ is a fairly large endeavor compared to learning C. Being good at real C++ means understanding templates, the stl, and also knowing the nooks and cranny's of the language, which there are a lot of. Look up the "most vexing parse" to get an idea of what I'm talking about.

  65. C++ by shutdown+-p+now · · Score: 2, Interesting

    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.

    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.

    1. Re:C++ by Anonymous Coward · · Score: 0

      C++ is the worst OO language ever invented. It deserves to die. Avoid it if at all possible,

      Java, even with all of its annoyances, is currently the best general purpose language right now. That is the reason why it is deservedly the most popular language.

      I really hope that Java gets replaced with something better, but have not seen anything yet that has significant backing.

    2. Re:C++ by BabyBrumak · · Score: 1

      Absolutely learn C++ inside and out. You'll very quickly become familiar with good practices for OOP as well as the important aspects of memory management and thread synchronization. After this, you can learn just about any language or programming style very quickly. Also, as mentioned, the upcoming C++0x standard is going to address an number of the perceived deficiencies of the language, boosting it right back to the top.

    3. Re:C++ by shutdown+-p+now · · Score: 1

      You'll very quickly become familiar with good practices for OOP

      Uh, gods, no! Despite my general recommendation for C++ above, I definitely do not recommend learning OOP/OOD with C++. It's too messy for that, and idiomatic C++ (as seen in STL and Boost) is quite far removed from most of academic OOD theory. For that, Java is rightly the best - least amount of things to get in your way.

    4. Re:C++ by shutdown+-p+now · · Score: 1

      C++ is the worst OO language ever invented. It deserves to die. Avoid it if at all possible

      C++ is a multi-paradigm language. I agree that it's not the best or the cleanest OO language out there, but it is more or less adequate for when you need that, and it offers a lot of other things too. It's also hard to avoid because of its ubiquity. For one thing, you still can't write decent desktop software in Java: Swing still looks crappy on any OS, and even SWT Java apps are horrible memory hogs; startup time is bad as well; and forget about any sort of decent desktop integration.

      Java, even with all of its annoyances, is currently the best general purpose language right now.

      That's a pretty bold statement, especially coming as it is with no arguments to back it. What about C#? What about dynamic languages?

  66. C++ and C#, Ignore Java by Anonymous Coward · · Score: 0

    You should choose C++ and C#, with preference probably slightly weighted to C# unless you think you may end up working on Linux, in which case choose C.

    C++ is usable on all major platforms. By learning C++, you effectively learn C.

    Learning just C leaves you without the major benefits of C++. I have not worked anywhere since 1994 that uses C in preference to C++ (despite the fact that lots of open source projects prefer C, but that is mainly due to wanting to target the widest possible target platforms).

    I recommend C#, because in a Microsoft dominated world, sooner or later you may want a job in a Microsoft shop. Like it or many places are moving from C++ to C#.

    Benefits of C# - you can use C# (or related languages and technologies) to create WinForm apps, services, ASP.Net and WPF apps. If you can do a WPF app, porting it to Silverlight is not too hard (google is your friend).

    C# is available on Mono, so you can take your C# skills to Linux if you wish.

    I've used Java, on and off, since 1996 (which is not too long after it was released). CAn't say I ever liked it. Always felt like trying to write software in a straight jacket. Lots of restrictions, no benefits. Ignore Java, C# is better.

    While you are at, take some time to look at Ruby and Lua, don't bother with Python, the whitespace formatting issues make refactoring too hard to be worth the bother.

    What do I use most of the time? C++ and some assembler. Why - because the things I need to do cannot be easily done from C# and using C to do them would only make my job very much harder.

    1. Re:C++ and C#, Ignore Java by owlstead · · Score: 1

      "I've used Java, on and off, since 1996 (which is not too long after it was released). CAn't say I ever liked it. Always felt like trying to write software in a straight jacket. Lots of restrictions, no benefits. Ignore Java, C# is better."

      Half of our department is switching over to Java. It's easier and faster to write applications in Java than C++, and most of all, it's really maintainable. As long as you don't have too much unmanaged code in there, Java is very reliable.

      C# can do much the same thing as Java, but now you're in the MS straight jacket. That jacket is very expensive and keeps updating itself. It's not very portable (don't ever trust MS making promises on portability). Updates are quick and expensive and because the language keeps updating itself, maintainability is much out of the Window. C# also has a lot of non-OO constructs as well as properties, operator overloading, unmanaged code etc. etc. It's like D, it's trying to do everything (integrated SQL statements, vars, the list goes on).

      With C++ people always say that a good programmer will manage to escape memory leaks and such. I've never met this programmer. One programmer who did say he could wrote an array class. Even after 2 other programmers took a look, it still had serious memory related errors. If you ever use C++, please at least use a static code analyzer.

      OK, ranting aside, YES, Java restricts you. And for a good reason. If you ever meet a language that claims that it has no restrictions, be cautious, because you will have big problems some years down the road.

  67. A few home truths by Zey · · Score: 1

    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, fewer employment opportunities in software development except in increasingly tighter market niches which will by definition sustain fewer jobs. FOSS activists will typically point to app support as the employment generator, which makes little sense as: (1) what leads people into software development is completely different to what makes people survive and succeed as phone jockeys, and, (2) if the software is any good, you'll be putting your support dept out of business.

    The market for Java programmers is woefully overstated. Scratch many job ads and you'll find Java is a "shovelware" skillset that managers include as a requirement for web software developers whether or not they actually use it. Some other scripting language (Perl, PHP, etc) is the usual tool of choice by a large multiple.

    Unfortunately, you'll be graduating into a truly awful economic environment without the prior experience you'll need to secure job interviews. If you're not extremely lucky, the gap between your graduation and your first job will grow and begin to stick out like a sore thumb. Take anything you're offered in a computing field right now before this 'Great Recession' really takes hold to keep your toe in the door. Best of luck.

  68. My 2 cents by Shadow+Wrought · · Score: 1

    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.

    --
    If brevity is the soul of wit, then how does one explain Twitter?
  69. Take it easy by Anonymous Coward · · Score: 0

    Unfortunately, universities and other education institutions are for mediocre people, they supposedy turn anybody into an engineer. Obviously, that's impossible, you can't just be anything you want just by memorizing crap. You won't learn big deal, so yeah, they don't expect a recent grad to know anything really useful, they'll babysit you. Leaving that aside, study what you like most, think of a cool app you'd like to make and code it, learn what you need to achieve what you want and so on. Enjoy your time.

    What they said of C# is more or less true, demand is high, i don't know if higher than other languages but certainly there aren't many ppl proficient in C# so you'll get a good job easily if you master C#/.net.

    About C and fortran, well... fortran is almost dead except for porting old stuff from the 70s and 80s. And C is practically a subset of C++ although it also implies a different approach to modularity and so on, so you'll have to learn C anyway to know C++.

    Bear in mind there's no such thing as THE programming language. The commonly used ones are all the same and you can learn a new one in a couple of afternoons if you already know any one of them in depth.

    And finally, remember that it's not only about programming languages. Knowing certain architectures a company works with, certain APIs, certain kinds of apps, protocols, whatever, will make the difference between a good candidate and the candidate they're looking for. Everybody more or less knows several programming languages anyway.

  70. C++ rather than C by ParkyDR · · Score: 1

    I'd go for C++ rather than C, you can still write straight C functions in C++ but knowing about object orientation is an advantage.

  71. As a C programmer by phantomfive · · Score: 1

    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 isn't exactly the cleanest. Figure out how to code without writing memory leaks. This is the most important thing, I would say.

    Incidentally, since you are reading, I will give you two tips for avoiding memory leaks (these are more important than avoiding segmentation faults, because they are harder to detect and debug). The first is to use automatic variables as much as possible. Linux gives you a 4 megabyte stack by default, might as well use it. A lot of programs can be written entirely with automatic variables.

    The second is, if you do need to 'malloc()' or 'new' memory, write the 'free()' or 'delete' first, and only allocate the memory after you have clearly written where things are going to be freed. These two techniques would have saved me some angry customers if I had followed them originally.

    --
    Qxe4
    1. Re:As a C programmer by phantomfive · · Score: 1

      Also, you might want to learn about efficiency, real efficiency, not just counting clock cycles. Check out Paul Hsieh's site.

      Basically, your first focus should be good design. After that, you can focus on speeding things up by figuring out where your bottlenecks are. If you randomly try to speed things up, you will probably waste time. If you focus on optimization from the beginning, you will make your program both inefficient and inflexible.

      --
      Qxe4
    2. Re:As a C programmer by Anne+Thwacks · · Score: 1
      there is also a shortage of good C programmers. [snip] You will have no problem finding a job. Give me a job then. I have > 30 years C experience, everything from embedded motor control to banking.

      I also have excellent hardware design mcroamps to 500A, microvolts to 3k3V), FPGA design, Postgresql, C++ and PHP skills.

      I also speak and write good English, and I am presentable.

      (And have a current, clean HGV licence and experience of plumbing, and diesel engine fitting)

      --
      Sent from my ASR33 using ASCII
    3. Re:As a C programmer by cryptoluddite · · Score: 1

      I will give you two tips for avoiding memory leaks (these are more important than avoiding segmentation faults, because they are harder to detect and debug).

      Valgrind helps immensely. It will find most memory use after dealloc, double-frees, leaks, and seg faults. And it gives you a stack trace showing you exactly where the problem is.

      I had a coworker diagnosing a problem for hours and couldn't figure out wtf was going on, so when he asked for help I made him run valgrind and it showed a memory use after free in 5 seconds. He knew full well about valgrind, but he's just incompetent You'd have to be not to use it when writing C code.

    4. Re:As a C programmer by phantomfive · · Score: 1

      You'd have to move to California. I don't know what the job market looks like in UK, but if you lived in Silicon Valley and you're as good as you say you are, then you would have no problem finding a job. Note that if you suck at finding jobs this will not apply.

      --
      Qxe4
  72. Depends on the kind of apps you want to write by Anonymous Coward · · Score: 0

    There's a huge difference between writing a kernel of programing for the web, for example. Some people work in AI (artificial intelligence) where lisp is very common. If you work for a bank, Fortran and even Cobol should be in your toolset in addition to Java or C#.
    For web development, javascript is a must, and probably some more scripting languages (php, python, ruby). If you want to create the next operative system, or device drivers, you'd better know C. And so on...

    So, to answer your question, you should first ask yourself what would you like to do. What do you like most? What are your interests? Do you imagine yourself developing games? If so, C++ is a must.
    For anything that requires high performance and speed, the c languages are needed. If you want maximum productivity, scripting languages are the best.

    If don't know what you really want, and you are just concerned with getting a job, go with Java or C#.

    Some of the most important companies, such as Google, use Python intensively, along with c++ and java. Startups in general use open source tools and scripting languages for almost everything, except those little parts of code that are highly CPU intensive, because speed of development is paramount for being succesful and being first to market.

    Hope this helps...

  73. Languages are not the problem by itsdapead · · Score: 1

    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 of the Java acronym thicket). If someone still wants FORTRAN then what it probably means is they rely on something like the NAG library for numerical analysis.

    Learning (say) Javascript is trivial compared to getting up to speed on the object model used to interact with HTML/XML models, and if you use AJAX you'll probably start with an existing framework.

    In some fields, the Big Thing will be databases - SQL and all that (plus the APIs for accessing them).

    So when you're looking at job ads, pay less attention to the languages and more to the other technologies they ask. You ain't gonna learn them all, but it will pay to have some knowledge of what does what.

    --
    In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    1. Re:Languages are not the problem by arevos · · Score: 1

      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.

      OOP in Java and C++ is very different to OOP in, say, Smalltalk or Lisp, so it's not exactly a no-brainer. Even Ruby and Python are a little tricky to get used to. You don't run across Eigenclasses a lot in Java, after all :)

    2. Re:Languages are not the problem by itsdapead · · Score: 1

      OOP in Java and C++ is very different to OOP in, say, Smalltalk or Lisp

      Well, I did qualify my statement as "other procedural/OOP languages like Pascal, C#". Since the OP was basically inquiring about employment prospects, spending time becoming expert on Smalltalk or Ruby (off the rails) would be a brave decision.

      Plus, we're giving the benefit of the doubt here and assuming that the OP was on a proper Comp. Sci. course that covered some of the theory behind the various programming paradigms, and will look at Lisp and say "Oh, yeah, that's just lambda calculus".

      You don't run across Eigenclasses a lot in Java, after all

      Or in commercial programming, I suspect...

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    3. Re:Languages are not the problem by arevos · · Score: 1

      Plus, we're giving the benefit of the doubt here and assuming that the OP was on a proper Comp. Sci. course that covered some of the theory behind the various programming paradigms, and will look at Lisp and say "Oh, yeah, that's just lambda calculus".

      It doesn't sound like the OP has that level of knowledge, to me.

      You don't run across Eigenclasses a lot in Java, after all

      Or in commercial programming, I suspect...

      They're actually not that uncommon in RoR, especially in ActiveRecord plugins. I've worked on two RoR projects commercially, and both involved eigenclasses.

      Although admittedly, RoR isn't that common commercially :)

    4. Re:Languages are not the problem by itsdapead · · Score: 1

      They're actually not that uncommon in RoR

      ...See, now you made me stop bluffing and go and look up what an Eigenclass really is. Thank you - beforehand, when I've done that sort of thing in Javascript or Actionscript I've felt all dirty and lazy, but now I know that there is a fancy name that makes it sound like something out of quantum mechanics, my self esteem is restored.

      Shame about the principle of encapsulation, though...

      But seriously, if you've done Java, "oh, right, so I can add new methods to an instance" shouldn't be a major conceptual leap (even if it makes you throw up in your mouth a little).

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    5. Re:Languages are not the problem by arevos · · Score: 1

      But seriously, if you've done Java, "oh, right, so I can add new methods to an instance" shouldn't be a major conceptual leap (even if it makes you throw up in your mouth a little).

      In practise, it's little more complex than that. In Ruby classes are objects, so in the same way you can use an eigenclass to add methods to the class of an instance, you can use an eigenclass to add methods to the class of a class.

      class Default
        class << self
          def default_accessor(attr, val)
            define_method(attr) { instance_variable_get(attr) || val }
            attr_writer(attr)
          end
        end
      end
       
      class Foo < Default
        default_accessor :bar, 10
      end

      If you're coming from Java, it can be a bit tricky to understand that you can add methods onto classes, as well as into them. Or perhaps it was just me that found the concept initially hard to grasp.

    6. Re:Languages are not the problem by itsdapead · · Score: 1

      Or perhaps it was just me that found the concept initially hard to grasp.

      Try doing objects in Javascript sometime ;-) The "Eigenclass" name seems to be unique to Ruby.

      I think the summary is that a decent CS course, even if it majors on a few common languages (and C/C++/Java are probably still the 3 safest bets), should also cover the diversity of languages and paradigms and the underlying theory. Otherwise, why not buy a copy of "Java for Dummies" and save 3 years of your life?

      I actually did a Physics degree, not CS, and the computing course was like "Day 1: learn Pascal; Day 2: model the soliton solution for the Korteweg-de Vries wave equation"... (The "build a CPU from TTL" day was fun, too - even though you were pretty much told what to do).

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    7. Re:Languages are not the problem by arevos · · Score: 1

      Try doing objects in Javascript sometime ;-) The "Eigenclass" name seems to be unique to Ruby.

      Javascript uses prototype-based inheritance, which is somewhat different again. Ruby has unusually flexible scopes, and eigenclasses provide a way to move from one scope to another. Javascript doesn't have anything like that, so even knowing Javascript fairly well, Ruby still seemed a bit odd to me.

      I think the summary is that a decent CS course, even if it majors on a few common languages (and C/C++/Java are probably still the 3 safest bets), should also cover the diversity of languages and paradigms and the underlying theory. Otherwise, why not buy a copy of "Java for Dummies" and save 3 years of your life?

      True :)

  74. Join a project by greenfield · · Score: 1, Insightful

    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.

    --

    --Sam

  75. Forget C and Fortran by schamberlin · · Score: 4, Insightful

    If you're doing this to gain experience that will help you land a job, forget about C or Fortran.

    Otherwise, it depends on what kind of software job you're looking for. Games and application development tend to be C++. Web-related software is more likely to involve Java.

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

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

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

    2. Re:Forget C and Fortran by OeLeWaPpErKe · · Score: 4, Informative

      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.

    3. Re:Forget C and Fortran by Nursie · · Score: 2, Interesting

      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.

    4. Re:Forget C and Fortran by khayman80 · · Score: 0, Redundant

      I don't have mod points- someone mod parent up!

    5. Re:Forget C and Fortran by Elrac · · Score: 1

      I agree with the parent too.

      To the C# aficionados out there: Something to take into consideration is that the OP is on the eastern side of the Atlantic. VB and C# rule in the US, Java is stronger in Europe.

      C++ is good if you want to be hardcore. C is underneath lots of stuff but not so much modern commercial development. And as a former professional FORTRAN programmer, I don't recommend specializing in FORTRAN any more.

      --
      When one person suffers from a delusion, it is called insanity. When many people suffer from a delusion it is called Rel
    6. Re:Forget C and Fortran by Simon+Brooke · · Score: 3, Insightful

      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.

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    7. Re:Forget C and Fortran by Nursie · · Score: 1

      I agree that there is a need to learn a wide range of languages and become comfortable working in different ways. That's a very important skill.

      I totally disagree with your other statements about C though. I'm sorry, it's not a dying language. There are lots and lots and lots of new, active C projects in FOSS and in business.

      I'm sorry to the evangelists of .Net and other new(er than C) languages, but good 'ol C isn't going anywhere.

    8. Re:Forget C and Fortran by Darinbob · · Score: 1

      Not only is C# essentially Windows only (barring a few rarely used ports), it also seems very much like an I.T. only language. Ie, business, not engineering.

      C/C++ has a much broader reach. Sure, you won't be the darling of the I.T. hiring manager, who only cares about whether you know this week's tech or not. But the people programming for satellites, medical equipment, mobile phones, robotics, automobiles, etc, don't care how much C# you know.

      So rather than worry about what language you want to delve into more, worry about what you want to actually DO and BUILD with that language and aim for that instead.

      Any decent programmer can pick up a new language. Being successful is now about knowing today's fan favorite in depth, but in being adaptable to a variety of tools. Knowing all the details of a language does not allow you to write a Linux kernel or multi threaded database; that skill only allows you to figure out the obscure compiler errors. If you're able to build the complex pieces of code, you'll be able to do it in just about any language.

    9. Re:Forget C and Fortran by eonlabs · · Score: 3, Informative

      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!

      --
      I wouldn't consider the mad hatter mad. Just reality impaired. He sure can make a mean cup of tea.
    10. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      Compare list comprehensions to SQL?
      Come on, it's not even wrong. I've stop reading the whole thread at this point.

    11. Re:Forget C and Fortran by angel'o'sphere · · Score: 1

      While your post makes a lot of sense I politely like to point out that C++ is not cross platform.

      It starts with int, long, short ... how big in bytes is each of them and what exactly is the standard saying about it? And if you write them binary to a file and read that file on a different platform, what is the byte order?

      Where is the standard UI library for C++, where the standard networking library?

      This said: again the rest of your post is insightfull/informative +4 ;D

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    12. Re:Forget C and Fortran by angel'o'sphere · · Score: 1, Interesting


      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

      Hm, don't get what you want to say. Exactly this above is what you don't care about in Java and C#. Only in C++ and C you need to know this badly.

      However the rest of you post makes sense ;D

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    13. Re:Forget C and Fortran by nacturation · · Score: 1

      I would recommend that any SlashDot reader...

      Note: Slashdot isn't written in CamelCase... it's written in Horsecase.

      --
      Want to improve your Karma? Instead of "Post Anonymously", try the "Post Humously" option.
    14. Re:Forget C and Fortran by srwalter · · Score: 1

      Where is the standard UI library for C++, where the standard networking library?

      I'd rather have several really good libraries (GTK, Qt, etc) than a really crummy standard library (GDI, winsock).

      Also, if you want to make assumptions about type sizes, that's why uint32_t, uint64_t, intptr_t, etc, exist. Likewise with endianness and ntohl().

      --
      Freedom is the freedom to say that 2 + 2 = 4
    15. Re:Forget C and Fortran by Stiletto · · Score: 4, Insightful

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

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

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

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

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

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

    16. Re:Forget C and Fortran by libkarl2 · · Score: 1

      C is also a ubiquitous common denominator with respect to programming in general. Many books, and programming tutorials relate back to C or use C examples in their texts.

      Many programming languages are implemented in C and inherit semantics from the C compiler used to build their interpreter.

      Also, many languages have some sort of FFI (Foreign Function Interface) or external linkage scheme that allows a developer to extend that language. C is common to most of these; (ie perl modules, extern C linkage in C++, and on and on...).

      Still others use a compiler that converts it's native source to C code for subsequent compilation by a C compiler -- in an effort to leverage C compiler optimizations in the resulting binaries.

      C is all over the damn place, and there seems to be no end to it. One of the most jaw droppingly stupid things I have ever heard repeatedly uttered over the years was the remark: "C is a dead language." My response is always "yeah kid, you keep telling yourself that."

      --
      You are where you are at the time you are there.
    17. Re:Forget C and Fortran by DoofusOfDeath · · Score: 5, Insightful

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

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

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

    18. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      Also, if you want to make assumptions about type sizes, that's why uint32_t, uint64_t, intptr_t, etc, exist.

      Those types currently don't exist in any current C++ standard.

    19. Re:Forget C and Fortran by marcosdumay · · Score: 2, Insightful

      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.

    20. Re:Forget C and Fortran by marcosdumay · · Score: 1

      "Java basically amounts to a really clean API over C++"

      Well, if you are used to writing assembly for RISCs, that is completely out of your experiency... But that is a severe understating. Java is a severely restricted subset of C++, with an (bad) API that makes a few things easier.

      Java isn't successfull because of its API (if that was the case, Trolltech would have probably take over the world). When deciding what language to use on a big project, managers' main concern isn't what language does already implement those few functions that everybody uses, they ask what language historicaly leads to a bigger rate of success on that kind of project. Now, all the restritiveness of Java show its power here; since it is very hard to completely mess a Java project, it compensates for deficiencies on hiring and evaluating people, building well structured teams, and solving conflicts, leading to a bigger success rate than C++.

      Of course, none of the above applies to hard core engineering tasks, since those management flaws are rarer and teams smaler.

    21. Re:Forget C and Fortran by rtb61 · · Score: 1

      The most beneficial is to try to guess which of the new language or which of the latest iterations of older languages will take the lead. The tilt to that is learning am old language which is used in existing infrastructure and has only a very narrow coder base, risky but can provide good returns. For new languages 'Ruby' looks very interesting and might become the next 'hotness'.

      Of course for some being good at them all C(* - as in wildcard), Java, PHP, Perl, Ruby et al, lucky bastards, is the best solution ;).

      --
      Chaos - everything, everywhere, everywhen
    22. Re:Forget C and Fortran by Tacvek · · Score: 1

      Bullshit. Sure non-primitive objects in Java and C# are almost always heap allocated, but the languages do have stacks, and do not forbid objects form existing on the stack, although it is rarely beneficial for them to be placed there, so the default compilers do not even consider such an optimization (AFAIK).

      Of course it is also perfectly legal for C/C++ compilers to place large objects with automatic scope on the heap, deallocating the memory automatically at the end of the scope.

      One can most certainly understand what is happening in Java/C# programs without knowledge of the freestore, as one can easily tell that each object is in one memory location determined at run-time. Given that one also needs some metadata indicating what memory is in use. Just by thinking that far, a Java/C# programmer understands what the freestore is without even knowing it has a name. Of course they may not understand what the stack is and how the two differ, but that is not really important in many cases.

      --
      Stylish sheet to fix many problems in Slashdot's D3: https://gist.github.com/801524
    23. Re:Forget C and Fortran by kabloom · · Score: 2, Insightful

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

    24. Re:Forget C and Fortran by SL+Baur · · Score: 1

      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.

      True and ...

      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.

      Very true.

      If you do not know this book http://www.amazon.com/Elements-Programming-Style-Brian-Kernighan/dp/0070342075 inside and out, take the time to do so. That's the best advice you'll ever get.

      Languages come and go. Style and taste in programming is timeless.

    25. Re:Forget C and Fortran by ikeleib · · Score: 1

      It can do anything. Anything any other language can do, can be done in C++.

      Such as reflection or anonymous functions? Such generalizations do little to help.

    26. Re:Forget C and Fortran by vigmeister · · Score: 1

      /.

      --
      Atheist: Buddhist in a Prius
    27. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      I think you are confusing "learn" and "do".

      One should always learn how to do CPR. One shouldn't necessarily run around sucking face with strangers.

    28. Re:Forget C and Fortran by khellendros1984 · · Score: 2, 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 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.

      --
      It is pitch black. You are likely to be eaten by a grue.
    29. Re:Forget C and Fortran by Ethanol-fueled · · Score: 1

      Not only is C# essentially Windows only...it also seems very much like...business, not engineering...
      But the people programming for...medical equipment, mobile phones, robotics...

      I work for a medical equipment manufacturer, and while the firmware is written in C, the test software and support applications are written in C#. I've seen Java test software at other companies. There's no reason why both types of languages can't coexist as part of the whole package. The analog is ubiquitous: many modern computers, from cell phones to robots to your PC, use low-level language to talk to the hardware and memory-managed languages for interfacing and applications.

    30. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      It's C++. Using it is a mistake bad enough that after that you may as well just make the experience as interesting as it can be (that is, use all features).

    31. Re:Forget C and Fortran by Anonymous Coward · · Score: 0, Insightful

      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.

    32. Re:Forget C and Fortran by fractoid · · Score: 1

      +1.

      Learn C(++). Learn it good. Even if you most likely won't find many jobs using C++ these days, C++ is the grandaddy of 99% of languages out there. Think of C++ as being a wrench, and C+ / Java / PHP etc. as being balls.

      --
      Rampant carbon sequestration destroyed the Dinosaurs' tropical paradise. I'm here to help repair the damage.
    33. Re:Forget C and Fortran by LizardKing · · Score: 1

      Java is a severely restricted subset of C++, with an (bad) API that makes a few things easier.

      Nope. Java (the language) was influenced far more by Objective C than by C++, as Gosling has pointed out many times. The class libraries also heavily influenced by NeXT/OpenStep (which became Apple's Cocoa libraries), as Sun were considering adopting the OpenStep APIs at the time. Smalltalk was also a major influence, as it had been on Objective C and the NeXTstep libraries. This represents a different strand of object oriented programming development from that taken by C++, which was influenced by Stoustrup's experience with Simula.

      So,looked at from a C++ perspective Java (and C#) may seem like a "restricted subset" of that language, but that misses the point that C++ is a very different language to Objective C or Smalltalk. An Objective C programmer (and those more familiar with Java or C#) would most likely find C++ an unbearably messy hodge-podge of features that despite Stoustrup's assurances have little consistency and poor choices - for instance the STL and features of the language itself which cause copy constructors to be called far too often.

      Java isn't successfull because of its API (if that was the case, Trolltech would have probably take over the world).

      The fact that Qt offers so many alternatives to the STL and other standard classes just reinforces the point that C++ is poorly designed from a usability standpoint. The article submitter seems to think most jobs require C++, which as another UK based developer I find to be quite untrue. Even the limited number of jobs that use a C++ compiler generally mean you'll be working on a code that contains a mess of different C++ features poorly applied in different ways and to different degrees across a large codebase. However, in my experience the cost of maintaining many of these applications has crossed the tipping point where a rewrite in Java, C# or even plain C has been undertaken.

      In short, C++ is looking more and more like a legacy programming language for business applications. As for web applications, it's never been a popular choice.

    34. Re:Forget C and Fortran by gbjbaanb · · Score: 1

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

      this is good advice- maintainable, easy to understand code is the best (and the best programmers write the simplest code that makes everyone else look at it and say "this coding lark isn't as hard as people make out"). But never underestimate the rare times when you need to know more than the lowest-common programmer.

      After all, if you're no better than some outsourced dev from Elbonia, expect you find yourself replaced by an outsourced dev from Elbonia.

    35. Re:Forget C and Fortran by Warped-Reality · · Score: 1

      Turing completeness. You can emulate those if you wish, although it won't necessarily be pretty.

      --
      This is not the greatest sig in the world, no. This is just a tribute.
    36. Re:Forget C and Fortran by plopez · · Score: 1

      Depends on the job. And the company. And the region. The more tools in the toolbox, the more flexibility you have. If you only know the "flavor of the month" you will soon be thrown away. Being flexible worked for me for 20 years. Fortran 77, Fortran 95 (which is OO btw), Java, .NET/C#, C++, Perl, SQL, COBOL/JCL, VBscript, PL/SQL, assembly and probly several more I have forgotten about. It worked for me for 20 years.

      --
      putting the 'B' in LGBTQ+
    37. Re:Forget C and Fortran by Eirenarch · · Score: 2, Informative

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

    38. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      And don't take advice from someone who things that "C+" is a language.

    39. Re:Forget C and Fortran by etrusco · · Score: 1

      Wooosh. Or so I hope ;)

    40. Re:Forget C and Fortran by Anonymous Coward · · Score: 1, Interesting

      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.

      As a developer that has been around for many years, I would like to say that this is a really bad argument. Writing bad code so that your ignorant co-workers can read it is not the way to go. Instead, improve your co-workers skills by writing the code the way it should be written and then explaining it to them. Peer code reviews are a great place to explain why you used a certain pattern or technique and maybe explain it to your code workers that don't understand. You may not be able to do that. If not, recommend some reading. One of the books that had a real impact on me as a programmer is 'Design Patters' by the gang of four (gof). Look it up if you haven't read it. Recommend it to others.

      In closing, readability is important. However, its not more important that scalability, testability, maintainability, reliability, or any one of the many other ilitys.

      P.S. I hope the message before this one was a joke? I'm not going to even respond to it because I'm assuming it is. =)

    41. Re:Forget C and Fortran by AmaDaden · · Score: 1

      For documentation see this link http://www.thunderguy.com/semicolon/2006/08/06/c-sharp-documentation-comments-useless/ I have not used C# enough to talk about the quality of the C# documentation but all my previous experience with visual studio documentation has been nothing but painful.

      As for the standards compliant there is a massive feeling of "the MS way is better then the standard way everyone else uses". I was doing Java work to connect to a web service written in C#. We were the first people to start using their web service and we were giving them advice on what needed to be fixed. One of the few issues we found with it were that their WSDL was full of errors. We were able to deal with it on our end but when asked about it their comment was "oh in .NET land this is perfectly acceptable." The result of course is that some other company worked with them and demanded that they fix the WSDL so a month or two later I had to redo a large chuck of our software.

      For the record I think that MS did a great job with C# and from the looks of it so does most of /. But there are still many issues with it that make it a poor choice for most apps when you have alternatives like Java and C/C++ around.

    42. Re:Forget C and Fortran by ikeleib · · Score: 1

      Turing completeness. You can emulate those if you wish, although it won't necessarily be pretty.

      Therefore, we can likewise say:

      It can do anything. Anything any other language can do, can be done in BrainFuck

    43. Re:Forget C and Fortran by Engine · · Score: 1

      That he even mentions Fortran suggests that he is into heavy numerical computing. For that Fortran still is the language of choice for many, followed by C and C++.

    44. Re:Forget C and Fortran by Warped-Reality · · Score: 1

      Exactly.

      --
      This is not the greatest sig in the world, no. This is just a tribute.
    45. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      My experience is from a very small shop, but I agree strongly with the parent comment. The biggest thing you need to learn is the basics of the language well enough to be able to rapidly develop working SIMPLE code. Simple code, so when it gets shared with someone else (ie you're promoted, on a team, get hit by a bus), the receiver doesn't have to spend a month figuring it out.

          Also learn how to use a debugger. Without a doubt the code you write will have bugs in it, and you'll need to isolate the problem in a reasonable amount of time. If you're going to be designing user interfaces, find a program like Visual Studio, Eclipse, Netbeans, DreamWeaver.

          Finally, if your shop allows you to use other libraries, by all means learn them. It doesn't make sense to roll your own CMS, XML Parser, and other software. For example, we're using picassa and the GData API for an image management system that is also incorporated into google maps (picassa allows for geotagging). That took two days compared to the week it would have taken by writing our own.

    46. Re:Forget C and Fortran by AmaDaden · · Score: 1

      The gang of four book is a must have but I recommend starting to learn design patterns with Head First Design Patterns http://oreilly.com/catalog/9780596007126/. It's an easy and fun read based off of the gang of four book. Personally I read the Head First book cover to cover but I use the GOF book for reference when I actually plan on writing something.

    47. Re:Forget C and Fortran by dave87656 · · Score: 1

      If you're worrying about what the heap is doing, then Java (or C# or any managaged language) is not the right tool for the job. Sure, it's nice to know what it's doing, but it's completely irrelevant to the task.

    48. Re:Forget C and Fortran by badkarmadayaccount · · Score: 1

      Reflection is a type of metaprogramming, so anonymous functions, with some compiler tweaks can yield it. But, yes, I agree, the C++ standard should have focused on provisions for language features, and not features per se. And frankly, I don't see any modern programming paradigm that can't be implemented via pointers and anonymous functions. So why weren't they implemented? That isn't the C way. The C way to OOP is to write your own object system in 15 lines without noticing.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    49. Re:Forget C and Fortran by badkarmadayaccount · · Score: 1

      By your logic everybody should be coding in Ada...

      Not a bad idea actually...

      I would like to subscribe to your newsletter.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    50. Re:Forget C and Fortran by badkarmadayaccount · · Score: 1

      Q:What will the language of modern scientific computing be in 20 years?
      A:I don't know, but it will be called Fortran.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    51. Re:Forget C and Fortran by marcosdumay · · Score: 1

      Well, not everybody. Just corporate developpers.

      But I guess most CTOs have not heard about Ada.

    52. Re:Forget C and Fortran by marcosdumay · · Score: 1

      First, the Java specification makes allocating objects on the heap mantatory, not optional. That isn't explicit, but comes from the specifications of variable scope and the == operator.

      Now, Java programers that don't understand memory management are unable to understand several important details of the language. Eg. they can't comprehend the difference between equals() and ==, altought most learned to not ever use ==, they don't dare overloading equals() or putting custom classes at a hash. (But I disgress, people that don't understand memory management also don't understand where to use hashes.) Also, they can't understand the difference between = and clone(), and most of the time decides to use the latter by trial and error.

    53. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      It is simply not true that C and Fortran won't land you jobs - where I work, the majority of code is in Fortran, and everybody around me uses it. I was asked about it in two of my interviews 6 months ago, and I chuckled at the proposition, but a LOT of applications use code written in 1985 still. To ignore this and assume that newer languages are more likely to be used is nieve.

    54. Re:Forget C and Fortran by Anonymous Coward · · Score: 0

      1) I agree except, that one _should_ learn boost.

      2) Good luck teaching a brand new college grad not to reinvent the wheel. If it works, then countless hours of frustration will be saved. If not, they will figure it out or get marginalized.

    55. Re:Forget C and Fortran by Eivind+Eklund · · Score: 1

      "Java basically amounts to a really clean API over C++"

      Well, if you are used to writing assembly for RISCs, that is completely out of your experiency... But that is a severe understating. Java is a severely restricted subset of C++, with an (bad) API that makes a few things easier.

      Java isn't successfull because of its API (if that was the case, Trolltech would have probably take over the world). When deciding what language to use on a big project, managers' main concern isn't what language does already implement those few functions that everybody uses, they ask what language historicaly leads to a bigger rate of success on that kind of project. Now, all the restritiveness of Java show its power here; since it is very hard to completely mess a Java project, it compensates for deficiencies on hiring and evaluating people, building well structured teams, and solving conflicts, leading to a bigger success rate than C++.

      I am genuinely curious: Do you have any reference that supports the above, or is this conjecture (possibly a common conjecture that influence language selection)?

      The reason I ask is that the kind of project messes I see generally are related to overall poor code quality, with issues like duplication and difficulty of understanding and navigating the codebase being more severe than advanced use of language features. This hit Java as much as other languages - Java has a bunch of frameworks that support making this hard, and a style of development (heavy direct IDE use) that can make mediocre developers avoid learning their project. I've repeatedly seen the lead developer of a 100kloc Java project spend 15 minutes to find a relatively core method; and 100kloc is not that large. (By comparison, for my own 100kloc project implementing the same kind of thing but carefully organized, I spent less than 2 minutes to find anything, and normally less than 15 seconds for a core function.)

      At first glance, I would probably also be scared of using C++ for a large project where Java would do, as I've seen people mess up C++ on a more direct level than Java (insidious language-based bugs) - but thinking about it, I have little reason for it in terms of what I've seen of project messes. Which is why I'm asking.

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    56. Re:Forget C and Fortran by Bill+Dog · · Score: 2

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

      From what I've seen, (2) is just code for the opposite of (1). I.e. I've worked in C++ jobs for 13 years and have never really worked with another actual C++ programmer, because they all seemed to pretty much draw the line at about operator++. I.e. your whole attitude that there really *are* any features that don't lead to good, maintable code. (Vs. just ones you don't know how to use in good, maintainable ways.) For such people, I recommend to them Java.

      --
      Attention zealots and haters: 00100 00100
    57. Re:Forget C and Fortran by Bill+Dog · · Score: 1

      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.

      C with classes with all public members. I.e. no object-oriented design/use of polymorphism, and basically no C++. You're right, by the time C++ became popular, most C programmers were married and had kids, and they weren't about to learn another language, they just wanted to put it on their resume (usually listed as "C/C++"). My advice is learn C++ if one wants to, but don't expect to ever run across an actual programmer of it, at least in meatspace.

      --
      Attention zealots and haters: 00100 00100
    58. Re:Forget C and Fortran by Bill+Dog · · Score: 1

      I was doing Java work to connect to a web service written in C#. We were the first people to start using their web service and we were giving them advice on what needed to be fixed. One of the few issues we found with it were that their WSDL was full of errors.

      I had a similar experience writing a C++ web service to connect to another group's Java one. They had no idea what all that "wizdelly stuff" was, all they knew was that it worked Java<->Java (or rather whatever library they were using worked when the exact same one was used on both sides). I had to explain to them that one of the whole points of web services was programming language and platform agnosticism. The point is, I think any VM'ed language like Java or C# or VB can attract those with insular attitudes ("all I need is my own little world") and less technical ability and interest.

      --
      Attention zealots and haters: 00100 00100
    59. Re:Forget C and Fortran by marcosdumay · · Score: 1

      Well, I have some personal experience watching why Java (or C#) is the choosen language for corporate projects out there. They are choosen because they are at the media, but not only that, they are choosen because managers exchange experiences, and conclude that Java has a bigger success rate. I conjecture that this bigger success rate is due to its simplicity, since more complex* languages behave badly when you add incompetent programmers into the mix.

      Now, nearly all corporate programs are a mess, Java or otherwise. You can't compare code written by well selected people to the one created inside big management hierarchies, where the low managers (that can see who is competent and who isn't) has little saying on who'll be working with them.

      * By more complex, I mean, the languages that give you more different ilegible ways to implement a functionality. But that is hard to measure, so, as a proxy I use the number of different ways to implement the functionality, without caring about legibility.

    60. Re:Forget C and Fortran by oliderid · · Score: 1

      (Mono is nice and all but it's no substitute for MS C# from what I hear)

      If you plan to make desktop App yes (AFAIK, I didn't taste their windows forms for months). If you don't, this is almost the same IMHO. I'm currently working on a mono C# Linux daemon and it does support Unix like Signals and all.

      The downfalls? I had my share of unexpected segmentation faults with Mono framework 1.X . Now it seems to work flawlessly with 2.X (fingers crossed). Second: you have no access to the closed sources libraries developed by third parties. They have shareware protections, it rarely works.

      But I'm still quite pleased by my choice, I simply love the clean c# syntax and those clever get set stuffs :-).

    61. Re:Forget C and Fortran by Kaetuu89 · · Score: 1

      AmaDaden, lay off the crack pipe. "The problem of course (sic) is it's a (sic) MS language"... "I would recommend any Slash Dot reader to go with Java or C++ because they are better documented (r u kidding??!!), more standards compliant and cross platform"... You need to catch up with the times. C# and .NET blow Java out of the water. Sure its a MS Language. Which only covers 90% of the computers in the WORLD.. When will the community get over this emotionalism and bigotry and get with the program. Or does Microsoft need to get a cute little fruit logo to make it work? .NET is the future. Deal with it!!! BTW.. All of you Obaaahhhma lovers out there. I TOLD YOU SO!!!..

  76. Depends on Your Field by mdmkolbe · · Score: 1

    First, what language you focus on depends on what language you will use most in your work. Which depends on what field of programming you focus on. If you work for Microsoft, expect Visual C++ or C#. If you work in an IT department expect PL/SQL or Java. If you work as a Sys Admin expect C, Shell and Perl. And so on...

    Second, you really shouldn't learn focus on one language and expect to get by with that because languages come and go. If you work on a team and your boss says you're working in Python, then you will have to learn Python. The next time it could be Java Script or something else. Thus it is much better to get good at learning new languages quickly. That way it doesn't matter what language your boss throws at you.

    To develop this still you need three things:

    1. Learn lots of languages. Practice makes perfect. You'll also start to notice patterns that make learning new languages easier (e.g. C++ and Java share many concepts and syntaxes).
    2. Learn languages from lots of paradigms/families. You should try to cover as many as possible because it is much easier to learn a new language in a paradigm/family you already know. Examples include: low-level (C/C++), procedural (most languages), object-oriented (C++/Java), functional (Scheme/ML/Haskell), dynamically typed (Scheme/Python), scripting (Perl/Python/Ruby), declarative (Prolog/SQL), shell (Bash/TCSH).
    3. Just as a literary expert can see past the words on the page to the structure of the story behind the words, you should learn to see past the individual language to the structure of the program behind the code. Being fluent in the language you are using is a prerequisite for that, but it is merely a means. The goal is working with the program.

    To give you a sense of perspective there are probably about a dozen languages that I know cold (I use these on a day to day basis) and another few dozen that I know well enough to read but might need a refresher in order to write. For most languages that I don't know, it may take between 2 hours and 2 days to get good at them, but I would still consider taking between 2 days and 2 weeks reasonable.

  77. I dunno.. I'd be careful of web work. by falconwolf · · Score: 1

    Once you get pegged as a "web developer" it can be hard to get a traditional programming job.

    I've heard much the same, if you get branded as a web developer you're pretty much stuck there. But if you work on more general programming paradigms then you can go into a number of different fields. At the same tyme I've also heard basically the opposite. For instance a programmer or CS major may take classes in finance, then they will be more likely to be hired by someone in finance.

    Falcon

  78. Java to some extent by DrXym · · Score: 1
    There is no question that Java is a far more bankable skill than C/C++ these days. But at the same time if you don't learn C/C++ you could easily lose site of the low level stuff - OS intricacies, defensive programming etc. Java hides that stuff. And sometimes its just useful to know what's going on underneath.

    However Java by itself is generally useless. Most Java apps these days make use of a plethora of tools, specifications and libraries - Ant, Maven, Java Server Pages, JDBC, Struts, Spring, Hibernate, Tiles, iBatis, log4j etc. etc. Just knowing the language is nice and all but it probably won't mean you're ready for real world development. C++ is even worse since every OS does things completely differently and even the compiler and C++ standard libraries might have their own quirks.

    My own view is that most programming languages are just so much stuff. It's not the language that matters as much as how suitable it is to a task and what tools / libraries exist to achieve that task. Suitability is a nebulous term but it really depends on requirements. If speed is critical or its a low level thing then C++ might make a good fit. If the stability is critical or database / network latency is a speed limiter use something more high level. In all cases I would argue that maintainability is paramount - most commercial code WILL have to be bug fixed or updated at some point and its easy to write code in any language which is unreadable shit.

    Maybe the answer is to augment what the class teaches you with your own programming. Think of a useful app that you can write to exercise your knowledge of the language, then go grab the tools and write it. Free toolchains exist for C++, C, Java, .NET, Python and most other languages. And buy the book Code Complete and take heed of what it says of writing good quality code.

  79. Re:Procedural only? Sad by tkelechogi · · Score: 3, Insightful

    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.

  80. Forget Fortran by eh2o · · Score: 2, Informative

    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.

  81. Don't sweat it too much. by CharlesEGrant · · Score: 1

    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.

    Developing in-depth expertise in a language is a great idea, definitely you should follow through on that. However you can ratchet down your anxiety level a bit. Your first job will not be to write the Linux kernel or a multi-threaded banking app from scratch. If you are lucky and talented your first job will be to add some feature to the Linux kernel or an existing multi-threaded banking up. You'll be able to study other people's code, see how they did things, and follow their example. If you find sections of code you don't understand, you pull out the language and API references, or if you are really luck, go down the hall and get tutored by the person who originally wrote it. I mean even Linus didn't write the Linux kernel as it exists now from scratch. If you are not so lucky or talented you'll be writing a CRUD application that won't tax even your existing language skills, though it may tax your organizational skills.

    There is a trade-off in picking which language to specialize in. The majority of jobs are probably in Java and .Net, but those languages also have the largest supply of programmers. There are fewer jobs for FORTRAN and C, but there are also fewer programmers qualified for those jobs. To some extent it will balance out, so you can suit yourself. One genuine limitation is that you may be limited to working in one of the major tech centers if you go with one of the non-commodity languages.

  82. double ace by pmarini · · Score: 1

    wrong and wrong
    the Linux's kernel is mostly written in (plain) C, and most of multi-threaded banking apps are written in Visual Basic (I'm serious, I receive dozens of offers a day...)
    sadly enough, C# is ever changing (some would say "evolving", but I doubt there is much evolution in things that break backwards compatability)
    as others have said in their replies, learn to learn and wherever you end-up working (nobody will consider graduate self-training as serious, so save your time and take a deserved holiday instead) just do your assigned tasks and ask around when you want to know or do more
    if you graduated with top marks you should be able to find something rather soon, otherwise count at least 6 months in the current turmoil (and I wouldn't go in a financial institution for now, or you might find the grocery store refusing to sell food to you or calling you names...) &smiley;

    --
    Can I put a spell on those who can't spell?
    Your wheels are loose and they're losing their grip, good you're there.
  83. C++ by Anonymous Coward · · Score: 0

    Learn C++.

    C++ is an awesome language. It is basically better C. It has all the stuff that C has (C++ is technically a superset of C) plus the Object Orientated side to it and STL.

    Very OO written code in C++ will be as clean and nice as C# or Java code. The only difference is that C++ does not force you to write your code that way - it is up to you. Where C# and Java enforce a certain set of rules, C++ lets you do whatever hell you want. This is a really really powerful feature of this language. Sometimes certain paradigms are the cleanest way to solve problems, even though they are not normally OK (think goto in C for example). If you write stuff in C# or Java, they just plain say "NO" to features like this, even though they may be the best/most efficient solution for certain problems. I find this deeply limiting.

    You can make very efficient high performance programs that are as fast as C code. You can take straight C code (except small differences: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C++) and compile it with C++ compiler, and at the assembly code level it will be exactly the same as code compiled with C compiler. Its a same damn thing.
    The fastest desktop operating system in the world was written in C++ (http://en.wikipedia.org/wiki/BeOS). It all depends how the code is written - you can write stuff very very fast if you use a subset of C++ (see this for example: http://en.wikipedia.org/wiki/Embedded_C++)

    Basically what it comes down to is this: C++ is the most powerful language. You can write very small and efficient embedded applications for example using a subset of the language or you can use the full blown features like RAII and templates and write really clean and efficient desktop applications for example. You can make very fast code or you can make it very very easy. It is up to you. It gives you all the power.

    Of course, with flexibility and power comes complexity too. To trully master C++, you have to know both C and the C++ portion of it. And the STL library.

    All the issues that you hear about C++ basically come down to self discipline. If the programmer is an idiot, he will write bad code in any language.

    In my experience I find that most of the complexity in C++ code comes from people that a) do not know how to program or b) know how to write C yet they end up writing "C++" code.

    Also in my experience, I find that most of the bugs (such are buffer overflows) and long development times are caused by C programmers writing C++ programs.

    For example, most of the electrical engineers that I work week keep using character pointers (C strings) for everything, and they keep screwing them up and it takes them forever to figure it out, yet they can just use C++ strings and be done with it. There is absolutely no reason to use C strings in their applications. No performance reasons or anything of the sort.

    Its just that they are lazy and old and they do not want to learn anything new, so they keep writing these so called "C++" programs that are nothing of the sort. Its basically just a C program compiled in C++ compiler.

    Other than the bugs like buffer overflows, it also takes them forever to write stuff because they do not take advantage of OO portion of the language because they do not know how that works. Also, they keep re-inventing the wheel. For example, every time they do searching withing strings, they write pages worth of code. Yet, C++ already has this code written and its built into standard C++ strings. Re-coding that in C is dumb and it just wastes time.

    So here is what you should do: Learn C++. Really learn it. And do not write straight C code in it. Use OO and especially use STL, like strings, vectors, maps, all the algorithms, etc. It really makes you very very productive - as productive as people writing stuff in Java for example. It also makes your code much more robust.

    Also,

  84. Learn how to use the OOAD process by Anonymous Coward · · Score: 0

    First learn a tool (like C# or Java), then learn the process for using the tool to produce quality products. What good is having a tool if you don't know how to use it? This is the best book on the OOAD process I've read: http://www.amazon.com/Driven-Object-Modeling-UMLTheory-Practice/dp/1590597745/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1237660723&sr=8-1

  85. C++, web + SQL by pyrbrand · · Score: 1

    Really, if you know C++ well you've learned enough to understand the whole family of C, Java, C# etc. So spend a few weeks with a good book, understand the core concepts and you're good to go with OO procedural C derived languages.

    Then, learn some web stuff to be marketable - just some basic HTML/CSS + learning JavaScript's crazy scoping and memory issues and your good

    Finally, familiarize yourself with some basic SQL so you're ready for web backend stuff and now your good to go!

    Just make sure you pick up good, secure techniques - understand and know the STL and secure C functions (_s). Understand what XSS, SQL injection etc are and how and when to safeify input.

    Any shop worth its salt (at least who have an engineer doing the hiring) knows that you look for good people who can learn the environment. This doesn't mean someone who has their particular set of languages and APIs as a bullet point on their resumes, it's someone who comes in and understands their problems quickly during the interview.

  86. Don't specialise by Savage-Rabbit · · Score: 1

    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.

    But C, C++, Java and C# are the most commonly used and once one has good command over them one is that much more hireable. As you pointed out these languages are all related and IMHO the best way to solve the depth-of-knowledge problem he mentioned is not to specialise. Go out and get a couple of books on general OOP and Software design that doesn't tie you to a specific language but that teaches you OOP and general Software design principles on a higher, language independent level, this is one of my favorites. Once you have that kind of understanding you can switch between the above mentioned languages relatively easily. After that is done the most important thing is to get experience. This is IMHO best done (and I'm sure other people's milage varies) by getting an entry level job and either joining a FOSS project for additional experience or write a few small commercial apps of some sort. If you take the latter route the important thing isn't so much, say, writing a killer app for the iPhone or Android that will make you a millionaire over night as much as it is simply to establish a track record you can point at when applying for a job. If you make a few bucks along the way that doesn't hurt either. The beauty of joining FOSS projects or setting up your own is that even if all you can get in this economy is a job flipping burgers at McDonald's you can still build credible experience in your spare time.

    --
    Only to idiots, are orders laws.
    -- Henning von Tresckow
  87. Wait by Anonymous Coward · · Score: 0

    The professional thing to do, is just to wait until you have a job and know what you will need to study. Oh and on interviews never say that you don't know "language" very well, just say how much or little you did in it. For some reason or another saying I did a very small project in it sounds so much better than saying I don't know it very well because I only did ten small projects using that language.

    Getting a job is not about lying. But it is about avoiding to spell the truth out.

  88. Interview by br00tus · · Score: 2, Insightful
    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.

  89. Objective-C by falconwolf · · Score: 1

    I've done some C/C++ programming on Windows PCs, but not in years. Now I use Macs mostly though I also have a Linux PC and may install Ubuntu on my Mac. Objective-C is the mainstay language on Macs but I don't know if it can be programmed on Linux or Windows PCs. Anyway I want to start programming again but I want to be able to program cross platform so I'm wondering if I should stick with C/C++ or try Objective-C. Currently I'm trying to learn Java.

    Falcon

    1. Re:Objective-C by Pictish+Prince · · Score: 1

      I've done some C/C++ programming on Windows PCs, but not in years. Now I use Macs mostly though I also have a Linux PC and may install Ubuntu on my Mac. Objective-C is the mainstay language on Macs but I don't know if it can be programmed on Linux or Windows PCs. Anyway I want to start programming again but I want to be able to program cross platform so I'm wondering if I should stick with C/C++ or try Objective-C. Currently I'm trying to learn Java.

      Falcon

      I've been writing Objective-C/Cocoa apps for mac for the last 3 years. I just installed gentoo on my new laptop and have installed gnustep, which is designed to work like the Cocoa framework. I haven't had much time to play around with it but I'm hopefull I can soon do linux versions of my apps RSN.

      --
      Only his tendency toward a dazed stupor prevented him from screaming aloud.
    2. Re:Objective-C by prefec2 · · Score: 1

      actually there is an objective-c compiler in the gnu compiler collection (gcc). And the openstep project uses objc for its applications and libraries. Openstep applications run on any Unix and in most cases these applications also compile on Mac OS X, because the API is compatible.

    3. Re:Objective-C by prefec2 · · Score: 1

      There is a Openstep implementation (GnuStep) which is avaliable for al major OS. see: http://de.wikipedia.org/wiki/GNUstep
      http://gnustep.org/

      The screenshots lack a bit, but I've heard the stuff is theme-able.

  90. If you want steady employment now - Java by Samschnooks · · Score: 1

    Let me preface this post with: what I'm saying will only be relevant for a few more years and then things will be dramatically different.

    I used to be a C/C++ programmer. I wrote OS code and then middleware. Then came the internet and Java EE. My expertise became irrelevant because no one wrote their own middleware layer anymore; especially in C++. With Java EE and all the Java based layers out there, there was no point in rolling your own. From what I can see is that Java is the language for business and that's where you going to get the work. Also, learn SQL and as someone mentioned above, VB and C# - Microsoft has a huge business base.

    If it's not too late in your program, I would add some Accounting classes too. Minor in it, if you can or better yet change majors get your degree in Accounting.

    As time goes on, the way we develop software is becoming more and more obsolete. As an example, BPEL. The business person, with a GUI, "draws" how the computer will handle any business process. No programmer needed.

    Sure, there will be a need for programmers at some level, but a team of programmers for every large business? That's going the way of having a blacksmith in every town.

    Who knows what the future will hold.

  91. By the way ... by freeplatypus · · Score: 1

    I am Java developer with about 3 years experience. Previously I worked with PHP for couple of years. I have also worked a lot with SQL (Oracle and MySQL), and sometimes with Perl and bash.

    Now from all of that I can say that Java seems to be the "simplest" to use. All the tools like profilers, unit testing frameworks, great IDE (eclipse) with plug-ins for everything possible ... but I am getting fed up with learning new framework every 6-12 months that changes nothing but XML configuration format (yes, I am exaggerating).

    I want to start fooling around with C++. I know that I should start with STL/Boost combo, but how about other tools? Some helper tools to detect critical errors (error prone parts of code)? Some unit testing libraries? Is there good IDE (Visual Studio Express seems awfully .NET oriented), or can I buy something reasonable? All tips will be welcomed.

  92. "commercial-ready experience" by Anonymous Coward · · Score: 0

    "commercial-ready experience"?

    Go back to school. You missed something.

    Maybe it's not your fault.

    Maybe try a different school.

  93. Theory and Science, Not Language by FlipperPA · · Score: 2, Interesting

    I'm a firm believer that the theory, science, and logic of programming is far more important than the language itself. Once you understand the important aspects of elegant design, the rules of most languages are the same. I graduated in 1996 - a while back now - but remember that the thing I thought most sorely lacking from my education was a firm understanding of database architecture and design. That is going to be just as important as understanding solid programming in any job. If a database is well designed, the code should almost write itself, once you understand end users requirements.

    After that mouthful, Tiobe does a fairly good job at monitoring trends in programming language popularity. Java/C/C++ are 1/2/3 according to them. You can see their full list and trends here:

    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

    Regards,

    -Flip

  94. Only 3?? by Anonymous Coward · · Score: 0

    Only 3?
    Hell here in most courses we cover at least those(c,c++,java) plus assembly(depending on the university x86 or risc), prolog and some functional(usually scheme or haskell)not counting scripts (php, javascript, xml, html, sql are the bare minimum) in three years.

  95. Don't take the adverts too seriously. by Richard+Kirk · · Score: 1

    I agree.

    I would also add that the Human Resources droid, or agency lackey that often writes the job advertisements does not necessarily understand what a house computing environment is like. They tend to focus on the languages and packages, and ask for experience in exactly that. The people who actually are going to employ you ought to be more flexible. If they ask for a language you have never used, then it would make sense to read up about it, but you can then say 'hey - I have only learned about this since I read your advert'. You can learn languages, but you never really know them until you have used them for a serious job, and trying to blag it would probably be fatal..

    You might get unlucky. I was once given a 'C' grammar test as part of an interview. The company had had a lot of people who claimed godlike computing powers, and this was their way of sorting out the more obvious chaff. Again, you can be flexible in your answers. I remember my test having a long statement with no brackets and all kinds of precedence. I gave three replies... (1) I know where to find the precedence rules (page 53 of Kernigan & Ritchie, the page that is all yellow on my copy) and I would look it up rather than trust to my memory (2) Nobody ought to be writing code like that anyway - brackets don't cost, and (3) my guess at a solution.

    Good luck anyhow.

  96. Java Was:C++ by Sven+Jacobs · · Score: 1

    Being a Java enthusiast, I must reply to your arguments regarding Java:

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

    2) 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. If you want closures and other syntactic sugar right now, have a look at Groovy, which is a scripting language based on the JDK. You can even compile Groovy code to 100% pure Java classes!

    1. Re:Java Was:C++ by shutdown+-p+now · · Score: 2, Insightful

      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. It won't have a lot of other stuff 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 - Neal Gafter - has joined Microsoft to work on .NET languages. Here's what he had to say about closures in Java, and Java in general, 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.

    2. Re:Java Was:C++ by physburn · · Score: 1
      With writing C++ you have worries about memory management, error managment (exceptions), and multithreading that you simply don't have with Java. So java is a much both a much stronger and easier language.

      Java Programming Daily items at FD.

    3. Re:Java Was:C++ by owlstead · · Score: 1

      Sorry to say it, but I've followed your links and I do think he's completely wrong (the he being Neil Gafter). Java is supposed to be maintainable first. I do think that all Java programmers will understand closures. And I don't think you should add to the platform each time someone shouts that he needs to have feature X, because closures will not be the end of it.

      In that respect it is good that Sun kept such a close watch on the Java language and VM. And I don't want to have the libraries written in multiple languages. I need to be able to browse the (open sourced) runtime when debugging. And I will need to understand what is going on while doing it. I've seen lots of code *in presentations* on closures that I don't directly understand, and I've got +10 years of programming experience on a university level. In general, the pressure to add things to a language is huge, but should be contained - it's always easy to say: hey, we're missing this and that, please add!

      Let Microsoft be the one that does to try it all. It's great to try and understand each of the .NET runtime languages when trying to browse through the mess they call an API.

      Also, your source is a blog that points to a twitter page as source. Yeah, whatever. The JDK 1.7 will be out sometime next year (2010), so who knows what will happen in the mean time.

    4. Re:Java Was:C++ by shutdown+-p+now · · Score: 1

      Sorry to say it, but I've followed your links and I do think he's completely wrong (the he being Neil Gafter). Java is supposed to be maintainable first. I do think that all Java programmers will understand closures. And I don't think you should add to the platform each time someone shouts that he needs to have feature X, because closures will not be the end of it.

      See, that's what I mean when I say that Java becomes a "legacy platform". You're afraid of new things because you view them as threats to maintainability.

      There is no simple answer to that, but I will try. This stage is always passed as languages develop. For some time, new features are considered "academic" and "radical" and "not buying much" and "hard to understand". This was the case with non-deterministic garbage collecting not so long ago, with OOP back in the days of Simula, and with structured programming replacing GOTO even before then. But if the feature is actually useful, it is developed and polished, efficient implementation approaches are devised, and eventually it becomes mainstream.

      Now back to closures. At this point, they are mainstream. If you look at the top 10 languages (let's assume those are "mainstream") according to TPCI, you'll see that all those either have closures already in some shape or form, or are planning to get them in the next major version (C++0x), with two exceptions: C and Java. Why C won't ever have them is fairly obvious, I think - apart from being essentially preserved as is, it also frowns upon such high-level constructs with non-transparent implementations. So we can safely say that out of mainstream high-level programming languages, Java is the only one which does not have closures, and does not plan to add them either. That's a clear mark of not getting along with times.

      I mean, think about it: today, Visual Basic, the language traditionally labeled as one for the "less bright" programmers, has lambdas/closures!

      Yes, of course closures won't be the end of it, just like OOP wasn't. Evolution of language design keeps going on, and I strongly suspect that typeclasses will be the next big thing, for example. But that doesn't mean one shouldn't try to keep up.

      And I will need to understand what is going on while doing it. I've seen lots of code *in presentations* on closures that I don't directly understand, and I've got +10 years of programming experience on a university level.

      I'm not sure what you mean by "programming experience on a university level", but if anything, it seems to be an indication of how bad things are. If you ever had exposure to Scheme in the uni, you should have absolutely no troubles understanding how closures in any language works. On the other hand, if the only thing you've ever dealt with is Java (and maybe C/C++), then you really missed a lot more than you know about.

      In general, the pressure to add things to a language is huge, but should be contained - it's always easy to say: hey, we're missing this and that, please add!

      Of course, which is why academic languages tend to add them first, then experimental derivatives of mainstream languages, and then finally mainstream languages themselves. With closures, at this point, we are long past stage 3. Time to wake up.

      Let Microsoft be the one that does to try it all. It's great to try and understand each of the .NET runtime languages when trying to browse through the mess they call an API.

      I'm not going to pick up the bait regarding the "API mess", though I have to note in passing that Java APIs aren't significantly better there. As for the question at hand - if you refer to stock libraries that come with .NET, then they're all written in C# (which you'd have known if you actually ever looked at the code...); the only stuff that's in VB is

    5. Re:Java Was:C++ by shutdown+-p+now · · Score: 1

      By the way, for more up-to-date stuff regarding closures in Java (and Java language evolution in general), this thread, and also this poll linked from that thread, can be an interesting read.

    6. Re:Java Was:C++ by owlstead · · Score: 1

      Sorry to say it, but I've followed your links and I do think he's completely wrong (the he being Neil Gafter). Java is supposed to be maintainable first. I do think that all Java programmers will understand closures. And I don't think you should add to the platform each time someone shouts that he needs to have feature X, because closures will not be the end of it.

      See, that's what I mean when I say that Java becomes a "legacy platform". You're afraid of new things because you view them as threats to maintainability.

      There is no simple answer to that, but I will try. This stage is always passed as languages develop. For some time, new features are considered "academic" and "radical" and "not buying much" and "hard to understand". This was the case with non-deterministic garbage collecting not so long ago, with OOP back in the days of Simula, and with structured programming replacing GOTO even before then. But if the feature is actually useful, it is developed and polished, efficient implementation approaches are devised, and eventually it becomes mainstream.

      Now back to closures. At this point, they are mainstream. If you look at the top 10 languages (let's assume those are "mainstream") according to TPCI, you'll see that all those either have closures already in some shape or form, or are planning to get them in the next major version (C++0x), with two exceptions: C and Java. Why C won't ever have them is fairly obvious, I think - apart from being essentially preserved as is, it also frowns upon such high-level constructs with non-transparent implementations. So we can safely say that out of mainstream high-level programming languages, Java is the only one which does not have closures, and does not plan to add them either. That's a clear mark of not getting along with times.

      I mean, think about it: today, Visual Basic, the language traditionally labeled as one for the "less bright" programmers, has lambdas/closures!

      Yes, of course closures won't be the end of it, just like OOP wasn't. Evolution of language design keeps going on, and I strongly suspect that typeclasses will be the next big thing, for example. But that doesn't mean one shouldn't try to keep up.

      I don't care if they are main stream. They are not sufficiently OO, they are not required in any way and in general they are very difficult to read. If every language must include constructs that are present in every other language, then we get a mess of languages that all try and do all things. That's not a healthy situation at all.

      And I will need to understand what is going on while doing it. I've seen lots of code *in presentations* on closures that I don't directly understand, and I've got +10 years of programming experience on a university level.

      I'm not sure what you mean by "programming experience on a university level", but if anything, it seems to be an indication of how bad things are. If you ever had exposure to Scheme in the uni, you should have absolutely no troubles understanding how closures in any language works. On the other hand, if the only thing you've ever dealt with is Java (and maybe C/C++), then you really missed a lot more than you know about.

      Ok, that was a bit too short. I've had languages, parsing techniques and programming classes in my CS study at university. Besides that I have 10 years of design/programming experience. Most of that time was spent in the core Java language (and cryptography). I try out many languages including scripting languages that include closures. I find them very strong, and very difficult to read (thus to maintain). Especially Lua I found extremely strong for such a small language, and completely wrong for enterprise development.

      In general, the pressure to add things to a language is huge, but shoul

    7. Re:Java Was:C++ by shutdown+-p+now · · Score: 1

      They are not sufficiently OO

      Huh? They were in Smalltalk, the language for which the very term "object-oriented" was invented, and were a core part of its "everything is an object" philosophy (to which it truly adhered, unlike Java)! Of course they're "OO" - they're still objects of some class in all OO languages I know.

      By the way, world does not revolve around OO either, you know? It's good approach for some things, not so much for others.

      they are not required in any way

      Loops aren't required either, you can make do with IF-GOTO. Similarly, you can of course capture state explicitly with objects, but if you need to do it all the time, it's time to think about syntax sugar for that.

      in general they are very difficult to read

      That's your opinion. Thousands of Python, Ruby and C# programmers out there disagree. Heck, according to the polls, 2/3 of Java developers disagree!

      If every language must include constructs that are present in every other language, then we get a mess of languages that all try and do all things.

      Every language mustn't do that, but we have an agreement on the "basic" stuff that every language must include lest it be obsolete. A few decades ago, structured programming was similarly considered fancy, and not every language had it. Today, can you imagine an imperative language that would claim that "While" and "For" are fancy and unneeded because you can do the same with IF and GOTO?

      Ok, that was a bit too short. I've had languages, parsing techniques and programming classes in my CS study at university. Besides that I have 10 years of design/programming experience. Most of that time was spent in the core Java language (and cryptography). I try out many languages including scripting languages that include closures. I find them very strong, and very difficult to read (thus to maintain). Especially Lua I found extremely strong for such a small language, and completely wrong for enterprise development.

      First of all, obviously, closures aren't specific to scripting languages. It's just that they became mainstream there a bit earlier.

      As for the rest... ah, that magic word - "enterprise". Are you saying that closures aren't "enterprise"?

      We need to add them when and if they make a positive impact on the language.

      They are making a very positive impact on many languages out there which acquired them. Heck, did you miss all the "WTF, I didn't realize you could do things that easy and short!" from all the Java-to-Ruby converts back in the day when Rails was all the hype?

      As it currently stands I would create a rule within the company not to use them at all.

      That's sad. You sound like a true reactionary, with fear and misunderstanding blinding you.

      Could I do this if large parts of it would be written in another language?

      Of course, you just have to learn that language. It's not like it's hard for someone with 10 years of experience... right? ~

      In practice, most .NET developers, even junior ones, are reasonably familiar with both C# and VB. It really isn't hard.

    8. Re:Java Was:C++ by owlstead · · Score: 1

      I'm saying that closures in Java are not really enterprise, because in enterprise development (development with a sufficiently large body of developers really) you've got a big mix of experienced and less experienced programmers. These less experienced programmers generally don't go to the polls and/or Java forums. It's highly unlikely their votes are counted, as they normally would not even be aware of "closures". You tend to build applications and keep maintaining them for a long time, so the focus is on maintainability.

      I won't go into the Ruby on Rails thing because I think it was too much hype. I can understand EE programmers wanting to do things easier, but easier is not always equal better. There is a reason why it *was* all the hype.

      As I said, I'm a pretty big proponent of the 1.4 to 1.5 changes. If I weren't you might call me reactionary. Now you just use it to propel your argument. Lets not call each other names. As for the familiarity: I've got a mixed group of about 20 developers around me, and I don't know anyone that uses closures, and most will not even know about them.

      As said, I do know what closures are and I can program in them, but I dislike the syntax and the general idea of building them into Java, where they are less needed and difficult to integrate right.

    9. Re:Java Was:C++ by shutdown+-p+now · · Score: 1

      I'm saying that closures in Java are not really enterprise, because in enterprise development (development with a sufficiently large body of developers really) you've got a big mix of experienced and less experienced programmers. These less experienced programmers generally don't go to the polls and/or Java forums. It's highly unlikely their votes are counted, as they normally would not even be aware of "closures". You tend to build applications and keep maintaining them for a long time, so the focus is on maintainability.

      I do not dispute that. I dispute your claim that lambdas/closures hamper maintainability. I have also worked in an environment which is a mix of experienced and less experienced programmers. From my experience there, C# lambdas never posed any difficulty for anyone.

      Speaking of maintainability, I would furthermore claim that typical use of lambdas in C# code today makes the code more maintainable, not less so. The reason is the same as always - they introduce a higher level of abstraction on the "what, not how" scale. Consider:

      // "How"
      List<Customer> customersFound = new List<Customer>();
      foreach (var customer in customers)
      {
        if (customer.Name == nameToFind)
        {
          customersFound.Add(customer);
        }
      }

      // "What"
      List<Customer> customersFound = customers.FindAll(customer => customer.Name == nameToFind);

      In my opinion, the second code snippet isn't just shorter - it's much more readable as well, because it more succinctly captures the intent of the code, without burying it in the steps that are needed to perform it. The first code snippet could use a short comment in front of it to speed up reading of the chunk of code, so that the reader doesn't have to step through the code to detect the pattern and realize that it is just filtering of the collection. The second snippet does not need it - the intent is immediately clear from the code.

      Note also that neither does the programmer who rights this line of code has to understand fully the theoretical underpinnings of closures, nor does the programmer who later reads this code and maintains it.

      I won't go into the Ruby on Rails thing because I think it was too much hype. I can understand EE programmers wanting to do things easier, but easier is not always equal better. There is a reason why it *was* all the hype.

      It was hype because neither Rails nor Ruby did not deliver on many other points, most importantly, scalability - but that has much more to do with the specific implementation of Ruby and Rails than with language design issues (it's not surprising, too, given that Ruby is by far the slowest of mainstream scripting languages out there). However, I haven't seen any serious criticism of the Ruby philosophy of using blocks/closures throughout (which is no surprise, as it is really Smalltalk philosophy).

      As said, I do know what closures are and I can program in them, but I dislike the syntax and the general idea of building them into Java, where they are less needed and difficult to integrate right.

      Java is already one step away from closures since it has anonymous inner classes, which are almost there. It is trivial to bring it to completion.

      By the way, when you speak of "disliking syntax", I'm really lost there, because there are at least 3 major proposals for closures in Java with vastly different syntax, and countless minor ones as well. If you dislike BCGA syntax, I can understand that - it is certainly alien for Java. But what do you believe is wrong with CICE with respect to syntax (or, for that matter, semantics)? If you haven't seen it yet, do take a look. I don't see how it requires any Java developer to learn anything that he doesn't know today already, experienced or no.

  97. Get a job that matches your knowledge by jwhitener · · Score: 2, Insightful

    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.

  98. Wrong way to look at things by janoc · · Score: 1, Redundant

    I happen to develop software for living and recently I am also teaching at an University at both undergrad and graduate levels. The students often ask which tools are we going to use and which ones should they learn. And I am always telling them - "the right tool for the job". If you want to learn tools, do not go to school, get a training course. The school is there to teach you the concepts behind and how to think. Focusing on the tools is like a carpenter learning only to use a hammer and screwdriver but not how to actually build anything. Also, the carpenters have more tools than just a hammer and screwdrivers - so do expect to have to learn more than the standard C/C++/Java/C#, they are not one-size-fits-all tools. I have honestly stopped counting the languages I had to learn - they are only tools to get the job done, and you learn a new one when it does the job better than something you knew already.

    In the programming case - learn your theory - principles of computation, logic, data structures. Programming languages are not important, if you are any good, you will be able to pick a new one up in a few days/weeks at most. However, that assumes that you know how to learn and how they work. Not to mention that a particular tool or software may be obsolete in a few years, then what? If you have learned only how to "push buttons", you are screwed, your skills are now worthless. Nobody may hear about C++/Java/C# in 10 years, but you do plan to be working in the field for longer than that, don't you? So you need to be able to adapt and keep learning - the principles will be similar, only the tools may be different.

    Also, as many pointed out, do not expect to be able to write an enterprise application right out of school. Nobody does that. The school gives you the foundations, but you need practical experience. And that comes only with time, there is no school that can give you that. Take on internships, part-time jobs, work on OSS projects, volunteer - all that helps to build up your skills. I was lucky to have a part time job at a small software company during my studies (I needed the money to support myself). That company did things "by the book" - proper analysis, everything documented, proper design. At the same time that I was learning software engineering in school, I had a hands-on tour de force in a real enterprise solving real problems using the methods I had just heard about, under supervision of really good engineers. That has helped me immensely - you cannot pick up all that knowledge from the courses alone.

  99. Re:Procedural only? Sad by Garridan · · Score: 1

    The saying that a good programmer can learn a new language in a week is bull and always has been...

    Really? I've learned about 20 different languages at one time or another, and in every case, I was up and running in a couple of days. Am I proficient at them all right now? Hell no. I currently work in C, Python, and Cython, and I'm decent with them all. Put me back onto a project using PHP, Perl, etc., and I'm confident that I'd be back up to speed in under a day.

    Fluency, of course, takes years of experience. But knowing the language enough to fix bugs, implement algorithms, etc., should come to a good programmer in the matter of a week or two. Management of large projects requires fluency, but not every coder needs to be an architect.

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

    I'm a final-year Computer Science student from the UK. During my studies, we covered 3 programming languages: C, C++ and Java.

    And the other two languages were...?

    --
    Beetle B.
    1. Re:3 Languages? by Anonymous Coward · · Score: 0

      WoW,Best Answer !!

    2. Re:3 Languages? by Anonymous Coward · · Score: 0

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

      This is actually not far off the mark.

      What you are feeling is very much a clear indicator of how new to the field you are. As you progress in your career, you will find that many languages you will use have more in common than differences (C, C++, C#, Java being prime examples).

      You'll come to find that learning the languages is easy and doesn't take long at all; you'll actually spend more time learning about frameworks than languages.

      Eventually, you will come to the realisation that they are all just tools and the real work is in the problem itself.

      My advice would be to get a solid understanding of all four languages (don't sweat trying to memorise the frameworks each offer - you will learn those as you go, and you'll never be able to retain a complete knowledge of them anyway)

  101. Surprisingly close by mcrbids · · Score: 1

    Modded insightful, the advice to do whatever you like is surprisingly close, IMHO,

    See, college really exists to get you familiar with the basics. It then takes EXPERIENCE to advance to coding kernels and the like. How much of that you do is determined by what you LIKE to do. So, you go to school, then you bang around for a while on small jobs and hobby programming 'till you find your groove. Then, you go into whatever field you like.

      make a very comfortable living as a programmer, and I'm damned good at it. But kernels and drivers? Not my gig. But I'm mean when you need a perl/php script with javascript and ANSI SQL. I literally dream in code.

    So bang around, find out what your favorite cup of tea is, and then pick your industry based on that experience. Programmers are in a unique position: you basically never have to choose between love and money, because you are so much better at what you love that you'll generally make more money there, anyway!

    What did you Linus was doing when

    --
    I have no problem with your religion until you decide it's reason to deprive others of the truth.
  102. It Depends by cylence · · Score: 1

    It depends very heavily on what you want to do. Even what operating system you intend to work with makes a tremendous impact on what the skillset should be. For instance, I'm a Unix programmer, and any experienced Unix programmer really should know C--even if it's not the actual language you'll spend most of your time with, C knowledge goes a long way on Unix. I personally find plenty of work in C, but then I believe that the fact that I'm rounded out with knowledge of several other useful languages does a lot for my chances in comparison with other candidates.

    I've avoided Windows work where I can (it's just not my thing), so take my advice about it with a pound of salt, but my impression is that C# is a very good language to know right now. C# is really quite similar to Java, and so a lot of knowledge from one will transfer to the other (the chief differences may not be in the languages themselves, but between .NET and the Java Class Library). Knowing a little C++ and a solid understanding of using it in a Microsoft environment (which is perhaps more important than knowing C++ solidly for many jobs), will go a long way toward bringing you ahead of other C# candidates that don't have much C++; there are many limits to what you can accomplish in the real world with .NET alone.

    I don't really enjoy working with Java, but I think it'll be a long time before Java programmers start running out of work. Writing phone apps seems like a pretty easy job to get with Java.

    My personal creed is to learn the languages and technologies I want to know; I usually give little thought to how useful it will actually be for my career. That philosophy is admittedly somewhat naïve, and would absolutely need to be adjusted in a truly awful job climate; but it has worked well for me so far. I think I tend to snag jobs in which I'm happier, since I'm working with technologies I like (note, though, that in the larger picture, comfort with the technology really plays a very minor role in total job satisfaction).

    There's a limit, though, to how well this can work for you. Several languages I've got good understanding of, such as PostScript or Haskell, I have no illusions of applying any time soon in a job. Similarly, I expect that knowing Fortran these days may have limited practical usefulness, especially when those jobs that do require Fortran can probably find much more experienced folks than a college grad. (However, you may find that familiarity with m4 is at least occasionally useful, and more so if you work in a Unix environment that depends on autoconf and the like).

  103. Best Advice I've ever seen on /. by Anonymous Coward · · Score: 0

    This is the single best advice I've ever seen on /.

    Don't claim to be an expert if you aren't. Chances are, if you THINK you are an expert, then you only know 10% of the subject.

  104. Re:Procedural only? Sad by ildon · · Score: 1

    Perhaps a more accurate term he could have used is imperative (of which procedural languages are a subset), as opposed to functional.

  105. C is major, yet not mentioned by r00t · · Score: 1

    HR people can't really tell the difference between C and C++. The evidence is all the "C/C++" job listings, treating the languages as one and the same. There is the very wrong assumption that a C++ programmer is any good at C.

    Also, lots of "C++" places are using only the C-like part of the language. They may use a C++ compiler, but they mostly aren't touching classes. This is especially true of Visual Studio users, because Microsoft still doesn't support C99 features like variable declarations in the middle of a function.

  106. You are commercial-ready by slash-doubter · · Score: 1

    Simple programs teach how to work logically, and locally. The big picture or the big wtf will come later.

    If you learned your CS material, someone out there can make money by having you do what they tell you to.

    That said, I would recommend adding a scripting language to your skillset.

  107. What do you want to do? by famebait · · Score: 1

    From your post it seems like you want to become a software engineer (not a computer scientist). That's cool. I agree with all the people saying you could usefully learn at least one very different language, but it won't help you land jobs (only do them :-)

    I would consider getting a certification in Java or C#. Both are widely used, and will be for some time, and you can leverage the knowledge you do have. Certifications are not as important as some would have you believe, but to anyone hiring a graduate for production work it will provide some safety, and you will become more secure in your chosen language.

    But more importanly that that: read up on software engineering! Read some of the modern classics, and follow the writings of the gurus of modern imperative programming.

    --
    sudo ergo sum
  108. Not Programming Languages by Anonymous Coward · · Score: 0

    Let's be clear here: Python and Perl are not programming languages. They may be useful in certain situations, but should not be mistaken for actual programming languages used to construct robust applications in the real world.

    Haskell is a programming language, but is about as useful in commercial development as Prolog.

    And Fortran? Not really forward-looking.

    1. Re:Not Programming Languages by arevos · · Score: 1

      Let's be clear here: Python and Perl are not programming languages.

      You forgot to mention "scaling" and "enterprise". If you're going to troll, at least get in some up-to-date buzzwords, dude.

    2. Re:Not Programming Languages by Anonymous Coward · · Score: 0

      > Let's be clear here: Python and Perl are not programming languages.

      Yes, they are.

      > They may be useful in certain situations...

      Try many varied and complex situations.

      > ... but should not be mistaken for actual programming languages used to construct robust applications in the real world.

      Well, they are actually used that way, whether you think they should be or not.

  109. New Hires by Acius · · Score: 1

    I've done a little bit of hiring at my small company (we have five programmers; I was an interviewer for two of them). You do need to be highly competent in our language of choice (C++), but I expect to spend a lot of time training a fresh-out-of-college hire.

    If there are C++ fundamentals (virtual functions, pass-by-reference, use of the STL and standard libraries, polymorphism) with which you are not familiar, then you have language learning to do. But given that you have the fundamentals, the biggest question is whether you can work on a team.

    Do you know how to say "I don't know" when you don't? Do you document your work clearly and effectively so that other programmers will find it usable? Are you passionately interested in naming constructions in a way that clarifies their purpose? Do you think about corner cases when you code, so that your methods can be used without fear or knowledge of their internals? Are you the kind of person who's going to get into holy wars about programming style, making the codebase into a mishmash of competing formatting styles? Or even worse, do you not care about programming style at all? Do you know how to read someone else's code and then follow their way of doing things, rather than just rolling your own every time?

    The question I am asking with every new hire is "will hiring this person make my life easier?" That covers a lot more than programming knowledge.

    --
    Acius the unfamous
  110. attitude, by Anonymous Coward · · Score: 0

    Hey there,

    I can tell you're going to be very successful with the positive attitude you're showing. Your "I want to learn to make myself more valuable to the organization." attitude is fantastic. Don't worry about knowing what you need to know before you get on the job, but just make sure that positive attitude shows when you're interviewing.

    I studied Ada and c in college. Like you, I liked c very much. And it turns out I didn't use either of those in the work place, and have spent the last 15 years doing Java, C#, perl, PL/SQL. I learned all those languages on the job without prior exposure. You have the background you need to do the same because you've already learned three languages.

    Also, don't believe all you hear in your classes. I worked in the financial industry for a good part of my career, and I have not seen any multithreaded or fortran banking applications. Sometimes professors think they know what's going on out there when they really don't. Maybe some software package vendors in those industries do a lot of multithreaded development, but the bank IT departments will do a lot more basic high level stuff. In interviews, ask first what kind of development goes on at the companies where you interview before assuming you know.

    In addition, since you're thinking in terms of value to the enterprise and you seem to have excellent written communications skills, you may be very well suited to be a development manager in the future. If that is something that appeals to you, observe your manager's job duties and see if you would like to do that in the future.

    To echo what some others have said: offer to help the more senior staff to begin with, and don't be afraid to say "sure I can do that... it's my first time so I'll first have to spend a little time figuring it out." If you look at this thread, you'll see how you can get good results by asking for help.

  111. Java Unless You're a C Geek by curmudgeon99 · · Score: 1

    In all the companies I have worked for, they were either getting away from C or never had gotten near it. So unless you want to be stuck in some real time systems world--I would recommend Java. I have a free website to help you learn: Free Java Lectures

  112. See about getting some tuition back by heironymous · · Score: 1

    Three almost identical languages after toiling away for computer science degree? It sounds more like a computer programming degree.

    Go with Java and learn the JVM and the standard libraries the best you can. Then you'll be better poised to learn some Scala, Clojure, and Groovy, whose principles you'll really need to round out your education.

  113. Language specialization isn't what you need by Anonymous Coward · · Score: 0

    Being able to write good code has very little to do with knowledge of a programming language. A computer scientist specializes in algorithmic design, abstraction, interfaces, etc. Programming languages are actually just very simple tools at a computer scientist's disposal, and one should be able to discern the linguistic features of any language and choose the correct language for the tasks at hand. Learning a language really well isn't going to help you write a Linux kernel or a multi-threaded banking app. The former needs hardware and compiler level knowledge, the latter needs comparative knowledge of functional vs. imperative languages and their implications on parallelism. In both cases a programming language is just a tool one picks to accomplish the task, the real challenge lies in knowing enough about other aspects of computer science to accomplish it.

  114. There's more than just the language by petes_PoV · · Score: 1
    In a commercial operation, you'll need familiarity with the IDE they use, the libraries they specify (which will depend on the O/S, the type of application: finance, data-mining, games, scientific etc.), change-control, revision control, debugging tools, testing methodologies, documentation standards (ok, that one's deprecated for OSS projects),

    The good thing is, that no-one will expect you to be know the exact combinations of all of these, that their particular company uses. You'll spend the first 6 months getting the hang of it all, until you become more that dead-weight to your employer.

    Your best bet is to make sure you know the principles behind each of these toolsets, so you won't have a dumb expression when they come up at interview. Your biggest asset at interview, will be to have shown initiative (and not have a criminal record) and willingness to learn - rather than know all the intracacies of a particular language. That's what the "2 years experience" job ads. are for

    --
    politicians are like babies' nappies: they should both be changed regularly and for the same reasons
  115. learn a function language like scheme or haskell by Anonymous Coward · · Score: 0

    Learn a language that will challenge the way you think about programming. A language that uses functions as first-order objects like Haskell will give you more perspective on programming. Erlang, Scheme, or Lisp would all be good as well.

    These types of languages will impress employers, because you've gone the extra mile in learning them. Plus, for certain problems, you can more easily implement a recursive solution using them.

  116. This post makes me feel old by l0rd · · Score: 1

    I dont' get kids these days. The reason I (and a lot of people of my generation) learned to program was to code/hack cool shit!

    Nowadays it seems very rare to find a 13 year old hacking games or teaching himself assembler just for the fun of it. People just seem to want to learn stuff to finish school courses & land decent jobs.

    Where is the fun element? I get that some people just like solving problems and see computers as just another tool to do it. But what about the hacker breed? People learning stuff just for the fun of it, not for profit?

    While these people are still bred into existance I fear the point & click generation of operating systems and the "commercialization" (take that to mean what you will) of computers & the internet has taken the fun out of it.

    A computer is now just a tool, not some cool strict machine that does just what you tell it and punishes you if you make mistakes & act stupid. Sometimes I truly do wish it was the late 80s/early 90s when it was so easy to write something cool and people who wanted to program didn't ask these sorts of questions.

    Please forgive my rant, you may now go on with your lives fellow Slashdot readers.

    1. Re:This post makes me feel old by r00t · · Score: 1

      But what about the hacker breed? People learning stuff just for the fun of it, not for profit?

      While these people are still bred into existance

      No, they aren't still bred into existance.

      Smart people, particularly women, rarely produce children.

      The few remaining smart kids are raised by the lowest bidder instead of by smart mothers who could provide intellectual stimulation. The adults running daycare and school programs are normally unable to handle math with fractions or decimals.

  117. you can apply computer science to any language? by tomhudson · · Score: 1

    The idea is that you can apply computer science to any language you want to learn.

    I tried that to learn Russian, and all I got was a lousy T-shirt that says "In Soviet Russia language learns YOU!"

  118. breadth, not depth by omibus · · Score: 1

    I would concentrate more on language breadth (learn a lot of them).
    If you already have a grasp on C languages, try some non-C languages that do things very differently.
    Namely, functional and dynamic languages. You've already covered procedural and OO (Java).
    Lisp, Perl, Ruby, Python, F#, Scala, OCaml, JavaScript (JavaScript looks like a C language, but really isn't).

    Outside of languages, more than likely you haven't learned OO concepts very well yet. Not your fault, colleges are notorious for teaching bad OO practices (I've only been proven wrong on this once). Design Patterns are another good topic to investigate.

    --
    Bad User. No biscuit!
  119. Imperative, Assembly, Functional by Anonymous Coward · · Score: 0

    Other posts have already said as much, but with different language choices...

    On top of all the good CS stuff you should have from your CS classes, if I had to completely boil it down to three languages, I'd do these three, and in this order:

    Java - it's imperative and object oriented. Being confident in this paradigm makes it easy to slide into similar languages that are in use today and will continue to be in use for some time to come. Also, you'll be able to pick up C# without much trouble.

    Assembly - the architecture matters not, but I'd suggest MIPS, because the point is more about learning how things work at that level, not about learning an assembly language you expect to be working in professionally. But if you learn one assembly language, you can pretty much pick up any other assembly language. Probably more importantly, it sets you up to be able to really know what you're doing in C, and knowing C and Java sets you up to ease into C++. IMO, most CS schools should already be teaching some assembly as part of a required architecture course.

    Scheme - well, any LISP would do, but I feel Scheme really boils it down to essentials. Again, you're not learning Scheme specifically to be a Scheme coder, you're doing it to master recursion, to be used to writing functions that take functions as arguments and functions that return functions, and functions that are applied to a data set. Familiarity with lists and the higher level Scheme functions map, filter, and fold will be of immense help when learning Python, Ruby, Haskell, etc.

    After that it's up to you. If you plan on going corporate, picking up some SQL can only be a good thing. A little perl wouldn't hurt either. IMO, if you're already strong with Java, that's already your foot in the door to a whole lot of places.

  120. 'Commercial experience' has nothing to do with a.. by Assmasher · · Score: 1

    ..particular language. Operating Systems, languages, APIs, these are tools in your toolbox.

    What you need is the ability to identify potential problems early, to be able to work in a team, to think ahead and not 'design at the keyboard', to avoid taking shortcuts and avoid being 'clever' at the expense of clarity: basically - to be a software 'engineer' instead of a 'programmer.'

    Which language to learn? All of the ones that are common in the fields/areas you're most interested in working in. :) You probably don't want to hear that, but it's important.

    I've spent the majority of my career writing C++ code and doing things as twilight-zone as implementing DCOM on Irix, to my current product which is writing a very comprehensive software renderer that'll run under Java 1.1 (even though it's 2009 - LOL.) I've even found myself writing HTTP Tunneling code in ActionScript in the past year. I have several years Java EJB experience as well (back in the bad old days when it first came out - though some would argue the bad old days of EJB are still here ;).) I've written several very powerful tools entirely in C#.

    None of this is an impressive accomplishment, it will all happen (in some form) to you as well if you work in the industry, so be prepared to be a Software Engineer instead of a "'insert language here' programmer".

    Good luck, and I hope you like problem solving :).

    --
    Loading...
  121. Java by easy2resist · · Score: 1

    Whether you like it or not java is the most requested programming language by far. If possible go after JEE, that will keep you busy for while, again JEE/J2EE one of the most used platforms in business whether you like it or not.

  122. The best idea for business programing by Anonymous Coward · · Score: 1, Funny

    is of course, COBOL! Cant go wrong with a good dose of COBOL under your belt- excuse me my card sorter just scattered over the floor.

  123. What programming language should you know? English by Timoteo47 · · Score: 1

    In the last 20 years, I have worked with far too many engineers that could not write a decent document to save their ass. You should be able to read, write and speak English well, including standing in front of a room full of people to give a presentation. At most organizations, the first step for any software development or IT project is a requirements document - written in English (or the appropriate local language.) If you are a great communicator, you will stand above your peers and advance in your career to work on interesting projects, lead teams and make more money.

    While in college earning a degree in Computer Engineering, I was only required to take one semester of English. At the end of college my writing skills were appalling. I was forced to improve my writing on the job including writing product reviews for a magazine, requirements documents and documentation. I learned public speaking the hard way - standing in front of 20 people for two weeks training them on our company's product.

    So, before you graduate, take technical writing and public speaking classes.

  124. That many (Or only 3)? by ^Case^ · · Score: 1

    Through my 5 years of studying computer science I was exposed to: SML, Java, C, some variant of assembly, prolog, C# and smalltalk. Might have missed one or two there. Now of course none of these were taught in any kind of depth. Actually the only two that were really taught was SML and Java, the rest was more or less a question of self-study.

    To answer the OPs question: Don't specialise in a language, specialise in getting things done. As an employer I couldn't care less if you know every last detail about C++ if you can't get the work done. Keep the real goal in mind.

    Also, don't think that being a super programmer is something you'll learn sitting at home with your nose in a book. Get out into real life, get a job. Building software is so much more than just programming and the only way to really learn that is doing it in a real environment.

  125. C++ is the basic root to all Languages. by sammyboy405 · · Score: 1

    I had the same issue in college. Ive learned several more languages. and they where all easier by knowing c++ , I work for the US Government and the main languages we use are C++, ADA (Old Right? LOL), C#, Java LOTS of Java, and VB.net

    1. Re:C++ is the basic root to all Languages. by Anonymous Coward · · Score: 0

      What?!

      C++ is NOT the basic root to all languages.
      Effectively machine code is the root to all languages, since all languages must map back to machine code. However since machine code doesn't really qualify as a "programming language" per se, one might say the assembler is the basic root to all languages. Consider that many C/C++ compilers just produced assembler code and compiled the assembler into machine code.

  126. Depends on the industry by silanea · · Score: 1

    It really depends on what part of the industry you want to get into.

    C++ and Java are the two safe choices. They are needed almost everywhere, and they are here to stay. From games to desktop apps to web apps either of those two will get you quite some way. Pro: You can do almost anything with those languages. Con: Most other programmers can, too.

    However if you are leaning towards a specialised niche you obviously have to learn whatever is most common there. From Fortran to Ada there are virtually unlimited choices. Pro: You will be one in a rather limited (and potentially highly paid) crowd of people who speak that language. Con: No-one else needs you. And if your language of choice becomes obsolete, you essentially are too.

    What I would do: Learn Perl (to serve you personally as the programmer's swiss army chainsaw that it is) and one of C++, Ruby or Ada. Each of these three will take you onto a different path in the industry, but I'd say none of them is a completely wrong choice.

    Of course, if you are really masochistic, there's always assembler languages. They are still around, and they still provide for good job opportunities, but you're in for a world of hurt, writing really ugly stuff with a tremendously low margin for errors.

    --
    Rudolf Hess edited Mein Kampf. He was the very first grammar nazi.
  127. TIOBE index by dawilcox · · Score: 1

    This web site basically gives an indication of the most popular langauges.

    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

    As you can see, C comes very high on the list.

  128. Comparison by Anonymous Coward · · Score: 0

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

    You are comparing writing a operating system (Linux is monolith kernel, what is same as operating system) and multi-threaded banking app?

    Coding a own operating system is not easy task. There is only a few people who have managed to do that. One of those are Linus Torvalds. And when comparing for GNU's own operating system, the Hurd microkernel is not even working well enough so it could be used in widely. Dont know does GNU have problems on the Hurd itself, or other OS components (OS modules) but Hurd is just a proof that GPL is not that what saves the operating system existing. Linus got something right on the Linux because it is now one of the most used operating system on the world. It powers different machines from cellphones to mainframes and usually people knows it from software systems like Ubuntu or Mandriva kinds because it is used as operating system on those.

    Even that you have taken basic classes, you can help a lot on different projects. You do not need to write so much in first place a new code, more like a check the code and fix it.

  129. Re:Learn how to write comments and name things tru by Anonymous Coward · · Score: 0

    what the fuck, were you high while writing this?

  130. Start with C by hamid2c · · Score: 1

    In the case that you wish to learn the family of C, Java, C# and C++, I suggest you to start with C and get acquainted with pointers. Try your best to understand dangling pointers and memory leak problems. Do dynamic memory allocation and try to avoid stated problems. Later, you'll see that Java and C# use dynamic memory allocation (implicitly) a lot. In this way, it may be useful to do a bit of Assembly to understand memory and addresses and how the memory works. I think, after that kinda training in C, you can understand references (in Java/C#) and garbage collection (which is done by JVM/CLR) better and write a better cost-effective program in Java/C# due to understanding GC an references. The above may apply to C++ as well, however, there is no (default) garbage collection in C++.

  131. Re:Procedural only? Sad by Anonymous+Brave+Guy · · Score: 1

    You can learn the syntax of a language that is similar to other languages you already know in a few days, sure. But understanding a new approach to programming (dynamic vs. static, procedural vs. OO vs. functional vs. whatever), understanding the idioms and subtleties of a language, and learning the details of the available libraries, takes months.

    But knowing the language enough to fix bugs, implement algorithms, etc., should come to a good programmer in the matter of a week or two.

    I've spent a substantial proportion of my career fixing the mess made by people who thought average programmers could be up to speed for that kind of work within a week or two, and another substantial proportion training those programmers afterwards until they were fit to operate autonomously, so I'm going to have to respectfully disagree with you on that one.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  132. rant-inspired rant by ^_^x · · Score: 1

    I feel what you're saying here... I was born in the very early 80s and wanted to go into IT... pretty much my entire life. Back then, if you could program and do some basic maintenance, you were essentially regarded as a computer guru in many places. That was great since I've enjoyed programming since about grade 5 on.

    I self-taught QBasic and went back to understand GW-Basic well enough. In high school I took Prograph CPX (meh. visual flowchart language we had on the Macs there - only option for programming 20) and then the next year I got my first taste of C++ and was always enjoying it, getting high marks, and completing assignments before the next ones were even available.

    I got into college, learned a bit of Java, C++, VB.NET, JavaScript, and Perl. ...but ultimately no one cares about any of that. I haven't been a professional programmer for 4+ years, so no one wants to hire me for it - they'll just outsource the low-level stuff. So now, I'm a technical support analyst - installing disk images on PCs, doing misc repairs and troubleshooting, phone support, etc. It's not the worst thing in the world, but it's certainly not the part of IT I've always been passionate about, and I have no intention of doing this forever. But... the world has changed a lot since I started my pursuit of the industry, and now I guess my skills are a dime a dozen.

    I'm also trained at a basic level for things like database design and administration, network planning and configuration using various technologies and topologies, systems analysis and design, and project management - but realistically no one's going to hire someone straight into that with just a college diploma. The thing is I can't see any promotion paths leading up to that anymore either since you can't just be "the IT guy" and move up from there anymore. My coworkers in tech support variously have MCSEs, electrical engineering degrees, or even a decade or more of experience and they're not going anywhere either.

    (I am now planning to self train and specialize on a growing niche field though to see if I can hop over to it. If not... it should be fun learning anyway! The problem is that everyone is a specialist now, and no one hires newbies in anything!)

  133. Not Computer Science by Secret+Rabbit · · Score: 1

    I've *never* seen any decent Computer Science degree program allow someone to graduate with just three languages. Hell, I graduated from a College in Computer Programming and I learned a dozen or more (depending on your definition of programming language). Hell, I learned several on my own, some in industry. So, if you don't have the motivation to learn on your own and only do what is required by your program/job/etc, then you should just stop now and find a different discipline. Playing catch up only when you realise just what you've done wrong is the exact wrong approach. This isn't about learning to get a job and then stopping. It's about constantly learning regardless if your employer is funding it or not. Because, they *will* expect you to stay current. If you don't you'll /really/ be screwed when you have to find that next job.

    As for what to learn, you can't really look at the current job openings and infer what the industry wants. That's just what it wants /now/ and even then, just who is posting job advertisements to where you are looking. It will look different by the time you learn what the industry wanted back then. It really is a moving target. Just don't try.

    What you really want to do is show them that you are knowledgeable relative to your experience, a willingness to learn, capability and interest to do (at least) some independent learning, ability to work in a team or solo environment, etc, etc, etc. Since you are just a graduate, when hiring for an /entry level/ position, they're hardly going to expect you to know everything, or everything in depth. That's what training is for and the reason why it's called an *entry level position*.

    I'd suggest starting an open-source project in something that interests you or contributing to one that is already established. Bugger language. Do it in a language that makes sense for the project. Languages are tools after all. One doesn't fit everything. A common mistake.

    Now stop asking /. what you should learn and start doing it.

    1. Re:Not Computer Science by /dev/trash · · Score: 1

      I agree. I had COBOL, Fortran, ADA, C, C++, LISP, and Assembler ( Vax at that ).

  134. I have a much different take on programming lang by Dan667 · · Score: 1

    You want to learn all you can about programming in general and not get caught up in what lang you are learning. I have always thought of programming languages as tools for your tool box and each one can be used for what it is good for. Perl for text processing and gluing code together, ansi c for pure horse power (or assembly), etc. I would actually recommend you spend a good bit more time learning about how to collect requirements (use cases) and manage projects (mythical man month, etc) and write efficient algorithms (software patterns). You only really spend about 30% of your time writing code, if that, and most of your time collecting requirement or doing maintenance and bug fixes. People who can collect requirements, build a project that makes their Customers happy, and keep it running with minimal effort get paid the most in my experience.

  135. You're Fine on App. Languages by Guido69 · · Score: 1

    Really. Focus on tuning your database knowledge a bit. Adding SQL and PL/SQL to your resume will certainly help. You likely won't find a job that doesn't expect some database proficiency. I don't disagree that having C#/.Net may be helpful. Of course that depends on the market in your area. But you should be able to find a job with the languages you already know. Finally, figure out a way to grow some experience. That's not easy, but doable with a little effort. Show that you are trying to utilize your newly learned skills. No employer is going to expect a new grad to be able to be fully productive. However we* do like to see grads that have tried to apply their skills in the real world, no matter how small an example.

    *Since everyone adds a reason why you should listen to them, guess I will too. I'm the managing director over a software development group of about 120 people. Oh yeah, with about 15 years of industry experience.

    --
    - If we aren't supposed to eat animals, then why are they made out of meat? - Steven Wright
  136. just don't put your name on any oss projects by Anonymous Coward · · Score: 0

    you'll be labeled as a fag by professional developers and you'll never land a good job. rightfully so too.

  137. Re:Procedural only? Sad by Garridan · · Score: 1

    You can learn the syntax of a language that is similar to other languages you already know in a few days, sure. But understanding a new approach to programming (dynamic vs. static, procedural vs. OO vs. functional vs. whatever), understanding the idioms and subtleties of a language, and learning the details of the available libraries, takes months.

    Agreed. I think I said so in my post.

    I've spent a substantial proportion of my career fixing the mess made by people who thought average programmers could be up to speed for that kind of work within a week or two, and another substantial proportion training those programmers afterwards until they were fit to operate autonomously, so I'm going to have to respectfully disagree with you on that one.

    Huh. So, how do you expect programmers to learn? Do they get experience by sitting near an old guy with a big beard? Not really. People learn by making mistakes. The take-home lesson is, don't assign a new programmer to a new project. Assign a senior programmer to a new project, and assign a couple of lackeys to the senior programmer. Ideally, the new programmers will be up and running in a couple of days, able to hack the basics, fix bugs, etc. With a senior programmer checking their work, the damage they can do is pretty limited. Of course, if the senior programmer is a jackass who just wants the code written, then the damage the team will do is unlimited.

    I don't claim that average programmers can be fit to operate autonomously in a couple of weeks, but I do think that they can be fit to operate in a couple of days. Also... you never let a new hire thrash around, unchecked, on your codebase -- I don't care how many of decades of experience (s)he has in whatever. Or better yet, implement a peer review system -- every line is double-checked, or the code doesn't go in. This is how Sage has been operating for quite a while now, and we've probably stopped dozens of bugs in their tracks.

  138. Dont specialize, abstract by Anonymous Coward · · Score: 0

    Specializing in a language is not the right way in my opinion. The real skill that is needed in the software industry is problem solving. After some years of experience and learning a different programming language on a monthly basis I found out that what really makes a good programmer is his or her ability to ABSTRACT from a programming language.
    If I get a new task assigned, I don't think about which language I will use to code the solution. I just take in the problem, form a model in my mind (this is the most difficult part), create a solution and "output" the solution in the language desired by the one who assigned the task to me.
    So focus on learning how to solve complicated programming problems in your mind, not so much on "outputting" the solution in a certain language.

  139. Be a Solution looking for Problems by adoll · · Score: 1

    Computers are good at solving problems, so learn how to solve problems and encode that methodology into computer languages. The language doesn't matter -- in fact you may find some problems are better suited to certain languages/concepts. I tell people that I program in JAFPL (Just Another [] Programming Language).

    I'm actually a mining engineer who can do some programming. I regularly use mashups of MySQL, PHP, Java and web coding. I dismissed C and C++ as 'too tough' for the problems I wanted to solve, so found these easier languages that accomplished what I need.

  140. The language is not too important... by Anonymous Coward · · Score: 0

    When I hire programmers, new as older, I don't particular look after whether they know the language we're using. I try to find out whether they know how to PROGRAM, and even more importantly, whether they know how to test what they code!

    A lot of people who 'know' a language still doesn't know how to program, meaning that while they may write a lot of code, it'll be difficult to transfer to others and hard to maintain. Even more people don't know how to test what they write, meaning what they deliver is prone to break when in a live situation.

    As other people have said, don't be afraid to admit you don't know something, and use your first months in the job to learn how to program and test in a real-life environment. If you have a good boss, he'll recognise and value that.

  141. Re:Procedural only? Sad by Fallingcow · · Score: 1

    I'll paraphrase what I said upthread:

    Languages are easy. Once you understand what they do and have used a couple, writing programs in a new one should be a snap.

    Libraries and codebases? Learning those is hard. That's where the work is, and knowing a major library that's applicable to your current problem is very often more helpful than knowing any language.

  142. Learn something different by BoneFlower · · Score: 1

    C, C++, and Java, for all their differences, are related languages.

    Learn something entirely different.

    Assembler is good. You don't need to know enough to actually be able to use it on the job as a primary language, but you should learn enough to give yourself a practical understanding of how data is manipulated by the computer. Just because modern programming tools hide this stuff, doesn't mean it isn't useful to understand it.

    As far as high level languages go, you already know a procedural language(C), an Object Oriented language(Java), and a hybrid Proc./OO language(C++). Learn a functional language next. You may not ever use it in the real world, but exposing yourself to a new way of looking at problems can only help.

    And learn SQL. Download Postgre or MySQL or some other free RDBMS and play around with it. Even if you never use it specifically, it gets you thinking about how to organize data effectively to solve a given problem.

  143. Languages don't matter by Anonymous Coward · · Score: 0

    If you are a real programmer, you will adapt.

    But If you really need to fill that CV, do some SQL (PHP/MySQL is great for playing), some XML and some JavaScript.

  144. learn databases instead by bigsexyjoe · · Score: 1

    I say take a different angle. You know at least three languages and that's good for entry level. To develop more commercial skills, learn to develop database applications (in whatever language you want). Databases are key in most commercial development.

  145. What do your colleagues use? by 32771 · · Score: 1

    I ask that question because you will probably feel some pressure from them to write code they can understand. This might become an issue especially with C++ where templates can add a level of complexity they might not be willing to take on.

    I mainly program embedded C so this is not an issue for me, but heard of projects where people were reluctant to use more arcane features of C++.

    So if you want to go deep you can go really deep with C++. People have written Lisp interpreters on top of the template system, so go and knock yourselfs out.

    However, you will not only have to provide lessons and tutorials to your colleagues but you will also have the problem of missing portability between compilers. You can even have this problem with C if you use the GNU extensions of gcc and have to port your code to some other compiler.

    It seems that your programming language portfolio
    is C heavy. I have often found it useful to combine my C code with some other language, i.e. write the signal processing part in C/Assembly and the GUI for the demo in TCL/TK, Matlab or Scilab.

    This combination of fast C code and easy to use interpreter might be something you want to play with occasionally. My current combination is C and Guile. I hope I can stick to Scheme/Lisp somehow because there are a lot of options for scheme interpreters around. I remember compiling tinyscheme for a TigerSHARC, so it definitely is portable.

    To sum it up, go as deep as you want but keep in mind that other people/compilers have to translate your code. Also find out whether there are languages that can make a part of your job much easier than the ones you already know.

    --
    Je me souviens.
  146. Programming Languages by Anonymous Coward · · Score: 0

    It depends on what sector you want your career as a programmer to be in.

    For engineering tasks, generally C/C++ are the languages to focus on. Java is a good all-around programming language which is heavily used in embedded systems as well as large scale clustered and mainframe systems.

    For "business solutions" Java tends to lag behind VisualBASIC and C#, you will almost never see C/C++ being used in small to medium sized applications.

    However if I may suggest; Not all computer programming University degrees include a solid education in processor and system programming fundamentals. It would be wise to grasp an understanding of instructions and registers as well as the stack in RAM if you are going to get into "involved" systems development.

    That being said I must give you a warning; IT professionals have been abused at a much higher rate than average professions (not the most abused out there mind you). With the number of graduates in CS having tumbled, my prediction is that it will get better in the near future, but watch your backs, brothers and sisters.

    Love,
        AS A(n) anonymous coward :P

  147. my advice by Anonymous Coward · · Score: 0

    My advice, build a time machine, go back about 10 years and tell yourself to seriously hunker down and spend 2-3 hours every day learning how to program/actually programming. It won't really matter which one you use, as after having that much experience you'll pretty much understand how to apply your skills across to a new language with a much smaller learning curve.

    Otherwise, if you have your heart set on banking, learn whatever they use on those systems. It's way too costly to switch to a new system for the financial industry as a whole, they can't afford the down time.

  148. Trapped Re:Why not web stuff? by Anonymous Coward · · Score: 0

    Getting trapped is a position people put themselves in. They get comfortable and then convince themselves that they can't move. It's all about risk and reward. If you want to do something else bad enough you'll do it. I've changed jobs several times and am currently doing java web dev. I've been there for several years and wouldn't say I'm trapped. It's up to the individual to keep training themselves in new things so that they aren't ever left feeling trapped. And then utilizing their new skills doing new things so they aren't trapped.

  149. Another $.02 Reply by tuxgeek · · Score: 1

    College text book training is nothing compared to real world experience.
    Learn what you need to know to ultimately go our on your own and do your own thing.
    A programming job will ease you into the commercial field if that is your desire. Best part, you will get paid to polish your skills.

    I learned C & C++ many years ago. Don't use C at all, but C++ is good to know if App development in QT rings your bell.

    I run my own business, not in programming. But I have the ability to build my own management apps in QT which gives me the geek jollies and custom apps for my use to boot.

    Good luck

    --
    "Suppose you were an idiot...and suppose you were a member of Congress...but I repeat myself." Mark Twain
  150. C for starters by turgid · · Score: 1

    It's been trendy in the last 20 years to do C++.

    I don't want to get into a language flame war here, but I would like to make a few points.

    C is still very important in OS kernels and embedded systems. It is the Lingua Franca of such things and will probably be so for another 30 years.

    There are those who know C++ to an intermediate level who think that as a consequence they also know C. Nothing could be further from the truth. They are completely different languages, but they share a common heritage.

    C++ is object orientation, applied to C, done wrong.

    That's not to say that C++ isn't important. It is, because of its widespread adoption. It is baroque, however.

    Java takes a lot from Objective-C, although it has more of a C++ style syntax.

    Learn C well. It is a small language, portable, ubiquitous and in demand. If you know C well, it will be easier to learn C++, Objective-C and Java.

    FORTRAN is a bit different. If you learned BASIC on an early 80's 8-bit micro, FORTRAN will make sense, otherwise be prepared for a nervous breakdown.

    You really should look at some of the Pascal family of languages (MODULA-2 for instance) to see some good ideas from the past and then Scheme to program in colour.

    While you are expanding your mind you might also like to listen to musing on the Bohlen-Pierce scale. See my sig for details.

    1. Re:C for starters by domanova · · Score: 1

      >> That's not to say that C++ isn't important. It is, because of its widespread adoption. It is baroque, however.
      I beg to differ. It is byzantine. Or perhaps gothic.
      Whatever, it ain't post-modern.

      --
      Down with categorical imperatives
  151. Assembler... by Panaflex · · Score: 1

    You need to learn some basic assembler - if only to become familiar with registers, integer, floating and mmu units, etc...

    That's where we begin to understand hard limits like throughput, algorithm efficiency, and i/o.

    --
    I said no... but I missed and it came out yes.
  152. Re:Procedural only? Sad by Anonymous Coward · · Score: 0

    Object oriented languages are also procedural languages, they're just an extension that organizes functions alongside objects and allows virtual dispatch. Just like object-oriented and generic are not mutually exclusive; they just describe different aspects of the language.

  153. Don't by Logic+and+Reason · · Score: 1

    Don't pick programming languages based solely on what is popular or in-demand. That way lies complacency, boredom and stagnation.

    C, C++ and Java are all pretty similar languages. Try a functional language like Lisp: it will stretch your mind and make you a better programmer. You should also try one of the modern scripting languages like Ruby or Python: they're fun on their own, and increasingly useful in the "real world".

    Join an open-source project! That's the best way to get practical experience and show prospective employers that you've got both skills and motivation.

    Finally, if you are not already intimately familiar with UNIX and the command line, learn it. Live it. Love it. Seriously, it's one of the most valuable skills a programmer can have outside of programming itself.

  154. International language. by Mathness · · Score: 1

    As an IT (and possible geek) you should look into the international language known as Love. ;P

    --
    Carbon based humanoid in training.
  155. .. data structures and debugging skills .. by Anonymous Coward · · Score: 0

    Depending on how low level you wish you go .. I would recommend getting atleast a fair grasp on assembly as well. you may NEVER commercially use it unless you're writing bootloaders, or just the bootstrap code for the kernel .. but it will help you greatly when you debug.

    The best skill really to have is a deep knowledge of data structures and debugging for any given language. C is easier to debug (to some extent) than a C++ framework like MFC , etc.
    In todays software world, you dont really need to write FANCY code as much as good robust and comatible code at the same time thats easy to maintain. What will get you further is if you are able to understand previously written fancy code and further improve it ..

    all the very best

  156. Find something that interests you by domanova · · Score: 1

    And do it. There's plenty of FOSS projects who could do with some help. When you've got a job to do, you'll get the idea of what tools to use.
    Maybe it's kernel, maybe it's AJAX. Find the job and then find the tools. If you're any good, a new language will give you a week of pure panic followed by....oh, I get this....
    My nightmare has been people who had deep, even obsessive, knowledge of X, X++ and Z-- and little ability to analyse the problem in the first place.
    From PDP assembler to Javascript and Java, it's how to find the appropriate 'ammer, not being a pin-hammer specialist.
    Except Cobol, of course. You're safe there.

    --
    Down with categorical imperatives
  157. An industry wide dilemma by XionOfChaos · · Score: 1

    I'm a mid level developer and I can tell you honestly that throughout your career you will be required to learn more computer languages than you will know what to do with. This will be a necessary skill that you will need to be able to take on, and this wont stop.

    What I do recommend is that you have a Good understanding of each language and Specialize in a chosen language/platform. But you will have to be willing and open to learn new languages otherwise you will only become stifled, pigeonholed and you will not be able to progress to a senior level.

    In a job interview you will be looked at for your specialization but hired for your ability to learn other languages to a professional level.

    I'll give a real world example.

    At University I learnt: C++, Java.

    In my 1st Job: C++, Perl, BASH scripting

    In my 2nd Job: ASP 3.0, C#, .NET 2.0, ASP.NET, VB6, Javascript

    In my 3rd Job: C#, .NET 3, F#, Ruby, Ruby On Rails, Java (inc Spring, Cocoon, Flowscript), AJAX ,Design Patterns (MVC, Strategy, Repository, Flyweight, Service Provider, Abstract Factory, Factory), Mocking Frameworks, Test Driven Design or Behavior Driven Development.

    Each of these languages all have their pros and cons. They're all tools, a means to an end. A professional can learn a language in a matter of hours, mastery of course takes years.

    The reason that you will NEED to be able to be adaptable to learn a new language is that everywhere you go you will need to deal with Legacy Software which will be written in a language you don't know.

    The counterpoint to this is that Software Engineering is a long and difficult path, it is very much like studying to become a Doctor, only we don't have a governing body like the AMA.

    As a graduate you will be equivalent to an Intern. You won't be picking up a scalpel until you get a few more years of assisting a Surgeon. Once you've completed your "Apprenticeship" you will be qualified to make architectural decisions.

    This is a fundamental problem with our industry, however it can be extremely rewarding & fun if you can work with these issues. Never stop learning & never stop having fun.

  158. of course, those jobs suck ass by r00t · · Score: 1

    Developing something high performance or low level is fun.

    The rest is essentially COBOL. You may be using C#, Java, Visual Basic, PHP, Python... but you know it's just a fresh coat of paint on COBOL.

  159. Where do you want your career to go? by Anonymous Coward · · Score: 0

    As alluded to in the OP, it really depends on where in industry you want to work. Just like in college where you had different classes for different CS topics, real-life does sort of match up to it.

    What do you want to excel in and be able to call yourself an expert at?

      - Databases?
      - Operating Systems?
      - Front-end UIs/Web?
      - Back-end (data-processing?)?
      - Gaming?
      - Scientific simulation?
      - System Automation?
      - Robotics/Control systems?
      - Finance?
      - Hardware support?
      - Programming Languages/Compilers?

    Depending on which field you choose to follow, there will a different set of requirements for you to learn, languages included. Switching between any two fields above has only minimal transferable knowledge -- common languages being the sole exception.

  160. The Next Great Thing - DoM by NicknamesAreStupid · · Score: 1

    Diamonds on Maglev, way beyond Ruby on Rails. Project schedules are no longer than 15 seconds; there are only three instructions to learn; and you never have to support your code because it gets refactored every 15 seconds. DoM uses Olympic gymnastic development, which is very agile, and drive-byes instead of scrums. Everybody carries heat, and no one speaks the same human language. There are always positions open because the average life of a team member is three drive-byes.

  161. Hmmmmm by Burnhard · · Score: 1

    I think the fact that you've asked this question tells me a lot about how you see yourself and your job. As a developer you should be flexible enough to pick up *any* language and to choose the right tool for the right job. The principles of all of these languages are by and large the same. The syntax and libraries differ however (obviously), but to "specialise" would be to box yourself into a corner career-wise. Over the last 8 years I've worked with Visual Basic 6, VB.NET, C#, C++, Flash, Java, SQL and Perl. I've used ATL, MFC, .NET, ASP and a whole host of other libraries in order to get the job done. Specialisation = extinction in software development. Technology changes too fast so don't bet a life-time of earning on any single technology.

    The best advice I can give you is to concentrate on writing quality code - irrespective of the language you use. That means being clear and concise and using lots of whitespace and writing lots of comments ;).

  162. Shrink-wrapped vs Custom Software by Anonymous Coward · · Score: 0

    C++ (and C is a subset of C++ for practical purposes) vs Java choice amounts to the type of software you want to write.

    C++ is used in the industry that has a box with a program as a final product e.g. companies like Adobe, Microsoft or EA are in this business. Vast majority of positions in there are for C++ programmers.

    Java and similar systems (C#,VB) are for custom software industry. Employers there range from IT departments developing their in-house software to large consulting shops like Infosys, Satyam or Tata.

  163. I may be criticized for this but... by Draek · · Score: 2, Insightful

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

    --
    No problem is insoluble in all conceivable circumstances.
  164. x86 is the way to go by r00t · · Score: 1

    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.

    No way. Really hard-core optimization, counting the pipeline stalls and functional unit slots, is certainly as you say. (but fun!) Regular assembly programming is not.

    8088 assembly was good for 15 years, not counting the specialist role it holds today. i386 assembly looks like it will be good for a couple more years, giving it a full 2 decades of useful life. x86-64 will likely live on much longer because we got an extra 32 address lines (beyond what i386 had) rather than just an additional 16.

    The transitions have been easy for assembly programmers. Somebody who started in the beginning with the original IBM PC could still have a career doing assembly for x86 hardware.

    VM "assembly" has much more limited job potential and much more limited educational potential. You won't get a feel for the hardware by playing with VM assembly.

    1. Re:x86 is the way to go by HiThere · · Score: 1

      I programmed for 7094 FAP assembly for around a decade. Then I switched to mainly Fortran plus a small bit of SCOPE assembler (CDC 6400/6600/7600). After that I'd learned my lesson. Stay away from assembler except when it's forced. The efficiencies aren't worth the other costs. Except occasionally.

      The purpose of recommending virtual assemblers is to demonstrate how an assembler works in an environment that is well protected. It's for teaching the underlying principles. For that a virtual assembler is sufficient. And you don't want to be using an assembler for any other reason unless there's a clear and prolonged need.

      You're right that VM assembler doesn't have much job potential. Neither does *ANY* assembler work at the entry level. And not usually at the advanced level. Only in a very few very specific cases.

      If he were that drawn to assembler, drawn enough to be the kind of programmer that wanted to work down at the metal, he wouldn't be asking about this when he was near graduation. And for most programmers it's a bad idea. Learning LISP or Forth would be a better choice. But to learn the basic principles, learning a virtual machine that's simple enough that it COULD be implemented in hardware is superior. Which is why I recommended the Parrot machine over the Java VM. Parrot code is simpler. (Yes, a JVM *has* been implemented in metal. Parrot is simpler. So has Forth, but that's not an argument for learning a Forth assembler, even though it would yield actual assembly code. It doesn't teach the right principles...it instead presumes that you already know them, and twists the code generation in ways that aren't normal (unless you're a Forth programmer.)

      For that matter, you may have noticed that I didn't recommend that he learn Postscript. It's a simple language well implemented in hardware. But it doesn't teach what one is learning an assembler language to learn. Parrot code teaches about accumulating values in registers, storing registers in memory, storing temporary variable on the stack, testing flags, and all the other basic tricks that an assembler is supposed to teach. And the design of the machine is highly symmetric. Making it simple to learn. (This is all theoretic, based on a casual inspection, not based on actual learning.)

      I down-graded MIX because it emphasizes optimizing storage management and compaction. These aren't anywhere as important now as they were when the machine was designed. Even embedded machines now have more memory that a sizable processor did then. It's more important to write simple code than to pack multiple flags into one byte.

      --

      I think we've pushed this "anyone can grow up to be president" thing too far.
  165. Real coders don't need college by Anonymous Coward · · Score: 0

    Nuff said.

  166. Be pragmatic not programmatic by GodfatherofSoul · · Score: 1

    Check the job listings around you or where you want to work. What skills are required for the jobs that sound the most enjoyable and/or pay the most? That should tell you.

    --
    I swear to God...I swear to God! That is NOT how you treat your human!
  167. FORTRAN? by ksheff · · Score: 1

    If you want to learn something that banks use, that would be COBOL, not FORTRAN. FORTRAN is used primarily in scientific applications while COBOL is used for business related apps.

    --
    the good ground has been paved over by suicidal maniacs
  168. Which tool should a carpenter specialize in? by aGuyNamedJoe · · Score: 1

    The question seems odd -- it's as if a carpenter asked whether she should specialize in the hammer, the saw, or the square.

    Personally, I'd recommend learning to program in C, Lisp, and Smalltalk -- three different ways of thinking about programming -- Too bad SNOBOL seems to have disappeared -- it was even more different.

    Of course, those will probably be dismissed as antiques, but they are widely available and have many modern derivatives.

  169. C++ programmers can't handle C by r00t · · Score: 1

    If you learn C++ with a modern style, you're using things like auto_ptr, shared_ptr, and string.

    You simply don't get comfortable dealing with plain char* strings, memory freeing, macros, function pointers, and thread synchronization. You fail to mark function prototypes as "static" because you assume the compiler will do this by default, so your functions leak into cross-file global scope and are less optimized. You fail to mark functions without parameters with "void", causing a C compiler to assume "..." (anything goes!) instead. You use stuff like strcpy instead of properly-computed memcpy, leading to buffer overflows.

    1. Re:C++ programmers can't handle C by shutdown+-p+now · · Score: 1

      If you learn C++ with a modern style, you're using things like auto_ptr, shared_ptr, and string.

      While this is correct, you don't escape raw pointers either (though not for strings, granted). I've yet to see a codebase that only used auto_ptr and shared_ptr exclusively.

      You fail to mark function prototypes as "static" because you assume the compiler will do this by default, so your functions leak into cross-file global scope and are less optimized.

      I'm not sure what you mean by this. Certainly C++ compilers don't mark functions as "static" by default - yes, it is preferred to use anonymous namespaces for that in C++, but they are still explicit.

      On the whole, your points are correct, and it is precisely what I mean by "the general philosophy is radically different". However, everything you've listed are rather simple blunders that are easy to spot. Memory freeing? Any C++ developer knows that "new" should be followed by "delete" somewhere unless smart pointers are used (which is why they're used), so why do you assume he'll be confused when meeting malloc? Thread synchronization - what's different between C and C++ there, especially as neither language spec even mentions the word "thread", much less specifying anything on how to deal with them?

      The thing is, when moving from C++ to C, you're forced to learn the new ways because the old ones simply aren't there. No destructors - no RAII. No exceptions. No overloading and ADL. No namespaces. No standard containers. Take your example with string - a typical C++ dev, when confronted with C, soon finds out that there is no type "string". So he's forced to go and read the docs, or a book, on how to deal with strings in C. Chances are he gets a good book on that.

      On the other hand, people with C background who move onto C++ tend to stick to the old ways - basically just replacing malloc/free with new/delete, occasionally declaring a few utility methods in otherwise still POD structs with all fields proudly exposed as public, and going after the lowest hanging fruits such as std::string in the standard library. I've seen tons of "C++" code which pretty much only used string and cin/cout from namespace std, the rest was all from C headers - that's the kind of thing I'm talking about. And that happens because most of what people learn for C, works as-is in C++, even if it's not the best way to do things there.

      Which is why I stand by my claim that C++-to-C move is easier and preferable to C-to-C++ move.

  170. CS student by Anonymous Coward · · Score: 0

    I'm a CS student and I've been told going in to the industry you need to know the programming concepts very well. The language itself isn't that important.
    I have heard there are people surviving with C.

  171. You're nuts! by sbaker · · Score: 1

    C is a mere subset of C++. So you might as well cross C off the list.

    Fortran is hopelessly obsolete - although it's certainly still used in a few niches.

    You'd be certifiably crazy not to pick either C++ or Java.

    Frankly - if you can get your head around C++, Java is a snap because it's little more than a C++ subset too.

    The other thing you perhaps don't realise is that a halfway decent programmer can pick up a new language in a weekend - and be 100% comfortable in it in a month. I've totally lost count of how many languages I know...but a quick count says it's at least 30.

    C++ or Java - you choose...but forget C and Fortran.

    --
    www.sjbaker.org
    1. Re:You're nuts! by JoeMerchant · · Score: 2, Insightful

      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.

  172. My Experience by mwallace · · Score: 1

    Let me start by saying that I think it's best to learn some fundamental concepts of programming that are mostly language independent. You should get comfortable with object oriented design and the design patters associated with it. You should get comfortable with relational databases (M$ SQL Server, Postgresql, mysql, Oracle, etc.). You should learn about threading so when you have to develop multi-threaded software you don't make a mess of things.

    I have been programming for almost 4 years; primarily as a .net developer. I started out in a .net web development position using asp.net with C# as the server side language. C# is a lot like C, C++, and Java (more like Java than C++, but still). I definitely recommend learning C# as it is a very easy language to learn, and you'll be able to use some of the more complex features of it and the .net framework fairly easily. I also have 2 years of experience with Win32 C++ development and I can honestly say (IMHO) that Win32 C++ development shouldn't be something that you strive to learn as a new developer in the field. Other people may disagree with me intensely on this, but I think your time would be much better spent learning a higher-level language and the framework (if there is one) that it is part of (whether that is Java, C#, VB.net (*shudders*) ... pick your poison).

    Some advice:

    An Oracle DB guy I worked with stressed the importance of knowing the size of the software project that you're working on. If you go into a project not really having a good grasp on the size of it and all the different systems that are working together, you're pretty much setting yourself up for failure (of some sort, to some degree). Basically you'll probably end up re-writing code because you didn't think of certain things before you starting coding. Related to his point and more important is ALWAYS take the time to come up with a plan, or a software design before you start actually working on and coding for a project.

    Have fun!

  173. My opinion... by JoeMerchant · · Score: 1

    For what it's worth:

    I graduated in 1990 and immediately found work in C programming, which evolved into a C++ job around 1996. When I have looked around for work, Java seems to be much more "rapidly employable" than C++, but the few C++ jobs that are available tend to pay better.

    Learning programming in the 80's, of course I started with BASIC, and Fortran was just a slight twist of phrase away... I still encounter Fortran occasionally, but it's pretty widely acknowledged (even by the people who still use it) as dinosaur speak. Any serious new development around me tries to get out of Fortran as quickly as possible.

    Java was "the way of the future" in 2003, I'm not sure the future is here yet, and I'm not sure Java will ever "perform" on-par with C++. I program in Qt these days, and it is delivering the cross platform promise, in C++, as well as Java ever has.

    If I were 20 again, I'd probably focus on Java, but, being where I am, I certainly have no regrets and don't think I'll give up my C++ unless I have to.

  174. optimization needs to happen early too by r00t · · Score: 1

    There is a bit of truth in the idea that premature optimization is bad, but only a bit.

    In the beginning, you should stay away from hacks like duff's device. You shouldn't be manually optimizing the common integer operations. You probably shouldn't be averaging more than 1 goto per function. You shouldn't be using inline assembly.

    None of this should be taken to mean that early design decisions can ignore performance. You're screwed if your early design is something like Python, one thread per object, short-lived objects being created and destroyed like crazy, and pretty much every function call involving SOAP/D-COM/CORBA/XML-RPC/whatever. When your design is fundamentally slow-ass shit, you'll spend the rest of your time desperately trying foul speed hacks to save yourself from the inevitable rewrite.

    1. Re:optimization needs to happen early too by phantomfive · · Score: 1
      If your design is flexible, this isn't usually a problem. The problem is people who write horribly inefficient code also tend to write horribly inflexible and unusable code (one thread per object.....sometimes may have a purpose, but normally it's a buggy nightmare waiting to happen, that sends terror to the heart of experienced programmers everywhere). While you are right that you can't completely close your eyes to efficiency, usually it's sufficient to ask yourself once after the design is built, "will this be horribly inefficient?" In practice it's often not even necessary to do that, since you will have at least one engineer on your team who is constantly saying, "that's inefficient!"

      If you think too much about efficiency from the front side, you will likely be optimizing the wrong parts. A couple months ago, I ran into this problem when a coworker came up to me and said, "The program is too slow!! Your string parsing is slowing it down!" He wanted me to rewrite it to be more efficient, but in a way that would have been much more difficult (which means more man hours, more bugs). I asked him, "really? Did you profile it?" He said, "uh....no." So I stuck it in the profiler, and the thing that was actually slowing it down were some disk accesses taking 400-500 milliseconds, whereas my string parsing code was taking less than a millisecond. A few small changes and everything was happy.

      Usually, you will find things are slow in this order:
      1. Disk accesses. May take a million CPU cycles.
      2. Things in loops. If you don't have many loops, you're may not going to have to worry about efficiency at all. Think about how many lines of code a modern processor can execute in a second. If it's not in a loop, it's a lot of typing.
      3. Memory cache misses. A single cache miss can take as much as 10 times longer than a normal memory access.
      4. The wildcards are network accesses and attempts to communicate with strange hardware, because while they can slow you down a ton, sometimes they won't. Network communication is usually non-blocking, for example, whereas when programmers access the disk they typically do it in a blocking way (for a good reason: it's easier).

      --
      Qxe4
  175. RE: Programming Language by Anonymous Coward · · Score: 0

    My most favorite programming language is Pascal.

    Have any of the "Financial Institutions", now in "hot water", for "derivatives", Bonuses, and otherwise "money laundering", ever do their dB and arithmatic in reverse polish notation?

    A sad, sad day, it is, for an arithmatican.

  176. New grads don't know everything by spaceyhackerlady · · Score: 1

    As a new grad you are not expected to know everything. You are, however, expected to learn as necessary to do the job.

    ...laura

  177. Concentrate On C... by MacDaffy · · Score: 1

    Learning C thoroughly is like learning your scales in music--you can't create the most complex without knowing the simplest (I started with Pascal and have never regretted its influence on my C).

    A good grounding in Standard C will help you spot errors and sketchy constructions more quickly, even as you come into contact with the object-oriented languages.

    As you're getting familiar with the basics, make sure you also observe best practices regarding structuring, unit testing, commenting, and style.

    If you're taken on as a new programmer in an organization of any size, you'll probably be assigned maintenance tasks fixing bugs. That means you'll also have the whole code base to study, if you need it. And don't think that you have to re-invent the wheel. You can find the algorithm for a bubble sort just by Googling. Look for programs that have solved a problem you face already. That's not cheating; that's programming.

    Good luck and HTH.

  178. secure C functions (_s) by r00t · · Score: 1

    In an interview here, that'd be an instant fail.

    There is no magic pixie dust that will make your code secure. I can write secure code with strcpy, and insecure code with all those Microsoft-specific "secure" functions. You will be writing insecure code if you actually believe that those "secure" functions are good for anything.

    Better: learn how to shut up Visual Studio's anti-competitive warnings. (hint: compiler option or pragma) Warning about "insecure" functions in order to market unportable interfaces is a new low.

    1. Re:secure C functions (_s) by pyrbrand · · Score: 1

      I understand that the _s functions were first implemented in MS's CRT implementation, but they're hardly Microsoft-specific. Remember, before C itself was an ANSII standard (subsequently ISO etc) it was a "AT&T specific" programming language. Advancing the state of the art is hardly anti-competitive. I'm not sure what the current state of the ISO standard is, but the _s set of functions have been standardized and are making their way in. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf

    2. Re:secure C functions (_s) by pyrbrand · · Score: 1

      You will be writing insecure code if you actually believe that those "secure" functions are good for anything.

      Also, I fail to see how avoiding boilerplate copy/paste bounds checking code is worthless. If you write that stuff a thousand times, chances are there will be a few where you get it screwed up, either due to negligence, copy/paste errors or off by one errors. The _s stuff is useful in that you just need to make sure the caller has accurately represented their buffer length during code review, you don't have to look through their own custom bounds checking and validate it does what you expect.

      I've hard a lot of negativity about the TR, but not any specific criticisms other than the meh, "it's from Microsoft, they just want vendor lock in". Given the TR, sure seems like unconstructive moaning to me.

    3. Re:secure C functions (_s) by r00t · · Score: 1

      you just need to make sure the caller has accurately represented their buffer length

      A typical error is to pass the size of the wrong buffer. Think "sizeof src" and you'll get the idea. Another typical error is to pass the size of the whole buffer, but a pointer that is beyond the beginning of the buffer.

      a lot of negativity about the TR, but not any specific criticisms

      Proper error handling is not a generic problem. Truncation has been demonstrated to cause security problems. Throwing an exception or raising a signal has been demonstrated to cause security problems. The idea that proper error handling can be granted simply by use of particular functions is quite dangerous; security is simply not that easy.

      The _s stuff promotes this dangerous idea.

  179. C++ IDE vs. learning by r00t · · Score: 1

    Lots of C++ programmers use Eclipse as their IDE. If you like that, use it.

    I suggest getting away from the IDE though. Real projects tend to be done from the command line with simple tools: make, vi or emacs, gcc, etc.

    This is even somewhat true for Windows, possibly substituting cl (the cl.exe compiler that comes with Visual Studio) in place of gcc.

    Projects are especially likely to be done this way if they involve numerous people, multiple platforms, developers in far-away locations, version control, or any other complicating factor. IDE project stuff can be nice for a personal project with a few files, but it just doesn't scale or handle the weird cases.

    In any case, if this is about learning, you'll want to use the tools that the serious projects use.

    1. Re:C++ IDE vs. learning by freeplatypus · · Score: 1

      I was once console-only developer (even in Java world), but once I started using GUI debugger, code completion, etc. it kind of ended ;)

      I will give C++ eclipse a try although new QT developer tools also looks simple and functional.

    2. Re:C++ IDE vs. learning by r00t · · Score: 1

      Don't forget that emacs is an IDE. It integrates everything: debugger, builds, version control, and even a console. Annoying editing tasks can often be scripted on-the-fly via the built-in elisp programming language.

      In case you have vi experience, emacs can do that too.

    3. Re:C++ IDE vs. learning by freeplatypus · · Score: 1

      I am probably the weirdest linux/user. Neither Vi(m) nor Emacs managed to please me. I belong to group of few that cannot live without joe (Joe's Own Editor), and sometimes Jed (when syntax coloring is required). :P

      But will see how Eclipse and Netbeans works for C++ dev.

      On the other hand, what unit testing libraries are worth trying out?

  180. Decide you, be honest with yourself. by Anonymous Coward · · Score: 0

    Well, this is posted as "Anonymous Coward" just because I have no time now to create an account.

    Many previous comments have the answer you need. At the end, you are the one are making your future, not me or any other person here.

    In my more or less 15 years experience I can tell you that the language is not as important as the platform where you like to run your programs.

    Do you like to make embedded systems to control machines? Maybe Assembly, C or C++ could be a good idea.

    Do you like to be productive quickly on Microsoft's based platforms? Maybe C# is a good idea.

    Your mind is around the goal of making once and using everywhere? Give an opportunity to Java.

    In general I prefer C++ because I know what I'm doing exactly and the language provides me with Object Oriented characteristics, that in fact you also can have with C with some imagination. I dislike C# because I need to use a Tank to kill an ant and these types or platforms (yes, C# on .Net and Java are platforms) try to push you so hard in their direction, that they don't let you be creative enough.

    To be honest. Give me a clean piece of hardware with an assembler and "enough time", to be happy. But in real life, we need to have food and to pay our accounts, so learn what you need to have a good job where you live and learn what you like to improve yourself in the computing knowledge, that will be useful for you in the future.

    And, never, never, never, try to take as yours others work. All we were beginners sometime in the past, and learned constantly until now. Your employer understand this and you also need to have it clear in your mind. Don't try to force yourself to be an expert in one night, this is useless.

    Good Luck :-)

  181. dont waste your time by Anonymous Coward · · Score: 0

    Spend a few weeks or months travelling- see a different country, go to the beach, meet some nice girls who dont speak English.

    Then come back and get some boring office job. Spend the next 5-10 years learning one or more programming languages- its not going to happen in a few weeks.

  182. Doesn't matter by drumbold · · Score: 1

    The specialisation that you seek will only come from gaining years of actual work experience. Any smart employee should see that you're smart enough to learn any language that they throw at you. After all, apart from the various strengths and weaknesses of different languages/platforms its just syntax. The real smarts is in solving business problems and identifying the assumptions that you make in your implementation rather than learning syntax.

    1. Re:Doesn't matter by drumbold · · Score: 1

      Sorry, 'employee' should be 'employer'

  183. .NET by sydbarrett74 · · Score: 1

    I am acquainted with a large number of tech recruiters, and they are always yelling about how they can't find anyone who's versed in .NET. Disclaimer: I'm from the US, but I imagine the IT job market isn't drastically different on your side of the pond. Like it or lump it, Java coders are a dime a dozen, but you can find a niche doing .NET development (ASP, C#, &c.). Silverlight wouldn't be a bad thing to pick up. I'll probably get lots of flames from the anti-MS coterie, but that's the way things are. As far as C and C++, plenty of FOSS projects use them, but most new business app dev is done in Java and .NET.

    --
    'He who has to break a thing to find out what it is, has left the path of wisdom.' -- Gandalf to Saruman
  184. a real answer by Anonymous Coward · · Score: 0

    trying to specialise in C is actually specialising in nothing.
    I would say do a couple of home projects or open source tools or games or something, in each,
    and decide which you are more comfortable with.

    The other thing to look at is with java experience you are more likely to use it in a range of web based technologies, and GUI applications.

    Projects using C++ are more likely to be back-end stuff or low level stuff rather than front-end fluff (unless you're doing GUIs for winblows in visual studio). Which type of work are you more likely to be comfortable with.

    If you want to be a good C++ developer you've got to learn to follow the rules and not do "bad things". Reading Scott Meyers effective C++ is a must.

    In the longer term you should aim to have a good understanding of both - then you will appreciate java for the things it does for you and C++ for what it lets you do yourself.

  185. The Great Computer Language Shootout by LiveChatWithCredible · · Score: 1

    Some time back Dough Bagley did an interesting project to compare the performance of all programming languages. You will learn a great deal if you try to refine and rewrite this project.

  186. Easy doesn't pay by stormcoder · · Score: 2, Insightful

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

    --
    Sorry my bullshit sensor overloaded.
  187. being stuck in some real time systems world by r00t · · Score: 1

    What could be better?

    You don't have to deal with some artsy "designer" who randomly decides to freshen up a GUI with random superficial changes. You don't have to spend your time converting messy financial law into messy computer code.

    You probably get to control cool hardware, and might even get some in your office to play with. Your work might involve lasers, welding robots, elevator equipment, jet turbines, surgery robots, multi-ton telescopes, spacecraft, camera lenses, nuclear reactor cores, mesh networked landmines that can hop, implanted medical devices, traction control brake systems, UAVs...

    If you actually want to be writing business craplets for some MBA who hates nerds and their technology, you can of course go that route. It probably isn't good for your sanity though.

  188. Linux = C/C++ - WIndows = C#/.NET by Anonymous Coward · · Score: 0

    I make heavy use of both C++ and C in my current job. If you're thinking of entering the linux market - I suggest you learn both user- and kernel-space which means C at the very least and C++ to compliment (for user-space).

    The truth is, I knew both languages before getting the job - but not in depth and certainly knew nothing about Linux programming. Whatever job you get - you'll probably learn on the job. All you need to show is an aptitude for coding in the interview.

    By the way, if you're interested in embedded work, linux kernel-space knowledge and C is the way forward these days.

    If you're interested in Windows programming - stick with C# and .NET. I'm not sure c/C++ will get you anywhere these days unless you're looking for linux/embedded.

  189. Language syntax is trivial... by cplusplus · · Score: 2, Insightful

    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.

    --
    "False hope is why we'll never run out of natural resources!" - Lewis Black
  190. C, C++, and Java, only?! You deserve a refund... by mkcmkc · · Score: 2, Informative

    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.

    --
    "Not an actor, but he plays one on TV."
  191. I am the same by Anonymous Coward · · Score: 0

    I have studied in a UK university as well...I graduated with a CS degree from Birmingham University in 2008...I have learned several programming languages, and you are right, c++ and java were my favorite...I decided to make myself better in java, but guess what, i have found a job now, and its no where near programming...I work in a well known international IT firm in the consultancy department, and i decided to leave programming as a hobby...I am not great in programming, but learning new things everyday, even the smallest of things make me feel good...

  192. Even better news! by SL+Baur · · Score: 1

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

    Very true. In addition, no one expects a recent graduate to produce highly professional work either.

    I think you're asking the wrong question. The kinds of skills you need in the work place just aren't taught in school. It's a hands on sort of thing and you will be most successful if you are language agnostic. You should be comfortable with the idea of getting handed a program in such-and-such language and expected to do something useful with it, regardless of whether you have had much (if any) experience with such-and-such language before. Knuth's Art of Programming books are useful in this regard.

    Make sure you know the fundamentals. Having a good ground in data structures and algorithms is vital. Logical thinking about how you go about attacking problems is another.

    And a secret: If I was interviewing you for a position and you were to quote something from The Elements of Programming Style at me (and could demonstrate that you knew what you were talking about), I'd likely halt the interview and attempt to hire you on the spot.

  193. Forget Java and C++ by SL+Baur · · Score: 1

    I totally disagree with your other statements about C though. I'm sorry, it's not a dying language. There are lots and lots and lots of new, active C projects in FOSS and in business.

    I think you're correct in a theoretical sort of way. C has succeeded in becoming The portable assembly language. It has succeeded in the world of ideas (OS implementation languages) as Microsoft has done in the market place - driven out all competition.

    4GLs and things like Prolog never took off and it's sad that C++ and Java have so much current mindshare, but they are fads too.

    Language-wise, only one, Dr. John McCarthy's LISP has withstood the test of time. For excellent reason. Syntactically, you can understand the rules in a matter of minutes. Practically, you can do complex things in a very small amount of code *and* it scales up.

    I like to think of OO as the financial derivatives of the computer science world. Complex, sexy and dangerous as hell. When you get burned, you get really burned. But you sound like a genius when you're talking about it even when you're spewing nonsense[1].

    For the long-term, I think we (on the functional programming side) will maintain our niche until everyone else sees how right we are. We're patient.

    [1] See the Perl man pages perltoot(1), perltooc(1).

  194. You don''t specialize in a programming language!! by angel'o'sphere · · Score: 1

    After responding to some postings in this thread I think I'm better of to answer directly ;D

    A lot of people on /. repeat themselves in suggesting C. I really don't understand why. Sure, since we have ANSI C, we can consider C a programming language. However keep in mind: C is nothing more than a portable macro assembler!!! That is not my opinion, but this was the design goal of Dennise Richy and Brian Kernighan.

    If your goal is to make low level system programming like kernels or device drivers, then C is surely right to learn. If you are interested in embedded systems, then again C is the right thing.

    However: C is not a beginners programming language. If you don't have fun to work / participate in existing FOSS projects, it makes no sense at all to continue learning C on your own. It is very time consuming, you will have a hard time to learn from your mistakes. And you will have to do lots of work to understand how to make it portable, how to make the build (makefiles etc.) portable, how to test your code etc.

    If you write software in C you are using 50% of your brain power and your time with making the problem fit into the C world and with avoiding to shoot your self into the foot. So you only have 50% left to actually work on the problem!!

    Making a flyby at your FORTRAN suggestion: nope, don't do that. See below why!

    C++: if C++ had a standard UI library and similar standards in its API/library/frameworks like C# and Java I would strongly recommend C++ as language of choice. In the beginning it might feel complex, e.g. because of templates. However it is a difference if you just use the templates one has written for you (like using the boost numeric library instead of FORTRAN, or lie using the stl) or wether you want to write your own templates.
    In fact templates are not really hard and nothing magically, they become a bit hard to maintain if you use lots of specializations and try your first steps in meta programming. Bottom line, if C++ had an API / library background like Java, and probably would compile to JBC and would run on a VM, I would say: it is the best and most interesting language we have.
    However C++ has lots of drawbacks: You need to read "The Design and Evolution of C++", and you have to understand really everything in that book. As long as you don't do that you will write absolutely obscure bugs that often only are found by code reviews. Also you have all drawbacks you have with C. Writing an application in C++ on a Linux machine, and then only trying to compile it under Windows or on a Mac is hard work in itself. But: instead of learning FORTRAN rather dig into C++ and learn to use the boost library.

    If you are programming in C++ the first years you are again wasting about 50% of your time and brain power, just as I mentioned for C above. But you will be able to reduce this to probably 10% over a 10 years period.

    Finally: if you want to continue working in one of the languages you already have mentioned: take Java. The number of libraries and the number of other languages like Python, Groovy, Scala that run on the JVM is incredible. To round your computer and programming experience you should work with unit testing (JUnit or what I prefer: TestNG) if you you really dig into .Net (what I not recommend) you have similar frameworks there (NUnit e.g.) Also you should probably consider learning about the Spring Framework or OSGI or consider to write an Eclipse PlugIn.

    In contrast to C/C++ the build (compiling, testing, bundeling and deployment) of Java is on all platforms basically the same.

    So said this, partly as response to other posts, partly addressing your words, I would suggest you focus on that what you like more!! If you really want to dig deep into C ... why not! Just do it.

    OTOH if you like to broaden your skills, then learn languages like Lisp, Prolog, SmallTalk and ML. For all exist implementations that run on

    --
    Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
  195. hacker howto, catb and more of esr by Anonymous Coward · · Score: 0

    http://www.catb.org/~esr/faqs/hacker-howto.html

  196. How did a woman get to be an admiral? by FlightlessParrot · · Score: 1

    For lifetime job security, in a large, conservative organization
    one word
    COBOL

  197. The right tool for the right job by TiggertheMad · · Score: 1

    C and C++ are great languages, but 90% of programming positions need you to write can be done much faster and cleaner in C# or Java. C and C++ for grabbing stuff from databases is like using a bazooka to kill a roach.

    Learn assembly to understand what is going on on the chip when code is being processed. Learn C++ to understand how the OS fits together. Learn VB because dumb ass 'programmers' who don't have comp sci degrees will write reams of code in this language, and you will end up having to fix them when they don't work properly.

    (Yeah, I'm bitter. But I have yet to meet a programmer who works in VB willingly who doesn't suck...)

    --

    HA! I just wasted some of your bandwidth with a frivolous sig!
    1. Re:The right tool for the right job by Nursie · · Score: 1

      C and C++ for fetching data from databases is just fine, when you're doing performance critical database replication...

      I know what you're saying, and there aare quicker and safer ways to do a lot of stuff, but C has a purity to it, and is everywhere.

  198. Computer Science isn't Career Training by Anonymous Coward · · Score: 0

    If you are thinking of a computer science degree as a job/language training programme, you've missed the whole point entirely.

    Any real computer science graduate should have learned the basics of all computer programming theory, and thus be able to pick up the basics of any language within a couple weeks. If you only focus on the language you happen to use at work all day, you're missing out on a world of understanding.

    To that end I recommend the following language that won't necessarily get you a job, but will make you better at your job:

    * lisp
    * haskell
    * python
    * C++
    * C

    When what you'll likely be using is
    * C++ (C with classes subset) / Java / C# (they're basically the same language under different names)

  199. You're missing the point. by macosxaddict · · Score: 1

    Computer science is not about programming. If your CS education taught you mostly programming, then it's a failure. Programming languages change all the time, but the underlying concepts do not. You should know how to design algorithms and prove them correct; create robust, scalable systems; know algorithmic approaches to many common problems; design and implement programming languages; etc. If you want a software engineering job, you should be able to learn whatever language you need there.

  200. Which university did you study at? by julesh · · Score: 1

    I'm a final-year Computer Science student from the UK. During my studies, we covered 3 programming languages: C, C++ and Java.

    During my CS studies at a UK university, we covered:

    year 1: Pascal, Perl, Assembly language (MC68008 and NS32016)
    year 2: C, an ML-family functional language, Prolog, LISP (very briefly), SQL, FLEX, Bison
    year 3: C++, MATLAB, and an obscure language designed specifically for concurrent programming tasks with language-level support for semaphores, monitors, critical sections, synchronous message passing and asynchronous message passing

    Most of us also learned Java, although this was not part of the official curriculum.

    Are you really saying that the curriculum has been so condensed that you didn't touch any of this stuff?

    1. Re:Which university did you study at? by Ubeor · · Score: 1

      When I was in school at Purdue, we sometimes learned 3 programming languages in ONE SEMESTER. In my first programming class in college, we learned C and Fortran, along with the basics of Make. By the end of the semester, we were writing Fortran functions, then calling them from our C code. Later, in an "Intro to the Web" class, we learned HTML, Java, and Perl in a single semester. Since most classes were about concepts, not languages, the professors felt free to use their own 'pet' language, whatever that may be. So frequently we had to learn a new language on the fly in order to finish a project. In one class, our first project was due 2 weeks into the semester, and was to be done in LISP -- which none of us had used previously. The professor didn't teach us LISP; he just suggested a few reference books, then went back to the subject matter he was teaching. In my Compilers course, the professor invented his own programming language, and gave us the job of writing the first compilers for it using Lex/Yacc. So if you only learned 3 languages, but didn't get in-depth in any of them, I would question the value of the institution. Heck, my high school taught 2 programming languages (BASIC and Pascal), and they were taught by the gym teacher!

  201. best language? depends on application by societyofrobots · · Score: 1

    Depends on *what* you want to program.

    I do embedded electronics, and C is by far *the* need to master language.

  202. Open Source by raduf · · Score: 1

    What, no Lisp? Just kidding. But seriously, Java has an interesting advantage: it's starting to benefit a lot from being open. On the same platform you can already program in Javascript, Ruby, Python, plus Scala and (my favorite) Clojure. And more to come.

    And btw, you want to move away from older languages. What this whole generation of script-like languages has in common is that all of them are better then c/c++/java/c#.

  203. Learn to use the tools like a pro, and learn SQL by Anonymous Coward · · Score: 0

    As a recent grad, most companies will have some system for getting you "commercialised" and, so long as you are reasonably comfortable with their language, then you will be ok. Frankly as long as you know an OO language and some PHP, you could just pick up a book on any langauge, do some "Hello World" type programs and be ready.

    The things you should really learn though are the tools. Especially if you're going into a Microsoft shop. Visual Studio is a massive IDE and it will do much of your work for you, but only if you know how to ask it.

    The other thing you must know is some database. It could be any DB, from MySQL to Oracle, but again, know those tools.

    Finally, and this is just an interview point. Get certified! As most companies will ask you to do some sort of programming test, you'll need to prep, and getting certified is a good way to do it. Equally though, don't boast about it on your Resume / CV, because it will make you look like your trying to cover up some other shortcoming.

  204. Design is more important by spirtbrat · · Score: 1

    Today's top software is not that much about perfect implementation. It's about software design. The big popular programs (actually even the text editors) are complex and the good software design is way more important that the implementation according the established design. So, you better specialize programming in certain scope, rather than certain language. The language is a derivative to the design. For an example - if you like low level programming (drivers, kernels, embedded systems), then you should learn C and some assembler very well. If you like programming desktop apps - C and C++ (maybe also Python). If administration is your passion, then specialize in Bash, Perl and C. To be a successful web developer you need to master HTML, Java Script, PHP... You got what I'm trying to say.

  205. And work on your tools by slashbart · · Score: 1
    Seriously.

    Knowing how to cobble together an efficient toolchain from shellscripting, Makefiles, aap/scons, cgi-scripts, doxygen, some Python will make you a much more productive programmer than the typical Eclipse expert user that is unable to do anything when there's no Eclipse plugin for a certain task.

    The command line rules for pretty much any kind of automatic testing, building and deployment, but the large majority of IT professionals these days seem to be unaware of this.

    Bart

  206. Learn PHP and showcase your work online by 8086 · · Score: 1

    The market being the way it is today, learning PHP well and doing some work in Drupal and another framework like CakePHP or Symfony will count for a lot. It will show knowledge in relational database modeling as well as programming in PHP, which is not as unsexy as hardcore programmers will tell you. Add some experience of Linux and Apache administration, and you've got yourself the silver-est bullet in the market. You'll be able to deploy networked database applications rapidly given nothing else but a computer and an internet connection.

    Of course, learning something that compiles better like C#,C,C++ and Java is not a bad idea, either. The only problem is that you would end up spending more time learning at home, the same time that could've been spent working in a real shop solving real problems. In the end, a good carpenter is not the one who can use the best tool or a variety of tools, but one who can build you a strong and good looking table using as little materials and time, and asking as few questions as possible (I recommend reading A Message to Garcia). I think the carpenter rule applies to programming as well. Most people don't care what language you make software in, as long as it is stable, functional, usable and does its job effectively. PHP allows you to hit these targets relatively quickly, so, I recommend it.

    If you'd like to learn a language that has high unmet demand for programmers and lands you in a relatively secure job doing cool stuff, I suggest you learn Lisp. If you 'master' Lisp, you can learn Scheme, Lua, Haskell, OCaml, or almost any other language with relative ease. But, note that the Lisp track is lengthier and will keep you at home jobless longer than Linux, Apache, MySQL and PHP.

    Another useful idea is to start your own Open Source project or work with an ongoing one. Employers look at it favorably, the chicks dig it, and you contribute directly to the sum total of human intelligence. You also get to keep your hair long, your armpits smelly, and can get away with keeping non-keyboard human interaction to a minimum.

  207. Forget having a life for now and get grounded. by flajann · · Score: 2, Informative

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

  208. Best tool for the job by flajann · · Score: 1
    As one who have an enormous amount of experience with both compiled languages like C++ and Java, and scripting languages like Python, Ruby, and PHP, there is much to be said for both paradigms.

    PHP sucks for real object-oriented programming, I would agree. OOP was bolted on to that language as an afterthought and it is a sad compromise between its legacy heritage and the modern world. But I have seen too much horribly written PHP code, written by lazy programmers who couldn't spell OOP if it were printed out for them in front of their eyes! Yet it's great for rapid turnaround, something essential in today's "here today, gone the next" World-Wide-Web.

    Not everything merits being compiled. Today's computers are so fast that it can run many of these scripting languages faster than older processors could run compiled C code. Overhead of memory and CPU cycles are the cost for fast turnaround. But today, it doesn't matter unless you are writing something truly compute intensive.

    Having said that, I will state that web programming today is a complete mess of things. You need to know too much to do it effectively. You need to know CSS, HTML, PHP/Python/Ruby, and SQL, of course. There are many frameworks to ease some of this, but then frameworks comes with its own baggage, and you get locked in big time, and can be a pain if the framework does not do what you want.

    Then there's the consummate hell of making sure your results looks good on not only all the browsers in use, but all the major versions of each browser, all of which treats CSS and HTML in subtly different ways.

    OH, and then there's Javascript. Don't even get me started there. And to be truly "Web 2.0", you need AJAX...

    Then there's scability issues that your chosen framework may make easy or make a pain in the butt.

    But you'd rather go tech support than web developer? Think carefully now. Do you REALLY want to deal with idiot users who can't figure out out to turn on their computers all day long? You must have a VERY strong constitution...

  209. Your heart... by jprupp · · Score: 0

    is right.

    By the way, I work in a mayor Swiss private bank. There's a lot of Java and Perl code to write. But if you can do C well, you can do whatever.

    Oracle PL/SQL is very used also, and it's developers are very well paid.

  210. generalize! by Anonymous Coward · · Score: 0

    dear aremstar,

    As some others have said, it is important to have a general knowledge of programming. The best thing you can do for yourself is learn languages whose syntax is foreign to you. Since you know C++ already, you could look at a piece of C# code and have a rough idea of what it does. Can you say the same of a functional programming language like lisp? Not so much.

    Spend a little time with languages like lisp, ruby, gnu make, objective-c, and maybe a little assembly. Explore some newer areas like NVIDIA's CUDA and Cg languages.

    Don't worry about being a jedi knight at a single language. There is an old saying about this: "Don't put all your eggs in one basket." :) Good luck.

  211. Employability, Popularity and Usefulness by Velska1 · · Score: 1

    Some programming language can be popular, because it's useful; that is not necessarily always the case, though. Java may be popular because of its portability, for example. Java as a language may or may not be as good as its popularity could indicate - although you certainly can do plenty of stuff with it. Not write a gadget driver, though.

    One can compare programming languages with human languages. If you learn one Indo-European language, it's easier to learn another, and the learning curve is less steep with each new language. The same seems to be true with programming languages. On a side note vis-Ã-vis human language, remember that for certain NATO-affiliated services, Arabic speakers are in huge demand. True, they don't get rich and work in an awful environment, but employment prospects are good.

    I bring up the human language comparison, because it seems people become emotionally attached to their "own" languages in programming, too. But after all, what is important, is that you can perform tasks that need to be done, while keeping costs manageable. Your boss won't necessarily care which tool you use, as long as it isn't too expensive in licensing cost or labor.

    It could be helpful to consider the implications of the economy. Organizations may not be able to upgrade hardware and proprietary licenses as frequently as they're used to, so in the near future demand for people, who can do more with existing resources, will probably increase. I could see FOSS becoming stronger in this environment.

    --
    Every problem has a solution that is simple, easy and wrong. Selling our Liberty for a little Security is a much too de
  212. Language doesn't matter by Anonymous Coward · · Score: 0

    Hi, the language doesn't matter very much. If I was you I'd try to take a look at cwjobs or jobserve. You'll notice that 90% of jobs are:

    - ASP.NET with C# development
    - JSP (with a good amount of hibernate, struts or JSF).
    - C# and winforms stock exchange application development (if you're in london).

    Now I tell you, if you know Java and C++ it will take you 10 days to learn C#, but that would be nothing. This is because it's all about frameworks, libraries. Decide, carefully, which sector you'd like to work in, then take a peek at the Graduate job postings. Remember that lot's of companies are offering for graduates with no experience and they mean to invest time on them. Maybe it could be a good choice to pick up one that does MORE than one thing, so you'll have a chance to see what the work of a professional programmer is like. I tell you this because I was very confused moving from University to actual work and things like kernel implementation, mpeg video encoders and other fancy stuff are really NICHE jobs, like 0.5% of all offers. They are fun indeed, but they will force you to be less free, I mean you'll have to move to catch good ones, while other stuff like asp or jsp are the most common and you'll find them whenever you are. I'm not saying what you should pick, I'm just saying inform yourself very well, because real-world is veeeeery different from university and slashdot.

    bye, man.

  213. The Real (Time) World by curmudgeon99 · · Score: 1

    Interesting reply. That actually sounds cool. However, not every job is in Finance. I myself have worked in: a variety of businesses that had hard-core computing needs. It has all been Java. I have never worked in finance, a fact I'm so glad of now as that industry tanks. Though some of the applications you described sounded cool, you're not addressing the agony that goes with things like tracking down memory leaks and playing with pointers and all the other fun stuff you get to do with C. Sure, it's fun writing stuff that runs fast and does an esoteric job. However, I believe I am a more efficient programmer in Java and that I am able to tell those MBAs "Yes, it's done" much easier with less fighting with stupid crap like I described above that happens when programming in C. I feel like a more effective developer in Java because a minimum of time is spent language-hogwash.

    1. Re:The Real (Time) World by r00t · · Score: 1

      you're not addressing the agony that goes with things like tracking down memory leaks and playing with pointers and all the other fun stuff you get to do with C

      I guess I enjoy that. I also do assembly and sometimes minor hardware stuff, so... :-)

      For jobs that require low-level languages, job expectations may be different. Management usually understands that the work will proceed as fast as it does. I'm not expected to refactor overnight.

      Memory leaks and pointer problems are usually easy to find on a Linux platform. Compile with debug symbols, then reproduce the bug under valgrind. Valgrind is like magic. It even tells you if you pass uninitialized data to an IO function or if your code makes a decision (an "if" or loop condition) based on uninitialized data. Also remember that gcc does not enable warnings by default, the -Wall option doesn't enable all warnings, and many warnings require optimization enabled for them to actually work.

      Of course, running on bare metal is even more fun than running on Linux. You get to debug using JTAG, a logic analyser, a single LED, or characters that you write to a serial port.

      The best is when your software controls something dangerous, or at least expensive. There is a certain thrill in knowing that a simple typo could cause a giant factory robot knock a roof support loose. I've done stuff where bugs could expose hospital patients to needless X-rays and stuff where bugs could leave military personel without sensors or defensive countermeasures.

    2. Re:The Real (Time) World by curmudgeon99 · · Score: 1

      Counselor, I rest my case.

  214. Learn on the fly by Anonymous Coward · · Score: 0

    I'm currently trying to find a job as well. What I've found out is that more important than actual knowledge is the ability to learn a language on the fly as well as being able to effectively Google your problems. C is a great background and is the basis for many languages. Now market yourself as being able to learn whatever the employer needs you to know quickly. That is a better skill.

  215. Depends by cowdung · · Score: 1

    Depends on what you want:
    - Games: learn C++
    - Webapps/inhouse apps: learn Java or C# (easier for webapps)
    - Science: Matlab or maybe Fortran (and get a related degree)

    But mostly you just need practice.. start your carreer.. do some projects.. soon you'll know what to brush up on and if necessary what to study when /if you get back to school.

  216. Be able to learn by jemicron · · Score: 1

    Don't get overly invested in just one or two languages. You don't want to just be "another journeyman C++ programmer" in 5 years but you want to be someone who can solve problems and get results with a computer in any language.

    In other words need to know the basic concepts of scripting, procedural programming, object oriented programming and functional programming and be able to learn the new models for the 21st century. You need to know about data structures, interface design, etc. But the tools you use can, and should, change over time.

    When I started programming over 40 years ago Pascal, Assembler (on mainframes), CLISTS, jCL and modular programming were the newest things. I was constantly learning new languages over the years. Often they were very specific to a given device or environment and unlike anything I had studied before. You need to think about what it is you want to get by studying a language.

    If you just want to learn new skills, now I would recommend a functional language like OCAML. On the other hand, if your objective is just to make money and have job security learn ABAP/4 for SAP.

    But in either case, expect to learn something new tomorrow. If you have the fundamental concepts down you'll easily adapt and find each successive language comes easier; if not you'll get dead ended and have a career writing the same program over and over.

    If you learn the fundamental skills and concepts then you should be able to pick up any language in a short time. The more flexibility you have the better.

    --
    "Intelligence is like four wheel drive, it gets you stuck in more remote places" --Garrison Kiellor
  217. making the choice by Uzik2 · · Score: 1

    Choosing a path is tough. If you're going to be a PROGRAMMER, not someone who does it until they can move into management, you can go with "high professional" and "low professional". A high pro is one that learns a difficult skill very well and gets paid high wages. It's very difficult to find those jobs though. A low pro is one that knows the language dujour and can get a job anyplace. The salaries aren't high though. A high pro knows something really esoteric, assembler, C, or C++. A low pro knows Java or Microsoft managed languages. In assembler you can do what ever you like but you must do it right or you fail. Managed languages garbage collect so you don't have to, etc. To some extent you may change over your lifetime or your understanding of life may change. You may find once you have what you desired it's not really what you thought it would be. Good luck

    --
    -- Programming with boost is like building a house with lego. It's a cool but I wouldn't want to live in it
  218. only 3 languages? by Anonymous Coward · · Score: 0

    I'm a final-year Computer Science student from the UK. During my studies, we covered 3 programming languages: C, C++ and Java.

    seriously? those were the only 3 languages you studied? i'm a third year and we've already studied java, c++, lisp, ml, prolog, erlang, perl, ruby, verilog, mips.

  219. +10 Insightful by Anonymous+Codger · · Score: 1

    Absolutely correct. You should know the language well enough to maintain code written by hotdogs, but don't get carried away with all the weird features. You just don't need all that fluff to get code that is usable, accurate, fast, and maintainable. Leave your ego at the door.

    --
    No sig? Sigh...
  220. Specialize in architecture, not languages by elnyka · · Score: 1
    Before someone flames me for the title of my post, let me start with this:

    If I had a chance to turn the clock backwards when I left grad school to look for a job, I would have accepted a job as a C++ instead of chasing the Java dream during the dot-com era. I've been unemployed for 3 months, and if I had at least a year of working experience in C or C++, I would be employed and making much more money now.

    But that was then, this is the now, so I'll keep my suggestions generic:

    In addition to learning C, C++ and Java (but learning their fundamentals really well), learn C# and get proficient with Unix tools (vi, awk, sed, perl, make). If you don't have access to a Linux/Unix box, install the cygwin stuff on your PC.

    On the four languages mentioned above, get really good at (or at least acquainted with) multithreading, resource allocation and de-allocation, error logging, sockets. It is horrendously surprising how bad Java programmers tend to be. I've made a living rewriting f-horrible Java code that tanks because the retards that wrote them don't know they need to close connection pools or avoid creating a kazillion objects that bring the gc to its knees under heavy load.

    Never assume you have infinite memory, CPU or shit like that. This applies to any platform you wish to pursue.

    Since my experience is with Java, if you were to go that way, I'd suggest you immediately train for the Sun Certified Java Programmer (SCJP) exam.

    People are going to say that certs don't mean anything, and they are usually right. But you need to stand out as a green horn, plus the certs help you verify if you really know what you think you know.

    Then pursue the SCJWCD (Web Components) and SCJBCD (Business Components) certs - leave the certs for web services and enterprise architecture for later. These three certs will truly prepare you to talk intelligently about the J2EE stack - obviously this will only work if you are a decent programmer. You might have only the basics of programming, but there are principles by which you can abide and be a good programmer.

    Then learn the basics of the Spring Framework, Hibernate and iBatis. This is pretty much the training path I would suggest for anyone trying to get into the Java market with some solid footing. Webucator.com has e-learning classes that you can take at your leasure in basic web services, ejb components and J2EE architecture, for $100 each course. Now with the new EJB 3.x being available, now it's a good time to really learn J2EE (which wasn't the case with the monstrosities that were EJB 1.x and EJB 2.x.) There are different vendors that provide professional training in 5-day long seminars that cost between $2 and $4 (training ain't cheap, but it's a good way to go.)

    If you don't feel like working towards those certs (which I think it will be a shame), then get 'EJB 3 In Action', 'Head First Servlets & JSP' and 'Spring Recipes'. Take 3 months to learn that stuff inside out, download WebLogic and JBoss and learn how to configure those containers, and how to deploy stuff. Learn how to use log4j (this is very important!), Maven and Ant.

    You could also go the C# way - there are more jobs in C# than Java, but they pay less. And also, don't ever be dogmatic or fall for religious wars. A tool is a tool, and to be honest, C# and .NET are not bad technically speaking. I prefer to work on non-MS platforms, but I'm not a dogmatic idiot - don't be one of those.

    For the C# platform, Microsoft has a series of free training lessons available, all laid out according to the specialization path you wish to follow:

    http://msdn.microsoft.com/en-us/beginner/bb308760.aspx

    Then aim to get a MSCT or two from them.

    For C or C++ I can't say anything. I had my chance when fresh out of college. If you get a chance to get a junior position, get it, even if you don't have a clue. Just do it and go the extra mil

  221. K&R by Toddsa · · Score: 1

    Start with C or C++. K&R is always a handy starting reference. Learning a typed language I believe is harder than something like C#, VB or Java but that is just me. You will never become an expert at any language and you really should not try to. If you are really good you actually learn how to learn languages rather well. If you want to do kernel and driver work like you hinted at then you will need C. Most kernels do not support OO so C++ and managed languages are out for the most part. You can still use C++ for then in some cases you just can't use certain parts of the language like OO.

  222. Learn the Next language first by stkpogo · · Score: 1

    FORTRAN( C =0; C++; Java(Cobol)) GoTo Reboot;

  223. breadth versus depth by Anonymous Coward · · Score: 0

    You won't get language proficiency by studying, you'll get it from working. You're not going to be expected to be best-in-class in an entry-level position; what's more important is your general problem solving ability and your ability to find answers to questions on your own.

    In most parts of the software industry, it's actually more important that you be able to rapidly acquire new competencies (new APIs, architectures, languages) and be able to use them effectively than that you be super-proficient in a single competency.

  224. It's not the size that matters.... by Anonymous Coward · · Score: 0

    I agree with previous posts with its not what you know, but how to do it.

    If you know how to program WELL, it's easy to pick up difference languages as you need them. That's why I always suggest C++ as a first language because once you can code well in it, its easy to pick other languages.

    You want your code to be:
    a) easily updateable and organized
    b) usefully commented
    c) have error checks (you have no idea how often I've come across code that never checks what the user is doing)
    d) use KISS (keep it simple stupid) - if you use a rare command because it works beautifully, comment the stupid thing!

    If your looking for good languages to have, these are my suggestions. (no particular order)
    1) C++/C
    Good solid language, especially if your writing something for Windows

    2) Python
    I use this for writing daemons in Linux

    3) Bash/Batch
    Good for creating patch scripts if you a SysAdmin

    4) Perl/CGI
    Not as popular but good to have, more secure than PHP

    5) PHP/MySQL/HTML/Javascript
    I loath Javascript with a passion but it's very popular with employers right now.

    6) Java/C#
    I'm not currently on the C# bandwagon, but it does seem popular with employers. Java is, while bloated, it quick to write in and multiplatform.

  225. joe kicks ass! by r00t · · Score: 1

    I tend to not mention it, but yeah I use joe now. I switched from emacs because my Turbo Pascal origins were calling to me. We're not alone. Alan Cox (the UK Linux hacker) uses joe.

    Recent versions of joe will do syntax coloring. Most Linux distributions enable it by default. The backtick problem is fixed too, so you can now paste a shell script into joe and not have it mangled.

    For avoiding bugs, I suggest using valgrind (excellent, though C++ names get crazy complicated when printed out in full) and lots of compiler warning options. Most beginners use neither, and suffer horribly as a result. Be sure to compile with either -O2 or -Os (letter "O") because many warnings depend on analysis done by the optimizer.

    For C you might use:

    -Wall -W -Wshadow -Wstrict-prototypes -Wmissing-prototypes -O2

    Don't forget to run valgrind **every** time you suspect a problem or want to ship something. The tool is amazing.

  226. Objective-C by falconwolf · · Score: 1

    actually there is an objective-c compiler in the gnu compiler collection (gcc). And the openstep project uses objc for its applications and libraries. Openstep applications run on any Unix and in most cases these applications also compile on Mac OS X, because the API is compatible.

    Okay, Objective-C does work with Linux as well as OS X. Can it be used for Windows though?

    Falcon

  227. Nobody's an expert out of school by whitroth · · Score: 1

    No one hiring someone right out of school expects an "expert" in a language. Back in the mid-nineties, I was working for Ameritech (a Baby Bell), and did the technical part of the interview for programmers for all five teams under my director. One of my std. questions for right-out-of-school was to ask them what the largest program they'd worked on was. My range was 500, 1000, 5000 lines.... Consider that my manager there asked me how many lines our systems were, and a dumb linecount - wc -l - told us a quarter *million* lines.

    If your manager's any good, you'll be doing maintenance and then enhancement of existing code.

    On the other hand... I love the folks saying that C's good. I have over 10 years of it, and have been looking since last Sept (I'm currently on a three-month contract as an admin), and have seen almost *zero* C (unless you're either a kernel hacker or write embedded) (and I've been looking in Chicago, DC, Philly, the Bay Area, Portland, and Seattle). I'm wondering where all the maintenance and enhancement on all the code we wrote in the nineties is....

                      mark

  228. Suggestions.... by foniksonik · · Score: 1

    Learn how to:

    1) Be a Quality Assurance Engineer - ie: Bug Squasher

    2) Be a whiz at using a variety of source control systems (CVS, SVN, SourceSafe, BitKeeper)

    3) Learn how to write great documentation

    These 3 skills will make you stand out amongst the crowd of new graduates.

    You won't get to be a lead developer you're first time out (rarely) so plan on being a support developer (#1), the kind who cleans up and tests the code the more senior people write. To do this you'll need to know (#2) and to stand out within that group of employees you can use (#3).

    Then when it's time for a review you will have proven that you are a good team member, you can write good clean code and that you fully understand the code that you've written.

    An employer can't ask for anything more and you should get promoted to a junior developer position.

    --
    A fool throws a stone into a well and a thousand sages can not remove it.
    1. Re:Suggestions.... by Orion+Blastar · · Score: 1

      Being a debugger is not that hard. Just look for the obvious mistakes like not closing off objects when the program is done with them, and then freeing up the memory. Look for misspellings of variable names, follow a naming convention, write a comment in the code when you discover what that part of the code does so it is easier to maintain later, write documentation, think like a user to see what mistakes a user could make that could crash the program or cause errors and then trap for errors and fix the code so it does not crash. Source control is easy to understand and use if you know how to program, you can easily learn the commands to check source code in an out.

      --
      Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
  229. Huh?? by Xest · · Score: 1

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

    Why is that a problem? If you're working for an MS shop as most businesses are then that's actually an advantage, MS technology bonds with other MS technology much better and much more cleanly for the most part.

    "I would recommend that any SlashDot reader go with Java or C++ over C# because they are better documented"

    News to me, got an evidence of this? I suppose there could be more documentation out there simply because they've been around longer, but better? in what way?

    "more standards compliant"

    Okay now you've really lost me, what standards are we talking about exactly? C# is a standard in itself, separate from the .NET framework and CLR. It also has better support for different character sets than most other languages too so it's hard to understand where you're coming from if that's what you're referring to.

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

    C# and the .NET framework wasn't designed with the goal of being cross platform, it was designed to make building quality Windows platform based apps quickly and securely and it achieves that very well.

    In fact, comparing languages like C#, Java and C++ directly like that is not something a good programmer would do. You use the best tool for the job, if you're using Java to write a Windows only app where potability isn't a requirement then you're wasting your time when you could get it done more quickly and easily in C# and .NET. If you're writing an app. that should run across many different platforms that wont be inconvenienced by the JVM (i.e. does it need direct hardware access?) then Java is the best choice. If you need direct hardware access and the maximum possible performance you can squeeze out the system in question then use C++.

    But anyway, the original suggest here for C# was a good one. It's a language that's easy to use (and much harder to break things with than C++), it's still powerful, and it seems to get more job ad listings than any other language in the UK. So for a first time graduate, it's probably the best choice out there. The only C++ jobs I see start around £40k a year and are not jobs the guy asking the question has a chance in hell of getting. Java has some junior developer roles but much fewer than C#, there's also often higher wages to be found for C# developers at entry level too for some reason - possibly because they're so in demand right now.

    One final point of course is that C#, using Visual Studio, is simply a pleasure to develop for more so than say Java with Eclipse or Netbeans, although the latter two are improving rapidly nowadays at least and really aren't far behind!

    As long as you actually enjoy programming and want to do it long term you'll explore other languages yourself, whilst gaining experience on OOD/OOP quickly and easily using C# as well as learning the other issues that developers face. Developing is about more than just a language as you state and there's no reason all of that can't be learnt well in C#. A good programmer will be able to move language with ease eventually when they feel they're read anyway, but you're just shooting yourself in the foot to focus on anything other than the language which has the best starting wages and is easiest to start out in without harming your learning prospects initially and that language really is C# right now. A C# developer should get £30k to £35k p/a real quick here which isn't too shabby a wage for someone with only a year or two of experience.

    1. Re:Huh?? by AmaDaden · · Score: 1

      To clarify I do think that C# is a good language. This is why I referred to it as "a rival to both Java and C++".

      I have already addressed the document and standards issue in another post, http://slashdot.org/comments.pl?sid=1170319&cid=27289561

      Currently Windows is losing share of the OS market. This makes getting locked in to a windows only language something to avoid if you can. I agree with use the right tool for the right job but the story is about what language he should learn for a job not what language to use for a single project. The 'job' in this case is to give the person the best tools for the future. With other OSes getting a foot hold in the market I think that cross platform languages are a better bet.

      From the sound of it the UK is far different then the US http://duartes.org/gustavo/blog/post/programming-language-jobs-and-trends http://www.langpop.com/. As you can see Java is in huge demand around here.

      Again C# is a great language and MS has done many things right with it. But if you are just getting started I think it's a good idea to steer clear of it.

  230. What to focus on? by redbaritone · · Score: 1
    1. Develop Good Habits

    I wouldn't focus on ANY language. I'd focus on the OTHER things that go with being a good programmer. Good programmers aren't necessarily smarter than bad programmers. Most often, they just have better habits. Buy a copy of "Code Complete" by Steve McConnell and study it. DO WHAT HE SAYS TO DO.

    2. Learn the Tools

    Learn and use Git (preferably) or Subversion with every project you work on. Most projects don't happen in isolation or without screw-ups, so don't pretend otherwise. Learn to take advantage of a good text editor. You'll be using it for a while, you may as well know it thoroughly.

    3. Diversify

    Diversify your portfolio a little. Learn a couple of scripting languages, like Python and Ruby. Haskell and Erlang might come in handy, too. Learn why.

    4. Practice

    There's no substitute for experience. So, take a given pet "project" (one that you're familiar with what it should do) and implement it multiple times, using a different language each time. By doing this, you'll learn why certain languages may be better suited for certain projects. Join an open source project of a tool that you use and enjoy.

    5. Profit :-)

  231. Re:Procedural only? Sad by badkarmadayaccount · · Score: 1

    Because they aren't pure functional ones. And they "support" procedural programming, in the sense that they use procedural semantics.

    --
    I know tobacco is bad for you, so I smoke weed with crack.
  232. This is an incredibly silly question, C++. by Anonymous Coward · · Score: 0

    Right, so I'm gonna be a bit of a dick and say if you have to specialize in one of those languages, go with C++. If you know C++, you'll have the skills to quickly pick up Java and C#. Picking up C from C++, I'm not so sure, but at least you'll be kind of used to most of the syntax.

    Don't use Java as your primary specialized language, because you get to be a lazy ass with memory management. Migrating from Java to C++ takes a bit more effort. The hardest thing about Java is knowing what does what, and that's not exactly hard.

    But honestly, fuck only sticking to any language. Just learn to bloody well think about what you're doing and figure out what's the best language for the job you're trying to do. Proper problem solving is what you want to do, the language chosen is a purely implementation detail.

  233. Re:'Commercial experience' has nothing to do with by Anonymous Coward · · Score: 0

    Whatever you do, make sure you get a /. account with a username you'd be proud for your employer to see when they come by and see you hardly working!

  234. mmmhhh (was:Good News!) by Anonymous Coward · · Score: 0

    The best golfer doesn't use all the clubs to win a match, just the ones he needs.

    The best projects don't use all the features of the programming language, just the ones they need.

    One thing is learning about concepts and how they are implemented in different programming languages.

    Another thing is to learn everything about a language. That's a waste, because no language is perfect, which is the same as saying that all languages have pitfalls.

  235. Obligatory Dijksra quote by alexo · · Score: 1

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

    Obligatory Edsger Dijkstra quote:
    "Computer science is no more about computers than astronomy is about telescopes."

  236. What I did by Orion+Blastar · · Score: 1

    was learn as many programming languages as possible until one of them led to a job.

    It happened to be Visual BASIC, but I learned COBOL, Ada, FORTRAN, 8086 Assembly, JCL/JECL, Turbo Pascal, GW-BASIC, Quick BASIC, Visual BASIC, C language, and a few others.

    Back in the good old days of a Computer Science degree we used to be able to create our own operating system. But modern times they don't get that complex. You are most likely lucky enough to learn data structures and how to call an OS API call.

    What I would suggest, is that you visit http://www.uglist.org/ or do a Google search for "YourCity YourState User Groups" and replace YourCity with the City you live in and YourState with the State you live in. Join up a few user groups and they will be free to join and you can learn the "complex" things by going to meetings and listening to lectures and networking with other Comp Sci Students and programmers and maybe a few managers that might help you get leads to jobs.

    Ask for an entry level job that provides on the job training. You will most likely get a "Mentor" or a more experienced programmer teach you some complex tricks of the trade. I myself have had a few mentors in my life, and it is a good thing to have. I've also developed my own style of programming and debugging and documentations that I could write a book on and sell it to final year Comp Sci students. :)

    --
    Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
  237. Follow your heart. by coeur_de_lion · · Score: 1

    One can always get a job. Follow your heart.

  238. My 2 bits by Anonymous Coward · · Score: 0

    Well I admit, I had not had the chance to read all the responses, so forgive me if this is a repeat thought. I also recently graduated and had been out in "the real world" for about year now. My current job is actually nothing that was covered thru by my four years of school. From what I have been able to see is sell you problem solving ability. Languages (at least at a basic level) are the easy part, good solving is the hard part.

    There is usually going to be someone to help you anyway, because chances are rare that you have learned anything about the business of whatever your job will be, and that's what the experts are for... just my 2 cents, hope it's at least worth the pixels it's printed on..