Forgot your password?
typodupeerror
Education Programming IT Technology

Which Language Approach For a Computer Science Degree? 537

Posted by timothy
from the do-both-and-compare dept.
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?"
This discussion has been archived. No new comments can be posted.

Which Language Approach For a Computer Science Degree?

Comments Filter:
  • Hobby (Score:5, Insightful)

    by sopssa (1498795) * <sopssa@email.com> on Sunday July 12, 2009 @02:57PM (#28668861) Journal

    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 (Score:5, Informative)

      by morgan_greywolf (835522) on Sunday July 12, 2009 @03:18PM (#28669021) Homepage Journal

      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: (Score:3, Insightful)

        by SignalFreq (580297)

        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.

      • Re:Hobby (Score:5, Insightful)

        by complete loony (663508) <Jeremy DOT Lakeman AT gmail DOT com> on Sunday July 12, 2009 @07:48PM (#28670909)
        If there is a single language that is not taught enough for real world experience, it's SQL. Just about any business programming job is going to involve storing and reporting on data. While a CS degree is going to give you a basic introduction to SQL, I feel that SQL should be introduced earlier and worked into more of the assignments you are asked to write.
        • Re: (Score:3, Insightful)

          Another thing that was certainly missing from my own CS curriculum (admittedly 10 years ago) was practical experience with using source control systems. I'm not trying to suggest that using source control or SQL should require an extra semester subject, just that the way contrived assignments are designed should be similar to the way real world applications are written.

      • Re:Hobby (Score:5, Insightful)

        by iamhassi (659463) on Sunday July 12, 2009 @10:08PM (#28671801) Journal
        "not having the expertise required in a single language to land a good job."

        I answered this a few months ago on another post. I'll just link to my old post so you guys can follow the links [slashdot.org], but I copied and pasted it below. Languages to know are C/C++ and Java, everything else is derivative.

        "Since anything you're taught about computers is mostly obsolete in a few years..."

        You're not a programmer, are you? I ask because no programmer would ever say that.

        The C programming language came out in 72 [wikipedia.org], and C++ came a few years later [wikipedia.org]. Both are in the top three most popular programming languages [tiobe.com] "based on the number of skilled engineers world-wide, courses and third party vendors" and they make up 25% out of the top 20 languages in the list. Although the number one language, Java, makes up 19%, it "derives much of its syntax from C and C++" and Java came out in 1995 [wikipedia.org].

        Other sources say C is still responsible for nearly 50% of new open source projects, followed by Java with 28%. [theregister.co.uk]

        So even if you took a programming class 30 years ago it would still very much apply today.
    • by PleaseFearMe (1549865) on Sunday July 12, 2009 @03:33PM (#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.

      • by serviscope_minor (664417) on Sunday July 12, 2009 @05:23PM (#28669953) Journal

        Learn about... bubble sort...

        No, don't. Seriously. If you are at all capable, then *forget* about bubble sort. Erase it from your mind, with surgery if need be.

      • Re: (Score:3, Funny)

        by caywen (942955)

        Huh? I thought Bob Dylan was singing in Chinese all this time. Must have been mistaken!

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

        There is a difference between an intimate understanding and just translating the words. Dylan was great because he mastered the English language to not just follow the rules, but bend and break them - "When you ain't got nothing, you got nothing to lose."
        Every programming language has it's own little quirks [ddj.com] that must be na

    • "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 (Score:5, Insightful)

      by m6ack (922653) on Sunday July 12, 2009 @04:31PM (#28669497)

      I thought of posting this separately, but I really wanted to echo sopssa. What you have is a "GOOD THING" at this school.

      You are getting a well rounded education in concepts, like object orientation, functional programming, scripting, and sand-boxed virtual machines. You're also getting closer to the metal with C and Assembly (Preferably Intel Protected mode?) -- and that's very cool.

      My avenue was the hobby route, but I never really spent my time on the net. I'm an engineer by trade, but I found myself gradually learning coding within my organization more and more. I chiefly program now in sed, python, C++, and VBA; but the mix changes on a periodic basis. I write standard libraries, and a lot of filters and scripts to automate much tedious work within my organization... I try to program so that whatever application I write can be run on any OS -- though some of my stuff lately works best on Linux. (Linux is OK, because people can log into the workstations from their Windows PC's). Cross-platform and Open is the way to go, because you never want to force your customer to disrupt his work-flow to use your tool, and you want your customer to be able to figure out what you're doing and take over support as much as possible.

      So, with my scripts, a lot of people internally at my company have become my customers. This work has taken over much more of my job as my rep built... And now we do about an order of magnitude more work than we used to with a single engineer. The tedium of filling out spreadsheets or copying by hand is largely a thing of the past. So much work is being done so quickly that the vendors that we work with are getting very nervous that they will be able to keep up with what we are doing -- and with us us targeting multiple vendors in our work-flow they are very worried about competition.

      One other thing I learned -- we can learn much from the "Old Ways." What a horrible, nasty, terse, poorly documented -- and absolutely wonderful gem -- sed is! How nicely does it fit in with the UNIX toolkit: regular expressions with VIM, grep, and find; and roughly stapling things together with xargs and bash! You learn one thing by doing another, and you become so much more productive. Recently, I had to do a remote debugging session over a slow link. There were 50 engineers in the room, and a tag-team of 3 driving the remote system. How nice it was to have VIM there -- hacking stuff with only a few keystrokes to select and change lines on the fly, rather than having to wait a minute to click and select via some GUI. We were extremely successful and productive. I got promoted because of this -- because I drove the creation of tools, and because I learned to become proficient in the "Old Ways."

      Because you are not established within a company, you'll have to find another avenue to get yourself noticed, and you'll have to find another way to find your niche. I think that the best way for you to get noticed is to find some Open Source project on the net to dig your fingers into. You build your rep., and you find your niche -- find out what you like, and keep doing it. Let your direction change as you find out what your interests are. Keep learning new ways of doing things, and don't be afraid to experiment with crazy ideas. Make a positive contribution to how things are done -- make something better from the inside out.

      I like this quote from Daniel Phillips (Tux3): "A weak coder becomes a strong coder by reading code and writing code every day for fun."

    • Re: (Score:3, Insightful)

      by stevied (169) *
      Amen. So long as you understand the concepts, it's very easy to learn a new language, or resume using an old one that you haven't touched for a few years. A pocket-sized language quick reference on the desk is sometimes necessary, and perhaps for the useful monstrosity that is C++ you'd actually need a copy of Stroustrup, as there are (far too) many wrinkles, but that's about it.

      Incidentally, looking at the original list, C basically is portable assembly..
    • Re: (Score:3, Insightful)

      by samkass (174571)

      The original poster is using the term "Computer Science" but seems to be expecting a "Computer Programming" degree. The latter is often a 2-year associates degree at your local college. The former is a grounding in the science and mathematics of computation such that any language is just some syntax details that describe the same concepts you'll learn in your theory class.

    • Re: (Score:3, Interesting)

      by Glendale2x (210533)

      I'll second this. The CS department where I did my undergrad was under the engineering banner. I was told many times in different classes that the goal of the program was to teach us how to solve problems as engineers, not churn out code monkeys. I did Java, C, C++, Lua, Lisp, Smalltalk, 8051 assembly, and some others I can't remember. The CS program formally taught C++ for the first two classes, but those were the only two (and their labs) that was strictly focused on learning to code. The rest of the clas

  • by enrevanche (953125) * on Sunday July 12, 2009 @03:00PM (#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.

    • by sixoh1 (996418) on Sunday July 12, 2009 @03:17PM (#28669015) Homepage

      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.
       

      • by ari_j (90255) on Sunday July 12, 2009 @03:37PM (#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.
        • by Anonymous Coward on Sunday July 12, 2009 @04:06PM (#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.

    • 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.
      • Re: (Score:3, Funny)

        To me it's akin to a literature major being able to write very well in one human language.

        Most can't.

      • by pyite (140350) on Sunday July 12, 2009 @04:44PM (#28669603)

        but I also think it's important for a graduate of a 4-year CS degree to be an expert in at least one.

        I've used this quote time and time again on here, and I'll use it again: "Computer Science is no more about computers than astronomy is about telescopes." -- Edsger W. Dijkstra.

        And this one is completely appropriate to, as to why Knuth uses MIX/MMIX in his books and not some other language. The same thing applies exactly to a university program of computer science:

        "Moreover, if I did use a high-level language, what language should it be? In the 1960s I would probably have chosen Algol W; in the 1970s, I would then have had to rewrite my books using Pascal; in the 1980s, I would surely have changed everything to C; in the 1990s, I would have had to switch to C++ and then probably to Java. In the 2000s, yet another language will no doubt be de rigueur. I cannot afford the time to rewrite my books as languages go in and out of fashion; languages aren't the point of my books, the point is rather what you can do in your favorite language. My books focus on timeless truths."

        Being in expert in one programming language is fine if you just want to be a programmer. If you want to be a computer scientist, it's neither necessary nor sufficient.

        • by GlassHeart (579618) on Sunday July 12, 2009 @08:22PM (#28671133) Journal

          I think you may be taking Dijkstra out of context. While it's important not to be tied to the physics of contemporary computers, his own algorithms do make assumptions about the machine that might implement them. For example, many problems are trivially solved by a infinite number of infinitely fast CPUs, but that doesn't get us anywhere. Take the simple binary search, for example, and you'll see the core assumption that comparisons are expensive. It is in that sense that computer science is about computers, although it must not be limited to what contemporary computers can do.

          But more to the point, Knuth is an expert in programming. He wrote TeX, one of the most famously bug-free* programs in existence. I agree completely with his point of not getting bogged down by the language du jour, but I'm not talking about the language du jour. I'm talking about a language.

          Do you actually know of a good computer scientist who can't program?

          * US$327.68 awaits.

    • Re: (Score:3, Interesting)

      by cptdondo (59460)

      You know, when I went to school they absolutely drilled us in bleeding edge techniques of the time. On graduating, I found that it took fully 15 years for the commercial world to catch up to my progamming style. (And, no the language is utterly irrelevant.)

      Once OOP became common, I had to go and learn new concepts, only to find that they're really the old concepts.

      There's only so many ways to do something. How you express it is really a matter of choice and toolkit available.

      Learn the concepts; forget th

  • 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.
    • by minsk (805035) on Sunday July 12, 2009 @03:11PM (#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 :)

    • by happyemoticon (543015) on Sunday July 12, 2009 @03:25PM (#28669069) Homepage

      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: (Score:3, Insightful)

        by Anonymous Coward

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

      by 0xdeadbeef (28836)

      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.

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

      Well, maybe English.

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

      Personally, I favour Springbrook Valley Woodelven.

  • by VincenzoRomano (881055) on Sunday July 12, 2009 @03:02PM (#28668891) Homepage Journal
    Find a serious computer science course.
    The choosing among languages will be more a matter of taste than of actual contents.
    • Re: (Score:2, Interesting)

      by realeyes (1565211)
      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 th
  • C# and Bing (Score:5, Funny)

    by Anonymous Coward on Sunday July 12, 2009 @03:03PM (#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.
    • by value_added (719364) on Sunday July 12, 2009 @03:55PM (#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.

  • by ehack (115197) on Sunday July 12, 2009 @03:05PM (#28668915) Journal

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

    • Re: (Score:2, Insightful)

      by maxume (22995)

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

    • by japhering (564929)

      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.

    • Re: (Score:3, Insightful)

      by story645 (1278106)

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

      I'm probably new gen (ripe old age of 21) and I think new school rocks. My school attempts a theory/practical balance by giving classes in basically one or the other and just putting an about equal amount of each in the core and fails miserably at teaching anyone not already interested in comp sci anything 'cause most of the ones just in school for a job take the practical courses where they can cut+paste their way to a half decent grade. (The best were the guys who've worked in industry but don't know any

  • by Ritchie70 (860516) on Sunday July 12, 2009 @03:08PM (#28668951) Journal

    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.

    • by nurb432 (527695)

      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: (Score:3, Informative)

      by Anonymous Coward

      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

  • by KiltedKnight (171132) * on Sunday July 12, 2009 @03:09PM (#28668957) Homepage Journal

    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.

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

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

  • 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.
  • Wrong Focus (Score:4, Interesting)

    by nmb3000 (741169) <nmb3000@that-google-mail-site.com> on Sunday July 12, 2009 @03:17PM (#28669011) Homepage Journal

    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 (Score:3, Interesting)

    by marnues (906739) on Sunday July 12, 2009 @03:18PM (#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.
  • by erikharrison (633719) on Sunday July 12, 2009 @03:19PM (#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: (Score:3, Insightful)

      by ameline (771895)

      I agree,

      A long time ago now (mid 1980s), when I was interviewing for one of my first programming jobs, the interviewer asked me what was different about C vs other languages.

      My answer was that is it easier to spell. :-)

      The interviewer looked a little puzzled -- I explained that while I was trying to be funny, I was also being serious -- C is not really any different than any algol type language. If I could identify any way in which it differed, I would say that in C, the pointer is the primary datatype, whe

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

  • by azav (469988) on Sunday July 12, 2009 @03:26PM (#28669087) Homepage Journal

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

    That's what you need to be asking.

  • 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 (Score:5, Insightful)

    by daemonc (145175) on Sunday July 12, 2009 @03:30PM (#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?"

  • by Phroggy (441) <slashdot3@@@phroggy...com> on Sunday July 12, 2009 @03:37PM (#28669153) Homepage

    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.

  • by sneakyimp (1161443) on Sunday July 12, 2009 @03:37PM (#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.

  • by wiredlogic (135348) on Sunday July 12, 2009 @03:38PM (#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.

  • Perhaps you should look at schools in India.

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

  • 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 com
    • Re: (Score:3, Interesting)

      by Animats (122034)

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

      He may be right. Which is sad.

      I'm not complaining personally. I've been fortunate enough to do plenty of good computer science over the course of a long career. I've done everything from networking theory to proof of correctness to autonomous robots. I've done web stuff, too, and today write mostly Python, so I'm not stuck in the past.

      But new graduates, especially if they only have a BS, are going to have trouble findi

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

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

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

      by hibiki_r (649814)

      With only one language, chances are that that most graduates' knowledge of basic concepts will be too biased by the lens of their single language. How easy is it to think of functions as parameters coming from a language without closures? If everything you do is compiled, how can design by capability ever make sense? Not to say about how little one can teach about maintainability and readability if one is stuck in one language.

      While it's silly to force students to use a different language in every single co

  • 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

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

  • Not a bad list (Score:4, Interesting)

    by PCM2 (4486) on Sunday July 12, 2009 @04:03PM (#28669323) Homepage

    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.

  • by SL Baur (19540) <steve@xemacs.org> on Sunday July 12, 2009 @04:19PM (#28669419) Homepage Journal

    Do not take this golden opportunity and flush it down the toilet. A specific programming language is irrelevant to skill in programming.

    (Writing as someone who has interviewed programmers for positions before).

  • by rlk (1089) on Sunday July 12, 2009 @05:07PM (#28669797)

    In the debate about concepts vs. specific languages, one thing is missing: the most important skills in the "real world" are communication skills. It hardly matters how good of a programmer you are; if you can't communicate, you're going nowhere. That means being able to speak clearly and coherently, write well, understand and respond to other people's communications, and so forth. You could be a god-like programmer, but if nobody can understand what you're doing, your code won't be of much use and you won't be asked to do anything of interest because nobody will know what you can do. One of the best CS classes I took at MIT, about 25 years ago, had no programming or even design component whatsoever. It was called Computer Systems Engineering, 6.033 if I recall correctly. The common joke about it was that it was a humanities class. That's because the work involved reading a substantial body of material each week (often some of the major foundation papers of the field) and writing critiques. There were in addition two term papers, which involved architecting a solution to a particular problem (no design work here -- just the architecture). My observation was that students either loved it or hated it. The ones who hated it were the ones who just wanted to get down and dirty with coding. The ones who liked it were the ones who had good communication skills who wanted to really understand the field.

    As far as the language issue goes, are you looking for a trade school or a professional education? Languages will come and go. If you have a sound technical base, you can pick up the fundamentals of any new language quickly enough, and languages constantly evolve anyway (C++ today isn't what it was 10 years ago, and who knows what the language de l'heur will be in 2 years, anyway). I learned JavaScript a few years ago while hacking on an internal tool to generate bug reports (something I've used for years to assist me in managing projects) -- someone wanted a more interactive experience. I'm no JavaScript expert, but I picked up the basics quickly enough -- and more importantly, because of my basic background in interface design, algorithms and optimization, my reporting tool is very fast, and the JavaScript can be used by anyone else in the company who wants to do similar manipulations on HTML tables. Similarly, I learned Python about 6 months ago because a planning tool I wanted to use was written in Python, but I wanted to add some new features, speed it up, and fix some bugs. No classes, no books, just reading the code and doing some Google searches when I needed to learn more about wxPython. When I was an undergrad, the only programming classes offered by the CS department used Scheme and CLU -- two languages with no significant commercial value even then (at that time, the commercially interesting languages were Fortran, Cobol, and C). Why? Because those languages had features that were particularly good for teaching the desired concepts.

    Also, learning programming isn't very expensive. As others have said, you can learn a lot on your own at the cost of the computer that you already have. Better yet, you can create or work on something useful in the FOSS world.

    When I've interviewed candidates for engineering jobs (both as a manager and as an engineer), I've never been concerned with "what languages or libraries does this person know". Depending upon the seniority of the person, I'm looking for good reasoning capability, ability to execute, and ability to communicate. I hired a fantastic engineer out of school. What set her apart from everyone else was her ability to explain why she did something. She didn't merely recite her class projects, she explained why she made engineering choices that she did in a way that was more than enough to demonstrate her technical chops, and her explanations were clear, and she could answer questions in a way that showed real understanding. Since my group was distributed (most of the people were on the other side of the country), communication

  • by Cerebus (10185) on Sunday July 12, 2009 @07:42PM (#28670855) Homepage

    Or do you mean for a job?

    The two are not necessarily the same.

    I found languages like Lisp, Prolog, and Smalltalk to be of the most use for learning the science. These are not your sweatshop languages, though.

    On the plus side, if you learn the science, learning a new language isn't tough.

MATH AND ALCOHOL DON'T MIX! Please, don't drink and derive. Mathematicians Against Drunk Deriving

Working...