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!

Which Language Approach For a Computer Science Degree?

timothy posted more than 5 years ago | from the do-both-and-compare dept.

Education 537

wikid_one writes "I recently went back to college to finish my CS degree, however this time I moved to a new school. My previous school taught only C++, except for a few higher level electives (OpenGL). The school I am now attending teaches what seems like every language in the book. The first two semesters are Java, and then you move to Python, C, Bash, Oracle, and Assembly. While I feel that it would be nice to get a well-rounded introduction to the programming world, I also feel that I am going to come out of school not having the expertise required in a single language to land a good job. After reading the syllabi, all the higher level classes appear to teach concepts rather than work to develop advanced techniques in a specific language. Which method of teaching is going to better provide me with the experience I need, as well as the experience an employer wants to see in a college graduate?"

cancel ×

537 comments

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

Hobby (5, Insightful)

sopssa (1498795) | more than 5 years ago | (#28668861)

After reading the syllabi, all the higher level classes appear to teach concepts rather than work to develop advanced techniques in a specific language.

It's great that you have it like that. Its the concepts that matter more than just teaching some language dependant pack of tricks. Languages can always be learnt afterwards and quickly, and they also tend to change during years. Concept stay somewhat the same, and those are what you need to understand. I wish I would had the same kind of program in school.

I also feel that I am going to come out of school not having the expertise required in a single language to land a good job.

Usually programmers are quite self-taught. Schools can teach you concepts and languages, but the real knowledge comes from when you're interested in it and try out and do stuff. Yes, this means you should have some interest in coding at home for your pleasure too, as a hobby. I would think that programming would being really really boring if you dont have the interest to learn yourself or even program your own stuff at home.

You didn't mention if you do programming yourself, but if you dont you should start to. Start coding some games yourself or stuff you think are useful to you. Or learn PHP and start coding websites. You can even start to make some cash out of it, either by selling your software/game, running websites or coding as a freelancer. Try out things.

However the most stupid approach is to think you should be awesome in one language and lack everything else. Usually you need combination of different languages and better understanding generally. Read some programmer job listings and you see how they always contain lots of different thingies and qualities they're looking for. Programming languages used at work will most likely change aswell (Java was hot in some apps programming years ago, but C# and other languages have been stealing position from it). This is why you want to have the general understanding instead of just knowing tricks&tips of one language.

Re:Hobby (0)

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

+1 Insightful.
 
It's the concepts and getting a feel for which language would be applicable for which task. Once you've become familiar with a C-syntax language, the others won't take long to pick up if you need them.

I would also like some advice (0, Offtopic)

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

I am a geek like many of you and lack some social skills, and need some advice, but this question will never make it through the firehose. I live in an apartment and my downstairs neighbors fight pretty much every night. The other night, it was worse than usual, and one of them fled the building leaving a blood trail all the way to the subway. The cops have been here on many occasions but do not appear interested or able to do anything. I worry that their two young sons might be in harm's way. How should I approach this? Go talk to the guy? His wife? Call the police every night?

Re:I would also like some advice (0, Redundant)

phantomfive (622387) | more than 5 years ago | (#28669341)

You can call child protective services

Re:I would also like some advice (0)

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

Apart for drug raids, domestic disputes are among the most dangerous calls that police make regularly. Emotions run high and you never know what's going to happen when you get involved, you might even get the spouse being assaulted turning on you if you interfere. It's even worse if alcohol is involved. While verbal fighting within parents isn't healthy for kids to see, separating them from their parents into care has its own problems. If it escalates to physical violence again, call social services because the kids are potentially at risk (although one would hope that if that was really a concern then the police would do that as well).

Re:Hobby (5, Informative)

morgan_greywolf (835522) | more than 5 years ago | (#28669021)

Agreed. Programming concepts are far more important than any particular language. It's important to understand at more than one programming paradigm: object-oriented programming is the paradigm de jure (C++, Java, C#, Python), but also understand a traditional imperative structured approach (C, Bash) and a functional approach (Lisp, Scheme) as well. Note that these languages are only examples: Python is actually a mixed-paradigm language that supports imperative structured programming and functional programming in addition to OOP, for instance.

Re:Hobby (1, Informative)

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

Just to save you the embarrassment of looking so stupid in the future, the term is DU JOUR (de + le = du = "of the", jour = "day")

Re:Hobby (3, Informative)

Kell Bengal (711123) | more than 5 years ago | (#28669207)

'De jure' means "concerning law": http://en.wikipedia.org/wiki/De_jure [wikipedia.org] , but I think you are correct and he meant 'du jour'.

Re:Hobby (2, Insightful)

SignalFreq (580297) | more than 5 years ago | (#28669233)

Which method of teaching is going to better provide me with the experience I need, as well as the experience an employer wants to see in a college graduate?

As others have said, learn the concepts.

You should also find a class that requires group programming. Learn how to interact with fellow programmers, how to operate within a team environment, and how to document your thoughts and processes. I've found that social skills are very valuable in any organization.

Algorithms and Data Structures (5, Insightful)

PleaseFearMe (1549865) | more than 5 years ago | (#28669131)

Learn about Binary Search Trees, Red Black Trees, Bubble Sort, Quick Sort, Heaps, etc. Those are the important things to know. Bob Dylan is not famous for knowing English grammar and spelling. He is famous for what he does with them. Teach him Chinese, and he can most likely make amazing songs in Chinese as well. You didn't go to college to learn grammar and spelling. You can learn that in elementary school. Instead, you're going to college to learn how to use the language to create amazing things. It is an abstract level above the syntax level you see on the computer screen, and it is something crucial that anyone learning anything in college _must_ understand.

Re:Hobby (0)

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

If I went back and redid my education there is just one major thing I would have done differently: I would have learnt python from the beginning.

Why? Because it just such a great tool for experimenting with different computer science subjects like AI, algorithms, statistics, data mining, language processing and mathematics like number theory or combinatorics. Because it's a quite high level language it will allow you to explore these subjects without getting in your way.

Re:Hobby (3, Insightful)

fishbowl (7759) | more than 5 years ago | (#28669373)

>If I went back and redid my education there is just one major thing I would have done differently: I would have learnt python from the beginning.

I would have taken some business courses, enough to learn the nomenclature of manufacturing inventory control and supply chain management, and also some senior-management level finance and accounting courses. This is what slowed down my career as a software developer. It doesn't matter how well you know IT and programming; if you have to rely on the expertise of others to understand the business, you will always be subordinate to them.

What he said (1)

rs79 (71822) | more than 5 years ago | (#28669175)

"try out and do stuff"

Ayup. If you do one long project in assembler and really get the feel for it you'll be more useful than if you learned every language extant.

"When interviewing programmers, always hire the one that knows assembler" - Andrea Frankel, HP, 1987.

Re:Hobby (1)

Angeliqe (1390757) | more than 5 years ago | (#28669377)

That's the best way to put it. The rest of the posts are probably just repeats and small variations on that theme. I am currently finishing my degree in Computer Science as well. Once you have all of the concepts down, it is easy to learn a language. It's a matter of syntax and even a lot of the syntax from one language to another is similar. You also might want to consider things that go well with programming that aren't strictly a programming language. Knowledge of SQL and databases are really quite different but are essential to a lot of programming jobs. It all comes down to what area of programming you want to get into. If you like web programming, there are a wide range of languages defined specifically for web design from simple HTML to javascript to PHP, Perl and Flash.

Don't be afraid to learn another language, but at the same time, learning it counts for nothing to employers. Start compiling a collection of homework assignments, hobby projects, and volunteer work done for open source projects. Put them all on a website somewhere and be prepared to link to them or email them along with your resume.

Re:Hobby ABSOLUTELY (Shareware/Freeware) (1, Interesting)

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

sopssa, excellent & VERY WELL PUT!

(Because, you're right - &, when you're right? You're RIGHT as rain!)...

Only thing I might add onto what have already stated, is to do what I had 14++ yrs. ago or so once I was out of academia (where I did nothing but "overload" on languages, so I could learn by PRINCIPALS, rather than focus on 1 language tool only, in taking C & C++, Fortran, Basic, COBOL, Pascal, VB, & x86 Assembly (via MASM & DEBUG))?

DO A SHAREWARE or FREEWARE...

I.E.-> It makes YOU focus on building a tool that you wanted, but cannot find (or, a "BETTER VERSION" of a tool you like, that might lack a featureset others like it possess) - & makes you do things that you may not have in academia (which gives you a foundation only, a base to build on, work tasks do the rest, but tend to focus in a specific area generally (which is, for most of us, the "steady eddy" end of the field in DB work (MIS/IS/IT type work))... the nicest part is, is that OTHERS may find your tool useful as well & who knows what kind of "industry exposure" it can give you (it helped me out a great deal this way as well).

Imo? It helps "round you out", beyond what you learn on the job OR in academic environs... imo, @ least!

(AND, keeps your interest HIGH in this art & science as well, by focusing on a "pet project" too... something YOU really want to build, not just what you're paid to do to eat/live etc. et al)

An alternate to THIS might be to get involved in an already ongoing project in the Open Source world possibly too... but either one will help! Especially for new guys...

APK

P.S.=> Others here gave a LOT of the same type answer, & kudos to them as well... they've been there, obviously, & it shows in their responses - It's just that you put it just a WEE bit better imo, than most others have already also... no small wonder you were "modded up" +5, so hats off to you, for giving the questioner the right "pointers" (pun intended, lol).

(If I could give mod points I would, but I elect to post as "A/C" here (for good reasons, don't want to "get into it" as to why though), but? There's no modding up the max/perfect, so... there ya are!)... apk

Re:Hobby (1, Interesting)

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

I 100% agree. A degree in CS should give you the grounding and tools you need to become a competent computer scientist. Part of this is coding, part is hardware design, and most is an good understanding of the basics. If you want to be a great programmer, you will need to be competent in all sorts of languages as they all have their strengths and weaknesses for various roles. Learn by doing. School is not going to teach you everything you need. If it was easy, someone else would already be doing it 8)
Agter your degree, you could focus on one specific topic for a masters or a doctorate, or you could get a basic job and learn while you work. You will not come out of university knowing everything you need, only at a level to know what you need to find out.

Your school is right (5, Insightful)

enrevanche (953125) | more than 5 years ago | (#28668881)

A CS degree is not about making you a monkey that can program only one language. It is about learning how to think. The multi-language approach will ensure that you are exposed to many ways of representation.

The "real" world will train you how to be a monkey well enough.

If knowing one language well enough to get a job, a certification in Java, C# or whatever will serve your simian side better. Use the knowledge in the diversity in languages to tell potential employer that you can quickly learn to program in whatever environment is required.

Re:Your school is right (5, Insightful)

sixoh1 (996418) | more than 5 years ago | (#28669015)

There are two kinds of CS degrees, one tends to be more like a MSCE type degree aimed at getting you employed in a job shop. Typically you'll find these at ITT or University of Phoenix. Frankly, as an employer of CS folks, I can tell you these degrees are not worth the paper they are written on, and they rarely offer job security, they teach you to be a 'cog' instead of an independent thinker.

The second type sounds like your new school. These are more complex and are more like an engineering degree which is about a solid practical basis (tools) and good breadth so you know where to start when some thing new comes along. I dont expect a proper CS graduate to "know" anything or be really ready to work on their own immediately, but I do need the to be able to work at learning the new things independently. The workplace is too varied and complex for college to teach you the important things, but I cannot take the time to spoon feed a neo when there is a deadline bearing down.

The first parent post has another thing exactly right, if you develop your own skills by doing some hobby work, that is where you can get the 'practical' skills you seem to crave. The bonus there is that you can prove to a prospective employer that you have the one thing colleges and trade schools cannot possibly teach: drive. There is absolutely no specific coding technique that can make up for a lack of drive.
 

Re:Your school is right (4, Insightful)

ari_j (90255) | more than 5 years ago | (#28669159)

I agree. This question has been asked on Slashdot more than once. Probably more than once in the past week. Every time, it's someone thinking that becoming adept at one language is the path to zen. Here are a couple of analogies to the question presented here:

I want to learn how to build houses. Should I learn how to use a screwdriver or should I go with the hammer?
I want to learn how to fix cars. Should I learn all about the carburetor* or should I focus more on the brake pads?
I want to be a linguist. Should I become fluent in Latin or Japanese? Why does this accredited linguistics department insist on me taking all sorts of philosophy and linguistics classes, when I should be learning a language?

* - For the benefit of the people who consistently reply to my analogies involving carburetors that carburetors are obsolete and not in common use, please note that that is the damn point of my using them in this analogy.

Re:Your school is right (5, Funny)

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

I want to learn how to fix cars. Should I learn all about the carburetor* or should I focus more on the brake pads?

Brake pads, if you have to pick just one, because all cars have brake pads, but carburetors are obsolete and not in common use.

Re:Your school is right (0)

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

True from the beginning to the end.

My software for CS degree was a mixture of Windows/.NET/C#/C/C++/cygwin stuff (client side) and Linux/Apache/PHP/Perl and few bash scripts and db (postresql) for the server side.

Surely I could have done everything on one platform/language, but then it would be a horribly boring task which would only prove that I am trained monkey instead of engineer who always seeks the best tool(s) for the job :)

Re:Your school is right (1)

GlassHeart (579618) | more than 5 years ago | (#28669213)

Just as frequently, unfortunately, they turn out people who can't actually program in any of those languages. I think it's very good that a school can teach multiple very different (meaning, not just C/C++/Java) languages, but I also think it's important for a graduate of a 4-year CS degree to be an expert in at least one. To me it's akin to a literature major being able to write very well in one human language.

Go to a "trade school" for that. Not a university (2, Insightful)

themeparkphoto (1049810) | more than 5 years ago | (#28668883)

They shouldn't teach any language. Seriously. Maybe a hypothetical one like MIX or MMIX, but not an actual language. They should teach math instead.

Re:Go to a "trade school" for that. Not a universi (1, Insightful)

themeparkphoto (1049810) | more than 5 years ago | (#28668921)

I should add that, back when I got my (math) degree, the school offered 1/4 credit courses in particular programming languages. Popular back then were PL/I and IBM 370 assembly language. You can see why it's silly to waste time learning a particular programming language! But my skills in math--statistics, computational geometry, calculus--save my butt every day!

Re:Go to a "trade school" for that. Not a universi (0)

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

They shouldn't teach any language. Seriously. Maybe a hypothetical one like MIX or MMIX, but not an actual language.

They should teach math instead.

That's just silly. It's true that the school should focus on theory first and implementation second, but you certainly don't want to graduate with a CIS degree never having used a C++ compiler or written an entire program from start to finish.

Re:Go to a "trade school" for that. Not a universi (3, Interesting)

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

It's a difference between "Computer Science" which is technically about the math and algorithm problems of programming and "Software Engineering" which involves actually implementing things and understanding how data structures work. Many software engineering programs are incorrectly sold as computer science programs because the two were originally one and the same. As computers got better the distinction becomes very obvious. GP is just being curmudgeonly about it.

Re:Go to a "trade school" for that. Not a universi (0)

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

no, in a CS degree you take a compilers course and learn something like C++ in a few days to do your homework. you don't take a language course where they teach you C++

Re:Go to a "trade school" for that. Not a universi (1)

RichardJenkins (1362463) | more than 5 years ago | (#28669319)

"Computer Science is no more about computers than astronomy is about telescopes."

If it teaches software development methodologies, or specific languages then it's not a pure CS degree. It may well be more valuable for most people - but call a spade a spade.

Re:Go to a "trade school" for that. Not a universi (3, Insightful)

minsk (805035) | more than 5 years ago | (#28668965)

Not unless trade schools suddenly get better, and software engineering programs suddenly become ubiquitous.

And not while most students learn better by implementing parts of the theory. And not while employers expect them to be half-competent coders.

And, well, not :)

Re:Go to a "trade school" for that. Not a universi (5, Insightful)

happyemoticon (543015) | more than 5 years ago | (#28669069)

That's like saying an Art MFA shouldn't teach any actual art in any particular medium, just hypothetical art.

There IS a distinction between the "craft" of programming in any particular language and software engineering, but in order to become a software engineer, you need to work through the medium of the language. That's the only way to access it. Knowing how to paint in oils doesn't make you a good artist, but you do have to start making art in some manner in order to get there.

Re:Go to a "trade school" for that. Not a universi (3, Insightful)

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

But timothy didn't ask about a software engineering degree. He asked about a computer science degree. Computer science is the study of the topics of mathematics that relate to computation. CS programs should teach theory, algorithms, data structures, complexity, computability, logic, and the like. I disagree with themeparkphoto, though, because I think that programming languages are a very useful tool to teach these concepts. But they aren't the goal, they are only the means.

Re:Go to a "trade school" for that. Not a universi (2, Insightful)

0xdeadbeef (28836) | more than 5 years ago | (#28669139)

They should teach math instead.

Good god, man, have you seen a mathematician's code? It's worse than that of electrical engineers!

Programming is a craft, and it requires study, it requires practice, and it requires a holistic perspective. It is more akin to architecture than mathematics, despite the fact that is so heavily reliant on mathematical theory.

Re:Go to a "trade school" for that. Not a universi (1)

turbidostato (878842) | more than 5 years ago | (#28669191)

"They shouldn't teach any language. Seriously."

Well, maybe English.

Re:Go to a "trade school" for that. Not a universi (1)

CarpetShark (865376) | more than 5 years ago | (#28669229)

Maybe a hypothetical one like MIX or MMIX, but not an actual language.

Personally, I favour Springbrook Valley Woodelven.

Does it really matter? (2, Insightful)

VincenzoRomano (881055) | more than 5 years ago | (#28668891)

Find a serious computer science course.
The choosing among languages will be more a matter of taste than of actual contents.

Re:Does it really matter? (2, Interesting)

realeyes (1565211) | more than 5 years ago | (#28669307)

To some extent, it does matter. I think every programmer, and definitely every developer, should have a taste of assembly language. After helping to maintain a TCP/IP stack that was written almost completely in assembler, I work in higher level languages and think about how many assembler instructions get executed for loops and function/method calls, and how much memory is used by each variable. Having developed and coded several apps where performance was a priority, I look back on that experience as the best prep I could have gotten.

Also, language matters in choosing a career path. If you want to work on virtualization or embedded systems, you should have a good knowledge of C/C++. But if you want to work on web/cloud apps, you should know Perl/PHP/Python and/or Java. And that doesn't mean just being able to compile successfully. You need to understand in depth such things as exception handling, libraries, file and memory management, data validation, web and database interfaces, etc., etc., etc. Sure you learn this on the job, but knowing about it coming out of school puts you ahead of the competition.

Several other people have mentioned working on a project on your own. I suggest that you look for a project that interests you at SourceForge. Even if your work doesn't end up being used, you should at least learn something.

Finally, there are two issues that I think get too little attention, both in school and at work: documentation and security. For these, you need to do some research. Everyone I know has complained about the doc or stupid error messages for apps they are trying to use. But most of those same people also complain about having to keep doc up to date whether they are programmers or admins. It's up to all of us to make it better.

Security is more complicated. Everyone talks about best practices, but if you ask 10 different people what that means, there will only be a little bit of overlap. Those of us who consider ourselves to be professionals (ie. expect a paycheck for doing the work) need to take responsibility for improving computer security. Leaving it up to the anti-virus vendors doesn't cut it. For programmers, here is a great start:

http://dwheeler.com/secure-programs/ [dwheeler.com]

So think about where you would like to go in your career, do some research on the skills needed for that, and take advantage of the opportunity to learn more than the minimum you need to get the job done (the OJT credo).

Later . . . Jim

Learn how to learn languages (0)

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

Learn how to learn languages. If you can do that, whatever language you need to use for whatever job you end up with can be easily learned. Learn different concepts that are pervasive throughout different langauges, object oriented desgin, memory management, functional techniques, etc.

C# and Bing (5, Funny)

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

The skills that are in highest demand is the ability to write code in C# and to use Bing. C# is now the dominant choice among the new-wave languages (which includes Java) that appeared after 1990. What employers want to see is the ability to write a C# program to automatically issue requests via HTTP to Bing to query the WWW and to retrieve the search results.

Re:C# and Bing (1)

hunnybunny (92335) | more than 5 years ago | (#28668945)

Yes, that's right. Employers want you to implement Bing queries in C#. If you can do that, all will be OK.

On the other hand, you could get an education and take this guy's job.

Re:C# and Bing (4, Funny)

value_added (719364) | more than 5 years ago | (#28669269)

What employers want to see is the ability to write a C# program to automatically issue requests via HTTP to Bing to query the WWW and to retrieve the search results.

I've seen those job postings. The problem is most employers require at least 5 years of Bing experience.

Get out more (0)

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

I hope you do programming on your own. You do, right?

Eveyrone knows you are a college grad. They know you have shit for experience. So if you want a better than entry level job, start doing some side work now (open source, hobby projects, anything.) Seriously though, anyone who hires you knows what they are getting, being a new college grade. Take the job, get your experience, and move on or up.

Too dumb to realize new school is better (4, Insightful)

ehack (115197) | more than 5 years ago | (#28668915)

New school teaches every language + programmming concepts and our poster complains - maybe the new gen kids are unteachable.

Re:Too dumb to realize new school is better (2, Insightful)

maxume (22995) | more than 5 years ago | (#28669025)

Old timer makes wild extrapolation, maybe the old really are feeble minded.

Re:Too dumb to realize new school is better (1)

0xdeadbeef (28836) | more than 5 years ago | (#28669057)

Old timer makes wild extrapolation, maybe the old really are feeble minded.

Says the UID circa 1999.

Re:Too dumb to realize new school is better (0)

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

Old timer makes wild extrapolation, maybe the old really are feeble minded.

Says the UID circa 1999.

yeah, thanks. i couldn't have deduced that myself. here's your obligatory +1, Funny you fucking nerd

Re:Too dumb to realize new school is better (0)

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

whoosh!

Re:Too dumb to realize new school is better (1)

japhering (564929) | more than 5 years ago | (#28669035)

New school teaches every language + programmming concepts and our poster complains - maybe the new gen kids are unteachable.

Or just part of generation that has been taught the fine art of regurgitation rather than the more complex how to think, as well as being rewarded for every little thing they did right along the way.

Either way it doesn't matter, as somewhere between 30 and 50 you will run head on into the ageism that is so rampant in the technology industries.

well if you want employment (1)

JeanBaptiste (537955) | more than 5 years ago | (#28668923)

I've been a SQL/.NET guy for quite a while and I've never had a problem getting a job and I still get job info from people a few times a week and I haven't had my resume up in probably 9 months.

I make a good salary and work from home.

Not commenting on any sort of technical superiorities or inferiorities, just commenting on the market.

Re:well if you want employment (3, Insightful)

thenextstevejobs (1586847) | more than 5 years ago | (#28669049)

I've been a SQL

Stop right there. This is probably some of the best advice you'll get.

Of course, it depends on what you want to do. But for the standard, current-track Internet/Cloud/Distributed blah blah blah, many people are dreadfully bad at SQL for how much it applies to their job.

That said, haven't we had enough of these language posts? You can google this and you'll see the same arguments spread out since the birth of the Intarwebs. Everyone has doubts about the language that their using when they don't know many, and want to know what to use.

Just be glad that you didn't attend a program that only taught you Java and never showed you how operating systems really work or what a pointer is. That is a great start.

As someone whose worked in a few of the largest software companies, I can tell you that this really isn't a big concern. You won't get tested on the vagaries of a programming language in an interview. They want to know exactly what you're being taught: that you understand the theories and concepts underlying what you are doing. Projects never use only one language. You often need some glue (Perl, Python, Ruby, etc) and some 'lower-level' code (C++, Java), some data storage (SQL), and maybe a dynamic web page or two (PHP).

Get an internship. This was the best way for me to learn where I fit in on a development team, what sort of thing I felt inadequate at compared to my co-workers, and learned the place of programming language in the work environment. By the time you've gotten your second or third job, most people don't list languages on their resumes anymore.

Once you know a few languages, it shouldn't take you more than a week or two to pick up a new language. On the topic of being an 'expert' at a language, that probably isn't important for your first job. What you need is strong foundations, a good attitude, and hopefully avoiding a tendency to break all the existing code.

If you're really passionate about programming, you'll probably pick up a few languages and be enthusiastic about one or another at a time. I'm currently on a big C++ and Perl kick, as well as loving debuggers in lieu of print statements.

If you're not passionate about this and you want a good 40 hour a week job where you only need to know a thing or two, I don't know what to tell you. I've found this field rewarding because the limit is only how much I'm able to learn and apply. And I've found my employers have recognized that.

Use the right tool for the job. Write readable code in whatever language you write in. Good code is easy to understand, efficient, and concise.

Put on your flame-retardant mecha-suits, this thread is about to get spicy.

Final note: Do everyone a favor and learn how to use grep and other Unix tools to do simple data transformation tasks.

CS vs Software Engineering (1, Insightful)

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

I always thought that learning the concepts was the majority of a CS program while learning how to design and write software was what Software Engineering was all about. Obviously both degrees involve a bit of both, but it seems Sofware Eng. involves more practical courses, and material on managing large software projects, etc. From your post I get the impression that the problem isn't the number of languages learned, but the lack of teaching the "work to develop advanced techniques" regardless of the language taught.

I studied EE, so I'm not the best source; but maybe you should give Software Engineering a look, it may be more what you're looking for.

A variety of languages is not so bad (1)

Jeff321 (695543) | more than 5 years ago | (#28668941)

I wouldn't be too worried. Having exposure to a variety of languages will mean that you have more job opportunities available to you, and therefore you'll get more interviews. Once you land a job and start using a specific language, that will become your specialty.

Maybe you're the wrong place (4, Insightful)

Ritchie70 (860516) | more than 5 years ago | (#28668951)

Despite what many believe, a CS degree is not about learning to program. A CS degree is about learning the theoretical and mathematical constructs that programming is based on.

If you know those basics, the language is largely irrelevant.

C is Pascal is Java is JavaScript is VB is C# is C++ - it's mostly syntactic sugar if you ignore the objects, and even the objects are similar. If you can't swap {} for () or begin-end or whatever, you have no hope of being a decent programmer.

If you're looking for vocational programming training, find a vocational school. It's that simple.

Re:Maybe you're the wrong place (1)

nurb432 (527695) | more than 5 years ago | (#28669111)

Despite what many believe, a CS degree is not about learning to program. A CS degree is about learning the theoretical and mathematical constructs

*snip*

Ultimately isn't that what all 'degrees' are about? Teaching you how to learn by giving you the fundamentals in your field?

Re:Maybe you're the wrong place (3, Informative)

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

Absolutely, and I'd like to expand on that idea just a little. There is a great deal of confusion about "the computer field" right now, largely because it is just now really being differentiated within the business world. Essentially, there are three fields: IT; Programming; Computer Science.

IT is about how to use the software that exists. This includes pairing it with specifics types of hardware and other software. This is knowing the best way to use a plowshare out in the field.

Programming is about making the software. This includes the specific language being used, how to set up the environment the software will run in and making the code work. This is knowing how to heat and hammer the iron into the desired plowshare.

Computer Science is about designing the software. This is engineering, scaling from deciding the hardware to use to the language to use, to the data structures and optimizations, all before the software exists (or, when the problem is being addressed). This is knowing how to think about a plowshare and create the idea of the plowshare (or improvements) and then explaining it (drawings, diagrams, etc.).

Each of these is a discrete skill, although knowledge in one will help ability in another. As this differentiation of the field becomes clearer, more understood and considered, answering your question as to what languages/degree programs will become easier. It's a matter of what you want to do or what you need to hire someone to do.

More people understanding this will alleviate alot of pain in the software business and in university.

Go with the way your new school does it. (4, Insightful)

KiltedKnight (171132) | more than 5 years ago | (#28668957)

OK, let me put it to you this way:

Let's say I'm a hiring manager and conducting interviews for junior programmers.

If you get your degree from the first school, I'm only going to hire you if I need a person who's going to write the code he's told to write. I'm never going to assign stuff to you that requires you to do any kind of analysis.

If you get your degree from the school to which you transferred, you are far more likely to get hired into a position with a lot of growth opportunities. You will have not only know some of several languages, you will also have a good background in abstract concepts.

The problem with most schools today is that they focus far too narrowly on one topic instead of teaching the concepts necessary to handle what tasks are placed in front of the graduates. There have been several articles about the "Java schools" and how the graduates of them can barely program their way out of a paper bag because they don't have the broader information necessary to do a proper analysis. Sure, with modern languages you can often "ignore" things like memory management and code optimization. Unfortunately, all too often I've seen what happens when things are written by people who have no understanding of how to apply basic concepts... when something should be a compiled application... when something should be a simple shell script (mind you, the person who did this thinks that a compiled program with calls to "system()" make this a "system program" and doesn't even know how to write a shell script... I am going to have to clean up that mess in the near future)... and even when to use what language.

No one language is the be-all and end-all of programming. Each language is a tool. You don't normally use a screwdriver to hammer in a nail or as a chisel... so why should you use C or C++ to write what is better written as a shell script? Why would you use Java to write something that requries careful memory management? (Yes, I know some people would just put the question mark after "Java"... :) ) Because it's all you know how to do? Guess what... either you're not getting the job for which you just interviewed or I'm going to have to go hire someone else to augment my team to do what you should've been able to do... which means when it comes time for RIFs, you're name is going to go towards the top of the list because you can only minimally contribute to the team.

Re:Go with the way your new school does it. (0)

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

Let's say I'm a hiring manager and conducting interviews for junior programmers.

In your dreams, dweeb.

Re:Go with the way your new school does it. (0)

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

Java does require careful memory management. It just doesn't require (or allow) explicit memory management beyond allocation.

Seems normal for the good CS departments. (1)

guacamole (24270) | more than 5 years ago | (#28668959)

I think you're lucky to have even those language courses offered. At my school, CS department only taught Java and Lisp (barely). All advanced courses are about abstract concepts rather than specific languages. Of course, to be able to succeed in the program you need to know how to program in a variety of languages. However, specific languages is something that you learn on your own. That's how the good CS departments operate. Once you understand the abstract concepts, picking up a new language should be easy on your own. This is how it's done in the real world.

Not one but not too many either (1)

John.P.Jones (601028) | more than 5 years ago | (#28668967)

You really want just enough to not get too stuck on one language, get good at learning new languages, and understanding different classes of languages. Beyond that is counter productive.
Ideally learning C++ (and C), a garbage collected / reference semantics language (like Java or C#), a modern scripting language (Python, Ruby, or Perl), some exposure to an assembly language (doesn't need to be x86 although mine was) and some exposure to functional languages (ML, Haskell, LISP). This would be a good start, knowing one of these languages really well is a definite plus. At this point you should be able to pick up and adapt to whatever is needed for a project.

Learning a language is easy (1)

LBArrettAnderson (655246) | more than 5 years ago | (#28668971)

Learning a language is easy. It doesn't take a degree to be able to program in C++ or any other language. That's not what schools should be teaching (at least after the first couple of courses).

As everyone else has said, it's the concepts that are important. It's not unheard of for a software company that develops only in language X will hire someone who has never used that language before. It doesn't take long at all to get familiar with a new language once you already know a few.

Same happened to me... (0)

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

I got my Bachelors degree in 'Web Design and Multimedia' but the courses taught me a little about everything but not enough in anything to excel. So, I'm left with teaching myself or going back to school... and I definitely don't want to do that. So, atm, I am trying to learn some C# and the .NET framework. GL to you.

Re:Same happened to me... (1)

KiltedKnight (171132) | more than 5 years ago | (#28669003)

OK, so you have to add things to your toolbox... but you have the abstract concepts of how to do things already. You learned principles of good design. Guess what... when I need to hire someone, I can teach you the language-of-choice. I'm not going to have the time to teach you that putting images, links, animations, etc, in specific locations is good/bad.

Computer Science != Programming (0)

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

Teaching programming in a computer science curriculum is a bit like teaching welding to mechanical engineering students, or construction skills to architecture students: valuable things to know, but not a core part of the intellectual training that the students are paying for.

With a proper CS background, becoming proficient in a new language should be something you can do quickly and easily because you already have most of the conceptual "hooks" to hang the syntax of the new language on. If you are getting a CS degree to learn to be a good programmer, you might save some money and look elsewhere. CS Grad students in top departments write some of the most dreadful, unmaintainable code.

Focus on the concepts in class, teach yourself to be a good programmer. You will learn many languages/environments in your career, and there should be nothing particularly special about the first one.

That isn't CS. It isn't even SE. (0)

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

Any "CS" degree, much less "software engineering" degree, that ever has a course about teaching a language is just a joke. Find a better CS program at a better school.

HUH?!? (1)

certain death (947081) | more than 5 years ago | (#28668997)

Are Bash and Oracle really programming languages?!? I would consider that more of a scripting language, and SQL.

Re:HUH?!? (1)

Randle_Revar (229304) | more than 5 years ago | (#28669055)

Bash is a programming language, scripting languages are programming languages.
"Oracle" and OpenGL are not.

Other "language skills" you may need (1, Insightful)

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

Chinese, Tagalog, Vietnamese, or whatever the hell those Indian tech support people speak (claimed to be English, but clearly not). Seriously, you'll need to know one of those languages so you can move to where all the programming jobs will be.

Re:Other "language skills" you may need (1)

Merc248 (1026032) | more than 5 years ago | (#28669141)

I'm sure Filipino (Tagalog) are exactly what Indian people speak, you idiot.

Wrong Focus (3, Interesting)

nmb3000 (741169) | more than 5 years ago | (#28669011)

After reading the syllabi, all the higher level classes appear to teach concepts rather than work to develop advanced techniques in a specific language.

Which is exactly as it should be. The focus of a CS degree should not be "how to write a program in as many languages as possible". If you want that, go read Wikipedia or this [99-bottles-of-beer.net] . I tend to think that the goal of the degree should be (more or less) threefold:

- Weed out people who have no business programming. For those who can it seems crazy, but there really are people who just cannot seem to think logically or in an algorithmic fashion. They should be gone after the first or second class.

- Teach those unfamiliar with programming at least a single language to act as a starting point and as a language to be used in later classes. It used to be that C/C++ was the definitive standard for this since you could mix both high and low level techniques, but lately it seems like most places are starting off with a garbage-collected language such as Java, Python, or C# and then moving to C or C++ later on. In either case, after being 3-4 classes in, the student should be well versed in at least one language. Ideally those still left that should not be programmers would be gone after this point, but as anyone in the field will tell you, this sadly isn't the case.

- Stop teaching languages and start teaching algorithms, techniques, and the 'engineering' part of software engineering. At the end of the day it doesn't matter how many languages you know if you can't use any of them in real-world team-based programming of large and complicated projects. You also get into the more specialized areas you are interested in such as graphics, AI, computational analysis, etc.

Some of my least-favorite CS classes were about language and programming theory and while they aren't real exciting or fun, they do make you really think about good solutions to a problem and not just sitting down to "hack something together". Additionally, all the assignments were language-agnostic, so you could program in whatever you wanted as long as you completed the program spec.

In short: a decent program should be able to sit down and pick up an unfamiliar language without too much trouble, so I wouldn't worry too much about what language you learn first. What's important is that you lean to program well -- after that the language just doesn't matter that much.

Wrong question (3, Interesting)

marnues (906739) | more than 5 years ago | (#28669019)

We can't help you unless you tell us what job you want. If you want a job from a computer science degree, then you shouldn't be worried about language specific concepts. Those are for code monkeys. If you want to be a code monkey then you probably want a different degree. My degree is in Computer Engineering (though it has a much greater CS bent than EE). I came out of college knowing that I would never work in a higher level language than C. I didn't need roadblocks to perfect hardware control. Now I work as an "Application Developer." I design and write code from the ground up. I had a much more difficult time picking up the specifics of Java than my Software Engineer and Programming degree'd brethren. But because of my background I finally understood why higher level languages were made. None of my co-workers appreciate the simplicity and elegance of sticking to a pure OOP model (since we work on our own projects, the lack of collaboration has made the Software Engineers lazy). None of them understand exactly what the JVM is or how the Garbage Collector works. They worry about optimizing code down to removing method calls when we're doing networking...they don't understand that the nanoseconds saved by not making the method call not only makes the code more difficult to read, it also has no appreciable effect since the SNMP call before it took milliseconds (sometimes even seconds).

Almost more important to any of that though is the changing nature of the business. The 2 Computer Programmer degrees on the team are having a very difficult time moving to the new Java EE standards. We'll be picking up Glassfish v3 and Java EE 6 here soon and will have to update our code. I and the Software Engineers are rejoicing since we understand the benefits even though it means more learning and more work in the short-term. The Computer Programmers on the team are annoyed since they have to learn new concepts and re-work code.

So, do you want to be stuck to the language specific concepts that will make you readily employable? Or do you want breadth of knowledge that enables you to do pick up any task? The choice is yours. But your question is lacking until we know this.

Languages don't matter (5, Insightful)

erikharrison (633719) | more than 5 years ago | (#28669031)

I make the hiring decisions at my company. I check to see if people can solve complex problems. I don't care what language you know. You can learn PHP in a couple of hours. Sure, your first 5.000 SLOC are going to look like whatever language you know best, but right out of college your first 5.000 SLOC are going to suck anyway.

Learning a bunch of languages has the advantage that you learn what concepts are universal to programming and what are just entrenched in the language, but what really matters is learning to think algorithmically, no matter how many languages you know, be it one or one thousand.

It sounds like you've already made your decision about which school you're attending, you just want some assurance that this education won't be wasted. Let me assure you that it won't.

Re:Languages don't matter (0)

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

right out of college your first 5.000 SLOC are going to suck anyway.

I think you typo'd 500K. :-)

I can write 5K in an afternoon.

Re:Languages don't matter (1)

binarylarry (1338699) | more than 5 years ago | (#28669371)

Well, to fair be fair, he did use the "I'm a PHB" disclaimer at the beginning of his post.

5k was probably appropriated from some magazine article. ;)

Language does not matter. The Algo does. (1)

Opportunist (166417) | more than 5 years ago | (#28669041)

There are, essentially, two kinds of computer languages: Imperative and declarative. Both styles should be taught, as well as their difference, and when to use what.

What matters is that you learn the theory behind it. The mathematics. The logic. That you learn how to break a problem down to an algorithm (imperative) or how to break it down into terms your language can understand (declarative). What language you use to solve it is a different matter and not really important. You will see, if you know your theory and your logic, that it does not matter whether you implement a problem you plan to solve imperatively in C, Perl, PHP or if you really have to Pascal. It is, essentially, the same. The algorithm you develop will be the same. You will write different code, you will account for the various quirks and requirements the language may have, but they will be few and easily picked up.

What matters is your algorithm.

What do you wanna be? (0)

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

A code monkey or a computer scientist?

You should be asking a different question (4, Insightful)

azav (469988) | more than 5 years ago | (#28669087)

Learn how to work on a team, work with QA, and learn how to deliver products.

That's what you need to be asking.

expertise required in a single language? (1)

nurb432 (527695) | more than 5 years ago | (#28669101)

That could easily box you in and reduce your chances too. If you only are an expert in XYZ, company A may only use ABC and wont even talk to you. Even if you choose the most popular language today, it may or may not be when you are ready to look for a job. ( or get downsized and have to look after years in the field ).

However, if you are versed in several, it shows you have learning/comprehension potential and have a leg up on what company A uses and might just get the interview.

Wrong Major (4, Insightful)

daemonc (145175) | more than 5 years ago | (#28669105)

If after a year or more of college, you think OpenGL and Oracle are programming languages, maybe CS isn't the right major for you.

As others have suggested, try a trade school or community college. They will be happy to teach you to be a single language code monkey, without bogging you down with complicated high-level concepts like "what is a programming language?"

Re: Which Language Approach For a Computer Science (1)

trwww (545291) | more than 5 years ago | (#28669117)

> I also feel that I am going to come out of school not having the expertise required in a single language to land a good job.

You HAVE to practice writing software on seperate/personal projects while in school.

It doesn't matter what they teach in a CS degree program, if you don't work on personal projects, you'll never be a great software developer.

In other words, what they teach in the program is irrelevant. A Bachelors degree in Computer Science does not give anyone expertise required to land a good job. the It is what you do outside of class that gives you the expertise required to land a good job.

Marklar001 (0)

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

Whatever specifics you learn at university will be out of date by the time you start work, and will be a hindrance five years later. You need to get the generalisations so that you can build on what you learn. Learning is about increasing your horizons, not narrowing them. Give a man a fish, and he'll be fed for a day, teach a man to fish and he'll be fed for a week until everyone else who can fish deplete the resources. Tech him a concept of fishery management and he'll feed the world forever.

It doesn't matter much (1)

symbolset (646467) | more than 5 years ago | (#28669129)

If after a while you haven't discovered that all languages are essentially the same you should find another career path. But don't program in COBOL if you can avoid it.

Python is the future (4, Insightful)

Phroggy (441) | more than 5 years ago | (#28669153)

As a Perl lover it really pains me to say it, but Python appears to be really taking off. You're going to start seeing Python used by businesses in the same way that they've been using Java over the past decade.

call them on the phone (3, Interesting)

sneakyimp (1161443) | more than 5 years ago | (#28669161)

Find one or two companies that does the work which interests you, call them up, and ask them what languages they use. Chances are they'll need everything from PHP, Java, Actionscript, Javascript, SQL, or .NET for the web site to C++, Objective C, J2ME, or something else for computers, mobile phones, and game consoles. Seriously, just call them. Make sure you make a distinction between the various positions they have. A single company might have hundreds of programming positions, each of which specializes in some particular thing. A friend of mine who interviewed at Microsoft in the 90's met someone whose entire job was practically dedicated to the print preview dialog box for MS Word. Another friend of mine works for EA or some other game company here in LA. A typical task for him is to prevent that flanging sound when two players fire the same weapon in rapid succession in a first-person shooter. He tends to specialize in audio-related coding.

3 Languages are a good start (2, Interesting)

wiredlogic (135348) | more than 5 years ago | (#28669163)

I think a CS major today should be conversant in at least three languages by the time of graduation. At a minimum you should have knowledge of an assembly language to better understand how a microprocessor really works, a monolithic scripting language like Python or Perl, and a systems language like C, C++, or Java. From there it becomes easy to add on what you need as you need it because you begin to recognize toe commonality in how things are done between different languages so you just have to absorb the new syntax for the most part.

Looks like you want to learn coding, not science. (1)

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

Perhaps you should look at schools in India.

This is Comp Sci, not a trade school (1)

sirwired (27582) | more than 5 years ago | (#28669177)

You are getting a degree in Computer Science, not attending trade school. Their job is to give you the tools you need to analyze and solve computer problems. Your career is your job. If that means obtaining expertise in a particular language on your own, so be it.

Going over a lot of different languages will give you the tools you need to understand almost any computer language. In any case, CompSci curriculums don't change nearly fast enough to keep up with Language of the Week.

It's actually a good thing your school is doing what they are... too many CompSci programs dont.

SirWired

Find another major (1)

planetoid (719535) | more than 5 years ago | (#28669203)

Take it from me, a computer science degree definitely won't help you get a job.

Major in something whose industry actually has entry-level job openings. The only computer science jobs out there all say "Minimum 5-8 years industry experience required, must be proficient in Java, SOAP, XML, XHTML, SHTML, ZHTML, ABCDEFGHTMLIJKLMNOP, ORACLE, MYSQL, SQL SERVER, JAVASCRIPT, WEB 3.0 TECHNOLOGIES," and other things that are the complete opposite of what you found interesting and intellectually stimulating about computer science when you enrolled.

Unless you actually like hopping on the WEB! WEB! WEB! bandwagon, in that case then go for it. Otherwise a computer science major is only good for knowing how to better work on your hobby projects in your free time while your actual income ends up being working minimum wage as a cashier at Safeway.

Fuck...

Re:Find another major (1)

marnues (906739) | more than 5 years ago | (#28669291)

Any time a company says "Minimum X-X years industry experience etc." they're trying to scare people off. I applied for several of these jobs right of college and had interviews with a few. They just want to make sure we know how to work in a team environment and actually get work done. If you come out of college knowing how to do these things, you're fine. Apparently you were scared off. A major issue I've seen with Computer Scientists is their lack of self confidence. A job interview is not a computer program. Requirements are usually flexible, especially when hiring a Computer Scientist. In fact, some managers want to hear why their requirements are wrong and you're the guy to prove it.

It doesn't matter what language they teach (1)

macbeth66 (204889) | more than 5 years ago | (#28669217)

They should be teaching you how to think. How to take requirements and turn them into a finished product. After all, you are going to school for a CS degree. Not Management. Not Business. Not Math. Not Physics. But, Computers.

You need to understand the problem, break it down into manageable components and develop a plan. Take that plan and design a solution. Code that solution. Debug that solution. Design that solution. Code that solution. Debug that solution. Design that solution. And so on.

Note that I did not mention an language, a discipline or an industry. It applies to building a payroll system to a new gene sequencer.

I can't stand the grads that I have seen in the past ten years. They KNOW everything. They know JAVA. They can not dissemble a problem into workable, manageable parts. They can not read. They can not write. Schools need to get back to the basics and teach the student how to survive in the real world.

I don't give a crap about Oracle or Python, as next week, I might have to use MySQL and C#.

So far, in the past three years, I have used all of them, and then some. However, I have never used Java beyond learning it. Knowing that, I would still learn it. It gave me a different perspective on things I still do today.

Sounds like you're getting a good education (1)

plopez (54068) | more than 5 years ago | (#28669219)

While you're at it make sure you get exposed to a Lisp based programming language, transaction processing and understand databases. It sounds like a real college so use your free electives to work on your written and oral communications.
E.g English and public speaking oriented classes. Classes in Psychology and Sociology will help too, you need to learn to understand people who don't think like you do.

People who go to diploma mills get ripped off.

Enjoy it. It can be fun.

You are in a CIS program, not a true CS (1)

WindBourne (631190) | more than 5 years ago | (#28669247)

CompSci does not worry about a language. Instead, they teach abstraction around a base language, and will have one to two classes concerning different language (comparative languages). The problem is that languages popularity's change. What you want is fundamentals, and skip the garbage about what language de jour. Go with a program that uses a single language (the ACM base language is java, though it was C++ and before than it was pascal).

Learn to think first (1)

thomasoa (759290) | more than 5 years ago | (#28669275)

I'm firmly of the opinion that you should learn as many different programming languages as you can early on, so you learn how to think in each language and understand what the strengths and weaknesses of langauges are. Honestly, if you learn on language really well, you'll have a niche, but you won't be able to grow nearly as well as if you have loads of experience working in different languages.

Expertise!? (1)

Aladrin (926209) | more than 5 years ago | (#28669285)

You don't graduate a college/uni with 'expertise'. You graduate with knowledge. Expertise is learned by actually working in the field. The closest you might come is if you find a school that requires you to apprentice for 2 years before you can graduate, like a medical doctor/nurse/etc has to. I doubt you'll find one.

Stop thinking you need to learn a language and start thinking you need to learn to program. A good programmer can pick up any language as needed. A great programmer can start programming on day 1 with just a reference book and no prior knowledge of the language.

I'd choose the variety (1)

Kirby (19886) | more than 5 years ago | (#28669293)

You're not going to come out of school with the expertise to be a professional software engineer in any case, whether you focus on one language or many. It's a hard job, and 90% of what makes it hard are factors of time longer than a quarter/semester, and factors of dealing with non-Computer Scientists and people with demands other than your professor.

It's okay, we (the hiring industry) know this, and a lot of us are willing to put in the investment to do the appropriate apprenticeships. CS Degrees are one way to select people who are more likely to succeed, but it's a discipline that's only learned through doing for the most part, and best done with people who are more senior teaching you. (I self-taught a lot after my CS degree, but I advanced more in the first year I had a real mentor than I did in the previous 6 I was doing it mostly myself. But people do vary, and if you're the exception, great.)

I'd recommend the variety approach, because people _do_ vary. Some people love the rigid structure of a Python, the massive infrastructure available to Java, the exposure of the bare metal of C, the total control of Assembly, the flexibility and rapid development of Perl, or whatever suits you. At this stage: Try a lot! Find a language you have fun with, and code more in that. You'll be a lot happier with your job if you don't find the language you use every day to be high in however you define bullshit. And if you don't fall in love with a particular approach, you've got a lot more starting nodes for your resume and can do a broader job search.

Employers have hired college students before, and we know that what you learn in your CS classes with respect to being a professional programmer is _really_ not that much, and hire more for people who we think will learn quickly, not be a pain in the ass, and actually have some amount of work discipline. Whether someone took one or three C# classes is not very interesting. (Personal side projects using the language of choice, those are more interesting.)

Good luck!

The real world of head hunters and HR depts. (1)

Theovon (109752) | more than 5 years ago | (#28669315)

With respect to actually knowing things and getting work done, it's better to understand computer science concepts in general then to know obscure details of one or a few particular languages. But keep in mind that the people who hire progammers are not themselves programmers. Head hunters and HR departments are generally non-technical and will not understand (or care) if you talk about these concepts. The fact is, unless you're getting a Ph.D., you have to tailor your resume to be consumed by a half-broken computer program with multiple choice check boxes, and that is how you're going to be judged. It doesn't matter if you know C++, Java, Lisp, Ruby, PHP5, Python, Haskell, and assembly for 10 different processors. If the job calls for C#, and you don't claim to know it, you won't even be considered. If you DO claim to know it, it's hit or miss whether or not you'll be tested on it. I've actually gotten less than perfect scores on C and C++ tests due to things that I KNOW are wrong with the test, so you're up against that too. As much as you have to know computer science, you also have to know how to game the system.

Here's what has worked for me:

(1) Know your concepts well. Know how to take any program and implement it in pseudocode. Learn how to do it in structured, object oriented, and functional languages. This will help you actually get the job done and get raises and stuff once you're hired.
(2) Find out what languages are hot and read at least one small tutorial on each, and write programs in each of at least, say, 1000 lines. Whatever it takes to get used to the basics. Also, read the wikipedia articles and google for "trick and tips" and "gochas" and other things that people praise or gripe about for those languages. Get your feet wet. This way, you can then claim that you have programmed in each of those languages, and you can answer some of the weirder questions someone might ask.
(3) Familiarize yourself with different types programming environments or platforms. Program something on Windows. Program something on a Mac (if you can get your hands on one easily enough). Program something on Linux. Program something on an embedded system or at least a language used on them.

You have to lie judiciously. For instance, my background included assembly for several processors, C, C++, for modern system as well as things like 6502's, along with a fair amount of chip design experience. Could I do embedded systems programming? Duh. But at this one point, I didn't have any ACTUAL embedded systems programming experience. So I was honest and explained that while I hadn't, I clearly had enough related experience that was easy. I didn't get the job. What I should have done was done a bit of reading on the subject to ensure that I know the names of a few embedded processors and bluffed my way through. The problem was that the head hunter wasn't technical enough to understand my explanation, so all he knew to do was check "NO" on the embedded systems experience. He can comment in there about the chip design, but the HR people he would hand this off to wouldn't know what do do with it.

To summarize, to prepare yourself for working in the IT industry, you have to learn programming, but more importantly, you have to learn how to translate what you know into the language of the nontechnical people who do the hiring. This requires a kind of intelligence (subterfuge, to a limited extent) that many technophiles are not very skilled at. If you don't you give away control to the people who understand the art of deception better than they understand technical things. But those are the ones who rule the world. Politicians succeed not by knowing things but by knowing how to SPIN things.

Real Computer Scientists learn languages as needed (1)

Spazmania (174582) | more than 5 years ago | (#28669321)

The school I am now attending teaches what seems like every language in the book.

Back when I was in college they had a rule: CS majors were not permitted to take computer language classes for credit. One of the professors explained it this way: As a Computer Scientist you will use many computer languages over the course of your career. You're expected to learn any computer language you need to know whenever you need to know it. You're not here to learn a computer language; you're here to learn the fundamentals of Computer Science which will be applicable in any language.

So, my comment for the poster is this: welcome to a real school and congratulations on your admission. Don't sweat what employers are/aren't looking for. For folks with a deep understanding of computer science, there are jobs to be had in every programming language. Even lisp if you can believe that. Your time at this school will prepare you for an enjoyable software development job so you won't end up stuck as a routinely disrespected code monkey.

But I know you're going to sweat it anyway, so here's my advice: pick a language you like and start writing open source with it. By the time you graduate, you'll have considerable experience.

Not a bad list (3, Interesting)

PCM2 (4486) | more than 5 years ago | (#28669323)

Everyone's knocking the poor guy for being an idiot, but give him a break; he's a first-year student. That aside, actually this list seems pretty decent.

  • Start off learning Java, a mature, object-oriented language that is widely used and is also fairly strict about syntax, structure, etc... a good way to get the foundations.
  • Once he's got a little more background in programming, he can pick up Python and dick around with new concepts more quickly.
  • Next comes C ... if someone graduated college with a CS degree having never worked in C, I'd think something was wrong. Notice, also, that they're slowly drilling down into lower-level concepts. At this point in the game he might start poking around inside some major OSS packages.
  • Oracle PL/SQL is obviously not like any of the other languages in this list, and by the time he gets there he should realize why and also appreciate gaining some experience with databases.
  • Learning Bash says to me that they're introducing him to some basic system operations, which he'll want when he starts hacking away on Linux systems (which is inevitable).
  • And finally assembly language -- at this point he might be learning the fundamentals of device drivers or embedded systems, and how computers really work.

A student could certainly do worse. If anything, given this whole list, I'd hope that the school is even more focused on concepts than he's complaining about. You shouldn't be learning about embedded systems programming if you don't have a good understanding of data structures, for instance. If they're doing it right, "learning" all these languages will basically mean picking them up on your own, and class time will be devoted to concepts.

At the interview... (1, Interesting)

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

At the interview I'm looking for one thing: Assurance that we won't have to teach you how to solve problems. I also personally look for some fine arts curriculum in your science degree, but that's my personal bias. I like to see Computer Science or Chemistry majors with a music minor.

I really don't care what languages you studied. If you're deficient when you come to me, I will throw you books and mentors and give you an opportunity to learn. Even if you learned a language in school, I guarantee you have plenty of things to learn about it before you are up to speed with the work we do in my shop.

It really doesn't matter what languages you learned, but I would personally have more respect for a curriculum that had Java, C, an assembly language (even a hypothetical one in a computer organization course), and a capstone project where you made something interesting. I'd like you to have a good grasp of databases, networking, and at least enough parallel and distributed programming experience that you understand the issues associated with those.

Sounds like the new school has the right idea. (1)

cwills (200262) | more than 5 years ago | (#28669353)

Personally if I were to make the decisions on hiring someone, and give the choice between a person who knew only one language inside and out and a person who was exposed to 4 or 5 different language but needed a quick peek at a reference book to make sure they got the syntax right or some such, I would pick the 2nd person without even blinking.

You see, to the first person, he has only one tool in his tool box (a hammer), and to him everything will look like a nail.

Programming is so much more then just simply banging out a bunch of lines of code. It's looking at the requirements and picking the best tool for the job. In addition things are never static. A little tool may be needed and python may just fit the bill, then there will be that web application that needs enhanced and that is written in PHP, and the boss just dropped by and said that corporate just got a new application in and it has it's own scripting interface and it needs in interface to the application that you are responsible for.

Sure... if you are working on a big project, that project may have decided to use just one language and you will spend the next 3 years looking at java, but knowing how a computer really works (from that assembly class - even though you've never code a single line of assembly) you can make some wise decisions on how to implement something, or maybe just maybe you might come back and say - you know right here it would be beneficial to call out to a routine written in C because Java just isn't going to cut it right here.

Computer Science != programming (1)

catmistake (814204) | more than 5 years ago | (#28669379)

Computer Science is a subset of Mathematics. You don't need a degree to do mere programming. You don't go to medical school and residency because you want to be a good phamacist.
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>