Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?
Education Java Programming

Ask Slashdot: "Real" Computer Scientists vs. Modern Curriculum? 637

An anonymous reader writes At work yesterday, I overheard a programmer explaining his perception of the quality of the most recent CS grads. In his opinion, CS students who primarily learn Java are inferior because they don't have to deal with memory management as they would if they used C. As a current CS student who's pursing a degree after 10 years of experience in the IT field, I have two questions for my fellow Slashdoters: "Is this a common concern with new CS grads?" and, if so, "What can I do to supplement my Java-oriented studies?"
This discussion has been archived. No new comments can be posted.

Ask Slashdot: "Real" Computer Scientists vs. Modern Curriculum?

Comments Filter:
  • Re:Not this again. (Score:5, Interesting)

    by gstoddart ( 321705 ) on Wednesday August 06, 2014 @02:24PM (#47615835) Homepage

    I've also worked with custom cpus that had 2 registers and no stack

    Luxury, we used to dream of two registers ... ;-)

    But, seriously, having been through assembly, Pascal, C, Data Structures, Compiler Design, telecomms, and some bare-metal hardware programming ... I do lament that for a lot of people it's just "oh, well, we're gonna need an infinite supply of memory" instead of actually writing compact code which doesn't just keep getting bigger.

    I once had a former co-worker who followed the mantra that optimization was a pointless exercise. He tended to include every library known to man, not give a damn about the efficiency of the library, and ended up with code which was slow but couldn't be optimized because he had no control over anything.

    I never understood how someone could continue to claim that optimization was pointless, and then write slow code. You'd think some empirical evidence to the contrary would have helped sway him.

  • by lgw ( 121541 ) on Wednesday August 06, 2014 @02:31PM (#47615895) Journal

    Java schools are a menace, but since it's nearly impossible to find grads with a "real" programming curriculum any more, I think we've just sort of given up and accepted our fate as needing to teach new college hires everything.

    If you can code - really write code beyond simple toy assignments - in any language, you're already doing above average. But if you want to be top tier, you really need to understand the crufty details of what compilers do and how they do it. While there are no lack of Java jobs, you're really missing something if you don't have a good mental model of computers at the machine language level, and if you've never done any "bit bashing" (working with unsigned ints as arrays of bits, not as numbers).

    My suggestion for getting a rounded education is to go write some C code. Write code to count the '1' bits in an unsigned int -- no googling the answer! -- and then keep brainstorming for ways to optimize that (when you can snatch the bitcount with "n%63", you will be ready to leave the temple). Write code to do other bit-bashing - reverse the bits in a word, find the base-2 log of an int, and so on. Write your own "bignum" implantation from scratch, to have a larger problem to solve with lots of corner cases and ugly cruft.

    These are toy problems, and they won't teach you all the stuff you can learn in Java about "software engineering", but they'll cover and important gap. Most importantly of all - debug through all your solutions and get comfortable with debugging. Debug through the generated object code, stepping through one instruction at a time until you understand what's happening. Debug through the object of non-optimized vs highly optimized code.

    Don't stop until you're totally comfortable with bit-bashing, with pointers and pointer-array equivalency, and so on. Once you start debugging through C code, especially the object, natural geek curiosity will serve you well to cover the gaps in a Java-only background.

  • Re:Not this again. (Score:5, Interesting)

    by Matheus ( 586080 ) on Wednesday August 06, 2014 @02:33PM (#47615933) Homepage

    Ya the OP is asking the wrong question really... Honestly a school that is cranking out pure Java monkeys is called a "Tech School". If your Bachelors isn't providing you with the breadth of experience/knowledge you need then sorry you picked the wrong school.

    I was in school during the transition.. my Intro to Programming was in "C++" (in quotes because it was taught by a C dev who barely knew any of the ++ besides basic OOP). A had a couple other classes using C++ but that quickly transitioned to Java mid-sophomore year. Of course I also learned MAL/SAL, Various hardware languages, Lisp and a number of "scripting" languages.

    The important part of all of that is that the language in question was the "tool" we used to learn what the class was teaching. The class was not teaching us the language (although plenty of off-hours support was given if you didn't know it going in). Honestly I learned WAY more about memory management in my Operating Systems class which used Java as its reference language than I ever did in the handful of C++ classes I had.

    Side Comment: As someone who's spent a majority of his professional career writing Java code, a Java programmer who doesn't think about memory management is a terrible Java dev (and yeah I know there are a LOT of terrible Java devs out there). I have had not a single project where close attention to Objects' memory utilization and freeing wasn't required. The terms used are different as are the calls you make but just about any software that just "leaves it up to the GC" will have issues.

  • by kfractal ( 107548 ) <kfractal@@@yahoo...com> on Wednesday August 06, 2014 @02:54PM (#47616155)

    egads. i know a few gods. none of them write assembly or opcodes. they may write their own microcode compiler for the processor they're designing to solve what ails them, though :)

    seriously, these are a few things i know most grad-student CS guys have never been exposed to but which should be taught:
    . source code revision control systems
    . debugging techniques (vs. broken hardware, not software)
    . platform integration (e.g. where do i store preferences!?!?, etc)
    . multi-programming in event-loop schemes
    . techniques for gaining understanding of a large body of code, relatively quickly
    . Makefiles/code build environs
    . packaging
    . testing, with large systems/moving parts.

    i do device drivers so i don't often come across people who'd rather code in java. but the rest are widely applicable, i think.

  • focus on engineering (Score:4, Interesting)

    by a2wflc ( 705508 ) on Wednesday August 06, 2014 @03:05PM (#47616263)

    The problem I've seen in CS grads over the last 10-15 years is they have little to no engineering background (even when their degree is "Computer Engineering"). Most applications are complex systems. And most CS grads don't understand systems. I've been able to teach EEs, a chem E, a civil E, an MD and a CPA (among others) how to program. And they've had no trouble implementing solid class hierarchies and robust applications. It's much harder to teach a CS grad about structural integrity, analyzing a design for weaknesses, and root cause analysis. In some cases they won't accept those are even an issue since "software is so different from physical structures". So they keep building things that pass all the tests but repeatedly fall down once they get to production.

  • by angel'o'sphere ( 80593 ) on Wednesday August 06, 2014 @03:32PM (#47616459) Journal

    Software engineering and software development is the same thing.
    For any of both you have to study computer science (except you want to proclaim yourself a self taught or otherwise taught 'engeneer'/'developer')

    Programming is not an art, like painting a wall or some tapestry is no art.

    In all human crafts we have a progression from apprentice, journeyman, craftsman, master to engineer, scientist, artist.

    Or is more like a tree than a strict line. I would not know how you can at the high end of the spectrum distinguish an artist from a scientist. And in the middle ground a master still can be a scientist and an artist. Actually everyone can claim both 'titles' for themselves. After all it is a matter what you seek. Do you want to research/seek and explore knowledge? Then you are more the scientist, do you as well like to formulate theories and 'best practices' then you are even more a scientist. Do you more research/seek expressiveness, intuitive understanding, inspiration, interconnection to other arts then you are more an artist.

    Do you need an education in arts to call yourself an artist? No!
    Do you need an education in science to call your self an scientist? No!

    Do you need an education in science to call yourself an engineer? YES!

You know, the difference between this company and the Titanic is that the Titanic had paying customers.