Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Education Programming IT Technology

Which Language Approach For a Computer Science Degree? 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?"
This discussion has been archived. No new comments can be posted.

Which Language Approach For a Computer Science Degree?

Comments Filter:
  • Wrong Focus (Score:4, Interesting)

    by nmb3000 ( 741169 ) on Sunday July 12, 2009 @03:17PM (#28669011) 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 Anonymous Coward on Sunday July 12, 2009 @03:25PM (#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.

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

  • by realeyes ( 1565211 ) on Sunday July 12, 2009 @04:01PM (#28669307) Homepage
    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

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

  • At the interview... (Score:1, Interesting)

    by Anonymous Coward on Sunday July 12, 2009 @04:07PM (#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.

  • by Anonymous Coward on Sunday July 12, 2009 @04:14PM (#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 (Score:1, Interesting)

    by Anonymous Coward on Sunday July 12, 2009 @04:15PM (#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.

  • by Anonymous Coward on Sunday July 12, 2009 @04:38PM (#28669549)

    Right as rain, & I'll tell you pretty much the SAME THING I told the GP, sopssa:

    Great post!

    This particular course lends an insight into a COOL set of "tricks" that come into play more than most folks might think, even in today's "prebuilt tools" & object-oriented Object.Property Method world... especially with raw data sets that you have to put into other things like databases, or not!

    (Think files you need to find duplicates in, or sort, etc. et al (though most listboxes & controls have these built into them already, there are times you need them anyhow, & which works BEST/FASTEST, + on what size & type of data involved))

    Seriously good suggestion on your part on a great piece of coursework a person takes by their sophomore year typically anyhow... on a bachelors that is (senior year for 2 yr. tech associates degrees though, they get it too)

    APK

    P.S.=> This is one of those courses that teach you the "KUNG-FU" level stuff early on, the really interesting material that helps you THINK properly, for computing (good computing & programming)... apk

  • by Animats ( 122034 ) on Sunday July 12, 2009 @04:47PM (#28669635) Homepage

    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 finding a good career. Most of the basic problems in the field have been solved, and the ones that remain require deep specialization before you can make progress. The previous poster is right; employers want a bunch of buzzwords, because much of programming at the working levels today is knowing how to interface with a huge collection of ever-changing APIs, and those take time to learn.

    A century ago, the stationary engineers who set up factories to run on electricity and steam had the same problem. In 1870, that was cutting-edge technology. By 1910, factory owners just ordered motors and hooked them up. Today, it's a union job.

    There are good computer science problems to work on today, but it's hard to find a job that needs them solved. There's great stuff going on in machine learning. Game AIs could get much better. Robotics is finally starting to work. Computer vision is getting very good. There's a whole world of interesting technology associated with semiconductor design automation. But 99% of working programmers won't get into those areas. They'll be stuck doing e-commerce sites forever.

    The smart young people I know all seem to be going into either bio or law. A few years ago, some of them were going into hedge funds, but that seems to be over.

  • Re:Hobby (Score:5, Interesting)

    by Mr2cents ( 323101 ) on Sunday July 12, 2009 @05:04PM (#28669767)

    Although I am an embedded developer, I really found db knowledge useful. I usually keep my data structures in at least second normal form, I find it helpful in avoiding problems. For the rest, this is my advice: learn performance estimations thoroughly, it will save you from future embarrassment. Learn how algorithms work with data structures, this knowledge can be widely applied. Learn about language properties, like static/dynamic typing, functional/imperative, structured/OO/logical programming, ... These will allow you to take on the right mindset when confronted with a new language. There are so many languages, that if you bet on any single one of them you are just limiting your options. Don't worry, just learn.

  • 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

  • Computer science? (Score:2, Interesting)

    by bitemykarma ( 1515895 ) on Sunday July 12, 2009 @05:35PM (#28670051)
    Are you trying to learn computer science, or are you trying to learn a trade?
  • Re:Hobby (Score:3, Interesting)

    by Glendale2x ( 210533 ) <slashdotNO@SPAMninjamonkey.us> on Sunday July 12, 2009 @08:31PM (#28671177) Homepage

    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 classes were "solve this problem" and however you implemented it was up to you. Some were even "solve this same problem in several different languages". Learn to solve problems. Languages come and go.

  • Re:Hobby (Score:3, Interesting)

    by complete loony ( 663508 ) <Jeremy DOT Lakeman AT gmail DOT com> on Sunday July 12, 2009 @10:10PM (#28671817)

    It's not learning about SQL I have an issue with, I just think CS grads should have more exposure and practice working with it.

    A CS grad get's quite a bit of practice coding in C / Java / etc. I just think SQL is a very useful language that a programmer could use a lot more practice with. I think a reasonable compromise would be to teach the basics of SQL early in a CS course and use databases for source data in the smaller assignments that students must complete.

    From my own point of view, writing code to read and write to files is a very small part of what I do. But I'd say about half the job of any business data entry / reporting application / web site is working with databases and sql.

  • by Pseudonym ( 62607 ) on Sunday July 12, 2009 @10:14PM (#28671833)

    About 80% of the software engineering market is about fixing the impedance mismatch between half a dozen off-the-shelf legacy systems and getting them to work together. This is the world of customer requirements, filing bugs with vendors, business rules, sorting out SQL variants, .NET and TPS reports.

    The other 20% is in writing those systems or stuff you can't get off the shelf for people who really need it. This is the world of R&D, resource management, high-performance, real-time, scientific, numeric, visualisation, embedded, crypto, machine learning, metal, speed and danger.

    Now, which of these do you want to do for a living?

    Last year, I was writing firmware for nanotech devices. I implemented shell sort. Do you remember shell sort? I'm glad I had a broad CS education which told me what it shell sort was, because it was exactly the right trade-off (small-to-medium amounts of data, with practically no working memory to spare).

    This year I'm helping find disease outbreaks before they happen. I had to implement a suffix array. Do you remember what a suffix array is and what it's for? I didn't learn this as an undergrad (that was a while ago), but thanks to my broad CS education, I knew what I needed to find out.

    A pilot will probably never have to safely ditch an airliner in the ocean at any point in their career. But there's no way in hell that I'm hiring one that doesn't know how to do it.

  • by cptdondo ( 59460 ) on Sunday July 12, 2009 @11:33PM (#28672311) Journal

    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 the language. Drill the theory, the ideas, the process, and allow the expression to come forth using whatever toolkit is current.

  • by Blakey Rat ( 99501 ) on Monday July 13, 2009 @12:46AM (#28672659)

    It's really bothering me that there's so many postings here talking about sorting data. It's a freakin' solved problem. There's already a Sort() function in every language/framework under the sun.

    Why do so many programmers love to re-invent the wheel constantly? To un-solve the solved problem? To write their own instead of using the one that Javascript, or C++, or .net, or whatnot provides in a single freakin' line of code? Ugh.

    If you're constantly re-inventing the wheel, you can't move on to the really fun stuff, like the Porsche 911.

  • by servognome ( 738846 ) on Monday July 13, 2009 @04:06AM (#28673483)

    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 navigated. High level concepts may translate across languages, however, the most elegant implementation is often derived from experience.

    Different skill sets can be applied to the same problem and come up with different solutions that work. There is no perfect curriculum for a particular job, success ultimately depends on how well one adapts their toolset to meet the needs of a particular task.

All the simple programs have been written.

Working...