Slashdot Mirror


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

3 of 537 comments (clear)

  1. Re:Hobby by Mr2cents · · Score: 4, Interesting

    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.

    --
    "It's too bad that stupidity isn't painful." - Anton LaVey
  2. Communication is most important of all! by rlk · · Score: 4, Interesting

    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

  3. Re:Algorithms and Data Structures by Pseudonym · · Score: 4, Interesting

    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.

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});