Beta
×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Programming Language Specialization Dilemma

Soulskill posted more than 5 years ago | from the choosing-a-path dept.

Programming 569

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

cancel ×

569 comments

Sorry! There are no comments related to the filter you selected.

Good News! (5, Insightful)

multipartmixed (163409) | more than 5 years ago | (#27279927)

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

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

Re:Good News! (5, Insightful)

Anonymous Coward | more than 5 years ago | (#27279953)

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

Re:Good News! (5, Funny)

interstellar_donkey (200782) | more than 5 years ago | (#27280239)

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

Re:Good News! (1)

Hooya (518216) | more than 5 years ago | (#27280369)

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

Re:Good News! (5, Insightful)

Anonymous Coward | more than 5 years ago | (#27280117)

Learn three things and you'll be fine.

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

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

Mod parent up (5, Insightful)

artor3 (1344997) | more than 5 years ago | (#27280333)

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

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

Re:Good News! (1, Funny)

Anonymous Coward | more than 5 years ago | (#27280377)

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.

Re:Good News! (3, Insightful)

SirYakksALot (223217) | more than 5 years ago | (#27280125)

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

Re:Good News! (5, Interesting)

rossifer (581396) | more than 5 years ago | (#27280145)

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.

Going against the grain... (5, Interesting)

BrokenHalo (565198) | more than 5 years ago | (#27280279)

I know this will seem foreign to most of the current generation of graduates, but I would suggest a strong grounding in assembly coding for any processor. If the programmer really understands assembly, s/he should "intuitively" acquire a sound grasp of what makes a good program written in C, Fortran or whatever.

Many of the current commercial languages belong in toyland. They are designed for programmers who really don't have any idea about managing resources efficiently.

Re:Good News! (0)

Anonymous Coward | more than 5 years ago | (#27280281)

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.

Re:Good News! (-1, Flamebait)

Anonymous Coward | more than 5 years ago | (#27280209)

We must remember that BSD is dying. It is just like the downfall of communism. It is a clear case of the theoreticians being out of step with free market reality.

BSD commissars are always spouting some kind of socialist gobbledygook. The free market said "No! we don't want BSD!" "We don't want to give away our work with no recompense!"

Take your BSD socialism and shove it up where the sun don't shine!!!

Re:Good News! (0)

Anonymous Coward | more than 5 years ago | (#27280237)

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.

Nobody expects a recent CS graduate to do much (1)

Unoriginal_Nickname (1248894) | more than 5 years ago | (#27280259)

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.

Re:Good News! (3, Insightful)

Hooya (518216) | more than 5 years ago | (#27280317)

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

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

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

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

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

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

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

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

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

I'll get off the soap box now.

Re:Good News! (4, Insightful)

Shisha (145964) | more than 5 years ago | (#27280331)

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

Re:Good News! (1)

MrCrassic (994046) | more than 5 years ago | (#27280403)

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.

Don;t worry `bout it.. (5, Interesting)

Anrego (830717) | more than 5 years ago | (#27279929)

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

Every shop has their own specific tool stack and custom libraries and documentation process. They are also going to need you to be very knowledgable in one or more very specific areas. There's no way you're going to be able to get yourself ready for any.. or even many jobs before hand. The important thing is that you can learn new stuff quickly.. digest existing code.. present your ideas in a digestible way to a diverse group of people (managers, other developers, testers, clients).. work in a team.. and not let your ego get in the way.

First several months at any new shop are spent learning their way of doing things .. they expect that. It's why programming shops put such a heavy emphasis on the hiring process. The company will invest a lot of money on you before you make them any.

C++, C, and Java are kinda the standard trifecta these days. I'd suggest doing a little assembler, and maybe a really messed up language like Perl just to see the "other side" (pre-emptive defense: I love Perl.. but common.. it is pretty messed up). One thing I would recommend though that I didn't see in your post is a good knowledge of technical writing. You can have the perfect answer.. but if you can put it on paper in a clear and understandable manner.. what's the point.

Re:Don;t worry `bout it.. (1)

Tablizer (95088) | more than 5 years ago | (#27280189)

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.
   

Re:Don;t worry `bout it.. (1)

Anrego (830717) | more than 5 years ago | (#27280255)

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.

Visual Basic. (3, Insightful)

XPeter (1429763) | more than 5 years ago | (#27279931)

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.

depends on what you do, but probably C++ (2, Informative)

junglebeast (1497399) | more than 5 years ago | (#27279933)

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

On the right path (0)

thetoadwarrior (1268702) | more than 5 years ago | (#27279939)

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

Practice (4, Interesting)

adisakp (705706) | more than 5 years ago | (#27279955)

The best way to get programming experience is thru practice. Either work on your own personal projects or contribute to a larger shared (OSS) project. That's the only way you're going to become a better programmer. Classes are merely an introduction to the ideas.

Programming classes are like piano lessons. You're not going to become a concert pianist thru basic lessons without lots and lots of outside practice on your own.

Re:Practice (4, Insightful)

adisakp (705706) | more than 5 years ago | (#27279971)

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

Re:Practice (3, Insightful)

slashkitty (21637) | more than 5 years ago | (#27280023)

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?

Re:Practice (1)

Sebilrazen (870600) | more than 5 years ago | (#27280155)

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.

COBOL (5, Interesting)

flyingsled (1475035) | more than 5 years ago | (#27279959)

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

Forget'em (3, Funny)

oldhack (1037484) | more than 5 years ago | (#27279965)

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

Re:Forget'em (1)

John Hasler (414242) | more than 5 years ago | (#27280013)

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

C++'s still a lot to say (2, Insightful)

MikeOtl67of (1503531) | more than 5 years ago | (#27279967)

I would go for C++ because it is very rich and powerful. Once you got that in depth, manipulating languages such as Java or C# would be a breeze, because their object model is simplier than C++'s. C is nice but I feel it is part of history now.

Re:C++'s still a lot to say (1, Informative)

Anonymous Coward | more than 5 years ago | (#27280307)

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

Learn Programming, not Language (2, Interesting)

pm_rat_poison (1295589) | more than 5 years ago | (#27279969)

Focus on learning how to program properly and efficiently. Learn correct resource-management and security practices and study algorithms. If you master programming in general, you can master any language withing a matter of weeks. Certainly too short a period to make your career based on that decision.

Re:Learn Programming, not Language (2, Interesting)

fermion (181285) | more than 5 years ago | (#27280185)

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.

Re:Learn Programming, not Language (5, Insightful)

Logos (80812) | more than 5 years ago | (#27280321)

you can master any language withing a matter of weeks

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

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

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

Procedural only? Sad (2, Insightful)

John Hasler (414242) | more than 5 years ago | (#27279989)

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

Re:Procedural only? Sad (2, Funny)

godrik (1287354) | more than 5 years ago | (#27280081)

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

Re:Procedural only? Sad (1, Informative)

Anonymous Coward | more than 5 years ago | (#27280091)

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

Re:Procedural only? Sad (2, Insightful)

blankinthefill (665181) | more than 5 years ago | (#27280245)

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.

Re:Procedural only? Sad (3, Interesting)

Anonymous Brave Guy (457657) | more than 5 years ago | (#27280375)

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.

Re:Procedural only? Sad (2, Insightful)

Timothy Brownawell (627747) | more than 5 years ago | (#27280359)

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

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

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

Microsoft C-Hash would be my suggestion (0, Informative)

Anonymous Coward | more than 5 years ago | (#27279991)

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

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

Re:Microsoft C-Hash would be my suggestion (1)

Tablizer (95088) | more than 5 years ago | (#27280337)

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

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

Depends what you want to do! (1)

AaxelB (1034884) | more than 5 years ago | (#27279993)

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.

skillsets (5, Insightful)

Phantom of the Opera (1867) | more than 5 years ago | (#27279995)

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

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

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

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

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

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

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

Re:skillsets (2, Interesting)

deodiaus2 (980169) | more than 5 years ago | (#27280177)

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

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

Re:skillsets (0)

Anonymous Coward | more than 5 years ago | (#27280295)

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.

My suggestion... (1)

sixteenbitsamurai (1070810) | more than 5 years ago | (#27280021)

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.

C C++ assembler (0)

Anonymous Coward | more than 5 years ago | (#27280173)

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.

Why pay for a degree and then seek free advice? (-1, Troll)

Anonymous Coward | more than 5 years ago | (#27280027)

Asking which language you should specialize in is akin to an apprentice carpenter asking whether he ought to specialize in screws or nails.

Why would you ask this question on Slashdot? Why aren't you asking your professor? Anyway, shouldn't you be studying and not web surfing?

Why not web stuff? (2, Interesting)

mgkimsal2 (200677) | more than 5 years ago | (#27280035)

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

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

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

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

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

Good luck in whatever you choose!

Re:Why not web stuff? (2, Insightful)

Anrego (830717) | more than 5 years ago | (#27280161)

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

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

In other words... I'd think long and hard about taking a web programming job if it's not really what your interested in. Sure.. it means money for the short term.. but you might get stuck there.

Re:Why not web stuff? (0)

Anonymous Coward | more than 5 years ago | (#27280323)

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.

Direction (2, Interesting)

holophrastic (221104) | more than 5 years ago | (#27280037)

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

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

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

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

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

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

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

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

Listen to Norvig (5, Interesting)

Phs2501 (559902) | more than 5 years ago | (#27280041)

Read this:

Teach Yourself Programming in Ten Years [norvig.com]

Peter Norvig knows what he's talking about.

Mod parent up (1)

godrik (1287354) | more than 5 years ago | (#27280191)

So true. So enlightening.

Re:Listen to Norvig (0)

Anonymous Coward | more than 5 years ago | (#27280371)

As you killed his server ... ;-)

Teach Yourself Programming in Ten Years [72.14.235.132] [google cache]

"Specialisation is for insects." Heinlein (1)

toby (759) | more than 5 years ago | (#27280045)

n/t

To repeat the advice I was given years ago (3, Insightful)

Kupfernigk (1190345) | more than 5 years ago | (#27280051)

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

I think you are asking the wrong question. Your problem is to get a job from which you can become a fully experienced programmer. That possibly means getting a job working in support or relatively low level IT and progressing from there. So you need to put that several months of effort into job finding.

Unless you are a really gifted programmer - in which case, quite honestly, you would not need to be asking the question - your main problem is to learn enough about some business area so that you can actually contribute. If you get a job in a company that uses Delphi, or does everything with stored procedures in SQL, learn Delphi or SQL and be thankful.

Someone with a computer science degree should be able to pick up any technology to solve a problem in an appropriate way. You are supposed to understand the concepts behind problem solving, algorithms, data lifecycles and persistence, man/machine interaction, communications protocols, and other stuff like that at an abstract level. Then you look for a problem to solve where you can apply the concepts to design a solution. Your question - C++, Java or C - is like an engineer graduating from Purdue and asking "I want a job in engineering. Should I learn Bridgport, Haas or Hurco machining centers?" The answer of course is "Whatever your employer uses".

Be a doctor instead (2, Interesting)

Anonymous Coward | more than 5 years ago | (#27280061)

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.

Practice / Learn Designing / Learn WxPython (0)

Anonymous Coward | more than 5 years ago | (#27280065)

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.

You are done studying. Get a job. (1)

AlXtreme (223728) | more than 5 years ago | (#27280089)

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.

Re:You are done studying. Get a job. (4, Insightful)

RyuuzakiTetsuya (195424) | more than 5 years ago | (#27280399)

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

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

Java or C# (1)

j1mmy (43634) | more than 5 years ago | (#27280095)

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.

Re:Java or C# (0)

Anonymous Coward | more than 5 years ago | (#27280183)

There are plenty of new-grad jobs requiring C.

it's normal (1)

Lord Ender (156273) | more than 5 years ago | (#27280097)

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

Do not panic! (1)

speters (523864) | more than 5 years ago | (#27280109)

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 [catb.org] , although if you are thinking you'd like to do web work, I'd really consider adding some JavaScript experience.

Don't worry about it (1)

Ankh (19084) | more than 5 years ago | (#27280115)

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.

How about all three? (1)

edivad (1186799) | more than 5 years ago | (#27280119)

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.

Java + tools (1)

obarthelemy (160321) | more than 5 years ago | (#27280121)

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

Language Experience (1)

prefec2 (875483) | more than 5 years ago | (#27280127)

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.

 

Intermediary (1)

jlebrech (810586) | more than 5 years ago | (#27280129)

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.

Language is largely irrelevant (0)

Anonymous Coward | more than 5 years ago | (#27280133)

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.

Look at the Classifieds (2, Informative)

wdhowellsr (530924) | more than 5 years ago | (#27280137)

If you are going to work in the UK or in the US you need to look at the job offers. I would start with entry level contract positions since they will usually give you a chance faster than a full time position. In addition you will be able to work three or four contracts and get a feel for what you like.

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

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

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

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

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

Re:Look at the Classifieds (1)

John Hasler (414242) | more than 5 years ago | (#27280241)

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

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

My method of practice... (1)

glitch23 (557124) | more than 5 years ago | (#27280149)

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.

E4! (-1, Offtopic)

Anonymous Coward | more than 5 years ago | (#27280153)

Learn C first (0)

Anonymous Coward | more than 5 years ago | (#27280163)

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.

Fortran?? (3, Informative)

Bill, Shooter of Bul (629286) | more than 5 years ago | (#27280167)

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.

IPHONE SDK (0)

Anonymous Coward | more than 5 years ago | (#27280169)

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

Heart - Job - Language (0)

Anonymous Coward | more than 5 years ago | (#27280193)

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.

Learn how to write comments and name things truly (2, Insightful)

presidenteloco (659168) | more than 5 years ago | (#27280197)

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

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

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

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

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

A functional language or programming tools (1)

KeithIrwin (243301) | more than 5 years ago | (#27280219)

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

Be practical, be realistic. (0)

Anonymous Coward | more than 5 years ago | (#27280225)

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.

Domain knowledge is more important (2, Insightful)

cetialphav (246516) | more than 5 years ago | (#27280231)

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

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

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

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

"There are no answers, only choices" (1)

Corson (746347) | more than 5 years ago | (#27280275)

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.

It depends what you want to work on (2, Insightful)

intrico (100334) | more than 5 years ago | (#27280293)

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.

This guy's got it! (0)

Anonymous Coward | more than 5 years ago | (#27280297)

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.

C and C++ will stay... Java is buzz from 1995... (0)

Anonymous Coward | more than 5 years ago | (#27280305)

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

Make me laugh by modding me a troll...

in your shoes (1)

CrashandDie (1114135) | more than 5 years ago | (#27280311)

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.

Learn by Doing (1)

jps3 (2870) | more than 5 years ago | (#27280343)

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

yeah, yeah, all that "it depends" stuff. then... (1)

anothy (83176) | more than 5 years ago | (#27280345)

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.

They teach you to learn :) (1)

nicuramar (869169) | more than 5 years ago | (#27280347)

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.

Depends on what you want to do with your code (0)

Anonymous Coward | more than 5 years ago | (#27280353)

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

Java in banks (1, Informative)

Anonymous Coward | more than 5 years ago | (#27280363)

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

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

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

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

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

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

The reality is disgusting, really.

Balance, my child (1)

TheKingAdrock (834418) | more than 5 years ago | (#27280373)

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.

C is still pretty valuable (1)

sentientbrendan (316150) | more than 5 years ago | (#27280385)

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.

C++ (2, Interesting)

shutdown -p now (807394) | more than 5 years ago | (#27280387)

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

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

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

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

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

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

C++ and C#, Ignore Java (0)

Anonymous Coward | more than 5 years ago | (#27280389)

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.

A few home truths (1)

Zey (592528) | more than 5 years ago | (#27280405)

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.

Load More Comments
Slashdot Login

Need an Account?

Forgot your password?

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>