Which Language Approach For a Computer Science Degree?
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?"
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.
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.
New school teaches every language + programmming concepts and our poster complains - maybe the new gen kids are unteachable.
This is not a signature.
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.
The preferred solution is to not have a problem.
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.
OCO is Loco
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.
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.
Learn how to work on a team, work with QA, and learn how to deliver products.
That's what you need to be asking.
- Zav - Imagine a Beowulf cluster of insensitive clods...
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?"
All that we see or seem is but a dream within a dream.
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.
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.
$x='S24;r)>63/* h@<5+oZ)32"5cz';$me='phroggy'x$];
$x=~y+ -xz+\0-Tx+;print$_^chop$me for split'',$x;