Slashdot Mirror


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

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

637 comments

  1. Beards and suspenders. by Kenja · · Score: 5, Funny

    Difference is the "real" ones have beards and wear suspenders.

    --

    "Have you ever thought about just turning off the TV, sitting down with your kids, and hitting them?"
    1. Re:Beards and suspenders. by ThatsDrDangerToYou · · Score: 4, Funny

      Difference is the "real" ones have beards and wear suspenders.

      Kids these days with their "showers" and "grooming" and "social media" and whatnot... Where's the *science*?

    2. Re:Beards and suspenders. by lgw · · Score: 5, Interesting

      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.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    3. Re:Beards and suspenders. by Guy+Harris · · Score: 2

      Don't stop until you're totally comfortable ... with pointers and pointer-array equivalency ...

      ...which includes being aware that arrays in C are not just syntactic sugar around pointers.

      This includes understanding what this means:

      Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.

      (That's paragraph 3 of 6.3.2.1 "Lvalues, arrays, and function designators" in International Standard ISO/IEC 9899:1999, Second Edition, Programming languages — C.)

    4. Re:Beards and suspenders. by frank_adrian314159 · · Score: 3, Insightful

      I can't believe that you can graduate with a CS degree today without having at least one assembly language class which should show you about bit-twiddling and memory management just a bit. Not to mention an OS class that would expose you to exercises to modify a Linux kernel - written in C.

      What do they actually teach in a CS degree these days? Don't tell me... Gamification, HTML, CSS, and Javascript, right? Do they actually make you take a database or an algorithms class any more?

      --
      That is all.
    5. Re:Beards and suspenders. by Anonymous Coward · · Score: 5, Funny

      Write code to count the '1' bits in an unsigned int -- no googling the answer!

      Meh. That's easy...

      public static void main(String[] a)
      {
              int x = 0;

              for(char c : Integer.toBinaryString(847389).toCharArray())
                      if (c == '1')
                              x++;

              System.out.println(x);
      }

      -- and then keep brainstorming for ways to optimize that

      I'm sure there's already a framework for that somewhere.

    6. Re:Beards and suspenders. by mjwalshe · · Score: 2

      My first language at 14 was a year of CECIL a simplified Assembly language before they let us move onto Basic - and I was in the lower streamed class !!!!!

    7. Re:Beards and suspenders. by lgw · · Score: 0

      Well, I can only try to generalize from the students I've interviewed and worked wit, but that's not a small sample.

      There's plenty of "databases and algorithms", but that's all abstractions these days. Even back when I rode my dinosaur to college, it was only the better schools that made you write a toy OS in C, and write a C compiler, to get a CS degree. Now that stuff has mostly fallen by the wayside, and students learn "OS concepts" writing Java code.

      Most students I've talked to recently took one semester of "C programming", but just did the sorts of things in C they already knew how to do in Java (except awkwardly in C), and didn't understand the point of the class (and perhaps the class was pointless). In my generation, almost everyone wrote a bignum implementation either as a college assignment or just for fun when teaching themselves before that. Now, no one does. It's quite odd.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    8. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      This was the last year that the Compilers class was taught as an elective in my school's CS department.

      The reason given was that the subject is "too hard" and, occasionally, someone would flunk the class.

    9. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Dude what if i take my precious time ( that i spend away from my girlfriend ) and learn the higher order bits like the abstractions given to me by the framework... i can certainly spend time looking at the source code and see how they architected it. you are just operating at a different lense magnification but its the same complexity. get over yourself

    10. Re:Beards and suspenders. by PopeRatzo · · Score: 4, Funny

      Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.

      I love it when you talk dirty.

      --
      You are welcome on my lawn.
    11. Re:Beards and suspenders. by lgw · · Score: 4, Insightful

      You do know that sort of obsessive language-lawyering is exactly what turns people off to exploring C, right?

      Someone well-versed in Java won't be surprised that arrays know their own size. That's not the interesting lesson here, for someone who's never seen the difference between big- and little-endian in a debugger.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    12. Re:Beards and suspenders. by angel'o'sphere · · Score: 2, Insightful

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.
      It is interesting as a mental exercise ... but has bottom line nothing to do with serving web pages to 100,000,000 concurrent users accessing the same DB of products and hosting all the infra structure on 4 IBM mainframes that run the web front ends on 10,000 virtualized linux boxes running slackware linux (2002) and IBM Java 1.3. ...
      Sorry, how good are you actually in classic greek? It would do wonders to your comprehension of logic ... but well, you already do comprehend ... so, you agree with me: it is pointless. So are you examples, that only work straight forward in assembler. Lol, reverse the bit order of a word in C? Seriously?

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    13. Re:Beards and suspenders. by fahrbot-bot · · Score: 1
      --
      It must have been something you assimilated. . . .
    14. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Frank, get in my office NOW! I've told you to stop messing around on Slashdot while on the clock multiple times now. If you do it again YOU ARE FIRED.

    15. Re:Beards and suspenders. by Anonymous Coward · · Score: 1

      I agree wholeheartedly with this. I learned Java as a 13 year old but I never REALLY knew what Java was doing until I learned C, C++, and a little assembly. Learning those vastly improved my Java coding, since I now knew (at least to a degree) what was going on under the hood and how the virtual machine was handling my coding. I especially agree with "Don't stop until you're comfortable with ... pointers and pointer-array equivalency."

    16. Re:Beards and suspenders. by gbjbaanb · · Score: 1

      My suggestion for that rounded education is to learn some assembler. C is a wrapper around a lot, and to be fair is the minimum you can get away with for writing programs in the real world. But to truly understand what that computer is doing, you need to be exposed to the accumulator and program counter, then you'll get the epiphany that computers are incredibly, totally stupid.

      You'll also get an insight into the mass of stuff the higher level languages do for you, and when enhanced with a framework (hey, or two!) and some libraries and so on, you'll realise what tortures you're inflicting on a CPU who's main job is to add the contents of 2 memory cells together.

    17. Re:Beards and suspenders. by Frederic54 · · Score: 1

      Do not forget to write a compiler, using lex/yacc or flex/bison too, using an LL1 grammar that you wrote. This was an assignement we had to do when I was in university learning CS. Do students still learn that?

      --
      "Science will win because it works." - Stephen Hawking
    18. Re:Beards and suspenders. by lgw · · Score: 1

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.

      I can say with certainly that this is false in both cases. Both companies do "under the covers" work, e.g. the /. story currently on the front page about Facebook. There's still a job market for low-level devs, and you've got to start somewhere. Even in Java, you might need to write a decent override of Object.hashCode() for your class (and reversing the bit order is a handy tool in your toolbox for that), and the days of needing to cram just a little bit more information into a text-only field aren't behind us yet.

      While it's true that you don't need to understand how Java's Integer.bitCount() and Integer.reverse() and so on actually work in order to use them, you likely won't even be aware that they exist or what they're good for unless you've played with the bits enough to have that mental model in the first place.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    19. Re:Beards and suspenders. by mrxak · · Score: 1

      I too am surprised people are talking about CS majors as not getting a background in assembly and C or C-based languages. At my school, only ten years ago (shit, I'm getting old), assembly was a second year class, and actually the second class you took in the department if you were coming in with an APCS credit. Yeah, there was Java, but it was just the language they used to introduce new students to computer science, and all that was left behind after the first few classes, and more serious languages came very shortly after people got the basics of OO programming. By your third year classes you were expected to be able to pick up any language at any time, no problem, and you certainly had the background to do so. All the language concepts had already been learned, it was just a matter of picking up syntax or libraries as needed, in the context of whatever CS theory you were learning in a given class.

      So is Asker just at a bad school, or has computer science education really changed?

    20. Re:Beards and suspenders. by gbjbaanb · · Score: 2

      heh. When I did my computer science degree we were taught more about statistics than software.

      At the time I figured what a waste of time, and for a few years it was right... until we got to the large scale systems where job throughput matters quite a bit. Then all that old crap turned out to be useful. Who'd have thought modern, super-fast computers still have the same limitations as the ancient mainframes! (well, with a lot more users, admittedly)

    21. Re:Beards and suspenders. by Guy+Harris · · Score: 4, Insightful

      You do know that sort of obsessive language-lawyering is exactly what turns people off to exploring C, right?

      If it also turns them off from having to ask why this program

      #include <stdio.h>

      static void
      bar(char *foo)
      {
      printf("sizeof foo is %u\n", (unsigned int)sizeof foo);
      }

      int
      main(void)
      {
      char foo[1024];

      printf("sizeof foo is %u\n", (unsigned int)sizeof foo);
      bar(foo);
      return 0;
      }

      doesn't print two identical lines - or from writing code that breaks because of this - that would be for the best.

    22. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Frank, get in my office NOW! I've told you to stop messing around on Slashdot while on the clock multiple times now. If you do it again YOU ARE FIRED.

      Compiling.

    23. Re:Beards and suspenders. by Moof123 · · Score: 1

      In all seriousness, at my office the office director just yesterday made the comment that most of our programmers are EE majors, as he tends to find they make much better low level programmers than CS grads. We make test and measurement equipment, and our office does a lot of the firmware and measurement "personalities". Our equipment measures things that most CS majors wouldn't even understand in the first place, so this makes some sense.

      The result is we have a lot of gray haired engineers, a kilt wearer, but only a few with suspenders.

    24. Re:Beards and suspenders. by shaksys · · Score: 1

      I recently started developing a just for fun file archiver/compressor/encryptor in c++. My java friends think I'm insane. Especially insane when I told them I spent a whole weekend trying to reduce the file size of the compression, or trying to write an algorithm that finds the most efficient file buffer size on any given system (still on that part). That project taught me about endians and memory management. Let me ask you this, Is assembly really worth the time to learn? I have been rolling the idea aroudn the old noggin for a few weeks, but I'm just not sure it its practical knowledge these days. What can I do with assembly that I cant do in c++? Screw it, I better figure this out, no sleep till I know assembly.

    25. Re:Beards and suspenders. by Anonymous Coward · · Score: 3, Funny

      Most students I've talked to recently took one semester of "C programming", but just did the sorts of things in C they already knew how to do in Java (except awkwardly in C), and didn't understand the pointers of the class (and perhaps the class was pointerless)

      There, fixed that for you.

    26. Re:Beards and suspenders. by vbraga · · Score: 1

      What's the difference in the behavoir of the unary & op?

      --
      English is not my first language. Corrections and suggestions are welcome.
    27. Re:Beards and suspenders. by Astrobirdr · · Score: 1

      . . . but just did the sorts of things in C they already knew how to do in Java (except awkwardly in C), and didn't understand the point of the class (and perhaps the class was pointless). . . .

      But isn't the real question whether the class was actually pointER-less? ;-) :-) :-).

    28. Re:Beards and suspenders. by lgw · · Score: 1

      For someone who started with C, that can be confusing at first, but that behavior is entirely unsurprising to someone who started with Java. "Of course the size of a reference to a char is different from foo.size(), but how can a reference to a char possibly be a string?"

      It used to be common that I had to cope with C programmers struggling to write code in a language with exceptions for the first time (oh, the Pokemon code, when will it end!), but those days are over. Now it's people for whom exceptions are natural, but who would have no clue where to even start with creating a binary wire protocol or serialization format.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    29. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Parent talked about how to implement them. Not how to use them.
      Knowing when to use them is even more another topic, never though about using Integer.reverse() in hash functions, interesting!

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    30. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Barf. I've worked with a number of incredible "bit bashers" that were horrendous programmers.

      Once you get your foot in the door it really doesn't matter which language you studied because you're probably going to learn more about being a developer (technically and professionally) in your first month than you did in four years. I would focus as much attention on learning to communicate, being professional and figuring out what you really want to do before I'd sit down with a pen and paper (or chalk and cave wall) and start masturbating to boolean algebra.

      If you really know what you want to do and you're passionate and serious about it and you understand how to make people recognize this then you will get hired. And then you will continue to learn (maybe even memory management!) until you retire.

      Enjoy.

    31. Re:Beards and suspenders. by lgw · · Score: 1

      I wouldn't spend a lot of time writing stuff in assembly, unless you find it fun, but knowing enough to debug through object code is golden (especially in C++ when you're just not sure what the compiler is doing with your perfectly clear code - oh, wait, that's what the standard meant?).

      Has it mattered to you yet that a cache line on an Intel Core cpu is 32 bytes yet? Oh, the joy of cache-aligned lookup tables, the utter insanity of trying to write platform-ifdef-ed macros with #pragmas inside. : )

      --
      Socialism: a lie told by totalitarians and believed by fools.
    32. Re:Beards and suspenders. by AmiMoJo · · Score: 2

      Modern CS degrees are focused on building applications from blocks, kinda like Lego with some glue logic. Students do a lot of database stuff (SQL) and a lot of OO concept stuff. "Hard" things like calculating a CRC or efficiently sorting an array are usually covered by library functions.

      I know what the OP is getting at - some of these people don't know what a function is (they only know about methods) and see C as some kind of black magic operating system code that only gurus understand. That is by no means all of them though, and even the more clueless ones do at least understand the basics of bits and bytes to the point where they know how to google the answer if they need to.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
    33. Re:Beards and suspenders. by Darinbob · · Score: 1

      Students should at least be required to have some sort of longer term complex projects (ie, a full semester). It's not just that these are Java-only students but that the projects they've done aren't necessarily that big. Or they're big but relatively straight forward. A project that brings together all of the stuff they have learned would be very useful.

      Stuff I wish programmers knew after leaving school:
      - Algorithms and studying the properties of algorithms. Ie, can they prove that std::map is optimal and under what conditions.
      - Data structures. It doesn't matter if the fashionable languages all have dictionaries and maps built in, the students must learn this stuff.
      - Computability theory. Basically anything with "theory". It's very important to teach the student how to think about computation abstractly.
      - Compilers, or at least assembly language. Students must understand how computer languages actually work when they're running. Otherwise the language is just a magic genie.
      - Computer architecture and design. Students also must understand how computers work in the hardware. Such as knowing what's fast, what's slow, what's the bottleneck, and to understand the computation model that their program sits on top of. Memory hierarchies, locality of reference, communication busses, etc.
      - Concurrency. Ie, multiple cooperating processes (not just how to program with "threads"). That is, understand the dining philosophers problem, counting semaphores, atomicity, shared resources, and all that stuff that is very widely used everywhere in programming and is not some obscure topic.
      - Learn at LEAST three different unrelated languages, not counting assembler.

    34. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.

      Yeah, I went to school for mechanical engineering, but as soon as I got my first job as a welder, I discovered all the theoretical shit I studied was completely pointless.

      Facebook and Amazon hire lots of programmers that are carpenter- and welder-equivalents; some of whom convince themselves they are architects and engineers because they don't understand the difference.

    35. Re:Beards and suspenders. by AmiMoJo · · Score: 1

      You joke but a couple of months ago I wrote some embedded code that output a number in decimal that represented 7 bits, one for each day of the week. The desktop software, written in C#, needed to both interpret and generate new numbers. I asked the desktop guy if he had got it working and he gleefully mentioned that it was fine now he had found a way of converting it to a string, modifying it and converting it back again.

      I think what leads to this behaviour is that a lot of C# programmers don't understand casting, and because C# converts the result of all binary operations to int they can't get rid of the compiler errors. Thus they end up using conversion methods to avoid casting.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
    36. Re:Beards and suspenders. by Guy+Harris · · Score: 4, Informative

      What's the difference in the behavoir of the unary & op?

      If you've declared int foo[17], then &foo is an expression of type "pointer to array of int", not "pointer to int" or "pointer to pointer to int" or any other pointer type.

    37. Re:Beards and suspenders. by AK+Marc · · Score: 1

      When I was in CS in the early '90s, we had assembly (full year) and C (half a year) as the only required programming languages. But we learned how to build a CPU from NAND gates (and use machine code to build our own OS for our own CPU, then do it again in Assembly, and again in C).

      "Programming" at the time was theory of instructions. How to do something in the fewest instructions possible, how to do it in the fewest lines of code possible, and why the two would never meet. Most of the programming was language independent, but used a pseudo-code that assumed you knew C, and diverged from that pseudo-code enough that you needed an understanding of assembly and/or machine code.

    38. Re:Beards and suspenders. by khellendros1984 · · Score: 1

      I graduated about 7 years ago, and we certainly had to learn that then (at least lexing and parsing). We never got to code generation, but I think that's because the professor was incompetent. It was certainly on the syllabus, after all.

      --
      It is pitch black. You are likely to be eaten by a grue.
    39. Re:Beards and suspenders. by Darinbob · · Score: 1

      Here's the problem: all that old stuff never went away. People today still write operating systems, they still write compilers, they still write runtime systems, they still write databases, they still design brand new CPUs and systems. So SOMEBODY coming out of the schools has to know this stuff.

      I think people take the view that Microsoft writes the operating system but fail to understand that Microsoft needs to hire someone to do this rather than rely on the shoe-repairing gnomes. If they buy a smart phone they need to remember that someone had to write the smarts for it (not the dumbed down idiotic apps).

      When a fresh graduate says "no one needs to know how to manage memory anymore, the language does it for you" then that student is absolutely unprepared for the real world where a company has to hire someone to write a memory management system, or a company hiring for a language that doesn't do it for you, and so on. If a student says "I never optimize code because I learned that premature optimization is bad", then that student is unprepared for the real world where the job requirements are to optimize the code or to fit it into a too-small memory footprint or to make it run with a real time requirement.

      And yes, someone out there still writes bignum stuff to put in libraries used for professional applications.

      I think another part of the problem is that the schools are focused on making generic programmers for generic jobs to satisfy the demand from the corporate funders. They're basically becoming trade schools instead of universities. A decade away from being a University of Phoenix clone.

    40. Re:Beards and suspenders. by alvinrod · · Score: 2

      They still have all of that stuff, or at least did when I got my CS degree, but the problem is that there aren't a lot of jobs where you'll need to use that kind of stuff. A lot of the jobs are using Java, Python, C#, or other languages that deal with those many of the low-level things for a person. Sure there are still jobs out there that require C and a good knowledge of memory management, etc. but they're in the minority. The field of computer science has grown extensively over the last several decades and four years isn't enough time to teach all of it, especially if the school requires arts and humanities classes. We've already seen some branching with separate degrees for Computer Science, Software Engineering, Information Systems, and other computer-related fields.

      Students still take those classes, but they rarely find that they need to put the specific skills into practice. I learned a lot from my assembly class, but I'll likely never need to touch any assembly code or worry about optimizing a small piece of code. Someone else has written tools and languages that spare me the trouble. Looking at the industry today it seems like there are certainly plenty of problems, but I'm not sure if this is one of them. Would having developers skilled in all of the aspects you mentioned have solved the problems that lead to the disastrous launch of the HealthCare.gov system?

      I think the world will always need some bit-twiddlers who aren't scared to pop open the hood and reassemble the entire engine, but it needs a lot of other people who understand how to write good unit tests, develop requirements appropriately, and a long list of other skills that are necessary for the large software projects that companies and governments are undertake with growing frequency. Just because the code is extremely optimized and it doesn't have memory leaks or other weird bugs doesn't mean that it won't be a terrible pile of crap that makes its users miserable.

    41. Re:Beards and suspenders. by AmiMoJo · · Score: 1

      Seems like understanding issues like memory allocation, CPU caches, the cost of particular operations and how compilers generate and optimize code would be very useful in high performance applications.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
    42. Re:Beards and suspenders. by khellendros1984 · · Score: 1

      It's useful to know how the CPU itself functions in the sense that the less of the computer is a black box, the more you'll understand of how to manipulate it.

      Practically...well, my employer's codebase is a few dozen megabytes of C++ and Java source code, scripts in half a dozen languages, and maybe 10k of assembly for a time-critical section of code that a lot of compilers don't seem to get right if compiled from C. I've had to look at compiler-generated assembly code maybe twice in the last 6 years to diagnose some weird compiler bugs. Other than that? No, assembly hasn't been directly useful. I'd agree that bitwise manipulation *has* been though, and also an understanding of how C++ vtables work, how structs go into memory, etc.

      On a hobby level, my interests skew toward the low-level view of things (emulation, reverse engineering DOS games, etc), and of course it's been absolutely indispensable in that realm of endeavor.

      --
      It is pitch black. You are likely to be eaten by a grue.
    43. Re:Beards and suspenders. by Darinbob · · Score: 1

      Thinking abstractly helps problem solving. Whether that abstract thinking ability was exercise and strengthened through assembly language versus studying ancient Greek logic versus analyzing the structure of a novel, all are useful. The student that avoided all extended thinking practice by only taking the minimal number of classes is the one that will have the most problems here.

      Ie, finding a bug in code. I see some people who read each line on its own and declares that each line is correct and thus they can't find any bug and are stumped. Because they don't look at all the lines at once, or can't deduce the underlying model that is being used and then think about if that model is correct or not. In many programming jobs, knowing how to program is maybe 1% of the actual job.

    44. Re: Beards and suspenders. by Anonymous Coward · · Score: 0

      I know why they are different, but why don't you tell me why they are different and I'll see if you're right.

    45. Re:Beards and suspenders. by leonardluen · · Score: 1

      I think people take the view that Microsoft writes the operating system but fail to understand that Microsoft needs to hire someone to do this rather than rely on the shoe-repairing gnomes.

      given the UI for windows 8 and server 2012, those shoe-repairing gnomes might be a better choice next time...

    46. Re:Beards and suspenders. by AnontheDestroyer · · Score: 1

      More than likely they understand casting just fine, they just had to flail around with the available API's to get *something* working, and then were never given enough time before having to move onto the next thing. We've all laughed at our own technical debt .

    47. Re:Beards and suspenders. by cbhacking · · Score: 2

      The funny thing about your comment - which, despite having done everything recommended here and more* in college, I still can't help but read in the voice of a sour, grumpy old man - is that you don't need to know anything more than JavaScript to study algorithms. You don't even need that much, in fact; I'm not sure if my algorithms professor actually *knew* any programming languages; examples were written in pseudo-code and code could be turned in in any language that the TAs knew. A programming language (admittedly, JS is a poor choice here) can make it convenient to implement an algorithm, but you can describe them and analyze them without any such concrete thing.

      * x86, MIPS, ARM, and ATMega16 assembly, both NT and Linux kernel-mode code, multiple classes on algorithms and data structures, databases, C (obviously) including bit-twiddling and explicit memory management in a multi-threaded networked application, and yes I also wrote (a large part of) a networked 3-D real-time videogame. Ironically, everything I know about web dev I actually learned outside of my classes. University of Washington Seattle, in case you're curious.

      --
      There's no place I could be, since I've found Serenity...
    48. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      In Java not, nor in C#, as you have no influences on any of them, except file system caches.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    49. Re: Beards and suspenders. by Anonymous Coward · · Score: 0

      English motherfucker, DO YOU SPEAK IT?!!?

      Apologies to Sam Jackson.

    50. Re:Beards and suspenders. by AmiMoJo · · Score: 1

      I don't think you understand casting either.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
    51. Re: Beards and suspenders. by Guy+Harris · · Score: 1

      I know why they are different, but why don't you tell me why they are different and I'll see if you're right.

      They're different because, in main, foo is an array of 1024 chars, and thus has a size of 1024 bytes, whilst, in bar, foo is a pointer to int and, unless you're running on a C implementation with 1024-byte pointers (I know of none, although I do know of implementations with 2-byte, 4-byte, 8-byte, and 16-byte pointers), its size won't be 1024 bytes.

    52. Re:Beards and suspenders. by Jane+Q.+Public · · Score: 1

      I too am surprised people are talking about CS majors as not getting a background in assembly and C or C-based languages.

      I honestly think it's more a matter of schools becoming diploma mills.

      When I took x86 Assembly, the 8086 was brand new. Few if any colleges weren't even teaching C yet. We learned theory using PASCAL. Had to program Assembly on (Ewww! Octal!) PDP-11.

      While I think everybody who's a programmer should know these things (though I draw the line at PDP assembly language... what a clusterfuck), I am glad that I no longer have to deal with them on a daily basis.

      Even so: a lot of today's code makes woefully inefficient use of resources. If it weren't for the fact that 1000s of times as much in the way of resources were available to the modern programmer, the computing world would barely be crawling today.

    53. Re:Beards and suspenders. by AmiMoJo · · Score: 1

      Lots of things in OO languages cause memory allocation. Understanding that and avoiding it in certain places can have a huge impact on performance.

      --
      const int one = 65536; (Silvermoon, Texture.cs)
      SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC
    54. Re:Beards and suspenders. by Pinhedd · · Score: 1

      Imagine the following:

      int A[10];
      int* B = 0;

      Evaluating A yields the address of the first element in the array. Evaluating the address of A also yields the address of the first element in the array.

      &A == (int*)&A[0]
      &A == A
      (int*)&A[0] == A

      All three of these expressions will evaluate to true

      B = A;
      B = (int*)
      B=&A[0]

      The above three statements are all equivalent because array references behave like pointers when they are evaluated as part of an expression.

      Unlike pointers, the array reference itself is not assigned memory, only the array elements are assigned memory. The array reference is used as a handle to the first element in the array and all references are resolved at compile time. A pointer can be reseated (assigned a new value), an array cannot.

      B = A; is valid

      A = B; is not valid

      looking at this another way

      int A[10]; will consume 40 bytes of memory assuming a 4 byte integer

      int* B = malloc(sizeof(int) * 10); will consume 44 bytes of memory assuming 4 byte integers and 4 byte addresses

    55. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Not really, as memory allocation is performance wise very cheap :)

      And ... that is the point exactly, lets assume you program in PERL, Python or SmallTalk: you can't do anything about it anyway!!!

      There is no way to optimize memory allocation and/or influence runtime speed of your program by it.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    56. Re: Beards and suspenders. by Anonymous Coward · · Score: 1

      whilst, in bar, foo is a pointer to int and [...]

      Um, perfesser? It's a pointer to a char.

      It's defined right there in the code as "char foo[1024];"

      Instead of wanking over esoterica in the spec, you should probably spend time paying attention to the obvious issues.

    57. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      In the good old days the tools were so difficult that bad programmers would end up in the marketing department

    58. Re: Beards and suspenders. by Guy+Harris · · Score: 1

      whilst, in bar, foo is a pointer to int and [...]

      Um, perfesser? It's a pointer to a char.

      It's defined right there in the code as "char foo[1024];"

      Yeah, I was thinking of another example I'd been working on when I wrote the answer; sorry about the minor brainfart.

      In any case, yes, it is, indeed, a pointer to char in the code that I wrote, so just replace "int" with "char" in my answer and the answer still applies.

    59. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      If all that you are going to do is write web apps then that might be true, but if you want to do more interesting things like writing device drivers, or programming embedded systems, or just playing with a Beaglebone, Raspberry Pi or Arduino, then you most certainly do need to know all about the lower levels.

    60. Re:Beards and suspenders. by HJED · · Score: 1

      UNSW teaches C, and OS, and microprocessors (which I belive includes assembler). You do Java in second or third year.

      --
      null
    61. Re:Beards and suspenders. by HJED · · Score: 1

      He's at a bad school. As someone currently studying CS or first year course is in C, which a bit of very basic assembler thrown in on the side. Assembler is compulsory in second year, as is perl, and java.

      --
      null
    62. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      epic post bro xD
      This low level stuff is for nerds that don't even understand how to build scalable turnkey solutions using the latest ruby gem and a nosql database.

      upvoted !!!

    63. Re:Beards and suspenders. by lgw · · Score: 1

      I think people take the view that Microsoft writes the operating system but fail to understand that Microsoft needs to hire someone to do this rather than rely on the shoe-repairing gnomes.

      given the UI for windows 8 and server 2012, those shoe-repairing gnomes might be a better choice next time...

      The shoe-repairing gnome theory has remarkable predictive power!

      --
      Socialism: a lie told by totalitarians and believed by fools.
    64. Re:Beards and suspenders. by ObsessiveMathsFreak · · Score: 4, Insightful

      None of these or any other internal arcana of c have anything to do with designing algorithms or programming computers.

      --
      May the Maths Be with you!
    65. Re:Beards and suspenders. by lgw · · Score: 1

      Except that's just wrong, at least in Java. Java is sensitive to excessive object creation, and most developers eventually develop defensive habits against wasteful object creation, but you somehow have to figure out what the problem is and change how you code.

      Also, in Java the garbage collector behavior matters. The default GC until recently was just terrible for long-running services, as it was optimized for client performance. How would you even know this was your problem, or choose a better GC, without some real understanding.

      Now, sure, if you're a coder who only does scripting languages, we can only hope performance doesn't matter in the first place, but a otherwise complete lack of understanding of what's really going on in a computer will cripple your ability to diagnose/solve problems in production.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    66. Re:Beards and suspenders. by Guy+Harris · · Score: 1

      None of these or any other internal arcana of c have anything to do with designing algorithms or programming computers.

      Go tell that to the person who argued that programmer should become totally comfortable with bit-bashing, with pointers and pointer-array equivalency, and so on. "Pointer-array equivalency" (or "array-valued expression conversion to pointer-valued expression in most contexts") definitely counts as "internal arcana" of C and related languages.

    67. Re:Beards and suspenders. by lgw · · Score: 1

      Algorithms are great and all, but you won't get hired unless you can actually write code. The fresh college hires usually won't be designing complex systems until far enough into their career that they've forgotten college anyhow, but writing code happens immediately. A shocking % of graduates somehow didn't get that (if you know any non-scripting language, you're generally fine for most big employers, as they expect to teach you everything anyhow).

      But TFS was specifically asking about the stuff Java schools don't teach. You can learn a lot using Java, but the holes are important.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    68. Re:Beards and suspenders. by lgw · · Score: 1

      lgw: You don't need to know how they work in order to use them, but instead to know when to use them. E.g., reverse for hash functions.

      a'o's: No, no, you don't need to know how they work in order to use them. Oh, I never thought about reverse for hash functions.

      lgw: *headdesk*

      --
      Socialism: a lie told by totalitarians and believed by fools.
    69. Re:Beards and suspenders. by geoskd · · Score: 1

      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 want a recent grad who has a decent understanding of low level programming , you need a computer engineering student as opposed to a computer Science student. computer engineering students are taught what used to be called cs. They will come out of school with a deep understanding of everything they will need to know to handle programming for embedded devices where every byte counts. They are rare, and they are expnesive, but you get what you pay for.

      --
      I wish I had a good sig, but all the good ones are copyrighted
    70. Re:Beards and suspenders. by TapeCutter · · Score: 2

      Same here, statistics and logistics were both a large part of my late 80's CS degree. CS is a branch of maths and that's the way it was (and still is) taught at the degree level in Australia. At the time there were actually two streams in the CS course, one was software based, the other hardware based. I was in the software stream meaning I got more math under the heading of "operations research' (AKA - Logistics), meanwhile the hardware guys did extra applied subjects such as programing microcontrollers.

      Languages were taught as specific examples of technology, eg: the first 'real' language was pascal, smalltalk was used to demonstrate OO methodologies because java didn't exist and most C++ implementations were done using a confusing layer of macro's on top of vanilla C (I'm looking at you Watcom). C was taught in second year as a general purpose language for writing applications such as smalltalk and pascal, C was and to a large extent still is the "lingua franca" of the software industry. And if you were taught OO as a methodology rather than a language feature then it should also be clear to you that very example in the holy K&R is also a fine example of OO techniques, written long before the term "OO" was invented.

      Besides IIRC the rationale for creating java was said to be "portability", OO friendly syntax and garbage collection were "bells and whistles". My first thought upon seeing Java was "jazzed up" 1970's pcode, my opinion hasn't changed much since then. There's nothing wrong with the goal of portability and java does a respectable job, but there is more to writing portable code than simply picking the "right" language.

      Pointer syntax - This is what sorts out the programmers from the "script kiddies". After uni I was offered a part time job running a C lab class for second year CS students at the uni and I did it for a couple of years. In a class of ~50, less that 10 would understand them well enough to pass the "pointer" assignment. It's not that they failed to grasp the basic concept, their problem was applying that "waste of time" knowledge. :)

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    71. Re:Beards and suspenders. by GiganticLyingMouth · · Score: 1

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.

      It's funny that you mention that. I've recently had to perform some interviews (as an interviewer), so I was looking around the 'net for some tips on how to be a good interviewer. Lo and behold I came across this piece by Steve Yegge, about the kind of questions he asks as an Amazon interviewer.

      He lists "The Five Essential Questions" for phone interviews , one of which is, as you would say, 'bit bashing'. The full list is:

      1. 1. Coding. The candidate has to write some simple code, with correct syntax, in C, C++, or Java.
      2. 2. OO design. The candidate has to define basic OO concepts, and come up with classes to model a simple problem.
      3. 3. Scripting and regexes. The candidate has to describe how to find the phone numbers in 50,000 HTML pages.
      4. 4. Data structures. The candidate has to demonstrate basic knowledge of the most common data structures.
      5. 5. Bits and bytes.

      So while you might not use bit bashing after you start working for those companies, you'll never get the chance to if you don't know how.

    72. Re:Beards and suspenders. by geoskd · · Score: 1

      None of these or any other internal arcana of c have anything to do with designing algorithms or programming computers.

      I defy you to write a compiler or kernel without such knowledge. Without that compiler you're not a programmer, youre a technical writer with aspirations. Without the kernel, you dont have a computer, you have a paperweight.

      High level programmers can be replaced a dime a dozen because of languages like java. Low level programmers are sought after because they understand the arcane.

      --
      I wish I had a good sig, but all the good ones are copyrighted
    73. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      There's a whole world of coding in the embedded space, where these pearls of software engineering & programming wisdom fall apart. Seriously. And it's only going to get bigger.

      And in finance, low-latency trading requires eeking out every little bit of efficiency just to beat out the other jerks that have their servers near the exchanges.

      Pretending that Facebook or Amazon defines core coding competency is laughable.

    74. Re:Beards and suspenders. by brantondaveperson · · Score: 1

      I can't believe that you can graduate an assembly language and bit-twiddling degree these days without having at least one electronic engineering class which would show you about gate charges and semiconductor design.

      In a CS degree they teach you Computer Science, which as is often said is "as much about computers as astronomy is about telescopes".

      An OS class in CS that teaches you how to modify the Linux kernel? Good lord. What on earth for?

    75. Re:Beards and suspenders. by brantondaveperson · · Score: 1

      not sure what the compiler is doing with your perfectly clear code

      I don't disagree that being able to step through object code can be very useful, but you really should know your language well enough to know what the code you've written actually means. Normally the only reason you'd drop down to assembler is if you suspect the compiler of being broken, which can certainly happen, and in which case it's even more important to know what the code you've written actually means.

    76. Re:Beards and suspenders. by Dutch+Gun · · Score: 1

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.
      It is interesting as a mental exercise ... but has bottom line nothing to do with serving web pages to 100,000,000 concurrent users accessing the same DB of products and hosting all the infra structure on 4 IBM mainframes that run the web front ends on 10,000 virtualized linux boxes running slackware linux (2002) and IBM Java 1.3. ...
      Sorry, how good are you actually in classic greek? It would do wonders to your comprehension of logic ... but well, you already do comprehend ... so, you agree with me: it is pointless. So are you examples, that only work straight forward in assembler. Lol, reverse the bit order of a word in C? Seriously?

      Actually, it's exactly the opposite. Did you know that if a Facebook programmer can improve their back-end code efficiency by just a few percentage points inside the data centers, the company saves millions of dollars annually? It's why they wrote a PHP to C++ converter as they began to have scaling and performance issues. Likewise, do you not think that among Amazon's datacenters, they wouldn't be interested in finding a way to reduce memory consumption and CPU overhead of the hundreds of thousands of running instances that control all their internal operations?

      You're probably thinking in terms of traditional desktop or web applications, where CPU and memory resources seem practically limitless. Here are a few areas where efficiency still counts for a lot: cloud/data-center development, embedded systems ("i.e. the internet of things"), smartphones, videogames, CPU-demanding desktop applications. Interested yet? Notice that there's still a lot of cutting edge stuff in there? It turns out that when you multiply a program by a factor of hundreds, thousands, or even hundreds of thousands inside a data center, small gains in efficiency turn into huge power savings, and that means big money savings. Likewise, there are some applications where you can simply never be too fast or efficiently. Simulations are one example. Videogames are another.

      Languages like Objective-C, C and C++ still have a place because high-performance computing is still important both in small and constrained environments, OS level systems programming, and large-scale datacenter deployments and applications. And bit manipulation and other low-level operations are a real part of those still very relevant languages.

      You might laugh at the notion of reversing the bit order of a word in C, but it's no joke that in my job (videogame programming), I still occasionally need to know how to do bitwise operations - not often, but occasionally. Just because you haven't used a skill in your own particular field of programming doesn't necessarily mean it's not in demand outside your particular domain.

      --
      Irony: Agile development has too much intertia to be abandoned now.
    77. Re:Beards and suspenders. by lgw · · Score: 1

      Very few people understand the entire C++ standard well, though many people understand most of it. C++ probably has more bizarre dark corners than any other language.

      Or you may just be wondering why if (0 == foo & MASK) doesn't do what you expected. I think that one burns everyone sooner or later.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    78. Re:Beards and suspenders. by Dutch+Gun · · Score: 1

      If you're programming in Perl, Python, SmallTalk, or some other high level or managed or interpreted language, then performance probably isn't your overriding concern. That's fine. There's a reason why we have many different programming languages.

      As it turns out, in the context of a high-performance, real-time simulation, allocation is actually pretty expensive. Nearly every modern AAA game or game engine does, in fact, actively manage and optimize their memory allocations, either at the allocator or object level. The global system allocator is a general purpose allocator that can't afford to make intelligent tradeoffs or specific optimizations that you can do with more domain knowledge.

      There's a reason C++ is the go-to language of the videogame industry. It's because (among many other reasons) in that language we can, in fact, create our own allocators and optimize them for our particular needs. For instance, in the code I'm working on, each major subsystem of the engine has it's own allocator which uses pools of pre-allocated blocks for improved small-allocation efficiency. Splitting up the allocations by subsystem helps in tracking memory use as well as reducing contention on a global allocator lock, since games have to be extremely thread-efficient as well with all the real-time demands placed on them.

      This would be ridiculous overkill for most applications, which are far less demanding of the hardware. But don't forget that context is important before universally declaring that a particular operation is "very cheap".

      --
      Irony: Agile development has too much intertia to be abandoned now.
    79. Re:Beards and suspenders. by Bite+The+Pillow · · Score: 1

      Can we make this a little bit more generic?

      You can't 100,000,000 users on 4 mainframes if you completely disregard how Java works. You can't make the database performant if you don't understand basic concepts like primary and foreign keys, and more than likely knowing why knowing where you database is stored may be important.

      They could teach mainframe, or database optimization, or very advanced ancient Java. But the common lesson that needs to be taught is that there is a very low level that you have to keep in mind. CPU and memory usage are in your control, if you need it. And being aware that this is even possible is a very generic lesson.

      Do we need to teach everyone Java 1.3? Or can we standardize on one low-level concept from which people can generalize? Can we illustrate that things can be done faster, better, more efficiently? And that at some point a trade-off needs to be made between memory and speed?

      The best lesson I learned was that interpreted languages can be faster than assembly.

      I'll say that again, interpreted languages can be faster than straight up assembly. Already know how?

      If the program opcodes are so small that the opcodes and interpreter for the whole program exist entirely on the L1 cache (which was the only on-die cache at the time), and the equivalent program has to hit off-cache, your interpreted code will be faster.

      It has no bearing on reality, because I will never have to produce something that runs that much faster than assembly. But at the same time, I'm very sensitive to what my magically powerful language does behind the scenes to accomplish what I ask of it.

      So which examples do you propose to allow a generic education that teaches that you have options, and can perform faster? Be warned: your response cannot allow students to think "that particular query is slow", or "Java just does that slowly".

    80. Re:Beards and suspenders. by mzellers · · Score: 1

      And how many allocations does that do? You should be able to do that operation without creating any new objects at all. In C, the worst simple solution I can think of would loop no more than the number of bits in a word (i.e. 32 or 64). I'm pretty sure there are some more advanced bit-twiddle tricks that can bring it down substantially but I haven't done that kind of bit-bashing in years.

    81. Re:Beards and suspenders. by Zmobie · · Score: 1

      My assembly was rolled into our computer organizations course. We ended up doing some fairly simple assembly problems, like creating a binary tree class in pure assembly that could handle variable memory sized objects. We then had to design a simple processor that it would run on. We got the option of doing multi phase or single phase, I ended up doing single for the project and multi later just to understand more.

      Algorithms was absolutely required for my program too and we had a lot of the higher level course where they didn't teach you a database language per se (except I guess prolog half counted in my programming languages course), but you ended up having to learn one to complete the work and study in the class.

      Now granted I graduated in 2011 (still somewhat recent) and I don't know how much the programs have changed now (other than graduate programs because I still want my MS), but honestly if a person is going to be a decent software engineer/developer or computer scientist the curriculum is only building the foundation. I did tons of stuff outside my classes when I was in school. If someone isn't curious enough to do research and such on their own about the subject, they are probably going to do poorly after college anyway.

      I learned a large chunk of databases, web development, language integration, general IT and computer modeling, etc. because I just wanted a deeper understanding of what I was doing. My bit-wise math is probably not near as good as people that have worked in C for years, but I can handle it with some time and refresher documentation. In my opinion that is the more valuable thing, can the person learn to adapt their knowledge and take on new things?

    82. Re:Beards and suspenders. by Zmobie · · Score: 1

      We had the same thing and I was in college less than five years ago. Most of the instructors for junior level and higher classes told people I really don't care what language you write in, you just better understand the concepts we are teaching. Most people I knew, wrote in C++ because java was just annoying half the time. Some classes required different languages, but none of them were Java (literally the only two courses that required Java were CS one and two for the beginner students). I had php, C, C++, Prolog, Haskell, MIPS assembly, and then a little Java thrown in to compare as an example OO class (except when I took mobile development which was all Android in, duh, Java, but that was learning more about the platform and ecosystem really, nothing Java specific).

    83. Re:Beards and suspenders. by drstevep · · Score: 1

      Eww Octal??? My gosh, the PDP-11 is the purest of the pure! It is the excuse, the reason for Octal to exist!

      Kiddies who haven't experienced the PDP-11, go find a primer on it. Learn its assembly code. Learn its addressing. Learn the octal form of its instructions. And you will be enlightened.

    84. Re:Beards and suspenders. by dbIII · · Score: 1

      I did assembly in high school in the 1980s FFS and now you guys are not even touching it in a degree?

    85. Re:Beards and suspenders. by ultranova · · Score: 1

      You do know that sort of obsessive language-lawyering is exactly what turns people off to exploring C, right?

      Obsessive attention to details is the essence of programming in a non-managed language. People are simply drawing the completely correct conclusion that the gain is not worth the pain in most cases.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    86. Re:Beards and suspenders. by Guy+Harris · · Score: 2

      Eww Octal??? My gosh, the PDP-11 is the purest of the pure! It is the excuse, the reason for Octal to exist!

      No, octal was a much better fit for machines such as the PDP-6/PDP-10, PDP-5/PDP-8, and other multiple-of-6-bits-word-size machines. It worked well for PDP-11 instructions, not so well for PDP-11 data words if you cared about the individual bytes in the word.

    87. Re:Beards and suspenders. by russotto · · Score: 1

      The advanced bit-twiddle trick for counting one bits in an unsigned int is to realize it's such a useful operation that the hardware (on newer x86 CPUs, anyway) has an instruction for it, so you ought to use it.

    88. Re:Beards and suspenders. by Euler · · Score: 1

      Things that require assembly:
      - special instructions that the compiler didn't support, but that need to be manipulated
      - extensions to the instruction set like DSP, SIMD, etc. Compilers generally won't automatically make use of these. If you are lucky, your compiler has macros that basically translate to asm instructions.
      - math operations not supported effectively in the abstract concepts of your programming language (overflow, carry, etc.)
      - access to data types or structures that your language cannot support effectively
      - work-around compiler bugs or limitations
      - access to special memory areas that the compiler doesn't understand
      - code that just won't run fast enough or use resources efficiently from the compiler

      Granted, C++ on x86 or ARM probably has enough maturity to avoid these issues. But these are daily occurrences on embedded platforms.

    89. Re:Beards and suspenders. by rrohbeck · · Score: 1

      Meh. No BitCountFactory class?

    90. Re: Beards and suspenders. by Anonymous Coward · · Score: 0

      It's actually defined in the definition of bar(char *foo) as a pointer to a char. Bar does NOT have knowledge that a char array was passed to the function.

      The size of any pointer is platform specific; equal to the size of uintptr_t. 32-bit apps will return 4, 64-bit apps will return 8, etc.

    91. Re: Beards and suspenders. by ghighi · · Score: 1

      My main experience as a Dev is Java and most recently C#. I'm not even a Dev anymore, merely a low end sysadmin. And yet the answer you seeked for that question I find obvious. Stop pretending you are smarter because you can find niches of problems where you happen to have relevant answers. Modern developer do not deal with memory allocation anymore, but they work at a level of abstraction with design paradigms which are every bit as complex to grasp than hardware architecture. And when needs be, they are more than capable of fixing problems with endianness or memory allocation. Looks to me that the good ones are every bit as good as the old ones...

    92. Re: Beards and suspenders. by Guy+Harris · · Score: 1

      Modern developer do not deal with memory allocation anymore, but they work at a level of abstraction with design paradigms which are every bit as complex to grasp than hardware architecture.

      I'm not the person who said that "Java schools are a menace" and that "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)." - and then spoke of "pointer-array equvalency" as if it were a fundamental concept of how computers work at the low level rather than as an over-simplified description of a quirk of C and its derivatives (they're not equivalent - array-valued expressions evaluate as a pointer to the first element in the array in some, but not all, contexts),

    93. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      I, for one, certainly hope people are turned off by all of C's gotchas.

      If Perl is a write-only language, then C certainly is a read-only language. Decent code is extremely easy to read, yet surprisingly difficult to write.

    94. Re:Beards and suspenders. by secretagentmoof · · Score: 1

      Koine Greek or Attic Greek? They're not the same, you know.

    95. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      I graduated in 2006 (so not too recently, but not too long ago), and did the bulk of my courses in C and C++ (three "intro" the first year, one graphics with opengl, and two "operating systems"). One AI course in Java, one languages course in Scheme, one assembly course in 8086, one database course (no actual programming), and one on html that was like a really bad joke. I had a bio-engineering course that was really interesting (mix of CS and biology majors who would pair up and work on DNA-related problems) and allowed a choice of language. The rest were theory, math, physics, and general ed stuff that required no actual programming assignments.

      I could have easily done without the database course, as most relational database stuff (both internally and externally) is fairly intuitive if you already understand "bit-twiddling and memory management".

    96. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      "Sorry, how good are you actually in classic greek?"

      Que?
      How many human languages require classic greek to be built in the first place?
      In most computer environments you get to use the 'modern' stuff because there is a whole substrate built out of 'ancient' languages that creates the correct context.
      At some point any language must touch the hardware to do anything. That point is where C (and assembly) lives.

      What i'm seriously worried about is what happens if noone understands this substrate anymore. We would be very much screwed if noone did C anymore.

    97. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      In a CS degree you'll be taught set theory, formal logic, graph theory, complexity theory, concepts such as the problem classes P and NP including how to prove a problem belongs in a class (or is computable at all), numerical methods of solving functions, and a few optional areas such as Computer vision techniques or natural language processing.

      Computer science isn't about playing with OS's or writing really fiddly code, it's about mathematics and how it can relate to a theoretical computing device.

    98. Re:Beards and suspenders. by gbjbaanb · · Score: 1

      Indeed. Apart from the maths, the software side of the course used different languages for different aspects.

      For example, I was taught threading using Concurrent Euclid. We use Prolog, Simula, assembler and other esoteric languages for 1 term at a time.

      The cynic in me thinks a lot of the move to Java as a single language to teach was partly driven by the idea that graduates should have learned things immediately useful to industry, who was touting Java at the time.

    99. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      I graduated last year with a degree in Computer Science.

      I've taken courses in MIPS and x86 assembly, VHDL, C, C++, Scheme, and ML (in addition to Java). While I agree that a lot of schools are moving away from a more standard curriculum, it is definitely not all of them.

    100. Re:Beards and suspenders. by mog007 · · Score: 1

      I could possibly see a software engineering course focus on a library for sorting functionality.

      But I don't believe that a computer science course wouldn't address algorithm efficiency.

    101. Re:Beards and suspenders. by kilodelta · · Score: 1

      Well I have a van dyke but no suspenders. I try to keep it as casual as I can.

      That being said the modern languages like Java do much better at memory management than C or C++ ever did. So it's all academic - if you can program you can program. The key thing to look for in a good programmer is a problem solver. That problem solver has the ability to see a huge problem, break it down into functional groups and then code the hell out of it.

    102. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      I am a senior at University of South Florida getting a CS degree, and while I am no fan of the curriculum it is better than you're making it out to be. In fact I wish it was less low level stuff and more modern Java. Let me share my experience.

      Operating Systems and Analysis of Algorithms are both required classes. We have to take four semesters of low level hardware stuff where we learn all about how our high level code gets converted into the 1's and 0's the cpu sees, which I felt was actually an incredible waste of time. I had to learn the entire MIPS datapath, converting blocks of C to MIPS, how to construct FP adders, registers, and other components from logic gates...

      They don't offer a class in game design, but they should. When you make a game you have to touch so many different areas of software engineering that you would never get into writing these toy programs for algorithms; a proper GUI adhering to an architectural pattern, real time computing, mobile APIs... I am an app developer for a local company and I don't use anything I picked up from school but I do use tons of skills I picked up learning to make games for Android.

      HTML, CSS, and Javascript are not classes you take as a CS major, you can but they wouldn't count. And again these are very useful languages that you need if you wanna be a "full stack" developer. At work I use phonegap, a cross platform development framework that uses HTML/CSS/JS as it's base, extensively. And the RESTful api the web apps interact with is Java.

      Java is not the only language with garbage collection. The other big one that you can actually still get paid to develop in C# also uses gc.(slight exaggeration)

      So at least as far as what I do, which I feel is pretty common, low level C and memory management do not come into the picture at all. What I really need to learn are frameworks. The webapp and api I am currently writing uses Spring, Phonegap, JQuery Mobile, Handlebars, GSON, POI...

      To me courses in any specific language should be replaced with learning a framework to carry out a specific task. I know a lot of old school programmers like to compare their tech dicks, talking about how all programming should be done in C with memory management code hand written for each data structure. But even an expert programmer using C cannot put out as much marketable code as a moderate programmer using Java and some frameworks. Frameworks are the basis of modern programming.

    103. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      There are loads of programmers who think their knowledge of C makes them super-1337 bare-metal h4x0rz but don't actually know C as well as they think. The solution is to point out that they don't know C all that well.

    104. Re:Beards and suspenders. by epee1221 · · Score: 1

      I defy you to write a compiler or kernel without such knowledge.

      I had such knowledge when I first wrote a compiler, but I don't recall actually using it anywhere. What did I miss?

      --
      "The use-mention distinction" is not "enforced here."
    105. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      creating a binary tree class in pure assembly
      wut

    106. Re:Beards and suspenders. by werepants · · Score: 1

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.

      You assume all programmers would want to work for Facebook or Amazon. I have no interest in that sort of thing, and it turns out that bit-bashing has been pretty damn useful in the areas I have programmed in (robotics, electronics testing, data analysis).

    107. Re:Beards and suspenders. by epee1221 · · Score: 1

      Not really, as memory allocation is performance wise very cheap :)

      Unless your VM can't allocate things to two parallel tasks simultaneously, causing allocation to effectively sequentialize your code.

      --
      "The use-mention distinction" is not "enforced here."
    108. Re:Beards and suspenders. by Jane+Q.+Public · · Score: 1

      No, octal was a much better fit for machines such as the PDP-6/PDP-10, PDP-5/PDP-8, and other multiple-of-6-bits-word-size machines. It worked well for PDP-11 instructions, not so well for PDP-11 data words if you cared about the individual bytes in the word.

      What I meant was that it didn't work well for the students. Constantly having to flip haves of words around in your code had zero instructional value and just added to the difficulty. (Zero instructional value, that is, unless you feel that learning to deal with needless frustration is a valuable lesson for a CS student.)

    109. Re:Beards and suspenders. by Jane+Q.+Public · · Score: 1

      And you will be enlightened.

      Don't listen, kiddies. You will be horrified. Having to manually flip your word halves in your code all the time is an enormous waste of time and energy. Computers were supposed to do that kind of idiotic make-work FOR people, not the other way around.

    110. Re:Beards and suspenders. by Marxist+Hacker+42 · · Score: 1

      I'd add get in at least ONE round of some sort of Assembly or Machine code. Even if it's just Apple IIe microassembler on a virtual copy of Candy Apple on your phone.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    111. Re:Beards and suspenders. by rochrist · · Score: 1

      The go get a copy of SIMH and learn the joys of bringing up RSX11M on it.

    112. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Java isn't the problem. You can use use Java to write a compiler which takes your own grammar, produces your own abstract syntax tree, does your own optimisations and outputs to java byte code for compatibility. Or it could output to binary or assembly or WTF you want. Your skill and imagination are the only obstacles. Indeed, we used to teach new grads to write compilers using java because it gave them the concepts without them wasting a crap load of time on debugging memory leaks.

      I can't stand all this anti-Java crap. The argument seems to be teaching kids memory management is good for their souls. Well tough. It's done poorly by most programmers (whatever they thought of their skills), was always a source of bugs and it's a good thing we don't have to worry about it. The amount of windows programs that crashed because of memory leaks was immense. Those were the bad old days people, why hark back?? The programming world has changed. I can't say I like all the changes since my days as a hacker on Amiga and Archimedes machines but most of the changes are for the better and we're much more productive. We have Java and DSL's to thank for that. We should be thankful, not whingy whiny nostalgia infected contrarians.

    113. Re:Beards and suspenders. by Marxist+Hacker+42 · · Score: 1

      Did you go to Oregon Institute of Technology, or were other schools still using the PDP-11 in the late 1980s?

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    114. Re:Beards and suspenders. by Marxist+Hacker+42 · · Score: 1

      Because it should be (0==foo&&mask)?

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    115. Re:Beards and suspenders. by Marxist+Hacker+42 · · Score: 1

      The best thing Assembler ever taught me is why i++ is faster than i+=1

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    116. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Don't jump to conclusions, especially when your facts are far off.
      Define 'recently' regarding GC e.g. ... ten years ago is not recently by my definition.

      The rest of your post is pretty wrong, too, or at least a matter of taste. I program 99% of my time in high performance Java, FYI.

      Performance always matters. But the bottlenecks are not what the people here claim, and to the very very least it is definitely not lack of knowledge of C or Assembler or Object creation.

      Surprisingly network access and disk access (bottom line: serialization) is still the bottleneck, and certainly not GC (hint: read the JVM 'manual' regarding customizing and parametrizing the GC)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    117. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Seems you miss understood.
      Why does fiddling with bits help me in PHP? Because I then can write a PHP to C++ converter?
      Sorry, C++ helps to tackle performance issues, however you do it.
      But our parent suggested that knowing e.g. how to reverse the bits in a word in C or Assembler makes you a better Java or PHP programmer. I doubt that. And I pointed out that a typical web application is very unlikely to have any operations on bits at all.

      Ofc it is interesting for video programming, ofc it is interesting, important or even mandatory for many other fields. But it does not improve your Java skills unless you reach the point where you actually have to do bit fiddling in Java and you realize: oh, I don't know how to do it.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    118. Re:Beards and suspenders. by lgw · · Score: 1

      I think another part of the problem is that the schools are focused on making generic programmers for generic jobs to satisfy the demand from the corporate funders

      That would be my dream utopia! Imagine, coming out of college with actual job offers. 30 years ago that was the norm for engineers from good schools, but is almost unheard of for kids today.

      But the problems you describe come from the reverse of this: students are taught the academic abstractions, not the grungy details of how shit actually gets done. Were colleges more like trade schools, they'd be focusing specifically on stuff like debugging and memory allocation and optimization because that's useful to employers, instead of classes that stick to stuff that's easy to teach so that everyone gets a degree (which is U of Phoenix's goal).

      --
      Socialism: a lie told by totalitarians and believed by fools.
    119. Re:Beards and suspenders. by lgw · · Score: 1

      (Ewww! Octal!)

      The most clever solution to counting the 1 bits in a word (and once again fastest, though it wasn't for a decade or so) is best understood using octal. :) You must grok the "n%63" in fullness to see the light.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    120. Re:Beards and suspenders. by TemporalBeing · · Score: 1

      And as soon as you work for Facebook or Amazon, you will never have any use for 'bit bashing' again.

      False. Having interviewed with Amazon they very well do things that may bit bash and are concerned with that level of performance even from their Java devs. (I typically don't do Java, which was the show stopper from my end.)

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    121. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Well, I don't want to argue about your points as you seem have to got a few of mine wrong, but that is not important.

      So coming to your question at the end:
      Actually I would invent a new language, Pascal like and provide a JVM and a .Net and perhaps an LLVM implementation. I come back later at the end to this.

      Why?
      Imho one of the main problems in our days programming is: the languages are completely unsuited to teach programming and programming concepts.
      One reason is the habit to borrow keywords and syntax from other languages. In C we had the keyword static, with one single precise meaning. In C++ we needed a new keyword for 'static' functions and 'static' variables of a class (which is something different than a static function/variable outside of a class). For understandable but in hind side regrettable reasons Bjarne decided not to introduce new more appropriated keywords, but to 'extend' the meaning of existing ones (most recently auto to indicate the compiler should use type interference for a variable declaration). Unfortunately both Java and C# and similar languages abuse now the static keyword for even more absurd reasons (while they in fact should have abolished it and invented a new proper keyword). What exactly is a static class in Java? 'static' literally means 'fixed', 'unchanging', 'not moving', perhaps 'frozen'. So a novice programmer stumbles over a nested static class in Java and says: hae?
      Already 'public static void main(...)' requires quite a lot of knowledge ... and it certainly does not mean the 'function' is fixed/unmoving/frozen ...

      Other problems with keywords in various languages: def, val, var, fun, func, DIM ... 'def' is abused in Groovy and I believe Python. Abused because it def ines a method in groovy (which is correct usage) and declares a variable in Groovy (which is an incorrect usage). How do you teach one the difference between a declaration and a definition? If many languages (or language inventors) have no clue about the difference?
      Sure, fun and func is easy to get if you know about functions. However, Groovy uses def to introduce functions/methods, Python, too, I believe. (How one at MS was so brain dead to use DIM as keyword to declare variables is in fact beyond me, and please refrain from trying to tell me what DIM means. I started programming something like 1984 with Apple ][ basic ... I know what DIM really means)

      So, what are the core concepts of programming languages?
      On the data side: build in types, user defined types, constants, variables, perhaps parameters.

      On the code side:
      Control structures, statements, expressions (some languages don't distinguish that, or more precisely: only use expressions), functions, procedures, classes, nesting (Yes in C++ you can declare a nested class inside of a function/member function., a neat trick to mimic Pascal style nested functions/procedures)
      Another real problem with Java and C# are the wrong defaults for visibility. That is rather simple and elegantly solved in C++ ...
      Luckily Groovy took the right approach, but well, Groovy was until recently rather 'dynamic' typed, which is not my thing as I make to many typos.

      So back to 'how to teach programming' and why to invent a new teaching language.
      Actually Pascal was an excellent language, especially UCSD Pascal. It was much more suited to precisely define external data structures (like a the layout of directories on a disk) than C is. (Packed records, packed arrays, variant records etc.) (And again: please refrain from explaining me how to do that in C, I know how to do it! And I know how miserable C fails to be portable in such corner cases)

      Languages should make it easy to express what a programmer means. Teaching should be easy to allow to express the core concepts.
      That are defining of simple types, like enums or records or more complex types lik

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    122. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Why are you so retarded to claim/believe that I would assume that?

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    123. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      You have the same problem in native applications.
      But interesting hint/idea, I never checked how a Java VM actually is doing that.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    124. Re:Beards and suspenders. by Darinbob · · Score: 1

      This depends upon what you think colleges are for. If there are merely suppliers into the labor pool, then head to a tech school. However most colleges and universities were founded with a higher goal in mind, the education of their students, creating a better educated and informed citizenry, and teaching the students how to learn and teach themselves. Job training is a secondary goal of colleges.

      I see too many people in the job pool who only know the grungy deails of how one job gets done, which makes them useless if the job I want done doesn't correspond to the minimalist details they know. I want job applicants who know the academic abstractions because they make better longer term employees. I'm sick of interviewees who say "sorry, I didn't learn that in school", and am astounded when an actual employee gives the same excuse.

    125. Re:Beards and suspenders. by cwsumner · · Score: 1

      Difference is the "real" ones have beards and wear suspenders.

      I have never worn suspenders. And my beard is trimmed reasonably short.
      But it was never true that kids right out of college could do this...

      If the colleges are only teaching one computer languge, that is a problem. To get stuck with just one tool, is like a carpenter with only the preverbial hammer.

      Study at least one other language, no matter what it is. (Actually, that applies to spoken language too.)
      I recommend "Fourth", for one that will really strech your mind! But just get something that is more than the one.

      The purpose of school is not to get a piece of paper, it is to pick the teacher's minds for everything that you can get. There is no rule that you can't do anything extra.

    126. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      As other people pointed out: who wants to work for facebook?

      And: do you really assume I don't know?

      And, regarding that interviewer ... sorry: no one knows out of his mind how to regexp an HTML document ... depending on language to use it is even more complex. An interview question like this is utter nonsense.

      Or how exactly do you again skip text inside of a tag, like attribute definitions, but match between an opening and a closing tag? If someone is using regexps to search for text inside of an HTML/XML document, he is a retard. But perhaps that is the expected answer?

      And why the heck should it be relevant for Amazon to regexp HTML pages?

      That interview question list is completely made up. (You are asked in a phone interview to WRITE error free CODE, correct syntax? ROFL)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    127. Re:Beards and suspenders. by cwsumner · · Score: 1

      Not really, as memory allocation is performance wise very cheap :) ...

      Maybe it would be good to know why calling a procedure or method recursivly an unknown number of times it a Bad Thing ? !! 8-)

    128. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      They might habe it in the interviews, that does not mean coders actually code that way :) And certainly not every coder, perhaps 1%?

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    129. Re:Beards and suspenders. by lgw · · Score: 1

      #define RED_FLAG 0x4
      #define GREEN_FLAG 0x2
      #define BLUE_FLAG 0x1
      #define ANY_FLAG 0x7

      // in some function
        if (0 == foo & ANY_FLAG) return;

      This looks like it testing whether any flag is set, so as to return early if there's no work to do. But it's not, instead it's kicking you right in the debugger.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    130. Re:Beards and suspenders. by lgw · · Score: 1

      This says it much better than I could. Most students carrying 100k in debt, most parents sending kids to school, most everyone really wants a job from college, not the "higher goal". Not that the "higher goal" is bad or wrong, but it's not what's being sold by universities. I think you'd get few takers at the price for what you see as the primary goal, but if everyone were honest I think it would all sort itself out, and most people would go to trade schools, and that would be best for everyone.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    131. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Depends if it is a tail recursive procedure or not, doesn't it?
      And when we talk about memory allocation, regardless how often you call it: it costs nothing.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    132. Re:Beards and suspenders. by epee1221 · · Score: 1

      In unmanaged languages, it's generally easier to know/control when allocation happens

      --
      "The use-mention distinction" is not "enforced here."
    133. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      errrr ...

      http://bsd.slashdot.org/story/14/08/06/1731218/facebook-seeks-devs-to-make-linux-network-stack-as-good-as-freebsds

    134. Re:Beards and suspenders. by khellendros1984 · · Score: 1

      And why ++i is faster than i++?

      --
      It is pitch black. You are likely to be eaten by a grue.
    135. Re:Beards and suspenders. by GiganticLyingMouth · · Score: 1

      As other people pointed out: who wants to work for facebook?

      I was citing your post. You're the one who used them as an exemplar. Why are you asking me this?

      And: do you really assume I don't know?

      I have no idea what this question is referencing

      And, regarding that interviewer ... sorry: no one knows out of his mind how to regexp an HTML document ... depending on language to use it is even more complex. An interview question like this is utter nonsense.

      Or how exactly do you again skip text inside of a tag, like attribute definitions, but match between an opening and a closing tag? If someone is using regexps to search for text inside of an HTML/XML document, he is a retard. But perhaps that is the expected answer?

      And why the heck should it be relevant for Amazon to regexp HTML pages?

      That interview question list is completely made up. (You are asked in a phone interview to WRITE error free CODE, correct syntax? ROFL)

      I provided no judgment or commentary about whether I agreed or not with the interview procedure or questions. My point was merely that being able to operate on the bit-level is still useful, mandatory in fact, to work at the places you cite as not needing them. YMMV

    136. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Ofc it is. But knowing how it works, does not help you in a managed environment, as you have mo control about it there.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    137. Re: Beards and suspenders. by Anonymous Coward · · Score: 0

      Isn't that lumberjacks?

      "I cut down trees, I wear high heels, suspenders and a bra..."

    138. Re:Beards and suspenders. by TemporalBeing · · Score: 1

      They might habe it in the interviews, that does not mean coders actually code that way :) And certainly not every coder, perhaps 1%?

      From the methodology of the interview, I can certainly say they are doing those kinds of things in reality.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    139. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Then go three posts back.
      My main statement was: if you know how to fiddle with bits, that won't be helpful to work at e.g. Facebook or Amazon.
      You won't ever need that knowledge.
      I neither implied, that I don't know how to fiddle with bits, nor did imply I want to work for Facebook or Amazon.

      The question if you need that skills to work there is still open to dispute, I say: no, you don't. Oh, the question if you need to be able to answer interview questions related to it: perhaps, but then the interviewers are stupid.

      And the meta question: if you can answer all questions regarding bit manipulations, are you actually indeed able to work at that place? Plenty of people just memorize bullshit and have no clue how to apply the knowledge.

      As I said before. that 5 points list for a phone interview (i guess you don't get why I emphasized 'phone') is completely made up.

      Everything about hashing, public/private key encryption/communication, eventual consistency, parallel computing ... that is usually asked in a phone interview.

      Google e.g has a simple question: "You gave your new phone number to a dear friend (some days ago). But your friend did not call you, nor did you reach him, you wonder if he has the right number. Now a guy you know, but with whom you don't want to share your phone number, will meet your friend on a party. You ask that guy to confirm your friend got the correct phone number. How do you accomplish that (providing your mutual acquaintance agrees to perform the task)? To clarify, that acquaintance still should _not_ know your number, after he performed his task!

      This is a question asked in a phone interview ... I can sent you 100 more ... Well, I can. As I'm not obliged to 'NDAs' ... but if people like you posting such nonsense questions knew one thing: before you get interviewed you usually have to agree or even sign to an NDA not to disclose the interview questions. Funnily my friends keep whining and tell me interview questions they failed ... well, usually five minutes after hanging up they realize how easy the answer was.

      And most interesting: the interviewers have no clue about the topic. They simply write down your answers with pencil and paper. So trying to 'cheat' you through with nice wording won't work.Your interview is evaluated later by 'experts'.

      That is for Google ... I assume FB and Amazon etc. proceed similar.

      What does that mean? If one claims "I'm an interviewer for Amazon, and I ask 'what is a bit' and 90% of the people fail ... I have to reject them ... bla bla bla" then it is 101% nonsense. No interviewer for a fortune 500 company in his right mind would post interviewing practices on a site like /. or FB or Digg or Register. Sorry ... he can kiss his ass right away.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    140. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      And from my 30 years of coding experience: I can tell you, they don't.
      Certainly they may have interview questions asking that stuff, that does not imply they use it in actual code!
      I actually don't remember when the last time was I needed to use a bit manipulation operation. Must be as long ago when I implemented my last bit set class ... in C++ ... 15 years + ago. I'm pretty sure now either STL or Boost or both have various bit set classes.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    141. Re:Beards and suspenders. by romons · · Score: 1

      the use of sizeof on pointers isn't the worst, but it is near the worst. The worst is the fact that bitwise operators don't do what you expect in boolean expressions, because their precedence is incorrectly specified, or that '=' is allowed in any expression (including those you may have wished to type '==' in)

      I'm happy I use python or matlab for everything these days. Using "C" was just getting annoying, living in terror of forgetting to initialize a pointer, having it then pick up crap from the stack, use it to silently corrupt memory, and then attack me several billion instructions later.

      There are entire teams of people dedicated to finding things like that at cisco, where the collision of 30 million lines of C code with newly minted java programmers invariably produces hundreds of these untraceable errors per year. No wonder nobody wants to install the newer release trains anymore.

      --
      Go to Heaven for the climate, Hell for the company -- Mark Twain
    142. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Actually, you jest, but the worst, absolutely worst code is written by the smartest people. I had access to the source of the original yacc at a job in the 80s. Completely and totally unreadable. Same goes for the unix kernel. I later had access to the source code for the neutrino kernel. Written by physicists. You read a function, read it again, read it again, and then give up and hope that its name implies its meaning.

      The easiest code to understand, and thus to maintain, is mostly inefficient and boring. It does what it needs to do without trying to show off. Optimizing is something you do after the fact, when everything is working, and you know where the bottlenecks are.

    143. Re: Beards and suspenders. by Anonymous Coward · · Score: 0

      What you're describing isn't "computer science". In fact, the concept and field existed long before kernels enhanced paperweights.

    144. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      During my current 4 year run studying CS, I've learned scheme in my introductory programming class, C in introduction to algorithms and data structures, assembly (although not x86 assembly) in computer architectures, lisp in advanced programming (and how to implement a lisp evaluator on top of lisp) and artificial intelligence, c++ in compilers (let's include flex and yacc here to), java in object oriented programming and software engineering, c# in middleware for distributed internet applications and prolog in logic programming. I've also had courses in electronics, signal processing, theory of computation, analysis of algorithms, discrete mathematics, operating systems where we had to deal with file systems, schedulers, etc..., networking, including routing protocols, database systems and computer graphics (we had a project using OpenGL but we were taught things like transformations and how a graphics card works in general). That, together with 3 semesters of calculus, algebra, statistics, probability and 2 semesters of physics. I've also learned how to program for multi-core systems and clusters, cryptography and security protocols, virtual machines, including how the JVM works, and mobile computing.

      I've started my studies in 2010. As you can see, saying that what they teach is Gamification, HTML, CSS and Javascript is not what happens. Maybe my school is the exception but it may not be.

      Btw, I live and study in Portugal, so I'm talking about what I know from here, not in the US.

    145. Re:Beards and suspenders. by Marxist+Hacker+42 · · Score: 1

      ++i is allowed by your compiler? What does that compile to?

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    146. Re:Beards and suspenders. by werepants · · Score: 1

      You're claiming that bit-bashing is obsolete and irrelevant, because you won't use it working for Facebook or Amazon. Yes? If that isn't the argument, why the fuck do you even mention Facebook and Amazon?

    147. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      My first language that I learned how to program was 8051 assembly language. I thought it was pretty cool because you have direct access to everything. I was told my code looked like a language in itself since I wrote a semaphore based round robin multitasker that worked pretty damn good. When you see code calling my labels it looked a programming language.

    148. Re:Beards and suspenders. by cwsumner · · Score: 1

      Depends if it is a tail recursive procedure or not, doesn't it?
      And when we talk about memory allocation, regardless how often you call it: it costs nothing.

      To some extent, yes. But merely calling the procedure or method puts a "frame" on the stack. So recursive calls "pump up" the stack, and an unknown number of recursions can be a big number. Most OS's will halt the program if you "blow away" the stack.

      This part of recursion is not often taught in schools. Many classes just ignore stack size and memory size, to teach the theory. But real programs can definitaly hit the limits, and there are always limits. The costs might be far outside the space where you are working, but they might not be and bite you if you don't know about them.

    149. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      For FUCK SAKE!

      Learn to read, or click on my parents and read their posts.

      You're claiming that bit-bashing is obsolete and irrelevant

      Care to cite, where I said that? Oh? Surprise? I actually did not say that ... wow ... so why do you claim I did say this?

      Yes? If that isn't the argument, why the fuck do you even mention Facebook and Amazon?
      Because both sides have millions if not hundred of millions of hits each day. And in none of those hits a bit fiddeling is involved on PHP o Java level? So none of the programmers there ever did an a = b | c & ^d .... Why should they?

      My argument was: proclaiming if you can not programm in Assembler or C , if you don't know how to reverse the bit order of a word, long word, byte: that is irrelevant for large scale computing in our days (and, I did not mention that before: you can read it up in ten minutes anyway, so why should it be more important than really important computing skills?)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    150. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Actually (yes you are right, no complaint) I did not see any real world recursion as far as I can remember back in my computing history.

      Regarding tail recursion, no, most compilers optimize that way and don't need/use a new stack frame. So something like a fibonacci function, uses no stack at all. Well, the initial frame allocated on the first call, ofc.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    151. Re:Beards and suspenders. by lgw · · Score: 1

      The default Java GC has been terrible for servers for most of its history - it wants to avoid GC until all memory is consumed, which is great for client code that exits before GC happens, and acceptable when you only have a couple of GB in any case. This causes 2 problems: GC can take too long to run, and you can't usefully monitor memory usage over time and alert when your app is nearly out of memory, as you get too many false positives.

      G1 GC solves these problems nicely, but was only fully supported as of JDK 1.7 update 4.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    152. Re:Beards and suspenders. by lgw · · Score: 1

      I had lunch Tuesday with an Amazon coder who did bit bashing this week - in Java. Funny old world. From what I know about Amazon, you can't really make any generalizations about it, as different teams do things different ways far more than most big companies.

      I used bit-level flags this year in C#, just because we had a great many of the objects in memory and didn't want to be wasteful with object size.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    153. Re:Beards and suspenders. by lgw · · Score: 1

      And in none of those hits a bit fiddeling is involved on PHP o Java level? So none of the programmers there ever did an a = b | c & ^d .... Why should they?

      All the big players have at least in part written their own OS variant, their own DB, their own device drivers, and so on. Large scale computing includes making the individual boxes work, and at the scale of a million servers it only makes sense to have full ownership of the entire stack.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    154. Re:Beards and suspenders. by khellendros1984 · · Score: 1

      It's standard C and C++ (and Java, for that matter). It's the pre-increment operator (Returns the incremented value, rather than the original value). Post-increment has to save the previous value, so that it can increment the variable and store it, then return the original value. Pre-increment doesn't have to make the extra copy, since what's being stored is the same as what's being returned. Most of the time, the difference is optimized away anyhow; the compiler realizes that you aren't immediately using the return value, so it just pre-increments the value without creating any extra copy.

      --
      It is pitch black. You are likely to be eaten by a grue.
    155. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Ah, so you are unable to read or comprehend?

      Is it now prime goal in CS education to teach bit fiddling? Is it the most important thing? Can't you program for Amazon and never have the need to do it?

      Wow, I really wonder about the comprehension skills of /. posters.

      So, let me summarize:
      a) you need bit bashing abilities or fiddling abilities at Amazon
      b) if you don't have them, you can not work at Amazon
      c) every programming problem at Amazon needs a)
      d) if you have learned C you are superior to a Java developer, because you know how to bit bash but the other one does not (hint: a | b & c ... what language is that?)

      Actually, I did not write about all those topics. I simply said: no, learning how to fiddle bits in early year CS is a waste of time. You likely never will use it in your career.
      Sure, random, single people will need to use it. And if they are not able to grasp how to use the "your language of choice" equivalents of | and & etc. then they are not qualified for the job. But does a first year CS student need to be harassed with 'binary math and bit turning (more interesting shifting)'? No!

      Trying to twist my words back and forth does not change anything in this topic :)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    156. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Yeah, sure.
      They all write their own device drivers ...

      Do you actually know what a driver or device driver is?

      So every programmer at company XYZ is hired there because he knows & from | and is writing a device driver.

      I really wonder who is programming the log in page, the product database, the 'basket of goods', the payment solution.

      But you are certainly right, when I pay with my credit card. they have to bit mask their 'private key' with my 'credit card number' and the secret keys of my mine and their banks, and random it with the salt of my birthday and bit mask it again with the reverse order.

      Sorry, mate. Os it really so difficult to read what I actually wrote and agreeing with it?

      If you believe that the prime concern in CS education is bit management ... you are simply wrong. Or as some guy said: you might disagree, but you would be wrong!

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    157. Re:Beards and suspenders. by Marxist+Hacker+42 · · Score: 1

      I somehow missed that in Advanced C class in 1992, thanks. I'll have to try it.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    158. Re:Beards and suspenders. by lgw · · Score: 2

      You've repeatedly missed my point that you won't think to use bit-twiddling if you've never studied bit-twiddling. However easy it may be to learn, if you don't have the tool in your mental toolbox, you'll try to solve the problem with less-good tools.

      Recursion is the same way - it's quite rare that it's useful it in business coding, but when it is your code will be vastly better for it. If, however, you're not comfortable with recursion, you'll instead solve the problem in some horribly-awkward way.

      Schools teach plenty of recursion, as it's one of those nifty abstractions, but fall down on the grungy details that aren't so fun to teach (but are just as useful). Thus we in industry get stuck teaching the grungy details to fresh college hires, or worse you get entire codebases where no one had the right tools, and the result is a horrible mess.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    159. Re:Beards and suspenders. by lgw · · Score: 1

      So you think the only goal of a university is to teach "the prime concern"? How sad.

      Regardless, there are many sorts of programming jobs, and at the big players there are still plenty of jobs doing systems and kernel-level tasks, not just code grinder jobs ("I'm writing an inventory database - in the cloud!"). As programmers start aging out of the workforce, with no/few universities teaching the low-level stuff any more, supply of qualified programmers will dwindle, while demand stays steady - seems like a worthwhile skill set to me!

      --
      Socialism: a lie told by totalitarians and believed by fools.
    160. Re:Beards and suspenders. by werepants · · Score: 1

      You made the analogy that bit-bashing is to modern programming what classic greek is to modern logic. So, mostly irrelevant and unnecessary. And you tried to use Amazon and Facebook to prove your point. Don't blame me for the implications of the words you chose. The bottom line is that there is a lot of programming out there that isn't web development, and so bit-bashing is often a very useful thing to know.

    161. Re:Beards and suspenders. by kloro2006 · · Score: 1

      yep

    162. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Nope, I did no such thing.

      I answered to a pile of posts that claimed if you know how to fiddle with bits (and other claims) you are a better Java programmer.

      I answered that this is certainly not the case and that a huge majority of programmers, especially those at Amazon and Facebook for example! will never even use a bit manipulation.

      The bottom line is: I did not even talk about web programming ... Amazon and FB are running on back ends, perhaps 15% of their development is web related.

      We all know that there is plenty of programming to where fiddling with bits is relevant. But in no way it is a mandatory skill for a low level CS education ... it is wasted time if you already know you don't want to do embedded programming.

      Especially, it is likely much easier to teach to one who already can program, than using it as a base to teach programming.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    163. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      All skills are worthwhile, we only talked about the order of teaching and how important they are for the majority.

      Many students are forced to waste time ... and struggle with stuff they find irrelevant.

      You will be surprised how few 'bit bashing/fiddling' you are actually doing when you e.g. program a lane following algorithm in a auto motive application.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    164. Re:Beards and suspenders. by angel'o'sphere · · Score: 1

      Advanced GC algorithms we have since Java 1.5 ... not 1.7.

      And your complaint about older GCs are not that relevant. A) you could have set max memory low enough to have the GC run more early. B) every other GCed language more or less does/did the same, why does no one complain about PERL or Python? Oh! Because Java is successful ... C) If it concerned you, I'm sure you know about tricks for circumventing this 'problem'. Or you could have anticipated it and use C/C++ instead.
      you can't usefully monitor memory usage over time and alert when your app is nearly out of memory, as you get too many false positives.
      If that was a concern for you, you should have called System.gc() periodically, and monitor memory consumption afterwards.

      Bottom line: knowing how to manage memory in C/C++ is only marginally useful for developing in managed VMs ... our parents claimed otherwise, that was the point.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    165. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      These are the CS world's equivalent of bitter tryhard English majors suggesting all our problems have answers in Dostoevsky.

    166. Re:Beards and suspenders. by antsbull · · Score: 0

      and oneday when you find out that memory management and allocation in Java out performs that in a C++ program, specifically because of the GC algorithms, you will still be scratching your head wondering why. Try googling 'heap fragmentation' sometime.

    167. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      I graduated with an BS in CS in 2007. Unfortunately, the first two classes were Java-based(I hear they are Python based courses now, which is still bad but better than Java).

      But I also had 3 courses that used assembly(nasm, and 2 that used spim), 1 course that was all about C, and a separate C++ course.

      Along the way, I was also exposed to Lisp, Python, Smalltalk, Perl and Ruby having to write multiple projects in each of the languages and had 2 courses that involved designing and implementing circuits on a bread boards.

      We had to implement various memory hierarchy replacement algorithms in various languages, which was a good experience. Talk me more about how computers work than the C course.

      Had to write a few simple drivers for the Linux kernel and write a complete lib to read and write to ext2/3 properly. Also had to contribute to a speech recognition program that the CS department is developing along with a realtime A/V networked app to assist musicians in practicing together across the internet.

      I also had fun writing keyloggers and other various types of simple malware for Windows, it was the only exposure to the underpinnings of that crappy OS. It is amazing how helpful MS is in assisting malware writers. Their API's do most of the heavy-lifting for me, thanks Microsoft!

      We had to also take an automata and computability course, along with a course that taught language design theory and basic compiler writing. They had real compiler courses as elective courses but I could never fit them in, but getting the basics was great.

      Many classes required a B- or better for the course to count against the degree. C students got drummed out of the program quickly. We also had to take an extensive, timed programming test(both theory and actually writing code) to move into the upper division courses, which weeded out the rest of the cruft.

      Sadly, we had to implement an AVL tree, which is a brain-damaged tree. So it wasn't all roses.

      I also had to take 5 Physics courses along with 5 physics labs along with 6 required math courses, Calc1 being the lowest level math course.

      This was at state regional university with a tiny CS program consisting of 8 professors.

      I think that is a fairly solid CS education. It was good enough that getting my MS degree was a cakewalk compared to my undergrad degree.

      Sadly, I hear the department is starting to dumb down its curriculum, which will probably kill the department. Serves them right if they do dumb it down.

    168. Re:Beards and suspenders. by Anonymous Coward · · Score: 0

      Who gives a crap what types of languages various jobs use?

      If the applicant was well-educated, he will be able to easily learn whatever language they are using quickly and will easily outperform the applicant that only knows whatever language they are hiring for.

      Hire well-educated polyglot, not a language end-user.

  2. Real Programmers don't use GC by ehack · · Score: 4, Funny

    "Real Programmers don't use GC" is a mantra that is responsible for 90% at least of production bugs, together with "=" being typed instead of "==".

    --
    This is not a signature.
    1. Re:Real Programmers don't use GC by kwiqsilver · · Score: 2

      Outlandish, unsupported claims are responsible for 90% at least of the garbage on the internet.
      shared_ptr can eliminate virtually all memory leaks while avoiding the two annoyances of GC languages: the GC overhead, and the lack of destructors (the thing that bothers me most about doing Java development).

    2. Re:Real Programmers don't use GC by Noughmad · · Score: 1

      The important word being "can". It only helps if people use it, and in my experience they don't.

      --
      PlusFive Slashdot reader for Android. Can post comments.
    3. Re: Real Programmers don't use GC by samkass · · Score: 3, Funny

      Fortunately JavaScript solved that. These days, programmers type == instead of ===! Progress!

      --
      E pluribus unum
    4. Re:Real Programmers don't use GC by Megol · · Score: 1

      But it isn't unsupported! The amount of bugs caused directly or indirectly by bad memory management in insecure languages are pretty well documented if you'd be bothered to look.
      That one can _badly_ do garbage collection in C/C++ isn't news and not surprising. One can do it in assembly for heavens sake!

      Much C++ code uses reference counted garbage collection, some uses this combined with regions - allocating things on the stack and just letting them drop are region based memory management.

      But reference counting _does_ have GC overheads, often considerably more than scanning type "traditional" GC algorithm. That includes pauses for GC.

    5. Re:Real Programmers don't use GC by angel'o'sphere · · Score: 1

      shared_ptr only exists in C++, not in C, Pascal etc. So a kinda very special argument.

      Java does not need destructors, so if you feel you need one, you something wrong, plain and simple.

      GCs only have rarely an overhead. Hint: malloc/free and new/delete have overhead, too. Hence the many counter intuitive design decisions in C++ ...

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    6. Re:Real Programmers don't use GC by HiThere · · Score: 2

      While you are correct, the comment is about students. If you don't learn to program without a garbage collector, you haven't really learned to program. I'd go further and insist that you need a good foundation in an assembly language. MIX is good enough, you don't need anything fancy. You just need to learn how things work at the basic level.

      I'd also say that you need to learn a range of languages (not well, be adequately). I'd include Fortran, Lisp, Forth as the basic level. Then C for a more advanced level. (Perhaps you *could* do everything in C in Fortran95 instead, but why?)

      Finally, at an advanced level, I'd introduce Java, Erlang, Smalltalk, and, Haskell or OCaML. If you want another language after that, Either Ada95 or modern x64 assembler.

      And I'd do the whole thing in one year, which means none of the languages are covered in depth. Then pick any one of them, Java if you prefer, for more comprehensive study of algorithms. But *start* with a simplified assembler.

      N.B.: There could be a parallel track that was followed based around HTML, Javascript, TCP servers, etc. I don't understand enough about it, because I never studied it, so I only ended up knowning pieces here and there that I picked up for project. I envision these classes intertwined like the Math and Physics classes that I took in college. E.g, the TCP lessons would be needed when the Java(or whatever) classes started to address multiprocessing on multiple computers.

      --

      I think we've pushed this "anyone can grow up to be president" thing too far.
    7. Re:Real Programmers don't use GC by kwiqsilver · · Score: 1

      Java doesn't need destructors, but it's a pain in the ass to have to call close() on everything that maintains open resources, and a possible source of bugs. I had a memory leak last week in Java, because a JDBC connection wasn't getting closed properly. With a destructor, as soon as it hit the closing curly brace, it would automatically close. That is a superior design. And because the destruction happens in a deterministic way, as soon as the object leaves scope, there are so many wonderful tricks you can use it for. I like tools that make writing good code easier.
      The overhead of malloc & free is predictable and lower. A garbage collector has to scan all of its object, determine which to free, and free them. Free or delete just frees the appropriate memory immediately. Also, the GC wastes the unused memory between the time it is no longer used and the GC frees it. With a reference counting design, the memory is freed immediately.

    8. Re:Real Programmers don't use GC by Anonymous Coward · · Score: 0

      The problem isn't working with them, it's that the stuff they write is The Industry Standard (in basically every industry. Niche software is almost universally bad UI on top of a buggy nightmare of a core) and you can't convince the bean counters to buy anything else!

    9. Re:Real Programmers don't use GC by MoonlessNights · · Score: 1

      The deterministic nature of a destructor is quite useful but most of your other claims are incorrect or open questions.

      Having a destructor act "automatically" (that is, without your code stating that it is happening) is a controversial idea (the trade-off between implicit and explicit operations will always be with us).

      The overhead of malloc and free is massive compared to the equivalent operations in a managed runtime. Allocation is typically very cheap (since you don't need to manage the heap as a balancing data structure) and deallocation is effectively free, unless you need to be finalized, and there is no need to rebalance the heap. The real benefit of managing your own memory is that you can stack allocate, which is effectively free (although many managed runtimes can do this more aggressively, in most situations).

      There is no problem with "wasted" memory backing dead objects between collections since the heap is typically of fixed size between collections (especially in situations like Java where the VM parameters are fixed at start-up time). Reference counting designs not only fail to collect non-trivial object graphs but also do not free memory immediately (although it is typically deterministic with response to call-return behaviour). Now, returning from a function could involve walking every object in the heap, perhaps many times, to update reference counts. GC only incurs cost at GC time, and that is proportional to the number of live objects, not dead objects (which typically dominate).

      You also have avoided discussions of concurrent collection, incremental collection, and the massive cache benefits of object mobility as found in managed runtimes (compacting and copying collectors). These don't apply to things like Boehm, but do apply to things like Java.

    10. Re:Real Programmers don't use GC by angel'o'sphere · · Score: 1

      Since Java 7 this is solved.
      You use closable resources (implementing the Closable interface, I believe) and a special try/finally block.
      The overhead of malloc & free is predictable and lower. A garbage collector has to scan all of its object, determine which to free, and free them.
      Wrong in both cases, neither is it predictable nor is it lower (in general)
      A garbage collector has to scan all of its object, determine which to free, and free them.
      Wrong again. E.g. there are generative GCs. Also GCs usually only scan references to objects, that does not imply scanning all objects.
      Also, the GC wastes the unused memory between the time it is no longer used and the GC frees it.
      So a C program that got 4GB of ram allocated on start up is not wasting 3,99GB (unused memory) but a Java program that got assigned 4GB of ram and is occupying 2GB until next GC when it drops down to 100Meg is wasting it? Why is one waste the other not? Memory is mot wasted ... a misconception.
      With a reference counting design, the memory is freed immediately
      Wrong as well. There is nothing freed. Memory is only marked to be reclaimable for other usages.
      Wrong number two: circular references are never freed. It is worse than the slowest and worst GC algorithm.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    11. Re:Real Programmers don't use GC by Hydrogenoid · · Score: 1

      You can actually have auto closing resources since Java 7, which is not really the same as a destructor, but will remove that pain in your ass.

    12. Re:Real Programmers don't use GC by Shirgall · · Score: 1

      68% of statistics are caused by smoking.

    13. Re:Real Programmers don't use GC by hendrikboom · · Score: 1

      There are very very few production contexts in whch stopping a moment for garbage collection is a problem. Outside of those, failing to use a type-safe, garbage-collected language is malpractice..

    14. Re:Real Programmers don't use GC by cbhacking · · Score: 1

      *JAVA* lacks destructors, but that's not a universal problem of GC languages.

      --
      There's no place I could be, since I've found Serenity...
    15. Re:Real Programmers don't use GC by GiganticLyingMouth · · Score: 4, Funny
      "If Java had true garbage collection, most programs would delete themselves upon execution"

      – Robert Sewell

    16. Re: Real Programmers don't use GC by hcs_$reboot · · Score: 1

      Fortunately JavaScript solved that. These days, programmers type == instead of ===! Progress!

      Wow that '===!' must be a new PHP operator

      --
      Slashdot, fix the reply notifications... You won't get away with it...
    17. Re:Real Programmers don't use GC by russotto · · Score: 1

      The overhead of malloc and free is massive compared to the equivalent operations in a managed runtime. Allocation is typically very cheap (since you don't need to manage the heap as a balancing data structure) and deallocation is effectively free, unless you need to be finalized, and there is no need to rebalance the heap.

      Deallocation is NOT free. It's just borrowed. You're paying the costs in the garbage collector rather than inline.

    18. Re:Real Programmers don't use GC by MoonlessNights · · Score: 1

      Where do you think the deallocation cost appears in the collector? Are you specifically referring to heap management, finalization, heap contraction, etc? The actual cost of the running the GC is a function of live objects, not dead ones or the number allocated since the last cycle.

    19. Re:Real Programmers don't use GC by TemporalBeing · · Score: 1

      But it isn't unsupported! The amount of bugs caused directly or indirectly by bad memory management in insecure languages are pretty well documented if you'd be bothered to look. That one can _badly_ do garbage collection in C/C++ isn't news and not surprising. One can do it in assembly for heavens sake!

      Much C++ code uses reference counted garbage collection, some uses this combined with regions - allocating things on the stack and just letting them drop are region based memory management.

      But reference counting _does_ have GC overheads, often considerably more than scanning type "traditional" GC algorithm. That includes pauses for GC.

      GCs also screw with your timing, which is why any embedded environment does not use GC functionality even in GC languages - you create long lived objects on the stack with tuned array sizes where necessary to use instead of allocating on the heap. (Even in C/C++ that can be common in embedded environments; heap is avoided at all costs.)

      Personally, I've never had use for GCs.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    20. Re:Real Programmers don't use GC by TemporalBeing · · Score: 1

      There is no problem with "wasted" memory backing dead objects between collections since the heap is typically of fixed size between collections (especially in situations like Java where the VM parameters are fixed at start-up time). Reference counting designs not only fail to collect non-trivial object graphs but also do not free memory immediately (although it is typically deterministic with response to call-return behaviour). Now, returning from a function could involve walking every object in the heap, perhaps many times, to update reference counts. GC only incurs cost at GC time, and that is proportional to the number of live objects, not dead objects (which typically dominate).

      This is actually a big issue for GCs. It's not that the memory is "wasted" but that the collection of the "wasted" memory leads to unpredictable performance penalties. It's best to avoid GCs entirely for this reason alone.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    21. Re: Real Programmers don't use GC by Rakarra · · Score: 1

      Wow that '===!' must be a new PHP operator

      x == y means x is equal to y.
      x === y means x is REALLY equal to y. Like, a lot more equal.

    22. Re:Real Programmers don't use GC by MoonlessNights · · Score: 1

      What do you mean by "wasted", in this case?

      If you are generally referring to unpredictable pause times, then that is a real concern of GCs (and some general cases of reference counting and some cases of dynamic allocation). Of course, in the case of the GC, the pause time is a function of the live objects (and, in some cases, their size or topology) so I am not sure what you mean by "wasted".

      Of course, there are GCs which offer predictable pauses but they are typically lower performance. They only matter in real-time environments so they are not often used.

    23. Re: Real Programmers don't use GC by Anonymous Coward · · Score: 0

      Progress is knowing how both can be useful and not parroting Crockford when you decide to piss and moan about JS.

    24. Re:Real Programmers don't use GC by TemporalBeing · · Score: 1

      What do you mean by "wasted", in this case?

      Quoting parent; but typically it would be "memory that is not in use by the application but assigned to the application because it has not yet been returned to the OS". So in a manner, GCs lead to intentional, but temporary, memory leaks. That could be forgiven if there were not other issues regarding using GCs.

      If you are generally referring to unpredictable pause times, then that is a real concern of GCs (and some general cases of reference counting and some cases of dynamic allocation). Of course, in the case of the GC, the pause time is a function of the live objects (and, in some cases, their size or topology)

      Whether or not you use a GC you still have the dynamic allocation time; to that is a moot point; in some cases you still have the reference counting, and again that is sufficiently quick enough that that too is a moot point.

      However, GCs really hurt performance and testability with the unpredictability of the garabage collection time. You can't predict, or control, when a GC decides to check the memory or return it. It could hit at your most critical performance moment, or it may hit at your least critical performance moment, or any time in-between. That is just the nature of the GC.

      Yes, certain GC algorithms perform better in some scenarios in others. Some GC implementations provide the ability to control some of it; but they're the exception not the rule.

      About the only method of "GC" (and I put that in quotes because it's not really a GC) is how Qt does it with parent objects cleaning up any child object that remains when the parent object is destroyed. It has nearly all the effects of a GC, but all the control and performance of a non-GC system. Yes you can still end up with memory leaks should you forget to parent an object; but even that is generally easy to track down and fix (because something else will usually break as well); and there are very few objects that you have to actually track because they cannot actually have a parent.

      Of course, there are GCs which offer predictable pauses but they are typically lower performance. They only matter in real-time environments so they are not often used.

      No. They matter in nearly every environment. And I'm pretty certain this is one of main performance issues for the DalvikVM in Android for numerous applications.

      If in true Real-Time or even Near-Real-Time application you NEVER allocate memory regardless of whether you use a GC - and especially if you use a GC - because you don't want to have to deal with the possibility the memory may not get allocated. So when you're talking about using a GC, you're not talking about high performance applications. You're talking about everything else.

      For everything else your performance comes down to user-perception in most cases (outside of games) and GC collection will hurt that. In games, it can destroy it. User's don't like to have their applications unpredictably stop for a while; they deal with it but they don't like it. And if given a choice between a program that will pause for a while and one that won't, they'll go to the one that won't.

      Now GCs can be good for certain environments - where user's don't interact with the system, it's not anywhere near real-time, and the application may have time periods where it simply doesn't matter - e.g a server handling connections where it can clean up after the connection closes and before it handles another; but even then, as the system needs better and better performance GCs become less and less useful.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    25. Re:Real Programmers don't use GC by MoonlessNights · · Score: 1

      By that definition of "wasted", even a basic malloc+free system will waste massive amounts of memory since free rarely actually removes the heap space it is using from the process. Most of the time, someone using a GC configures it to avoid returning this memory, as well, since the environment is typically tuned against the maximum heap size, so giving it back would just mean it has to be requested again, later. Of course, if this is a concern, we are getting more into the debate of whether dynamic allocation should be used, at all (which is something I wish more people thought about - I also like you that you mentioned it can fail since so many people forget that).

      I am not sure what you mean by "dynamic allocation time" in a GC and reference counting is NOT "sufficiently quick". Actual allocation cost, when using a GC-managed heap is generally incredibly cheap (because the allocator doesn't have to do heap balancing, etc). Reference counting can involve walking massive parts of the heap, and writing to it (sometimes many times). GC is generally very fast but, again, depends entirely on the number of live objects so it becomes more expensive the larger the live set becomes.

      Whether or not real-time characteristics matter in every situation, or not, is really just determined by the maximum total time lost to the collector within a given window. A real-time collector can give you a guaranteed bound, no matter the size of the live set, but other collectors are typically fast enough for their environments: if you can GC the whole heap in 20 ms, it is probably ok for a game whereas if you can do it in 1 second, it is probably ok for an application server (although that would be an oddly long GC), etc. The question of whether or not an occasional outlier can be tolerated in order to reduce average pause time is another which depends on environment. Reference counting schemes are also subject to these limits but the bounds are harder to fix since the size of a now-dead object graph at any release point is not always constant at said release point.

      While I agree with you that doing any real-time work in an environment with dynamic allocation is not a good idea (the only times I have done real-time work, dynamic allocation wasn't even supported on the platform - and that was never a problem), there is some amount of interest in things like real-time Java (hence JSR1) so we have real-time collectors. I have never done any real-time Java programming, but I have seen evidence that it works well.

      What do you mean by "as the system needs better and better performance GCs become less and less useful"? A good GC will actually increase the performance of the application as it can improve cache density of the application's live set (not to mention memory-processor affinity).

      We do seem to be having 2 conversations here:
      1) How does GC compare to other dynamic allocation approaches
      2) How does any dynamic allocation approach fare against static or stack-oriented allocation approaches. In this case, I think we both agree that avoiding the issue altogether is preferable, where possible.

    26. Re:Real Programmers don't use GC by TemporalBeing · · Score: 1

      By that definition of "wasted", even a basic malloc+free system will waste massive amounts of memory since free rarely actually removes the heap space it is using from the process. Most of the time, someone using a GC configures it to avoid returning this memory, as well, since the environment is typically tuned against the maximum heap size, so giving it back would just mean it has to be requested again, later.

      Not quite. GC are always built on top of malloc+free, not side-stepping them.

      Further, even if malloc/free didn't return it to the OS, it will still try to alloc from the "free" memory it has before getting more memory from the OS in many implementations. GCs even delay the ability to do that.

      Of course, if this is a concern, we are getting more into the debate of whether dynamic allocation should be used, at all (which is something I wish more people thought about - I also like you that you mentioned it can fail since so many people forget that).

      Yes. All too often people just code assuming that an allocated memory buffer returns a valid value; usually you'll get something like "it never fails" or "if it fails then there are other issues". But that doesn't mean that your program should just crash because it failed; the program should degrade gracefully in those situations.

      Of course, I'd go further and say the standard libs and operating systems should provide a method to validate pointers, but that's more a security concern and the hard part for that is figuring out if the object is valid and on the stack versus valid and on the heap.

      I am not sure what you mean by "dynamic allocation time" in a GC and reference counting is NOT "sufficiently quick".

      "dynamic allocation" means anything done with malloc/new versus a stack-based allocation, which could be on the local, sem-local (e.g class object), or global stack frames.

      Now, regarding reference counting - that all depends on the implementation. Some systems (e.g Ada) do reference counting on the memory allocated - that is, the first couple bytes store a reference count and it's just built-in. Other, like Qt, do it by keeping references (e.g. is X in the child list). And then there is the shared pointer methods (e.g QSharedPointer, std::shared_ptr) which also keep a very quick counter.

      Now in doing the reference counter in the GC, then yes - it becomes a lot more expensive to keep it and maintain it because it has no knowledge of the actual use of the pointer.

      Actual allocation cost, when using a GC-managed heap is generally incredibly cheap (because the allocator doesn't have to do heap balancing, etc). Reference counting can involve walking massive parts of the heap, and writing to it (sometimes many times). GC is generally very fast but, again, depends entirely on the number of live objects so it becomes more expensive the larger the live set becomes.

      GC allocation will never be faster than non-GC allocation because it relies on non-GC allocation underneath. Anything the underlying libraries and kernel do, it does as well.

      What do you mean by "as the system needs better and better performance GCs become less and less useful"? A good GC will actually increase the performance of the application as it can improve cache density of the application's live set (not to mention memory-processor affinity).

      We do seem to be having 2 conversations here: 1) How does GC compare to other dynamic allocation approaches 2) How does any dynamic allocation approach fare against static or stack-oriented allocation approaches. In this case, I think we both agree that avoiding the issue altogether is preferable, where possible.

      GCs will never improve cache performance as it is entirely unrelated and should not be randomly selecting objects. If anything it will decrease cache performance because it will be randomly hitting nodes (during its checks) that the application wants to keep dormant for a time.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    27. Re:Real Programmers don't use GC by MoonlessNights · · Score: 1

      Not quite. GC are always built on top of malloc+free, not side-stepping them.

      This is incorrect. High performance GC implementations are typically built on top of the platform's virtual memory routines, directly (on POSIX, think mmap or shmem). This avoids the waste of "managing the memory manager" and also allows the GC fine-grained control over the heap. On some platforms, this also provides selective disclaim capabilities meaning that the GC actually will give pages back to the OS when contracting the heap, whereas free() wouldn't.

      But that doesn't mean that your program should just crash because it failed; the program should degrade gracefully in those situations.

      Agreed. To avoid this problem, the better pieces of software I have seen did no dynamic allocation once they reached a steady running state. This meant the failure states were easier to wrangle since you could only fail to allocate during bootstrap or when substantially changing running mode.

      Of course, I'd go further and say the standard libs and operating systems should provide a method to validate pointers, but that's more a security concern and the hard part for that is figuring out if the object is valid and on the stack versus valid and on the heap.

      The general approach is that a valid pointer is anything non-null. If you need to further introspect the memory mapping or sniff the heap to determine validity, you seriously need to re-think an algorithm. Debugging tools, of course, are exempt from this rule since they are often running on a known-bad address space.

      Now in doing the reference counter in the GC, then yes - it becomes a lot more expensive to keep it and maintain it because it has no knowledge of the actual use of the pointer.

      GCs do not store reference counts since they are completely different from this kind of tracking. They determine validity by reachability at GC time.

      GC allocation will never be faster than non-GC allocation because it relies on non-GC allocation underneath. Anything the underlying libraries and kernel do, it does as well.

      This is incorrect. High performance GCs manage their heap directly and can offer allocation routines based on this reality. The main reason why they can be faster is that they have the ability to move live objects at a later time so fragmentation doesn't need to be proactively avoided in allocation, which is normally what causes pain for malloc+free.

      GCs will never improve cache performance as it is entirely unrelated and should not be randomly selecting objects. If anything it will decrease cache performance because it will be randomly hitting nodes (during its checks) that the application wants to keep dormant for a time.

      This is incorrect. The GC can easily remove unused space between objects (by copying or compacting the adjacent live objects together). Further, given that a GC has complete visibility into the object graph, it can move "referencee" objects closer to the "referencer" objects (especially if there is only one). These 2 factors mean that the effective cache density is higher and that the likelihood of successive accesses being in cache is higher.

      For further information regarding this point, take a look at the mutator performance characteristics of GCs which can run in either copying or mark+sweep modes. Paradoxically, the copying performance is generally much higher even though the GC is doing more actual work (this benefit can be eroded by very large objects, since copy cost is higher and relative locality benefits are smaller).

      Of course, these statements are based on the assumption that this is a managed runtime, and not a native embeddable GC like Boehm.

    28. Re:Real Programmers don't use GC by Anonymous Coward · · Score: 0

      ...together with "=" being typed instead of "==".

      On a serious tangent, when is the last time anyone used a C or C++ compiler which couldn't issue a warning for that particular problem (maybe not by default, but with an available warning)? For those few cursed denizens working in some antique compiler hell, why isn't lint in use?

      - T

    29. Re:Real Programmers don't use GC by TemporalBeing · · Score: 1

      Not quite. GC are always built on top of malloc+free, not side-stepping them.

      This is incorrect. High performance GC implementations are typically built on top of the platform's virtual memory routines, directly (on POSIX, think mmap or shmem). This avoids the waste of "managing the memory manager" and also allows the GC fine-grained control over the heap. On some platforms, this also provides selective disclaim capabilities meaning that the GC actually will give pages back to the OS when contracting the heap, whereas free() wouldn't.

      And those versions are few and far between, exception not the rule.

      But that doesn't mean that your program should just crash because it failed; the program should degrade gracefully in those situations.

      Agreed. To avoid this problem, the better pieces of software I have seen did no dynamic allocation once they reached a steady running state. This meant the failure states were easier to wrangle since you could only fail to allocate during bootstrap or when substantially changing running mode.

      Define a steady-state. Not every application has one. This is why real-time stuff doesn't do that - they allocate memory/blocks on the stack at the application (global) level. If you can load the application then everything the application will ever need is allocated. If you cannot load the application, then that's it.

      That works for the real-time work; but if you want to do dynamic checking then you need to be able to validate pointers.

      Of course, I'd go further and say the standard libs and operating systems should provide a method to validate pointers, but that's more a security concern and the hard part for that is figuring out if the object is valid and on the stack versus valid and on the heap.

      The general approach is that a valid pointer is anything non-null. If you need to further introspect the memory mapping or sniff the heap to determine validity, you seriously need to re-think an algorithm. Debugging tools, of course, are exempt from this rule since they are often running on a known-bad address space.

      True, that is the general approach. My point is that that is wrong. From a security point-of-view, you need to be able to validate that a pointer is valid beyond whether or not it is NULL. You need to know that your application issued the pointer and that the data it points to is valid and within your application space. And this needs to be in real applications, not debug mode.

      Now in doing the reference counter in the GC, then yes - it becomes a lot more expensive to keep it and maintain it because it has no knowledge of the actual use of the pointer.

      GCs do not store reference counts since they are completely different from this kind of tracking. They determine validity by reachability at GC time.

      Which is a major draw back for using a GC as it now has to crawl everything periodicially.

      GC allocation will never be faster than non-GC allocation because it relies on non-GC allocation underneath. Anything the underlying libraries and kernel do, it does as well.

      This is incorrect. High performance GCs manage their heap directly and can offer allocation routines based on this reality. The main reason why they can be faster is that they have the ability to move live objects at a later time so fragmentation doesn't need to be proactively avoided in allocation, which is normally what causes pain for malloc+free.

      So now you're adding indirect pointers for normal pointer usage...which again now means two calls for every pointer and now you've slowed down the whole application. Smart pointers do the same thing in a sense; as does the PIMPL design pattern - it can still be quite fast, but is still (provably) slower than directly using the poin

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    30. Re:Real Programmers don't use GC by MoonlessNights · · Score: 1

      And those versions are few and far between, exception not the rule.

      Not really. It depends on the environment and things like expected application running time. Things like Java, for example, use this kind of collector. They are used in production so they shouldn't be excluded from the discussion, thus meaning my statement is still correct.

      Define a steady-state. Not every application has one. This is why real-time stuff doesn't do that - they allocate memory/blocks on the stack at the application (global) level. If you can load the application then everything the application will ever need is allocated. If you cannot load the application, then that's it.

      I think we are "having an agreement". If something other than dynamic allocation can be used (the size of something is known at compile time, for example), then it should be allocated using a different mechanism.

      From a security point-of-view, you need to be able to validate that a pointer is valid beyond whether or not it is NULL. You need to know that your application issued the pointer and that the data it points to is valid and within your application space. And this needs to be in real applications, not debug mode.

      What do you mean? Under what circumstances is this kind of pointer validation required? It sounds like this is an attempt to detect other bugs, after-the-fact (reading uninitialized or over-written memory, for example).

      Which is a major draw back for using a GC as it now has to crawl everything periodicially.

      Whether this is a problem is really the core of this conversation. The problem is the pause time but the question is whether or not that is a real problem and whether other benefits exist to offset it, in the general case of your application.

      So now you're adding indirect pointers for normal pointer usage...which again now means two calls for every pointer and now you've slowed down the whole application. Smart pointers do the same thing in a sense; as does the PIMPL design pattern - it can still be quite fast, but is still (provably) slower than directly using the pointers to start with.

      I said nothing about indirect pointers at any point. The pointers are still directly to the memory being used. Managing the underlying memory slabs, directly, in no way invalidates this.

      Except now you are again penalizing the performance by randomly moving the memory around at application run-time. So you are not just hitting the performance to remove unused memory, but to also "optimize" it. And in doing so you remove the ability of the application developer to run-time optimize the memory usage when necessary.

      The application developer in managed runtimes has effectively no control over heap geometry. Technically, they aren't even allowed to think as object references as numbers since they can only compare them for direct equality/inequality.

      Also, I am still not sure what you mean by "remove unused memory". Remember that the unit of work, in a managed heap, is either the number of live objects or the number of live bytes. "Unused" (or dead or fragmented) memory is not a cost factor.

      These optimization opportunities do a great job of actually improving performance of the application (check the benchmarks - there is a surprising win in both throughput and horizontal scalability).

      Seriously, GCs are probably one of the biggest hits for performance of applications on Android. It's one of the many reason that Java as a language is SLOW.

      Can you substantiate that claim, since it sounds surprising. Their heaps aren't big enough to be seriously hurt by GC (unless they keep the heap right on the edge of full). Over all, Java is actually very FAST. The slowest part is generally VM bootstrap (just because it has a long path length and much of it can't be parallelized), fol

    31. Re:Real Programmers don't use GC by TemporalBeing · · Score: 1

      From a security point-of-view, you need to be able to validate that a pointer is valid beyond whether or not it is NULL. You need to know that your application issued the pointer and that the data it points to is valid and within your application space. And this needs to be in real applications, not debug mode.

      What do you mean? Under what circumstances is this kind of pointer validation required? It sounds like this is an attempt to detect other bugs, after-the-fact (reading uninitialized or over-written memory, for example).

      In implementing a true Secure Programming methodology you don't trust anything. You don't trust that a pointer coming from another part of the program is valid; you need to be able to verify it. Some libc environments give you the ability to validate a heap pointer, but you still cannot validate a stack pointer. So there's a limited ability to really do much with this kind of security testing, which has to be done on-the-fly in the real program (not only debug mode). This is security testing; not program validation, though it can provide that too. It is preventative functionality to keep back actors from being able to break into your program, and if they do extremely limit their ability to go farther by the vary nature of the program itself.

      Also, I am still not sure what you mean by "remove unused memory". Remember that the unit of work, in a managed heap, is either the number of live objects or the number of live bytes. "Unused" (or dead or fragmented) memory is not a cost factor.

      Unused memory is certainly a cost factor when it comes to systems of programs being able to use the memory on the system. memmapp'd memory is not unlimited. Memory is not unlimited. You only have so much and you have to be a good citizen with its use. Even if you have a high volume of memory allocations, it can be done; and the standard (non-GC) system will certainly keep your memory for only the life-time you need it, no longer; even re-using similarly sized chunks (in some implementations) to minimize calls to the kernel allocator. The kernel can and does notify the libc environment when memory is low, and the libc environment will return free'd memory to the system when that happens. Been there; done that.

      more so the "promise of JIT" which gives them a pretty serious win.

      So why is Android moving away from using JIT? Why does Android ART binary compile all applications at install?

      JIT is a problem. GC is a problem. Combined they make problems worse. Yes, there are situations that they are good for; but not for embedded systems, or phones, or tablets, or most user facing applications. Like many things they are very good for certain kinds of tasks, and that's it.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  3. Why do CS grads become lowly programmers? by Ichijo · · Score: 4, Insightful

    Shouldn't they be computer scientists? Software engineering, while related, is not the same thing as computer science. Would you ask a scientist to build a bridge, or an engineer?

    --
    Any sufficiently unpopular but cohesive argument is indistinguishable from trolling.
    1. Re:Why do CS grads become lowly programmers? by HornWumpus · · Score: 4, Insightful

      95% of CS grads spend their carrier banging out boring code. Accept it.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    2. Re:Why do CS grads become lowly programmers? by shobadobs · · Score: 1

      Software engineering programs suck, that's why. Nobody needs to spend time in college learning stuff they'd end up learning in industry anyway.

    3. Re:Why do CS grads become lowly programmers? by ThatsDrDangerToYou · · Score: 3, Funny

      95% of CS grads spend their carrier banging out boring code. Accept it.

      "no carrier"

    4. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      95% of CS grads spend their careers banging out intersting code that is only interesting because it is unnecessarily complicated (and buggy) for the task at hand.

    5. Re:Why do CS grads become lowly programmers? by timrod · · Score: 3, Funny

      I definitely would not ask a scientist to build an engineer, especially a software engineer. That's how you get Frankenstein's monster.

    6. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 3, Insightful

      So why do you study computer science to become an software engineer then?
      Or why do you study other sciences to become a relevant engineer (mechanics, electric etc.)?

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    7. Re:Why do CS grads become lowly programmers? by UnknownSoldier · · Score: 3, Insightful

      Programming = Application = FUN.
      Computer Scientist = Research = Theory = mostly boring.

      Lowly programmer? Now piss off, I have my degree.

    8. Re:Why do CS grads become lowly programmers? by idontgno · · Score: 4, Funny

      I'll betcha a current CS grad wrote the auto-correct logic that did that.

      Case... fucking...closed.

      --
      Welcome to the Panopticon. Used to be a prison, now it's your home.
    9. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      The primary reason a software engineer studies CS is because that is what employers expect. Being a good software developer doesn't require you to understand advanced Computer Science concepts at all. Programming languages and techniques are tools in the pursuit of the greater science. This is like saying a doctor isn't well schooled in medicine because she is using advanced scalpels. It's a bit ridiculous.

    10. Re:Why do CS grads become lowly programmers? by TsuruchiBrian · · Score: 1

      For the same reason that engineers still learn science. If engineering is applied science, then you need to have a background in science in order to properly apply it.

    11. Re:Why do CS grads become lowly programmers? by oh_my_080980980 · · Score: 2

      Which would mean knowing C would not be required.

    12. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      Being a good software developer doesn't require you to understand advanced Computer Science concepts at all.

      That depends on what you consider being a good software developer. There are many tiers of "good" in many different contexts, none of which are interchangeable... and many in which you will fail miserably without a good understanding of CS concepts, and many of which you can excel with a one-night read of some O'Reilly books.

    13. Re:Why do CS grads become lowly programmers? by passionplay · · Score: 5, Insightful

      You study ENGINEERING (a discipline) to become a LICENSED PROFESSIONAL ENGINEER.
      You study MEDICINE (a discipline) to become a LICENSED MEDICAL DOCTOR.
      You would have to agree an automotive engineer is not the same as a mechanic which is not the same as a scientist in combustible fuels.

      Software development is an art form. Software engineering is a discipline. Computer Science is a science.

      Studying computer science by itself enables you to become:
      1. A computer scientist
      2. A computer programmer
      3. A computer technician

      Even becoming a computer science teacher would require you to study EDUCATION as a discipline.

      There are no shortcuts. While life experience may teach you SOME things to become an engineer, there is no substitute for a Computer Science degree that focuses on software engineering. You could become an engineer after years of experience. or you could simply learn the discipline and stand on the shoulders of giants and open yourself up to learning from and teaching others in the discipline for a lifetime.

      The next time you ask yourself, "Where on God's green earth would I use this knowledge", stop yourself. And think: "Why on earth would I want to work harder and solve problems already solved by others."

      An engineer solves problems a new way because the outcomes of all the known methods are not satisfactory. An engineer can predict reliably how long something should take from his body of knowledge.
      A developer solves problems a new way because it's fun, it's cool and it's artistic. A developer, like an artist, works until he's done.

      There is nothing wrong with being a developer or an artist. But just as we should never confuse industrial art with fine art, we should never confuse software development with software engineering.

      If you can only solve the problem at hand, you will not have fun doing engineering. If you are happier solving higher order problems of how things are put together and how to do things efficiently or discovering how to things MORE efficiently by building on the knowledge of others or collaborating, you will have fun doing engineering.

    14. Re:Why do CS grads become lowly programmers? by RailGunner · · Score: 1

      My degree is "Computer Science And Engineering" -- and we CSE grads are the cream of the crop, and if you don't agree, then you sir, are worse than Hitler.

    15. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      There is no distinction between software engineering and computer science at an university. Software engineering is considered a specialization, like numericals or theoretical computer science or compiler construction ...
      In other words: you can not become a software engineer without studying computer science.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    16. Re:Why do CS grads become lowly programmers? by NewWorldDan · · Score: 1

      Is it too much to ask that whatever their course of study they take at least one class on the principles of web application security? When I can hack your web app six ways before lunch time, there's a major gap in your education.

    17. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 4, Interesting

      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!

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    18. Re:Why do CS grads become lowly programmers? by jedidiah · · Score: 1

      Engineers study the sciences, and math. Why should it be any different for computing professionals? They should be exposed to the same kinds of "fundementals" you would associate with other "serious STEM" programs.

      --
      A Pirate and a Puritan look the same on a balance sheet.
    19. Re:Why do CS grads become lowly programmers? by wiredlogic · · Score: 1, Funny

      Software "engineering" can't be considered real engineering until it can produce work output that has the same level of reliability as a properly engineered bridge using repeatable, proven processes. Until then it has as much relation to engineering as a certification mill.

      --
      I am becoming gerund, destroyer of verbs.
    20. Re:Why do CS grads become lowly programmers? by s4m7 · · Score: 1
      In the curriculum at my university we learned at least one new language per semester. Assembler was required. Java was required. Python was required. Haskell was required. At different stages we learned about stack management, pointer allocation, memory management, garbage collection algorithms, and so on.

      Point is, it's not about what language you use. Learn the techniques and the rest will follow. Learn to learn new languages, you will need them. Learn how the high level code you write is handled at the bare metal. CS is not just about producing programmers... Anybody with time on their hands and a computer can learn to code. CS is about furthering the art and science of computing.

      --
      This comment is fully compliant with RFC 527.
    21. Re:Why do CS grads become lowly programmers? by MobyDisk · · Score: 2

      That's super subjective. There are a lot of research scientists on this planet who would disagree with you.

    22. Re:Why do CS grads become lowly programmers? by faedle · · Score: 1, Funny

      I've spent some time doing "computer science".

      Computer science IS boring. It's a lot of math and logic and tedium. Once you've gone over Turing's proofs, you either go into Cognitive Science or go full Math Retard (I did the latter) and become one of those boring researchers on campus nobody talks to.

    23. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      Does that include building bridges like the skywalk at the Hyatt Regency in Kansas City?

    24. Re:Why do CS grads become lowly programmers? by TsuruchiBrian · · Score: 1

      I know that. I have a degree in computer science, and I am a software engineer. I even took one required class in software engineering.

    25. Re:Why do CS grads become lowly programmers? by CastrTroy · · Score: 2

      I think the problem is that web programming it actually one of the hardest things to do properly, and yet everybody seems to try to do it without really understanding what's going on. You can't just take a single class on web application security, because there's way too much information to cover. First, there would have to be a lot of prerequisites such as SQL databases, Actually understanding Javascript as well as at least one server side language (PHP, .Net, Java, etc). Understanding how HTTP works. And there's a bunch of other stuff you really should know before you even start to delve into the security aspects of it all. Then there's all the different vulnerabilities. Just getting people to understand what code runs where (javascript on browser, C# on server), where information is coming from (query string, form data, cookies, http headers) and how it is all able to be forged quite easily by the client. Web development is a whole specialization in and of itself, and couldn't even begin to be covered well enough without leaving out some other more important parts of a CS education.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    26. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 1

      "There is no distinction between software engineering and computer science at an university."

      Oh yes there is, at least here in Canada where the very word 'engineer' has legal locks on it.

      SE courses here are designed by Engineers and thus include all sorts of useful stuff like chemistry and physics and calculus.

      When I was working in England my business card said "software engineer".

      Without having a PEng qualification, that would be illegal in Canada.

    27. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      Your joke works only if you don't know how commas are used.

    28. Re:Why do CS grads become lowly programmers? by TangoMargarine · · Score: 2

      Is it too much to ask that whatever their course of study they take at least one class on the principles of web application security?

      Yes. Explain to me how embedded programmers need to know about web security?

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    29. Re:Why do CS grads become lowly programmers? by TangoMargarine · · Score: 1

      Don't know about where you went, but we have separate majors for CS and SE where I graduated. The SE guys took a couple extra NIC programming classes and suchlike, while at the other end the Computer Information Systems people did a bunch of COBOL classes. I did Computer Technology, the "middle options."

      CT and CIS were both internal branches of CS, and CS and SE made up the agglomerated CSSE department. Post-graduation I'm not really qualified to say, but you specifically said "at an university."

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    30. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Did we crosstalk each other? That is exactly what I said. Some of our parents claimed you could be an engineer without studying the relevant science as engineering and science are different things, I disagreed.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    31. Re:Why do CS grads become lowly programmers? by TangoMargarine · · Score: 1

      *middle option

      To clarify, I did take *a* course in COBOL and a half-course in assembly. Sadly they had crammed together the courses for Computer Architecture and Operating Systems into one, CAOS, so the other half was basically threading in Java.

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    32. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      There's also a lot of programmers who would disagree with his first statement.

    33. Re:Why do CS grads become lowly programmers? by HornWumpus · · Score: 1

      Might be true at _an university_ but is certainly not universally true.

      In general, if the word 'engineer' appears in the degree, it should be taught out of an engineering school. Engineer is already a much abused title.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    34. Re:Why do CS grads become lowly programmers? by HornWumpus · · Score: 1

      I knew the Engineer that headed the board that looked into how that happened.

      Software Engineers dream of having the kind of process and controls that structural Engineers do.

      BTW the bridge was designed in a structurally sound but unbuildable way, it was built in a buildable, structurally unsound way.

      Civil engineers are the most 'cook book' of the disciplines. They are also the 'original' engineers.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    35. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      I studied in Germany.
      We get a Computer Science degree, regardless if we specialize into 'Computer Engineering', ' Theoretic Computer Science' or what ever.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    36. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      One day you're told to build a bridge. The next day it's also a highway intersection (the budget is obviously not increased to meet the new demands)... and then you're told that you've got to build it out of matchsticks and glue. The matchsticks aren't up to spec and the sole supplier's glue recipe changes halfway through without informing the customers, causing the four-way intersection matchstick bridge to collapse due to slight drizzle during a full moon.
      The software "engineer" who is not in any position to say no (except by quitting) is blamed for this.

    37. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Well, in Germany we don't have 'Engineering Schools', perhaps it is somewhat comparable with a 'Fachhochschule', point is most degrees are engineering degrees, and to get them you study 'the science'. There is no low level engineering class where you 'only' get the engineering 'title' without ever having to study 'the science'.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    38. Re:Why do CS grads become lowly programmers? by KlomDark · · Score: 1

      Now there's something I haven't heard about in a LONG time...

    39. Re:Why do CS grads become lowly programmers? by TangoMargarine · · Score: 1

      Ah, okay. I probably would have picked up on that if you had said "at university" instead of "at an university."

      (Not sure what the rule is officially but I'd say "a university" not "an university." Cf. whether it's the spelling or the pronunciation that determines a vs. an.)

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    40. Re:Why do CS grads become lowly programmers? by Ichijo · · Score: 1

      The web browser you are using to read this is probably at least as reliable, per line of code, as a bridge, per part.

      --
      Any sufficiently unpopular but cohesive argument is indistinguishable from trolling.
    41. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      It can be. Look at how the space shuttle codebase was written.
      The problem is almost no one wants to pay for it.

    42. Re:Why do CS grads become lowly programmers? by Cederic · · Score: 1

      Just getting people to understand what code runs where (javascript on browser, C# on server)

      I just had to work with a CS graduate who insisted that you couldn't possibly rebuild a web page in the browser as it had to be done server-side.

      Finding an example that proved him wrong turned out to be quite tricky. I started with "Open a web page. You choose which one" and to get solid proof of dynamic page creation we actually had to go to the website he chose.

    43. Re:Why do CS grads become lowly programmers? by Cederic · · Score: 1

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

      Bullshit.

      Now admittedly physics grads make (in my experience) the best software engineers but pretending you have to study science at degree level to become a software engineer is elitist bullshit.

      Computer science graduates tend not to become great software engineers.

      But your arguments were flawed to start with. Software engineering and software development are not the same thing at all. Any cunt can get a program to work, learning the engineering disciplines around that takes time, experience and study.

      Think of it this way:
      - a developer gets code to work
      - an engineer gets code to work in a predictable manner
      - a scientist explores how the code works

      A great engineer doesn't need to know how, they need to know what. A scientist will know the theory but may not be able to apply it in practice. A developer may get lucky.

    44. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Haha, I'm not a native english speaker.
      I kinda miss the distinction between 'a' and 'at' in this case.
      Ah, the you talk about 'a' versus 'an', but university is 'an' regardless what. In fact the rule is pronunciation.
      But how wired do you pronounce 'university' that you rather use 'a' instead of 'an'? As soon as a word (or the relevant word, a/an can skip one word like "an green apple", 'an' refers to the apple not to green) sounds as it starts with a vowel it is 'an'.
      E.g. 'height' sounds like eight, so you say: that was 'an reasonable height' (bad example perhaps).
      How you consider 'university' which clearly starts with a vowel as reasonable for an 'an' (lol, an an ... ) , I don't get.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    45. Re:Why do CS grads become lowly programmers? by khellendros1984 · · Score: 1

      Show me a bridge with a couple million moving parts, designed and built by a team of 5 people within 2 years and we'll be looking at two vaguely comparable structures. Also, the same bridge must be (without adjustment) equally suitable for placement in 10,000 different environments.

      Bridges are built for reliability above all else. Most software is built for speed and flexibility. Apples and oranges.

      --
      It is pitch black. You are likely to be eaten by a grue.
    46. Re:Why do CS grads become lowly programmers? by Cederic · · Score: 1

      Well then, software engineering clearly is 'real' engineering.

      Tell me, created many bridges lately in which the budget was cut in half, the timescales reduced by two thirds, the width of the gap you're crossing doubled, the traffic changed from cars to trains, back to cars then become cars on trains, and the construction crew outsourced to India, all after you've already laid the foundations? And still delivered?

      Stop fucking comparing a 60 year old maturing discipline with a completely unrelated millenia old one then.

    47. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Not bullshit.
      In every country I'm aware off, 'Engineer' is a 'trade mark'/title granted by the government/the state if you successfully passed a study at an university.
      If you call yourself engineer, and you are not, that is fraud, and punished by jail.

      Your "think it that way" is up to dispute ... there is no distinction between a developer and an engineer in my world. The words are interchangeable. To 'develop' means: you don't know how to do it nor how it will look, you develop it, exactly the same thin an engineer will do. The opposite would be 'craft' you exactly know how to do it and how it will look in the end.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    48. Re:Why do CS grads become lowly programmers? by multimediavt · · Score: 1

      I think you're high as a kite and full of shite!

    49. Re:Why do CS grads become lowly programmers? by multimediavt · · Score: 1

      From a guy whose handle is 'MobyDick' the most exciti... zzzzzzzzzz

    50. Re:Why do CS grads become lowly programmers? by Cederic · · Score: 1

      In my country 'engineer' is not a trade mark or regulated title. 'Chartered Engineer' is.

      Now I happen to be a chartered professional myself, just not a Chartered Engineer. Could be if I wanted to, with software engineering as the discipline, and no studying of computer science required.

      But your world is naive and simplistic. Developing and engineering are different. Being a craftsman and an engineer are different. Being an artist and an engineer are different.

      But hey, keep using the wrong word and trying to impose your regulatory environment on others. Enjoy.,

    51. Re:Why do CS grads become lowly programmers? by michael_cain · · Score: 1

      This illustrates nicely the underlying theme that so many of the commenters are bickering over: CS is used to mean so many things that it's unlikely anyone getting a four-year degree is going to get even a quick look at everything they might end up needing. Just programming spans the range from million-processor-core super computers to fitting five new features into an embedded 16-bit microcontroller with 8K of memory.

    52. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      And you are on dope or have an insulting attitude or both, or you are more likely on cocaine as dope users usually relax ... erm, what was your point? Could not find it.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    53. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Rofl,
      Naive? Developing and Engineering is not the same thing?
      Why is then software either developed or engineered with the exact same result? Why is a space craft engineered or developed with the exact same result? Should I point out air crafts, auto mobiles? Complicated building structures lied bridges and houses?
      So, do you need more engineering or more development skills to engineer a software or to develop a software? Oh, suddenly you realize it is a synonym?
      Of at all you could perhaps argue that 'developing' is a slightly higher demanding 'thing' than engineering. After all as an engineer you know all formulas/materials/parameters for your project before hand. As a developer you usually have to develop the skills, figure the relevant math, the correct approach and the optimized scope on your own.
      Hence it is called developing. Developing is like inventing, engineering is far more the doing on a safe ground (but for some reason in your economy/country you seam to have switched meaning of the two words)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    54. Re:Why do CS grads become lowly programmers? by slew · · Score: 1

      Actually I would say that they should take one class on the principles of security...

      Most of the problems with web security are not really novel to web program, but are systematic security issues that permeate all levels of software. For example, execution privilege (e.g., cross site), parameter checking (e.g, including buffer overruns and sql injection) aren't really novel to web application security.

      Most folks seem to think that security is some sort of discipline or retro-fit on existing code, but it's really more similar to a style of programming (like an orthogonal axis to procedural vs object oriented vs functional programming), because most of the difficulty behind security relate to auditing/testing code and behavior.

      Sadly and predictably, when you start talking about programming styles, you come up with all sorts of resistance from inflexible programmers and heaps of legacy code so security things generally things get avoided/overlooked/dismissed, and well, the predictable happens.

    55. Re:Why do CS grads become lowly programmers? by aXis100 · · Score: 1

      Like it or not, a significant portion - maybe even a majority - of multi-million dollar software projects fail dismally.

      Maybe the problem is the (lack of) software engineering. Maybe it's the project management. Most likely it's really poor requirements gathering from clueless users who fill the scope full of edge cases. Either way, the industry has a shockingly poor reputation.

      Until the software industry can get their shit together, I'm hesitant to use the word "engineering" anywhere near it.

    56. Re:Why do CS grads become lowly programmers? by TangoMargarine · · Score: 1

      I believe the exception is if the first letter is something that is a *silent* consonant, leave it with "a." For example, honorable or university*. A lot of people (native speakers) seem to not get this as you'll see "an historic" a lot of the time but the 'h' isn't silent so it should still be 'a.'

      I'll admit that the "if it's separated by another word, use that word instead" seems maddeningly inconsistent. I consider it a bonus that we don't conjugate every god damn part of speech, though. After taking a few years of German, it seems like in German you have to conjugate 6 or 7 out of 10 parts of speech, while in English it's only really 3 (pronouns, verbs, and articles). And of course the genders for 90% of nouns are completely random. My favorite is "das Mädchen." Argh!

      * Do I remember correctly that Universität is begun with an "oo" pronunciation? In English it's a "yoo" pronunciation.

      The first 2 results for "a vs an" on Google agree with me, anyway. I wouldn't be surprised at a dissenting opinion.
      https://owl.english.purdue.edu...
      http://www.quickanddirtytips.c...

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    57. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      Software "engineering" can't be considered real engineering until it can produce work output that has the same level of reliability as a properly engineered bridge using repeatable, proven processes. Until then it has as much relation to engineering as a certification mill.

      Ummmm, civil engineering is subject to the vagaries of engineering style, talent, political expediency, construction cost, building codes, illegal corner cutting, union labor, and impact of local geology and climate (including changes due to man-made climatic change.) It would be fair to say the remarkable engines of information that exist today far surpass the "Proven Process" of our roads and bridges.

      Not that those same roads and bridges couldn't exceed our information architecture in beauty and design, its just that anytime you bring a band of howling, shit slinging primates into the picture particularly the ones in business suits), you can kiss those pretty ideas of engineered to theoretical limits pretty goodbye.

    58. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      &;&;@:/&/$/. NO CARRIER

    59. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      People who just bang out code for a living should be coming from trade schools that are geared toward practice rather than theory. The problem is that companies insist on requiring their code monkeys to have a bachelors or masters in CS.

    60. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      "Programming = Application = FUN.
      Computer Scientist = Research = Theory = mostly boring."

      I'm pretty sure you're confusing the assignment operator with a comparison operator.
      This way you have explicitly made the Computer Scientist get the value of mostly boring, without ever asking if it's true!
      You may have a degree but i would never hire someone as assuming as you.

    61. Re:Why do CS grads become lowly programmers? by Flammon · · Score: 1

      Well engineered software is art to me.

    62. Re: Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      "Youniversity"

      It's not a unique occurrence in English.

    63. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      This illustrates nicely the underlying theme that so many of the commenters are bickering over: CS is used to mean so many things that it's unlikely anyone getting a four-year degree is going to get even a quick look at everything they might end up needing.

      There's also the common problem where someone thinks "a bachelor's degree in CS is supposed to be training for my particular specialty and nothing else."

    64. Re:Why do CS grads become lowly programmers? by HornWumpus · · Score: 1

      Engineering is mostly applied science. Duh.

      Still the world is not your experience. Software engineering is not the same as CS.

      In the USA 'software engineering' degrees are almost always 2 year trade school aborted educations. Engineering schools give out EE and Computer E degrees.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    65. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Erm, did not get in what part I was wrong, or did you just tell me I was correct?
      Is it now 'a university' or 'an university' and if so ... why ;)

      I understand your problems with german :) especially "das Maedchen" (how did you get the umlaut into it, did you really take the burden to write some ampersant uml u bla blub?)

      Many germans really would like some stuff would be simplified but the teacher lobby likes to teach what they learned 40 years ago

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    66. Re:Why do CS grads become lowly programmers? by TangoMargarine · · Score: 1

      You were largely correct.

      It's "a university" because the English pronunciation is YOO-niversity, which starts with a consonant(ish) sound. If we pronounced it OOH-niversity which is a vowel sound it would be "an."

      Other than the rampant conjugation and screwy prepositions in German (several seem to translate to 3 different English ones) I'd say I like what I've learned of the language. In some ways it really makes more sense than English...and it's mostly easier to spell :) Maybe there are rules about double-vowels-with-an-umlaut that I just haven't seen.

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    67. Re:Why do CS grads become lowly programmers? by angel'o'sphere · · Score: 1

      Erm, Sorry, I don't get it.
      Is that a new british versus US thing?
      Most definitely it is 'an' university, not 'a'.
      The 'Y' sound in the beginning, if you want to call it like that is still a vowel! Well, at least in german, and how I would speak it with my 'german accent'.
      I googled now, and it seems it is a running question.
      People agree that Y in this situation is a consonant. Sorry, that is beyond my understanding.
      How can you pronounce University in a way that it start with a consonant? (We germans ofc. say OOniversity like in 'look', perhaps that makes it even more complicated)
      Sounds like someone said: in this case it is a consonant :) an arbitrary definition ... but german is full with arbitrary definitions, too ... somI feel your pain.
      Funny that I wrote and spoke 'an university' wrong for 30 years.

      Well, regarding your 'complaint' about german prepositions ... I guess the main problem is (for both of us) that german and english have overlapping roots but diverged considerably. A word like 'actually' or 'eventually' means something completely different in german.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    68. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      I imagine that this view is going to be unpopular -- but why do computer scientists insist on calling themselves scientists? Maybe I'm old fashioned, but Computer Science is really an offshoot of Applied Math, which despite common parlance isn't really science in a classical sense unless you want to call Mathematics a Science. Most (possibly not all) Computer Scientists are not actually Scientists but Mathematicians or Engineers.

      Yes, yes... I know, heck, I've got a B.S. in Computer Science (from an Engineering school). I sure as heck am not a scientist. An engineer, hmm... yes... although not an Engineer (having not received a P.E. or proper Engineering certification either), so I don't get a fancy post-nominal. Sometimes, I conduct science though, just not in Computer Science.

      My wife, my brother, now they are both scientists. What is the difference you might ask? First and foremost scientific method. I do not pose a hypothesis or theory, devise an experiment, and use my experiment to test my hypothesis. At best, I ask a question and develop a proof; often I just need to design a system that executes a test in an efficient manner. If I'm lucky, it will even have to be in a provably efficient manner. Sounds a heck of a lot closer to Math than Science to me. When my brother or wife approaches a problem they (1) develop a theory or hypothesis, (2) develop a test for that theory, (3) execute said test, (4) rinse, wash, repeat whilst exploring the ways that the theory might be wrong but the test still provide supporting results. Some branches of Computer Science are a lot closer to a science in this sense -- but even these rarely cross the line to something that can't be solved with an abstract proof -- the hallmark of Math.

      So what am I? Probably a not particularly broadly versed Mathematician who makes many branches of Science a heck of a lot easier. I've written many programs that were used as tests in the aforementioned process.

      An engineer -- sure. A programmer, coder, IT -- I totally get the argument that calls this a "trade" or "profession" -- so is engineering. I'm all of the above.

      We call 'em different names 'cause my fancy Ivy education doesn't want to sit in the same cube with someone from Treehouse. Welcome to elitism. But, is there a difference between the two? Yup, sure is.

      The Ivy edu is more likely to know the math he (or she) is doing. The Treehouse guy or gal... not so much [unless they are more than meets the eye]. The Ivy edu is also more likely to grok business management, literature, history, and natural sciences. Treehouse (or pick your coding school) -- might come from any background, but doesn't require any either. Who is the better coder? Who knows, could be either. Coding is definitely an art, and knowing the Math doesn't make you Picasso -- but it helps [Picasso was a perfectly capable painter from a technical perspective before he got all cubed out]. Architecture is too. Not all good coders are good architects. Sometimes you need the math to be an architect, sometimes you don't. You definitely need the math to do a proof or algorithm design, but that still doesn't make it a science.

      You want an implementation, hire a good coder. You want an architecture, hire a good engineer. You want an algorithm or proof, hire a good mathematician.

      You want to do science, ask a question that you can test.

    69. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      You study ENGINEERING (a discipline) to become a LICENSED PROFESSIONAL ENGINEER.

      You are delusional. The vast majority of engineers do not become licensed, because there is no need for this to do most engineering jobs. The licensing process is required for a very limited subset of those jobs, namely the ones with high exposure to potential litigation. Professionalism is a mindset, it does not come from a piece of paper or from passing a written test and paying a fee.

      Walk into a typical chip design group, where you'll find people doing some of the most difficult and complex engineering in the world, and ask how many are licensed? The answer will surprise you.

      Very few people doing materials engineering, or electrical engineering, or software engineering, or chemical engineering get licenses. Civil engineers, yes. Mechanical engineers, sometimes. I can't speak from personal knowledge with respect to the other engineering disciplines, but I would be enormously surprised if even a third of the graduates doing engineering needed licenses.

      Engineering is applied science, done for the benefit of society. A computer science degree is every bit as reasonable a preparation for becoming an engineer as a physics degree is. The physicist will (probably) not be as skilled at the theory of beams and plates as a civil engineering, and thus would probably not be handling tasks requiring this kind of knowledge, but there are many engineering tasks that person will be qualified for (depending upon their physics speciality). A device physicist, for example, can be a superb engineer for a job that calls for an engineering team to do chip design or fabrication (and almost nobody with a formal "engineering" degree would be as good at device physics).

      Even becoming a computer science teacher would require you to study EDUCATION as a discipline.

      Nope. Also wrong. The vast majority of PhD's teaching computer science know nothing of EDUCATION as a discipline (and get little or no training in being good teachers). Some of them are good teachers, many are not. About the same as those with formal degrees in education.

    70. Re:Why do CS grads become lowly programmers? by Dabido · · Score: 1

      Haven't seen a bridge since the early 1990's. I just use routers now. (Though, some of the old networking books say a router is also a bridge). Usually Network Engineers configure bridges/routers, so the answer is Engineer. Right? :-)

      --
      Sure enough, the cow costume was hanging up next to the superhero outfit and sailors uniform. (S,Spud)
    71. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      Known as a "Frankeneer"

    72. Re:Why do CS grads become lowly programmers? by UnknownSoldier · · Score: 1

      R&D _can_ be fun. But Theory without Application is (mostly) useless.

      That's OK, I wouldn't want to work for someone who makes assumptions about someone they have never met, anyways.

    73. Re:Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

      > I'm pretty sure you're confusing the assignment operator with a comparison operator.

      You'd be wrong in assuming it's an operator in a computer language rather than a comparator sign in mathematics.

      I wouldn't want to work for a dipshit who only knows C anyway. :-P

    74. Re:Why do CS grads become lowly programmers? by Pherdnut · · Score: 1

      It wouldn't be ideal if they learned that stuff beforehand?

  4. Not this again. by HornWumpus · · Score: 5, Insightful

    Yes Java monkeys don't understand memory management.

    But a CS student shouldn't be a simple Java monkey. C isn't good enough. They should all have at least a semester of Assembler.

    There have always been a subset of CS students that didn't get anywhere close to the metal. They suck.

    --
    John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    1. Re:Not this again. by Anonymous Coward · · Score: 5, Insightful

      This. Memory management isn't difficult in the brain power sense, it's difficult in the pain in the ass sense. We've decided years ago that there are much better things to be thinking about than releasing objects and reference counting and that sort of garbage, especially since it can be automated.

      What you are reading is people who are trying to elevate themselves by referencing a new obscure technique. Hey, I know AT commands for a modem. Does anyone give a shit? I certainly hope not.

      If the only thing that differentiates a great CS grad from a crappy one is memory management, that's a pretty shallow argument. Google it, read it, manage memory for a few hours and poof you're an expert.

    2. Re:Not this again. by SirGeek · · Score: 2

      I've been out olf college for *mumbles 26 years* - I had Pascal, C, 2 Different Assembly Languages (X86 And VAX). Not to mention classes in Data Structures and Compiler Design. I've also done Embedded Systems Programming (Aircraft Engine Controls and Fire Alarms as a couple of examples). Too many people get the attitude - 'Oh. My program needs more memory, Just add some to the server.' which is a bad. Why write optimum code ?

      I'd LOVE to see the Code Monkeys code working in some of the systems that I had to work with - Entire Program space was 32K (thats right - 32,768 BYTES) of memory - and NO OS. I've also worked with custom cpus that had 2 registers and no stack

    3. Re:Not this again. by Anonymous Coward · · Score: 2, Insightful

      >Too many people get the attitude - 'Oh. My program needs more memory, Just add some to the server.' which is a bad. Why write optimum code ?

      Optimized for memory management? Why not optimize for speed? Caching and memory access beats disk access every day of the week and two times on Sunday.

      "This app is slow."

      "But it only requires 512k of your 64 gigs of memory!"

      "This app is slow."

      >I'd LOVE to see the Code Monkeys code working in some of the systems that I had to work with - Entire Program space was 32K (thats right - 32,768 BYTES) of memory - and NO OS. I've also worked with custom cpus that had 2 registers and no stack

      That mattered briefly during the mobile revolution but was obsoleted after the second or third release. It's a neat skill, but like yodeling, doesn't really matter anymore.

    4. Re:Not this again. by roman_mir · · Score: 5, Insightful

      Nonsense, real CS people should have a year studying butterflies.

      As to Java or Assembler, neither are computer science. CS is about algorithms, run time, data models, paradigms, approaches. BTW, without understanding memory management, you will have memory management problems regardless of the language used. It is just the degree of how bad the problems are, whether they cause program to terminate only or also may become attack vectors.

    5. Re:Not this again. by gstoddart · · Score: 4, Interesting

      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.

      --
      Lost at C:>. Found at C.
    6. Re:Not this again. by HornWumpus · · Score: 1

      99% of code is better slow and simple. Because it simply doesn't matter.

      That doesn't excuse slow and unnecessarily complicated. I've seen queries with 8 outer joins to various company IDs.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    7. Re:Not this again. by quetwo · · Score: 1

      The trick is knowing what is happening under the hood -- whether you do it on a day-to-day basis or not. It's good to know why you wouldn't want to send a LONG into a function that requires a FLOAT. It's also good to know what the difference is between a MAP and having two Arrays or linked-lists. These things don't require doing memory management by hand, but being able to demonstrate what and why is the difference between a code monkey and somebody who is architecting code. Because a lot of the higher-level languages will obscure this from you, you can get along without ever learning them -- but you can get yourself into a hole quickly.

    8. Re:Not this again. by 31415926535897 · · Score: 1

      I would disagree that C isn't good enough, but I do agree that at least a semester of asm would be helpful.

      Watch out for mips though--that's what they used at my uni, and while it taught the principles that are found in all architectures, I found it discouraging that our only interaction wound up being through a vm. There was an excellent electrical and computer engineering class that used x86 assembly, and that's the one I'd recommend any CS student take (assuming your school offers something like that).

      Finally, I think there is a skill for "memory management" that must be learned in Java (not letting the garbage collector ruin your day), but I'm not sure it's something you can learn through class when you're happy enough to get the proper incantations of javac and java right.

    9. Re:Not this again. by HornWumpus · · Score: 2

      All the things you list are only approachable after the student has a couple of actual languages under their belt.

      Undergraduate CS is about preparing students to take on those subjects, or get a job.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    10. Re:Not this again. by Matheus · · Score: 4, Interesting

      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.

    11. Re:Not this again. by Anonymous Coward · · Score: 0

      Speed is bullshit. Don't optimize for speed, optimize for efficiency. Which means try to keep in mind that there are multiple things that can slow the performance down, but trying to focus on the symptoms is unlikely to be an effective method of getting at it.

      If you're making wise use of RAM, HDD access and computational power, you'll have a program that's reasonably speedy. But, if you're optimizing for speed, there's no particular guarantee that you won't be causing problems in one or more of those areas.

      As far as RAM goes, I don't have 16gb of RAM so that you can waste it all on bullshit. I have 16gb of RAM because I like to run VMs and occasionally games that require more RAM and preferably while doing other things in the backgroun. Programs don't need to keep to the absolute minimum amount of RAM anymore, but that's not an excuse to waste huge amounts of RAM on bullshit.

    12. Re:Not this again. by bangular · · Score: 1

      I had CS professors that really didn't know how to program (just basic pseudocode). Those professors would argue that the only thing important was the mathematics and logic. Everyone is always going to claim they know what's best for CS. It's usually what was important to their professors during the time they graduated.

      FWIW, I went to an ABET accredited school and an assembler course was still required.

    13. Re:Not this again. by gstoddart · · Score: 4, Insightful

      99% of code is better slow and simple. Because it simply doesn't matter.

      Right up until it does.

      And the people who think optimization is pointless because it doesn't matter are generally clueless about how to fix it when it does fall apart, because they're so reliant on their frameworks and libraries they haven't the slightest idea of where to begin.

      I can't even tell you how many times I've seen code which was written to look pretty, but which in practice was bordering on unworkable.

      I've seen more than a few OO developers who write what looks like clean, elegant code, but which actually has a huge amount more overhead and convolution which is masked by the library -- so much so that they're calling an n^2 algorithm n^2 times, instead of just writing something which didn't suck from the beginning.

      Because, in their mind, the magic library and compiler would make it super efficient, when it did anything but.

      --
      Lost at C:>. Found at C.
    14. Re:Not this again. by Anonymous Coward · · Score: 0

      Just because you don't learn the low level doesn't mean you are not capable. Yes, the low level is interesting and useful to know to build on, but the reality is that computer science is expanding and it's simply not going to be possible to know the whole way down. Just as you can be a taxi driver without knowing the details of how your car works, you write high-level code without knowing the details of assembly.

    15. Re:Not this again. by Anonymous Coward · · Score: 0

      I work for a company that has a big, internally developed monolithic central application which I have to support. Stepping back with a cynical and criticial eye the application should be able to run smoothly on IIS or NES install on a mid-range server from the early 2000s backed with an Oracle DB. Instead, it is a monster of a Java application (I don't blame Java specifically FWIW) with a huge team of developers and a monstrous, unweildy and huge DB. It's still sluggish so we're throwing a caching layer between the DB and application, adding more complexity and points of failure. I wish someone would just take a step back and ask "What the F are we doing here?". Unfortunately the leadership of the dev team seems to be dysfunctional and won't take advice. I wouldn't advise PHP for an app like this but the way things are, I think we'd actually be better off.

    16. Re:Not this again. by Anonymous Coward · · Score: 0

      Sorry, caching is not bullshit.

    17. Re:Not this again. by Richy_T · · Score: 1

      A little generic assembler is probably good to know for a CS as it's getting down close to the metal. I wouldn't say more than a passing familiarity with it was needed in most cases though.

    18. Re:Not this again. by Anonymous Coward · · Score: 1

      While I don't support either extreme, saying these skills are irrelevant is pure ignorance. Embedded - SMALL - microprocessor systems outnumber desktops, servers, Google and Amazons could by hundreds if not thousands to one. NONE of these are programmed in java or C# or PHP they are programmed in native assembler or C or something related. Your car (even a cheap bottom of the line 2 door) has upwards of 32 microprocessors if it was made in the last decade. Most of these are 4 or 8 bit micros with a couple of "monster" 32 bit controllers for things like engine management. Cycle counting still matters in systems like these and there is just no way to do it in a system programmed whit modern convenience features like GC.
      That said however, this is a small niche in the software/hardware engineering world ,often filled by hardware people. Most CS graduates (or software engineers, or computer engineers or whatever your university calls it) will work in some variation of Enterprise software. Then, indeed Java or C# or any of 3 or 4 modern scripting languages like PHP or Pearl rule the day. In that environment no one cares whether you can cycle count (it would be futile to try in a modern multi-core hyper-threaded system anyway) or what you did on VAX or IBM systems 25 years ago. While data structures and algorithms are still very important, so are modern higher level constructs such as patterns and yes even exposure to formal methodology like Agile. Schools teach these things because this is what most of industry wants and needs. While I too am old enough to have learned C and PASCAL in school and taken compiler writing and all the rest, the world has changed, and us old timers need to adapt, find a niche where we can still be relevant without adapting (see embedded controls) or die (be promoted to management). Computer Science and software engineering are indeed different things and I am often irritated that schools teaching software engineering refer to their programs as "computer science" but that is a completely different question.
      In reply to the original poet - it is good to know how things work under the covers - it makes you better able to take maximum advantage of whatever language/framework/OS you are using, however it is NOT vital, and certainly not a requirement for 90+% of the available jobs. I encourage anyone whit interest to learn whatever they can in this area, but that is a personal choice and we should not belittle those who simply don't care and didn't have to learn these things because 25 years ago it's all we had.

    19. Re:Not this again. by Anonymous Coward · · Score: 0

      Love assembler. No wtf's (minus errata of course)

    20. Re:Not this again. by 93+Escort+Wagon · · Score: 1

      What you are reading is people who are trying to elevate themselves by referencing a new obscure technique. Hey, I know AT commands for a modem. Does anyone give a shit? I certainly hope not.

      Did you really mean to type "new"?

      --
      #DeleteChrome
    21. Re:Not this again. by umghhh · · Score: 1

      Memory management is different in different programming environments and one has to do different things for different application types. Thus saying learn programming X is just silly especially as there is not many jobs that require assembler. I would say that using brain and having open mind with some basic skills would go a long way. But hey - go and teach people assembler for all the fame of finding code badly generated by gcc or 'knowing' how bare metal works. I learned quite early that coding is only quite small part of my job as a software engineer. I thought that recent times changed that but after overcoming the assault of many gurus I came to a conclusion that common sense, communication skills and some sense of humour bring me further than any magic bullet that gurus sell.

    22. Re:Not this again. by Anonymous Coward · · Score: 0

      That mattered briefly during the mobile revolution but was obsoleted after the second or third release. It's a neat skill, but like yodeling, doesn't really matter anymore.

      It matters plenty in embedded firmware development.

    23. Re:Not this again. by 93+Escort+Wagon · · Score: 1

      99% of code is better slow and simple. Because it simply doesn't matter.

      Well, we are talking about Java - slow is a given.

      --
      #DeleteChrome
    24. Re:Not this again. by Anonymous Coward · · Score: 0

      Memory management IS difficult in a brain sense. Too many java programmers wave their hands and say the garbage collector will take care of it. This leads to horrendous thrashing from over allocation/deallocation. Generational collectors mitigate this but do not fix it.

      And yes, every CS student should have some assembler and computer architecture classes.

    25. Re:Not this again. by Anonymous Coward · · Score: 0

      I'm honestly curious what you do for a living. I live in the world of RTOS where the mantra is always "it needs to run faster". I live in telecom specifically. Oh, we're currently testing at 1000 users, but we know damn well that deployment will be 10,000,000 users, and we've got a 3000ms deadline to establish a connection. Not only does it need to run fast, but we need to know how it will scale when it goes beyond use cases that we physically can't simulate.

    26. Re:Not this again. by Anonymous Coward · · Score: 0

      No, it was supposed to be "an obscure" but my programming fingers typed new instead.

      new Obscure()

    27. Re:Not this again. by mjwalshe · · Score: 1

      Obscure would being able to whistle the carrier tone to get a connection on a long run to the exchange (central office)

    28. Re:Not this again. by Anonymous Coward · · Score: 1

      >It matters plenty in embedded firmware development.

      That's very, very niche. If we're going that route, everything is relevant, which is a strange base to start from because you can't know or teach everything. How's your ENIAC wiring skills? You can't be a real programmer with knowing how to wire an ENIAC.

    29. Re:Not this again. by ZeroPly · · Score: 1

      Everything you are talking about is memory management from a programmer's viewpoint. Understanding how compilers allocate memory, discussing garbage collection, these are all things that a programmer needs to know. An undergrad in computer science needs to be able to understand something like this:

      http://airccse.org/journal/jcsit/0202csit12.pdf

      This is just a random paper I found, and certainly nothing earth-shattering. But my point is that someone trained in computer science should be able to skim through this in 5-10 minutes and understand what's being discussed. A programmer is not expected to.

      --
      Support microSD: in a post 9/11 world, it is unwise to carry your data on media that you cannot comfortably swallow.
    30. Re:Not this again. by Anonymous Coward · · Score: 0

      "This app is slow."

      Actually most of the time that happens it is caused by a monkey NOT KNOWING ENOUGH about how data structures work at an elementary level. You can't optimize for anything if you don't even know what cache is or that your set is actually tree based set and not an hash table based set.
      BLAS (the reference implementation and ATLAS) has been the best performing library for linear algebra for decades available in a very large number of architectures (some of which you never heard about), and no, and it was not made in Java by monkeys it was mostly written in Fortran by scientists, that optimized it by hand because they knew how.
      My experience showed me again and again that it is at least 2 orders of magnitude faster than anything Java has to offer with a much lower memory overhead (which is a good thing when dealing with dense matrices). And before you even think that fast dense matrix linear algebra is irrelevant please do study a little about machine learning et al. .

    31. Re:Not this again. by Anonymous Coward · · Score: 0

      >I'd LOVE to see the Code Monkeys code working in some of the systems that I had to work with - Entire Program space was 32K (thats right - 32,768 BYTES) of memory - and NO OS. I've also worked with custom cpus that had 2 registers and no stack

      That mattered briefly during the mobile revolution but was obsoleted after the second or third release. It's a neat skill, but like yodeling, doesn't really matter anymore.

      That type of thinking is what will keep me employed for the next 20 years (as an Electrical Engineer that specializes in software, all the way from embedded systems to latest high-level languages and frameworks).

      There are lots and lots of fun applications for embedded CPUs that draw microamperes of current while on standby/sleep. You don't get to have a bajillion bytes of RAM because the low-power system constraint means you can't can't spare that much current on RAM refresh, so you (a) write it in assembly or assembly + C and (b) get really creative about your code to squeeze it into 32k.

    32. Re:Not this again. by Anonymous Coward · · Score: 0

      Fail. Java execution time has been measured to be within some tiny percentage of comparable C code execution time with modern JIT compilation techniques, and it has been that way for at least five years.

      It's the morons that don't think about GC while writing Java code that result in the "Java is slow" perception.

    33. Re:Not this again. by Megol · · Score: 1

      Right. Ever looked on some benchmarks for server applications? Java is often faster than C languages...

    34. Re:Not this again. by Anonymous Coward · · Score: 0

      There was an excellent electrical and computer engineering class that used x86 assembly, and that's the one I'd recommend any CS student take

      Really? x86 assembly is terrible. MIPS RISC is 10x easier to deal with. "rep stosd" comes to mind.

    35. Re:Not this again. by PopeRatzo · · Score: 1

      And a semester of combinatorics and PDEs. A surprising number of people with CS degrees don't know math. And if you know math and can program, there is some money to be made

      --
      You are welcome on my lawn.
    36. Re:Not this again. by Megol · · Score: 2

      You work with RTOS development and don't know the difference between speed and reliable response times?!? Me thinks you are a bloody liar...

      Example: The TLSF (Two Level Segregated Fit) memory allocation algorithm isn't used for RTOS because it is the fastest one - it isn't. But one can do analysis of the execution time and therefore determine the worst case execution time for all operations. _That's_ why it's used!

    37. Re:Not this again. by Megol · · Score: 1

      Not really - learning the Von Neumann model is enough IMHO. The rest of architecture is optimization of small factors...

    38. Re:Not this again. by horm · · Score: 1

      The chair of my Computer Science department told my class in lecture that memory management is worthless these days, and that you no longer have to worry about the size of your program or the amount of memory it uses. I stopped giving a shit about my CS program immediately after and began to focus entirely on Electrical Engineering.

    39. Re:Not this again. by jedidiah · · Score: 1

      It is most certainly bullshit if your cavalier attitude towards my resources causes my application to grind to a halt because you are too greedy and there simply isn't enough to go around.

      --
      A Pirate and a Puritan look the same on a balance sheet.
    40. Re:Not this again. by znrt · · Score: 1

      i'm afraid you misunderstood that mm was just an example for GP's point which was that current freshmen are taught in a too high level of abstraction. sw engineering tools have evolved a bit but are still far from perfect, resource availalability has increased a lot but resources are still finite. today you absolutely need to have a clear picture of what is happening at lower levels to make good decisions at high level.

      i don't see a solution for this anytime soon since this comes only from experience, and academic degrees would take a lot longer (that's not a good thing for our education models which are basically efficient factories of skilled workers). on top of that, abstraction levels tend to get higher, so there is less opportunity to tinker with stuff. if you are an old hack you have learnt as technology evolved, so you have naturally gone through all that from scratch. new generations don't. that's their strong point (because their naivety may result in astounding innovation) but at the same time their weakness (because they implement like shit), at present. maybe when we have far more sophisticated execution evironments this will be less of an issue. now it is, and it simply means a degree means very little, only hr guys "value" that.

    41. Re:Not this again. by faedle · · Score: 1

      I designed and built a custom CPU in college. And it had to be somewhat Turing complete.

      Computer science isn't what it used to be.

    42. Re:Not this again. by ThatsDrDangerToYou · · Score: 1

      The chair of my Computer Science department told my class in lecture that memory management is worthless these days, and that you no longer have to worry about the size of your program or the amount of memory it uses. I stopped giving a shit about my CS program immediately after and began to focus entirely on Electrical Engineering.

      Don't blame the discipline. Blame the dumbass CS chair. Try embedded development. All of a sudden you need to worry about resources again!

    43. Re:Not this again. by angel'o'sphere · · Score: 1

      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.
      You really believe that I assume. So what exactly are you doing except randomly calling System.gc() ?

      So what is you approach? Randomly assigning null to variables on the stack or others?

      Sorry ... perhaps you should give back your geek card, (*facepalm*)

      After reading your comment I really fear you belong to those *terrible Java programmers*.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    44. Re:Not this again. by pr0fessor · · Score: 1

      I don't have any trouble believing a there is a annoyed programmer that has inherited a few java messes from recent grads or that he blames their education.

      My niece asked me to help her with her c++ class and I decided afterward that I might check out a c++ class at one of the local colleges but it's not offered in any of the three colleges in my area they only offer java. Apparently not all degrees are created equal.

    45. Re:Not this again. by angel'o'sphere · · Score: 1

      Basically every algorithm you learn in an algorithm class in CS studies will abstract memory away.

      I have many books about that topic, and none of the algorithms presented has any new/malloc/delete/free in them. They are all based on infinite memory, infinite sized arrays. You always have array A and B and what ever an no one cares how they are allocated, how they do grow etc.

      I doubt you find any sorting algorithm in one of Knuth's books that deals with allocating or freeing memory.

      Algorithms != memory management.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    46. Re:Not this again. by CWCheese · · Score: 2

      Please do tell the name of this university so that we may avoid sending our kids to this place.

      --
      Have a Day!
    47. Re:Not this again. by techfilz · · Score: 1

      Data Structures are a must on a CS course, and you need C or C++ to do Linked Lists.

    48. Re:Not this again. by MMC+Monster · · Score: 1

      No, undergraduate CS is to allow students to learn the algorithms and mathematics behind them. Languages should be an afterthought at that level. It's all big O notation and knowing which algorithm to pick.

      Or at least that's what it was when I did undergrad CS 20 years ago. Now get off my lawn!

      --
      Help! I'm a slashdot refugee.
    49. Re:Not this again. by Anonymous Coward · · Score: 0

      Clearly banging things closer to the metal is better. Before taking CS, I went and took a two year course in Electronics Engineering. We had to build our own computer as one assignment (start with the wiring diagram showing the chip layout, show that the current fan-in and fan-out is correct so that you don't draw too much current from a source), and then also show signal diagrams. Design the clock circuit using a flip-flop (eg: JK flip flop), then show your address, data and control busses, then wire the chips together. Notice when I said "build your own computer", I never said 'assemble your own computer', I said 'build your own computer...from the chips up'. Then you wire an output device, add a rom chip, write the bootloader for the rom, add some memory (wire it in), and write a small operating system for it. Software bugs are easy. Hardware bugs means moving a wire.

    50. Re:Not this again. by Your.Master · · Score: 1

      Don't optimize for speed, optimize for efficiency.

      Computational speed is a form of efficiency. The right balance between CPU, memory, bus, network, disk, battery, user responsiveness, etc. is a tricky multivariable problem that does not have a unique general solution.

    51. Re:Not this again. by CrashNBrn · · Score: 1

      Pretty much this. When I was originally in school decades ago. The curriculum was Pascal w/ the professors book, and Pascal for the Data "something" course. Then there was a Programming Languages class that covered, Lisp, Prolog, Modula,n Assembler, and C; thankfully the C book at least was Ritchies'.

      I really don't think introductory computer science classes should be C++ nor Java. Pascal ( or a Modula-based language), Python or (hrm whats another P-language)... PHP? Burn with fire Burn with fire!

      The language should be easy to teach the concepts. Honestly C could probably even be fine for at least the intro-courses. I know I didn't have any problem with C or Pascal --- having learned the basics with Basic :-)

    52. Re:Not this again. by HornWumpus · · Score: 1

      I'm an engineer and I am the dude they go to when they need something to run faster.

      I've been the 30th coder to look at a block of code for speed improvements and gotten two orders of magnitude speed improvement (90%+ of coders simply suck).

      Years after I left a job doing utility simulation software they referred to my output database loader as 'the firehose'. They couldn't match my performance loading data into fucking Access (spit) so they hid their slow database loads behind a message queue. Didn't help as you had to wait for the queue to empty before starting analysis.

      It still remains true that for 90%+ of code speed doesn't matter. You might live mostly in the remaining 10%, but I doubt it.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    53. Re:Not this again. by Anonymous Coward · · Score: 0

      Wrong. I have a CS degree and worked for most of my career as a "software developer" (i.e. code monkey). But I wasn't taught a single programming language at university. I was, however, expected to pick up a half-dozen on my own - and fortunately java hadn't been invented yet.

      As the parent post says, learning a programming language has nothing to do with computer science. That's something that should be learned either on the job (preferably with a decent mentor) or at a trade school. But in either case only after learning enough about how computers work: Starting with the basics, like the heirarchy of slow vs. fast (tape is slow, registers are fast, there's lots of stuff in between), algorithmic efficiency, common data structures, and even memory management. Without some knowledge of the basics a programmer might know the syntax and semantics of a language inside and out, but will still only be able to write idiot-level code.

      So: Learning how to design a compiler, or even create a programming language; yes, that's computer science. Being taught a particular language or set of languages; no, that has little or nothing to do with computer science.

    54. Re:Not this again. by Sp*rH*wk · · Score: 1

      Was trying to mod parent up and got distracted and entered "Redundant", so I rant a bit instead.

      If low level memory management is so relevant how about:
          - punch card writing
          - being able to spot errors from a copy of the entire printed source (yes I remember the days when this was the quickest way)

      Being able to program in C doesn't make you the greatest and Java has plenty of scope for you to need to learn deeper concepts:
        - out of memory exceptions when heap in consumed by objects references not being released you need to understand garbage collection
        - Swing programming means you need to understand concurrent programming techniques

      Overall I am much happier not spending a few days tracking a misbehaving pointer that is causing random seeming memory stomping, those really were the bad old days.

    55. Re:Not this again. by khellendros1984 · · Score: 1

      Weird. My data structures class was in Java, and we handled those just fine there.

      --
      It is pitch black. You are likely to be eaten by a grue.
    56. Re:Not this again. by hibiki_r · · Score: 1

      I wonder if it's you that has to give back your geek card.

      No, competent Java developers do not call the garbage collector at random. Or ever, really. However, there are often memory problems with Java apps that, from a user's perspective, are not really much different from a traditional C leak. What we do in JVM languages is make sure that objects are out of scope as early as possible, so that the garbage collector gets to them quickly. It's very common to see silly mistakes like making data structures grow without bound because code keeps adding to them, and never getting removed. It's not a memory leak, in the C sense, but your memory use is growing without bounds, and without doing anything useful, just the same.

      There are quite a few variations of issues like that: A reference or two can make many megabytes worth of objects not get marked for deletion. If you had ever opened a Java profiler, you'd have seen that managing this kinds of memory problems is seen as just as important as figuring out what parts of the code are hogging the processor.

    57. Re:Not this again. by Anonymous Coward · · Score: 0

      All the things you list are only approachable after the student has a couple of actual languages under their belt.

      Tell that to Ada Lovelace. She did computer science on a hypothetic mechanical engine without any actual computer language. Machines bring the computer science with them. Languages are just task-oriented comprehensions of machine parameters. They make it easier to focus on seminal aspects of computer tasks but are not inherent to their operations, abilities and complexity.

    58. Re:Not this again. by WaffleMonster · · Score: 1

      What you are reading is people who are trying to elevate themselves by referencing a new obscure technique. Hey, I know AT commands for a modem. Does anyone give a shit? I certainly hope not.

      Everything of consequence uses explicit memory management.. Kernels, browsers, network stacks, database stacks, codecs, games.. you really have to work that reality distortion field to get to "obscure technique"

      If the only thing that differentiates a great CS grad from a crappy one is memory management, that's a pretty shallow argument. Google it, read it, manage memory for a few hours and poof you're an expert.

      What is the difference between managing memory, connections, sessions, transactions, access locks, files? It is not about "memory" it is about "resources" where many of the same patterns are not optional. Loading CD's into your head and declaring "I know Kung Fu" only works in the movies. You have to live and breath resource management or you will be clumsy and fuck it up -- this is what people are complaining about.

    59. Re:Not this again. by angel'o'sphere · · Score: 1

      What we do in JVM languages is make sure that objects are out of scope as early as possible, so that the garbage collector gets to them quickly
      There is no way how to do that, hence my questioning about what you are actually talking.

      The rest of your post makes sense, pointing out that true memory likes are exactly the same in C as in Java ...

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    60. Re:Not this again. by bidule · · Score: 1

      Nonsense, real CS people should have a year studying butterflies.

      Oblig. ref : http://xkcd.com/378/

      --
      ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
    61. Re:Not this again. by marcomarrero · · Score: 1

      Even worse is that REP STOS executes a lot slower than corresponding code since Pentium. I agree X86 is horrendous, especially its crazy little-endian. I was unfortunate I already knew 6809 asm: SEX, STD U++, HCF (sign extend, halt and catch fire).

    62. Re:Not this again. by Anonymous Coward · · Score: 0

      ^This

      being an embedded dev, even on a pretty beefy piece of hardware, once customer feature creep comes in on a generation of products it was not designed for, that 1gig of memory (of course much sent to kernel space due to our product) we had started with quickly disappears, and now we are back to going through the code for a few months to pull out all the ridiculous buffers and unnecessary allocations that went in from devs who still have no real concept of an embedded system. Since they work at the higher level of the system though, generally in UI and system control, they usually dont bother with nitpicking memory usage as they go along.

    63. Re:Not this again. by ezelkow1 · · Score: 1

      I dont know if Id dismiss mips out of hand. Thats what we were taught as well, and since most projects for CmpE/EE were based on avr and pic controllers and they run mips, it worked out just fine since we got to put them to use on real hardware. Plus my current job is using mips, though we are transitioning to ARM this year, at least mips is close enough that its not a huge deal

    64. Re:Not this again. by Anonymous Coward · · Score: 0

      It does matter, unless the code you're writing doesn't really matter to begin with.

      This is where the 80%/20% rule applies. For fairly little effort (20% of effort), a coder worth their buck can write maintainable code that is reasonably optimized (80% optimized).

      Even in C#/Java land: Someone who doesn't understand the performance implications of inserting, sorting, removing, and finding for the collections they choose is asking for trouble. I'm definitely not doing my job unless I at least consider for a few moments what I think is a reasonably good choice, based on how I expect the collection to be used.

    65. Re:Not this again. by Anonymous Coward · · Score: 0

      You need to Harden up - if you watch Linus talk about how he started coding, it was writing straight machine code.

    66. Re:Not this again. by PipsqueakOnAP133 · · Score: 1

      If your only suggestion is randomly calling System.gc() or randomly assigning null to variables, I'd drop everything right now and revoke your commit privileges.

      Matheus is pretty much right. Another way to describe it is that GC doesn't absolve you of needing to know and codify your object lifecycles.

      When you create an object or assign it to an instance variable, you have taken partial ownership of it.
      Therefore, every time you do this, you must figure out where in your object lifecycle you give up (assign null) your partial ownership of that object.
      Easiest way to do encourage this is for all classes which hold onto objects, you create your constructor and you create an invalidate() function where you let go of all these objects (usually by calling invalidate() against objects, and assigning null or clear() on containers/collections).
      Finally, you need to be able to document when exactly this object is intended to be instantiated and when it is expected to be freed.

      If you can't figure out when you should own or disown other objects, either:
      * you should be reading through the class to figure it out
      * you should redesign the object because it's poorly written
      * you should redesign the architecture because it's poorly written
      * you should write down a ton of comments and suspicions
      * you should ask for help
      * or you should do more than one of these options.

    67. Re:Not this again. by geoskd · · Score: 1

      That mattered briefly during the mobile revolution but was obsoleted after the second or third release. It's a neat skill, but like yodeling, doesn't really matter any more.

      Wrong, very wrong, and terribly wrong. On any platform, memory equals money, storage equals money, and cpu cycles equals money. You might scoff and poke fun at the guy who says memory management matters, the extra ram only costs $0.10. The fact is that when you intend to sell 10M units, that $0.10 amounts to a millions dollars. If I told my employer that I saved them 3 weeks of my time by writing shitty code, but they would have to pay an extra $0.10 unit cost, I wouldn't last longer than it took my boss to finish spitting out the tyrade of expletives that I would have coming. If you're only selling 10,000 units, then the devs time is more valuable than performance, but anything above that number, and resource management matters big time. Web programmers get away with lousy code on a more regular basis, because they can offload much of the cost of processing on their customers. Even there they have to be somewhat careful because if the thing uses too much of the system resources, they loose a customer because of it...

      I've seen companies dedicate an engineer to figuring out how to remove a $0.01 capacitor from a design because the savings annually amounted to close to 7 figures in unit cost... That's the guy that makes 250k/year and that is why he is earning it. Simply put, you're only worth as much to your employer as the difference to their bottom line because you're there. If they can replace you with an uneducated guy from Elbonia without hurting their bottom line, they're going to do it. If you want to make the real money, you have to know what the hell you're doing.

      --
      I wish I had a good sig, but all the good ones are copyrighted
    68. Re:Not this again. by Euler · · Score: 1

      Embedded systems may not get the attention of mobile apps or web development, but they are literally surrounding you. They are everything but a niche. Every entertainment device, appliance, furnace/AC, remote control, toys, car, cable modem, etc. And they all run on low-cost processors where bits and instruction cycles make a difference.

    69. Re:Not this again. by Etherwalk · · Score: 1

      I designed and built a custom CPU in college. And it had to be somewhat Turing complete.

      Computer science isn't what it used to be.

      I had to build my infinite tape drive so that it stretched uphill in the snow...

    70. Re:Not this again. by Anonymous Coward · · Score: 0

      If memory management is simple aenough that we can write programs that automatically write programs to manage it, why do we need programmers to know it?

      Do we need mechanics that can forge cast iron and aluminium to make the parts they use to maintain cars?

      Do we need bridge engineers to spend years mixing concrete to be used in the bridge foundations?

      Do we require the researchers at the LHC to practice cooling magnets to near zero k to be able to smash atoms and study the foundations of the universe?

      It's a false equivalence, based on the wonderful "the youth of today are absolutely useless..." idea. How many people on here do you think know how to service their own car? They still drive it every day...

    71. Re:Not this again. by Anonymous Coward · · Score: 0

      Entire Program space was 32K (thats right - 32,768 BYTES) of memory - and NO OS.

      It's not like these systems are rare or anything. I do this as a hobby (ok well, my code doesn't always work ;-) ). Basically I agree here, any CS student should program on microcontrollers, in assemby, in C, in C++. On paper. Learn the math very well. Be familiar with bit operations. Learn the basics of processor design. Nothing fancy, just a simple educational processor on simulator or paper. Learn how memory works with the processor ( pure CS theory doesn't really give a crap about this, as the memory is just given ). Basics on digital design would be great also.

      The bottom line is there is way too much stuff to really teach. That's why there is line of physicists, materials engineers, electrical engineers, ASIC(FPGA, PLC, etc) designers, embedded programmers, C programmers, etc before we get to the point where some java programmer can even turn his computer on. Basically there isn't enough time, so it's just easier to crank out java programmers, at least they can feed themselfs with that.

    72. Re:Not this again. by Anonymous Coward · · Score: 0

      " Hey, I know AT commands for a modem. Does anyone give a shit? I certainly hope not."

      Cellular baseband chip manufacturers care...

    73. Re:Not this again. by Anonymous Coward · · Score: 0

      99% of code is better slow and simple.

      Simple is often clearer and much faster. The automatic assumption by poor programmers that optimized, fast code is complicated code is a large part of the problem. One common example is OO code (which is mostly pointers and indirection under the hood and thus slow because it messes up memory caching) versus linear array accesses which get cache prefetch and 5x speed and are often much easier to understand. But it's not OO so that purportedly makes it bad code.

    74. Re:Not this again. by ralatalo · · Score: 1

      Yes and No. Java may automate memory management but it can't read your mind and if you don't understand memory management it can't help you. I have seen java code and programmers who merrily go on allocating object after object and then run out of memory and complain that java isn't doing its job. Java and most of your GC code will going a very good job of taking care of the details but you still better have some idea of memory management. Even standard C will automatically manage your memory if you stick with automatic variables which get put on the stack.

      If you don't know if that object you created still needs to be around, then how do you expect Java or any GC to know if it should be kept or discarded. The GCs use algorithms to determine if an object can still be reached but while they may be getting better they are limited. So, while Java may take care of the details, you had better know about memory management.

    75. Re:Not this again. by Kielistic · · Score: 1

      This is a good example of why people laugh at C purists. You seem to think C is the best only because it is all You know.

      I assure you that you do not need C or C++ to do a linked list. They can be done in pretty much any language- even Java. Most people just wouldn't because there are already robust standard libraries to accomplish the task.

    76. Re:Not this again. by epee1221 · · Score: 1

      They are everything but a niche.

      Their products may have a lot of users, but I can't say I've seen all that many job postings.

      --
      "The use-mention distinction" is not "enforced here."
    77. Re:Not this again. by Anonymous Coward · · Score: 0

      But a CS student shouldn't be a simple Java monkey. C isn't good enough. They should all have at least a semester of Assembler.

      There have always been a subset of CS students that didn't get anywhere close to the metal. They suck.

      When I was on the faculty of the CMU CS Dept., we had only Ph.D. students (an M.S. was a consolation prize for failing to qualify for a Ph.D.). We had no undergrads, but the math department had an undergrad CS-oriented track.

      One of the four core areas of knowledge required to pass the qualifying exams and begin your Ph.D. dissertation research was Hardware. I taught the hardware course. (The four courses for the four core qualifier topics were not required, they provided a structured learning context and assured the students they would be exposed to the material on the qualifiers.)

      I don't have time to describe the hardware course coverage here. But I'll give you a glimpse how the students "got close to the metal:" they learned basic logic design, how the transistors in logic gates and flip-flops worked, why and how you should use capacitors on the logic power supply lines, and much more. There was a hardware lab where the students designed, built, and tested digital hardware at the gate and flip-flop level. The CS Dept. (and I) believed that this elementary understanding of basic digital hardware concepts is essential to having a CS Ph.D. at the CMU CS quality level.

      The other three required core topics--Theory, AI, and Software--were equally rigorous and detailed. In part that explains why so many Ph.D. graduates from the CMU CS Dept. have become household names--and not just in the research community, but also in industry.

    78. Re:Not this again. by Anonymous Coward · · Score: 0

      Most of the things OO programmers use all that indirection to accomplish can't really be done by a straight array traversal.

    79. Re:Not this again. by HornWumpus · · Score: 1

      You tested out of your basic programming course? The school only admitted uberkids? There were classes that amounted to programming courses in all but name?

      I don't see how what you describe would work, given the average college student (in my experience).

      I could have done it, I came into college with 4 solid languages including 6502 and Z-80 assembler (counts as 1). But most of the kids on the Engineering track were not that self motivated. The CS kids were way slower.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    80. Re:Not this again. by angel'o'sphere · · Score: 1

      Learn to read!
      I asked if the parent is doing that, or assumed he would do that. I don't do that bullshit, nor does one in my teams.

      All your other 'suggestions' show you never really thought through it.

      In Java it is super simple to have a cache, that holds references(Java speak)/pointers(C++ speak) of stuff you want to cache. (Ofc, you are more golden if your cache uses weak references)

      In C/C++ it is not. Because if the "owning object" deletes the "owned object" and you later retrieve it from the cache: 'you are owned'.

      Before programmers like you realized in C++: "Hey! It is THAT easy! We introduce the concept of 'object ownership'! Now we only need to make sure we know who owns the object! Then we can decide in the destructor if we delete it! So simple! Everyone will grasp it!"

      So we have two persons. One female, one male. They are married (Transaction object defining the marriage, likely you never heard the term 'transaction object', does not matter). We have a marriage contract, defining some terms about the marriage.
      So: (smart ass) who owns what? The male obviously owns the female person, if the male dies the female is burned with him, at least 100 years ago in India ... I guess the transaction and the contract burn with both of them ... hopefully not the last will.
      So who owns the 'marriage transaction object'? The male, the female, both? Is it the opposite around? The marriage object owns the two persons whoms marriage it is holding? Who owns the 'marriage contract'? The male, the female? The 'marriage transaction object'?

      How do you model that in a data base?

      Well, I thank you for your hints :) Usually the first thing I do is: "I ask who has programmed it, and I ask him for help". No idea why that is the second last option of yours.

      I doubt you like to pay me $1000 a day and wait that I finally at the third day ask for help. I always ask immediately ... I don't understand it? Obviously programmer was a moron. Where is he!? Come here! Tell me!

      Luckily sane programmers using same programming languages don't need to worry about object ownerships, because they don't exist in RL and hence there is (should be) no need in programming.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    81. Re:Not this again. by Anonymous Coward · · Score: 0

      dafuq? .. Oh, I get it. We're talking about memory management and you ask how to model it in a database.

      *bows to your awesome trollolololol powers*

    82. Re:Not this again. by Euler · · Score: 1

      That is very true, but for several reasons:
      1) location: embedded work is not necessarily something you find in every city. Much of it is concentrated in cities like the SF Bay area, Detroit (cars are at least still designed there), place where aerospace is. So much of consumer devices are designed off-shore now.
      2) how talent is scouted: in my job-seeking experience, most engineering jobs are never posted. And the jobs that are posted are vaporware or duplicates of jobs already filled - usually just to help recruiters fill their databases in case a job opens up. Sometimes you have to cold-call HR departments or work with head-hunters. Hiring of friends or classmates is very common, so it pays to know people.
      3) HR: jobs that need embedded programmers are often listed more generically by HR if they don't understand the significance of embedded vs. systems or applications programming. Often people find themselves doing embedded programming when the job description was simply an EE-type job posting for hardware design.

    83. Re:Not this again. by Pherdnut · · Score: 1

      I agree. Don't hate Java. Hate Java developers.

  5. memory management by schlachter · · Score: 2

    There are different tracts in CS degrees, with some focusing on C++ and low level coding (embedded systems, OS, robotics, etc.) and others focusing on Java and other more abstract languages (automated reasoning, AI, NLP, web programming)...so I think it really depends on what the student choose to focus on.

    --
    My God can beat up your God. Just kidding...don't take offense. I know there's no God.
    1. Re:memory management by ZeroPly · · Score: 4, Insightful

      CS should be different from programming. Back in the day when I did my undergrad, the programming was something you mostly figured out on your own time. When I took Operating Systems 1, we were studying memory management, Belady's anomaly, semaphores, etc, but we were also expected to become proficient in Unix scripting by the end of the semester. The exchange on the first day of class went something like this:

      Prof: Homework for this week is to write a tcsh script that will set your environment variables when you log in based on a menu.
      Student: What's tcsh?
      Prof: It's one of the shells in Unix, you can write scripts using it.
      Student: How do I learn to use it?
      Prof: The manual command is "man" in Unix.
      Student: How do I use the "man" command?
      Prof: Use "man man" to find out how to use "man".
      (whole class looks bewildered for about 10 seconds - not sure if he's joking or if Unix is really that insane)
      Prof writes across the top of the board: THIS IS A UNIVERSITY, NOT A TRADE SCHOOL. RTFM.

      If you can't figure out how to learn the mechanics of Java, Python, whatnot on your own time, you really don't have the brain needed to do computer science. The problem is that everyone and their plumber is getting a 4 year degree these days, so it's become the equivalent of a high school diploma in the 80's.

      --
      Support microSD: in a post 9/11 world, it is unwise to carry your data on media that you cannot comfortably swallow.
    2. Re:memory management by CastrTroy · · Score: 1

      By and large, programming still is something you have to figure out on your own time. The problem is that most graduates don't take their own time to learn it. They do the required assignments, write the exams, graduate, and expect that they will be able to work as a programmer. The actual amount of programming knowledge required to get CS degree is quite small. Even smaller if you consider that many students don't do the assignments completely on their own.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    3. Re:memory management by Anonymous Coward · · Score: 0

      Talking about the best choice of language for computer science makes about as much sense as talking about the best choice of language for physics or the best coloring schemes for molecules in chemistry.

      Computer science is not coding, like architecture is not masonry and electrical engineering is not soldering.

    4. Re:memory management by rmdingler · · Score: 1
      Plumbing already is a three or four year degree.

      An apprentice must toil beneath a Master Plumber for six to eight thousand hours (it varies by state) to qualify for the Journeyman's exam.

      I knew a Plumber who did 3 7/8 years towards a petroleum engineering degree when the bottom fell out of oil bidness in '80.

      Sure you have to get your hands dirty, but it's not the worst backup plan ever.

      --
      Happiness in intelligent people is the rarest thing I know.

      Ernest Hemingway

    5. Re:memory management by anyaristow · · Score: 1

      Sounds like the prof is a frustrated dork who hangs out in Linux discussion forums, getting reinforcement for being an antisocial jerk.

    6. Re:memory management by anyaristow · · Score: 1

      On second thought, this sounds like a made-up story.

    7. Re:memory management by Anonymous Coward · · Score: 0

      If you can't figure out how to learn the mechanics of Java, Python, whatnot on your own time, you really don't have the brain needed to do computer science.

      This is the kind of attitude that I've noticed among people in almost every CS field that makes me happy I have two degrees (one not in CS.) The actual increase in people getting degrees is only like 10% since the 80s, (http://www.nytimes.com/interactive/2013/06/12/us/across-the-board-growth-in-college-degrees.html?ref=education) and I feel like part of a university ought to be educating students in things they will use.

    8. Re:memory management by Anonymous Coward · · Score: 0

      Generally, those I know with a STEM degree observed that freshmen were not treated this way. Freshman year classes typically allowed for a somewhat gentle transition from typical spoon-fed high school style learning into college expectations. However, the sophomore year was the "weeding out" year - sink or swim, and that's the way it should be, because that's the way a professional career (and life) is. Pretty much everyone I know in STEM is middle-aged, so maybe this approach is no longer in vogue.

      - T

  6. Not so important anymore by Anonymous Coward · · Score: 1

    Don't worry about it too much. Memory management is not that important for most people.

    What you need to know is the process behind the memory management. You should be able to point to any line of code and understand exactly the process you are asking the computer to perform to execute it -- no matter how high level your language is. If you can do that, you'll be alright.

    1. Re:Not so important anymore by Richy_T · · Score: 1

      Memory management is not that important for most people.

      Exactly. When you become a dev, you simply call up a sysadmin on the phone, or preferably his boss or, better, the highest level exec you are on first-name terms with and complain that your app isn't being given enough memory.

    2. Re:Not so important anymore by wezelboy · · Score: 1

      Your best bet is with the sysadmin. They'll get pissed off and write your app for you using half the memory just to spite you, and then the project manager will take all credit like they would anyway.

    3. Re:Not so important anymore by Anonymous Coward · · Score: 0

      And rightly so. Memory is cheaper than developer time. Almost all developers work on in-house bespoke systems that never get anywhere near the outside world. The days of deliberately limited resources for some BS cost accounting are long gone. Any sys-admin thinking otherwise needs throwing onto the scrap heap. They're only trumped up operators that no longer need to change tapes and manage printers anyway.

  7. Yes by kwiqsilver · · Score: 3, Insightful

    1. Yes.
    2. Learn some lower level languages like assembler, C, or C++. Even if you don't use the techniques, understanding them will give you a better understanding of what's going on in your Java programs.

    1. Re:Yes by angel'o'sphere · · Score: 1

      Certainly not.
      Give one single example of ten lines of C or Assembler that have any relation to a Java Program.
      Your claim is simply monsense.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    2. Re:Yes by Anonymous Coward · · Score: 0

      You learn computer architecture to understand how assembly/machine code execute through the pipeline and the impact of memory hierarchy. You learn assembly to understand how C code interacts with the hardware. This is a baby step to understanding how a high level language executes on the hardware.

    3. Re:Yes by Anonymous Coward · · Score: 0

      void func(int x) {
          if (x 3) { //if you're using java
                  System.print("x is less than 3\n"); //if you're using c
                  printf("x is less than 3\n"); //if you're using c++ and trying to stay away from c functions (which you can use if you'd like)
                  cout "x is less than 3\n";
          }
      }

      Now, obviously, you can System.println and endl for the new line characters if you'd like in their respective languages, but you'll notice how related the 3 languages are.

      Now, if you wanted something somewhat more grounded, I could go into C++ reference count pointers to show how an implementation of GC could work as well as how C++ can be coded in C, and really it all just compiles down into assembly at the end of the day, but it gets tedious, and you just wanted how they relate, well, syntactically, they're very similar. That's how they relate

    4. Re:Yes by Anonymous Coward · · Score: 0

      I hope you are (a) joking or (b) never a developer on any team I'm on.

    5. Re:Yes by Anonymous Coward · · Score: 0

      I think it's a folly to suggest C is "lower" certainly C++. Java comes with a built in object monitor and garbage collection, and bites you in the ass with things like type erasure and auto-boxing if you're unwary. The expressiveness of these languages isn't much different. Writing a compiler for lisp with the target IL as assember, being able to call a C library from node.js, writing some multi-threaded blocking network simulation in java using wait-notify semantics, and understanding how to construct a SQL query with a prepared statement should be the feathers in any brave CS undergraduate cap.

    6. Re:Yes by Anonymous Coward · · Score: 0

      //normalize to range [1,1.99999988079071044921) by setting IEEE float exponent to 0
      int bits;
      normalize(float num){
          bits = Float.floatToIntBits(num);
          num = Float.intBitsToFloat((bits & 0x007F_FFFF ) | 0x3F80_0000 );
      }

      this is java code from an android application i wrote. it runs in the UI thread and must be fast. (i have a cheap/slow android phone and realize other people do too)

      although this is not c/c++/assembly; i'm sure you can see that this code uses techniques usually attributed to low level languages.

    7. Re:Yes by Anonymous Coward · · Score: 0

      Certainly not.
      Give one single example of ten lines of C or Assembler that have any relation to a Java Program.
      Your claim is simply monsense.

      Totally agree here. There is no sane way to really know whats wrong with Java programs. They are like magic that just works or doesn't. Entirely unlike assembler, where you actually know what will happen when you command it to do something.

      That's like claiming it's helpfull for a driver to know how their cars engine works, so when he hears some distinct sound he might have a clue what's going on. Who the heck cares, just get someone who actually knows about these things to fix it.

  8. More important things than memory management exist by Anonymous Coward · · Score: 0

    Although I would feel ashamed if I didn't know how to manually manage memory (or how computers encode things, for another shocking example of something that not all CS graduates know), but computer science is not a programming course. The hard problems are not solved by knowing a particular language, be it low or high level. You can manage memory flawlessly and "crash" with an out of memory error if you don't develop your algorithms with memory complexity in mind.

  9. Real computer science by Anonymous Coward · · Score: 0

    Take heart: real computer science has nothing whatsoever to do with programming in any language.

  10. The old you kids don't know jack rant by Anonymous Coward · · Score: 0

    It's the old and recursive old-young thing. Really, if you learned programming with C, you never had to take care of finding a room and high voltage for the computer, or repairing the paper slip feeder.

    Now that computer pervade everything, I guess the remaining constant in CS is "understand problems in a way that lets you find a technical solution".

    Cheers

  11. ASM by just_another_sean · · Score: 5, Insightful

    Learn some assembly. Not because you will use it every day (or ever) but because it helps remind you that all the code we typically write is just layers of abstraction on top of a machine (which even assembly is, albeit very low level abstractions).

    An old boss from years ago (a mentor for me really) watched me troubleshooting a network issue in an application. He said to me "you seem to be having trouble spotting the problem. Have you tried going lower down the stack?". So I tried ping by name, nothing, ping by number, nothing, etc. Finally after reviewing ip configurations, arp and routing tables and probably a few other things I forget I figured out I had a bad cable.

    That taught me a lesson that I've applied to many areas of computers, including programming, over the years. If something seems like it should work but does not maybe something underneath it is the problem. If you want to be able to debug code at the library level or interfaces to lower level languages it helps to understand things like memory layout, registers, the call stack, etc.

    My $.02.

    --
    Creationist Textbook Stickers Declared Unconstitutional by CowboyNeal
    1. Re:ASM by Anonymous Coward · · Score: 0

      Damn right. I haven't touched assembly once in my professional career, but using assembly as a hobby and in university has been an invaluable experience. It teaches you to think the way your computer works and what compilers generate. Even if all you use are virtual-machine languages, your knowledge of assembly will put you far far ahead.

      Then learn some type theory and functional programming concepts to complete the circle :)

    2. Re:ASM by Connie_Lingus · · Score: 2

      lol...and even the machine is abstracted away with VMs and such.

      turtles all the way down.

      --
      never bring a twinkie to a food fight.
    3. Re:ASM by Anonymous Coward · · Score: 0

      understanding ASM can even sometimes actually turn out to help. I work on a c++ program with wrappers in languages like java. Customer reports a crash that's (of course) critical and threatening a big sale. Application was crashing after a few weeks of running. Obviously, if it takes weeks to crash in release, debug build is out of the question. Logging could help, but with weeks between crashes there isn't time to zero in on the issue that way. But java includes the bytecodes being run during a crash. Carefully translated that to ASM, read out what was going on, got to the bottom of the problem (turned out to be a pointer getting truncated to 32 bits while being passed around the jni layer, only crashing once a 64 bit address was needed in a particular section).

      It wasn't rocket science, the resources for translating byte code to asm and what the commands mean are all online. But I did need to have know what byte codes were, that I could turn them into ASM and read it as logic, etc.

    4. Re:ASM by Anonymous Coward · · Score: 0

      You know that the assembly programmer's view of the system is already an abstraction, don't you? Some things are actually better understood and dealt with by looking at the high level concepts. You won't find a design flaw in a complex machine by inspecting thousands of individual parts. Telling people to learn the whole stack so that they can do everything is useless advice. Knowing more is obviously better, but does it justify the cost?

    5. Re:ASM by Cro+Magnon · · Score: 1

      I had one class in assembly, and never used it since. But my knowledge of it helped me understand why an early COBOL program went wonky (a messed up subscript caused me to write outside a table), and knowing how data was stored at a low level helped me track various data-format problems.

      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
    6. Re:ASM by gnu-sucks · · Score: 1

      I've never had to learn or use assembly (though I wouldn't mind trying).

      What I want to say is that you may gain a similar knowledge by working with microcontrollers and low-resource embedded platforms. When every byte of memory and every instruction cycle counts, you will start to think about algorithm efficiency and other tradeoffs that simply don't matter on an enormous 16-core Xenon workstation with 32 GB of ram. And then, of course, this does lead to better code on those big desktop machines. Those optimizations do add up in larger programs.

      As for the overall OP's topic, yes, it is a problem that CS grads are "only" working in Java. So they're learning about program flow control and algorithms. But a mathematician can do that. The CS grads that learn programming at a lower level really do have an edge over those that are just point-n-click-n-type java programmers.

      To me, and I'm an EE, knowledge of the above resource-limited systems, linux, and C has taken me a long way. It has enabled me to work on just about anything.

    7. Re:ASM by felipou · · Score: 1

      That reminds me of this quite interesting article:

      http://www.joelonsoftware.com/...

    8. Re:ASM by Anonymous Coward · · Score: 0

      Assembly? That sounds so nancie-pancie. Say it, ASSEMBLER!, the god of lots of lines little actually done! So not a good area to spend time, certainly won't help thinking about any sort of memory management. Instead, learn COMPILER! Yeah!

    9. Re:ASM by just_another_sean · · Score: 1

      Excellent article, thanks!

      --
      Creationist Textbook Stickers Declared Unconstitutional by CowboyNeal
    10. Re:ASM by Euler · · Score: 1

      There is a turtle standing on silicon at some point. Get a micro-controller evaluation kit and twiddle some bits. Write a "Hello World", and no using that fancy printf stuff. Write the bits to the UART and manage the status flags.

      Then just for fun, do some add with carry to a longer int type.

    11. Re:ASM by angryfeet · · Score: 1

      And get a simple CPU emulator and write something basic in machine code. Its laborious, but its interesting to see the code in the physical gates of the CPU.

  12. That guy's a tool by Anonymous Coward · · Score: 1

    > 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

    This is not "real" computer science. This is an implementation detail.

    "Real" computer science is algorithms and data structures. Systems, networks, and software engineering. Languages and computational theory. AI and machine learning. Graphics and rendering.

    Memory management is accidental complexity. We now have tools that manage it for us so that we can concentrate on the heart of the matter. He might as well be saying that CS grads aren't "real" because they use a compiler rather than writing machine code.

  13. Young whippersnappers by gurps_npc · · Score: 1
    Not learning memory management? Bah.

    If you haven't learned how to minimize the size of your program to fit on an out-dated Apollo era mainframe, then you are not a computer scientist.

    And don't get me started on those fools letting people drive a car without knowing how to drive a manual transmission.

    Honey, where's my complain' pants? I got me some letters to write!

    Times change. Not everyone uses the same systems. An education should be more about ways of thinking than about specific skills. Otherwise it it worthless.

    --
    excitingthingstodo.blogspot.com
    1. Re:Young whippersnappers by Anonymous Coward · · Score: 0

      Seems applicable.

      http://dilbert.com/strips/comic/1992-09-08/

    2. Re:Young whippersnappers by jwegman · · Score: 1

      Just for the record, it would be most unsettling if the person who built or maintained my car didn't know how to drive a manual transmission. In the same vain, I'm not terribly upset that my admin assistant isn't well versed in computer memory management.

    3. Re:Young whippersnappers by gurps_npc · · Score: 1

      The guy wasn't complaining about the kids not knowing memory management, he was complaining that the school did not teach it.

      Do you think driving a stick is taught in any school that teaches engine repair or maintenance? No.

      You don't even need to know how to drive a car at all to repair or maintain it. Granted, I would expect someone to know how to drive a car.

      But I certainly would not get upset that schools don't require people to learn things that many of their students never need.

      --
      excitingthingstodo.blogspot.com
    4. Re:Young whippersnappers by TangoMargarine · · Score: 1

      Having just recently bought a used stick-shift, I've vaguely wondered each time I had to take it in for something whether all the probably barely 20yo assistants who move the cars around at these places know how to drive stick...and if so, how to do it without mangling my transmission.

      Admittedly I'm only 25 myself so hey :) But I also know the basics of assembly so I'm probably in a pretty weird demographic these days.

      *in the same vein

      --
      Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
    5. Re:Young whippersnappers by Tailhook · · Score: 1

      Times change.

      C and C++ trade places with "managed" languages in surveys year after year. There will never be a day when the cost of VMs and GCs will not be tolerable in some large fraction of new applications, so "close to the metal" won't be going out of fashion anytime soon. That's why C/C++ toolchains are very actively developed today; I'd argue more so than Java, for instance.

      So churning out Java developers that do not understand non-GC memory management, pointer arithmetic, stack allocation, macros and all the other common features of lower level languages does seem like a fail. Are people seriously racking up a lifetime worth of education debt and leaving with basically just Java programming competence?

      --
      Maw! Fire up the karma burner!
    6. Re:Young whippersnappers by buybuydandavis · · Score: 1

      Honey, where's my complain' pants? I got me some letters to write!

      That was awesome! Thank you.

  14. Oh by Anonymous Coward · · Score: 0

    Was this programmer by any chance an old fart? Because C is a good fit for computers and applications from 30 years ago.

  15. Obligatory by emudoug42 · · Score: 1
  16. Oh, for... by jeffb+(2.718) · · Score: 4, Funny

    Well, in MY opinion, CS students who learned in C or C++ or Pascal or PL/1 are inferior because they use the stack as a crutch, instead of manually keeping track of callback history. If you don't have to write explicit code to keep track of every call, or allocate every local variable, your code will... well, actually, it'll likely be easier to read, easier to maintain, and easier to optimize. But it won't be as good as the code we had to write back in my day.

    1. Re:Oh, for... by GrumpySteen · · Score: 1

      Wuss. In my day, we didn't have electrons and we had to build a goddamn universe before we could build a computer to program on.

    2. Re:Oh, for... by mjwalshe · · Score: 1

      This must be the first time I have seen Pl/1 mentioned on Slashdot :-) ex IBM or Prime dev then ?

    3. Re:Oh, for... by Anonymous Coward · · Score: 0

      Back in MY day, we'd hit people like you on the head with rocks and take your stuff.

    4. Re:Oh, for... by DMUTPeregrine · · Score: 1

      Someone (I forget who) has the FreeBSD fortunes-4 #791 sig:
      IBM had a PL/I,
      Its syntax worse than JOSS;
      And everywhere this language went,
      It was a total loss.

      --
      Not a sentence!
    5. Re:Oh, for... by OutOnARock · · Score: 1

      Don't you mean Pr1me?
      Damn I'm getting old :)

    6. Re:Oh, for... by Anonymous Coward · · Score: 0

      I learned a lot by implementing my own PUSH and POP as C preprocessor macros for some really pedantic toy assembly programming assignment.

  17. Not 'inferior', but ... by gstoddart · · Score: 3, Insightful

    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

    You know, I wouldn't want to specifically use the word 'inferior', but you do learn a hell of a lot from having to deal with your own memory management.

    When I was in school, lo these many years ago, I and a fellow student wrote the same basic assignment for a course.

    He was one of the sysadmins on the VAX and could set his process to use a vast array which was mostly empty, and rely purely on virtual memory. I had a tiny little 80286, and had to implement the same thing in a sparse array which took up a fraction of the space.

    We both got the expected results and got good grades, but the prof basically said since I'd done so much more thought on memory management and the other guy didn't, I'd get the A+ and he got the A.

    The Prof also stole my code to use in his own project, because by the time you accounted for architecture mine was about 4x faster and 100x smaller, and he'd basically given us an assignment which overlapped with his own research.

    Would I want to do bare metal memory management in C every day? Probably not. Do I think it was valuable to have had to learn how to shoehorn something into a small amount of memory and explicitly be the one to make sure my memory wasn't leaking? Absolutely.

    I think more modern software would suck less if developers didn't just assume there were massive gobs of memory sitting around, and implement everything in the easiest way possible without having to factor in resources. Most modern browsers seem to grow their memory usage at a pretty linear rate, even if you're not using the browser.

    Because, really, pretty much every piece of software seems to double in it resource requirements every few years.

    And understanding pointer arithmetic and semantics in C is valuable, even if most people will never directly see anything resembling a pointer these days.

    --
    Lost at C:>. Found at C.
    1. Re:Not 'inferior', but ... by Anonymous Coward · · Score: 0

      they use this thing called "iterations" now to take a POC and take to production.. try it waterfall man.

  18. Or even lower... by bunyip · · Score: 1

    It really depends on what you want to do. If you're trying to wring the last iota of performance out of an algorithm, then understanding TLB misses and cache protocols can be useful. Even accessing RAM can be an order of magnitude faster or slower, depending on what you do. So, maybe a class on microprocessor design?

    OTOH, I find that an ability to understand functional programming, recursion and data structures is very useful. They're the sort of things I quiz people on when I'm looking for really strong developers.

    Alan

  19. real CS people don't use C by Anonymous Coward · · Score: 0

    we code with assembly, fortran and cobol

    C is for these lazy kids

  20. The Difference is... by Anonymous Coward · · Score: 0

    A real CS degree involves a lot of math and learning how to design algorithms. They learn how computers work and what rules and laws they follow. They are *computer* *scientists*, not programmers, not IT specialists, not hardware engineers (though the last one helps a lot).

    That said, most CS programs now-a-days suck, even as code-monkey schools. They do not teach you how to code, they teach you how to use tools A, B, and C to accomplish a given set of tasks. If they are faced with a problem outside of that range, or that requires a different tool, then they are lost. Because they have not learned how to program in general. (Many grads these days never learned how to learn, which is a superset of this problem.)

    Tell me, have you ever written a web-app from scratch? Even something as simple as a hit counter.

  21. How does what you write connect to what happens? by mgoheen · · Score: 2

    In my totally completely unbiased opinion, I think that everyone should have a basic understanding of how computers actually work, from the ground up. A little bit of basic logic (and how that is implemented in hardware), introduction to low level programming (assembler) and using C to make hardware DO something. From there just keep moving on up until you get to Java. Learning operating system functions and why they are important (handling I/O devices, memory management, process and thread management, etc.). All that stuff helps you understand what you are doing, and potentially give you insight into how to debug it.

    Nothing is more frustrating than arguing with someone about some computer bug/problem when their argument/explanation is provably impossible, based on how things actually WORK.

  22. Computer Science by DevCybiko · · Score: 2

    Computer Scientists understand the theory of computing. Software Engineers understand how to build software. Information Managmentstudent know how to apply computers to business problems. IMHO CS students are not prepared for real world coding applications. If you're going to program you don't need a CS degree, you just need a background in the programming language du jour. If you're going to solve difficult problems with a computer, you need a CS degree (theory, algorithms, heuristics). But to build a web site, ECPI is good enough. I don't think current CS curricula creates a solid programmer. However, many enterprising young CS students are already involved in external activities (open source projects, web site construction) and are learning the key skills on their own.

    1. Re:Computer Science by rujasu · · Score: 1

      In my experience, successful CS students are typically solid programmers before starting the curriculum, or become solid programmers early in their studies. (If they don't, they change majors.) Good CS programs go beyond just programming to teach theory, but taking courses in programming language design and analysis of algorithms is what turns decent programmers into great programmers. That's why, while a degree in CS isn't a degree in programming per se, CS students do tend to be better programmers and are well-prepared for real-world coding.

    2. Re:Computer Science by SoftwareArtist · · Score: 1

      Exactly! Computer Science != Software Engineering. Yes, a software engineer needs a solid knowledge of computer science, just as an electrical engineer needs a solid knowledge of physics. But a degree in CS doesn't prepare you to be a software engineer any more than a degree in physics prepares you to be an electrical engineer.

      In my experience, people who get to college and decide, "Computer science seems like a good career, so I guess I'll major in that," tend to become bad programmers. People who major in CS because they love computers and have been programming for fun since they were 12 tend to become good programmers. They're motivated to learn on their own all the things their CS classes don't cover, and likely have already learned a lot of them before they even get to college.

      There are some schools that actually offer degrees in Software Engineering. But I don't think I've ever known someone with one of those degrees, so I don't know whether they do a better job of training good programmers.

      --
      "I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
  23. An issue of engineering, not computer science by Anonymous Coward · · Score: 0

    Extensive experience in C (and to a lesser extent C++) is generally indicative of a much more solid understanding of how low-level software systems work. Most of the real theoretical computer scientists I know, incidentally, aren't particularly strong in this area. Computer engineers usually have a lot more experience with it.

  24. Old Fart Hipster programmer here by idontgno · · Score: 2

    Feh. C. "Memory Management".

    CS students taught in high-order language are completely deficient in their education. They haven't learned about opcode timing and instruction placement and hardware stack management.

    If you aren't working exclusively in machine code, you're just a poser.

    --
    Welcome to the Panopticon. Used to be a prison, now it's your home.
    1. Re:Old Fart Hipster programmer here by Anonymous Coward · · Score: 0

      There isn't anything wrong with USING high level languages, but to use them well, you need to learn how they map down to machine code, this allows you to avoid stupid mistakes (like appending to a string in a loop using a method that walks the entire string each time you add to it), while taking advantage of the nice syntax that high level languages give you access to.

    2. Re:Old Fart Hipster programmer here by Anonymous Coward · · Score: 0

      If you aren't working exclusively in machine code, you're just a poser.

      Machine code is so kindergarten. Microcode is when you can add the S after the C.

    3. Re:Old Fart Hipster programmer here by Guy+Harris · · Score: 2

      They haven't learned about opcode timing

      And about superscalar processors, which make opcode timing a bit less straightforward. And pipelining and instruction prefetching and branch prediction and caches and instruction scheduling and....

    4. Re:Old Fart Hipster programmer here by Anonymous Coward · · Score: 0

      ROFLMAO! Thanks "Old Fart". As one to another, what processor family do you prefer to work with - a segmented one like the x86 family, or a linear one like the 68K? Also, what do you think about the current crop of GPU's? Some pretty rad stuff going on there! :-)

      -Rubberman

    5. Re:Old Fart Hipster programmer here by Anonymous Coward · · Score: 0

      Bah, unless you've mined the raw materials yourself to dope a crystalline lattice of silicon to produce the nand gates that implement the CPU on which your code is run, you're not really a computer scientist. At best, you're a relatively smart monkey with a predilection for flinging its own excrement.

  25. Yes, but no by Unordained · · Score: 5, Insightful

    I've recently watched my wife (C++ environment) deal with a new-grad (Java-based education.) It's true that pointers are a sticking point -- in the process of being taught Java, they get taught that pointers are bad and dangerous (all hail Java for solving the problem,) and can be made only barely tolerable by using auto_ptr, but really should just be avoided. Yeah, it's a problem, sure.

    But the bigger problem we have with new-grads and junior-devs, in general, is the same problem you'd have in any field: they're green. They don't test well, or at all. They don't think designs through. They don't communicate well. They ask too many questions, or maybe worse, they ask too few. They try to fix things that aren't broken. They're bad at estimating task sizes (admittedly, people rarely get much better at that even after decades.) In an attempt to not suck, they reach out for best-practices and apply them zealously and inappropriately. They can't imagine how things will fail, or be abused. They spend too much time fixing small problems, and not enough time fixing big ones. And maybe worst of all, they're under the illusion that what they learned in school ought to prepare them for the workforce, when really it just gets their foot in the door.

    We, as their seniors, are the ones that should be spending the time fixing their misconceptions, fleshing our their education, filling their minds with the horrors we've seen, and setting up their work habits. When they fail, it's because we fail to do these things, usually because we brought them in too late in a project, gave them too much responsibility, and are fighting a deadline. So we "just fix it" for them, and they don't learn from the experience, while we gain nothing in terms of productivity from having them.

    But if I were to nitpick their education? Databases. Recent grads have little or no understanding of relational databases. Their thinking on organizing data, in general, is fuzzy at best, which impacts more than just database code, it impacts class and API designs, often crippling whole features with incorrect cardinality. It deserves more attention in school. The rest, we can fix in production. =)

    1. Re:Yes, but no by Anonymous Coward · · Score: 0

      Wow that was a great post. You hit every nail on the head, including relational databases.

    2. Re:Yes, but no by rujasu · · Score: 2

      Yeah, the database thing is a big issue. In college, I actually tried to sign up for a database management class and couldn't, because it was in the Information Systems department instead of the CS department, and I hadn't taken the official pre-requisites. (I had taken a similar class in CS, but that didn't count. From everything I heard, the CS version was harder, but who knows.) So I had to get on-the-job training to understand databases, and it's still one of the weaker points in my skillset.

    3. Re:Yes, but no by msobkow · · Score: 4, Insightful

      I agree that it is up to the greybeards to teach the young 'uns, but a large part of that is corporate culture.

      When I was fresh out of school, I worked at a place where cameraderie was paramount. We went for lunch. We went for coffee. We went for smokes.

      And we talked about issues and the problems they'd encountered over the years, and how they'd approached them and solved them.

      The last few jobs I had, if you spent any time on such "idle chit-chat", the management came down on you hard for "not doing your job." It's pretty damned hard to educate the younguns if there is no opportunity to talk with them.

      --
      I do not fail; I succeed at finding out what does not work.
    4. Re:Yes, but no by roman_mir · · Score: 1

      Databases and by extension transactions, sql, relational model, dataviews, connection, statement, result set, pool handling, holistic approach to debugging (including db logs). Communucation skills, as you said, networking, protocols, leaving optimization for later, when the business problem is solved and performance starts to matter, logging data, thinking beyond the immediate, source control, working in a team. This and much more is what I end up teaching all of the students and new grads I hire, they are basically empty before they come in here. In 3 weeks they learn all of this and are put to productive use. AFAIC college is a waste of time for vast majority of them, I don't see difference between them and any novice atraight from the street, except somebody from the street may not have a crushing debt hanging above their heads due to the government backee student loans . If you come and ask me to work for me and you know nothing but are willing to learn, I do not care what your education is as long as you are interested, have the right attitude and can learn.

    5. Re:Yes, but no by Anonymous Coward · · Score: 0

      What you describe is an apprenticeship. This is very different to a graduate or post graduate degree.

    6. Re:Yes, but no by scuzzlebutt · · Score: 1

      I wish I had mod points right now. Excellent post.

      --
      In C++, your friends can see your privates.
    7. Re:Yes, but no by jandrese · · Score: 1

      That's something I would have gone to the Dean of the IS school and talk about, because it's a totally stupid policy and learning SQL is an enormously valuable life skill for any programmer. Either that or go to the Dean of the CS department and convince him that they should have their own "Databases for CS students" class instead. This may he harder as some CS department top brass are displaced mathematicians and have no interest in supporting courses that are "boring tradecraft stuff" and would rather get another theoretical math via computers type course instead.

      There are two "optional" CS type courses that every student should take IMHO: Databases and Networks. That's what the world is going to be made of in the future, and we're already making a lot of progress in that area.

      --

      I read the internet for the articles.
    8. Re:Yes, but no by dnavid · · Score: 1

      But the bigger problem we have with new-grads and junior-devs, in general, is the same problem you'd have in any field: they're green. They don't test well, or at all. They don't think designs through. They don't communicate well. They ask too many questions, or maybe worse, they ask too few. They try to fix things that aren't broken. They're bad at estimating task sizes (admittedly, people rarely get much better at that even after decades.) In an attempt to not suck, they reach out for best-practices and apply them zealously and inappropriately. They can't imagine how things will fail, or be abused. They spend too much time fixing small problems, and not enough time fixing big ones. And maybe worst of all, they're under the illusion that what they learned in school ought to prepare them for the workforce, when really it just gets their foot in the door.

      The way I summarize these problems is that the problem with most college graduates is that they thought and behaved as if the purpose of their college years was to learn stuff, when it was really to learn how to learn stuff. The first skill you will need in most of the jobs you might get after college is learning. You should have had a lot of practice if you approached college right, which most don't. You're right that *what* you learned in school does not and cannot prepare you for joining the workforce, but *practicing the act of learning* a wide range of skills and thought processes can prepare you very well.

      I tell people if you want to be a professional, college is professional learning on training wheels. If the thought of learning as much as all the learning you did in college every couple of years until you die is not appealing, consider a non-technical non-professional career. Because you're going to suck at it otherwise.

    9. Re:Yes, but no by Anonymous Coward · · Score: 0

      This.

      I had to have one more credit in order to receive my scholarship last semester. I asked about the Database Management class at my school because I help manage a few MS SQL Server clusters at work and I've been writing a few applications using ODBC libraries. I figured, "This will be perfect! I'll take this!" The class had multiple CS prerequisites and is only available to graduate students. I looked at the course overview. It covered the basics of SQL, and the basics of relational databases and their management. Perhaps we are coddling students a bit much when it comes to databases?

    10. Re:Yes, but no by Anonymous Coward · · Score: 0

      Great response! I agree. With a "fresh out", you expect to have to help them fill-in the gaps in their knowledge and experience. With those who only learned Java, pointers are the big difficulty, and there are related language issues as well. For instance, C++ base classes must have virtual destructors or they don't get cleaned up when deleteing the derived class pointer. We saw a whole inheritance heirarchy that had not a single virtual destructor, which caused vast memory leaks, created by a couple of junior guys who came from a Java school. I feel like the C++11 unique_ptr and shared_ptr are going to be a big help in giving a general-purpose how to deal with pointers in C++ for those who haven't dealt with them.

      I don't want to pick on Java. It can be the right tool for a whole host of jobs, but it generally isn't for mine. And all of the "fresh out"s seem to have difficulty in how to approach complex problems. Templates, thread-safety, and thread synchronization seem to be accross the board issues for new folks, regardless of their backgrounds. I guess it was for me too, but since we were all learning, I probably didn't notice.

    11. Re:Yes, but no by rujasu · · Score: 1

      Small school. The top CS guy was my advisor and I did talk to the IS prof who was teaching the course. The CS and IS departments were involved in some kind of interdepartmental pissing contest. I believe a database class for CS students was introduced shortly after I graduated. They knew about the issue, but it was my senior year when this came up, so basically just bad timing for me.

      Networks wasn't optional for us, we had to take at least a semester of it.

  26. Real computer scientists by Anonymous Coward · · Score: 0

    know--or at least familiar with the concept of--what is even COMPUTATIONALLY POSSIBLE. THAT is computer science, as in the science of computing or what is computable. It progresses to things like how actual computers work, leading into things like memory management, assembly, building a compiler. Also, real computer scientists know who the fucking founding father of the discipline is.

    Why web monkey body shops these days demand a strong CS background is beyond me. Sure they're smart and do real, hard work, but the idea that you should have a computer science background to work for them is preposterously offensive.

    1. Re:Real computer scientists by pjt33 · · Score: 1

      Also, real computer scientists know who the fucking founding father of the discipline is.

      I used to think I was a computer scientist, but now I'm not sure. Euclid? Diophantus? Babbage? Lovelace (albeit she'd be a founding mother)? Church? Goedel?

    2. Re:Real computer scientists by russotto · · Score: 2

      I used to think I was a computer scientist, but now I'm not sure. Euclid? Diophantus? Babbage? Lovelace (albeit she'd be a founding mother)? Church? Goedel?

      Not Babbage or Lovelace I wouldn't think... too practical :-)
      Church and Turing, perhaps; the functional programmers can follow the former and the procedural ones the latter. I'd probably also include Claude Shannon.

  27. Learn fundamentals, and a hot button by mrflash818 · · Score: 1

    One of my favorite Computer Science instructors said to us: Learn the fundamentals, and a hot button.

    A hot button is the 'new cool thing' that everyone is asking for.

    The fundamentals are, well, the fundamentals.

    So, when I went to school to work on my Bachelor's, we used ADA, c, c++, x86 assembly. ADA was for the "intro to computer science", clang was for many, I chose to use c++ for compiler class. x86 assembly was for assembly language programming.

    Back then Java was the new thing, so I made sure to take Java as an elective.

    So for YOU, figure out what is hot, learn it, but also learn your fundamentals. Knowing how to allocate, use, and return system resources is a fundamental. That fundamental is used for working with Files, Memory, Databases. I would dare day that also learning to work with exception handling (c++/java) is a good fundamental. If you think 'old school' programming is an interest, then being comfortable with clang pointers would be good as well.

    --
    Uh, Linux geek since 1999.
  28. Speaking from the interviewer side by c++ · · Score: 1

    The primary thing I notice about fresh Java school grads is that there's nothing in their resume that tells me they can tackle hard problems. No pointers. No lambda functions. No backtracking. No first-class continuations. All the stuff that used to weed out people in CS programs is gone; that means I have to do the weeding. At least Javascript has brought some of that back.

    1. Re:Speaking from the interviewer side by CastrTroy · · Score: 1

      If somebody just goes to university and gets their computer science degree, odds are that they actually are very bad programmers. Anybody who has actual programming skills has most likely had paid internship, or has their own github account or open source project commits where they can demonstrate that they can product actual code. There isn't even required programming in CS courses to make somebody a good programmer by just doing the required assignments for their degree.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  29. Is your CS degree program really that narrow? by presidenteloco · · Score: 2

    I remember learning a couple of assembly languages, 3 procedural languages, sql, lisp, and prolog during my undergrad CS degree, while learning three more languages including Forth, Basic, and SmallTalk in summer jobs around that time.

    But in my recollection, particular programming language (details of) was not the main point of the majority of my CS (or EE elective) courses, especially not after first year. Quickly learning any programming language was just the price of admission to learning and practicing other CS knowledge. Computing general concepts, algorithm and database general concepts, intro to and practice with different styles of programming such as functional, declarative, procedural, particular types of applications as examples, cool AI'ish stuff, and a few things about software engineering practice, were much of the point.

    So if your degree program is "about Java" and "experience with Java and an N-tier JEE stack", then RUN and take some MIT or Stanford online courses in more interesting and useful stuff!

    --

    Where are we going and why are we in a handbasket?
    1. Re:Is your CS degree program really that narrow? by jandrese · · Score: 1

      In my classes we tended to learn 1 of each "type" of programming language. So some MIPS assembler (low level), a bunch of C (imperative), some C++ (Object Oriented), some Scheme (Functional), some Prolog (Logical), some SQL (Logical, but data driven). The idea was that the individual details of each language are less important than learning the thought processes behind them.

      --

      I read the internet for the articles.
  30. Lisp macros by Anonymous Coward · · Score: 0

    Every so often I macro-expand Lisp macros (loops are very entertaining). While it's not bare metal, it reminds one that at root there's always a goto statement somewhere.

  31. Three Divisions of Computer Science by brian.stinar · · Score: 4, Insightful

    The department I go my masters in computer science from divided the discipline into three chunks:
          systems
          languages
          theory

    I think this is a good way to divide computer science.

    It sounds like your Java / C question involves mostly languages, and a little bit about systems (since Java programmers do not need to have a fundamental understanding of memory works at a system's level.)

    I don't think this question really addresses the underlying issue - what is computer science? To me, I tell people that my formal education is closer to applied mathematics than what I do on a day to day basis. I also like to humorously use the derogatory term "code monkey" to people that have learned everything through the "languages" chunk above. A lot of times when I've worked with these people, they haven't even really studied languages (Why did the language designers make the choice that they did? What does the formal language specification say the language should do in this case? How is this language related to earlier languages?)

    Again, about 90% of what I do on a daily basis could be considered "code monkey" level. It's when a customer has a REALLY difficult math problem that my formal education comes into play, and for giving people confidence in me.

    For your direct question, I'd study the book Computer Architecture, Fifth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)

    That's what I used, and it helped me understand a ton of memory management. Then again, my undergrad curriculum was based on C....

    1. Re:Three Divisions of Computer Science by PipsqueakOnAP133 · · Score: 1

      Again, about 90% of what I do on a daily basis could be considered "code monkey" level. It's when a customer has a REALLY difficult math problem that my formal education comes into play, and for giving people confidence in me.

      For your direct question, I'd study the book Computer Architecture, Fifth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)

      That's what I used, and it helped me understand a ton of memory management. Then again, my undergrad curriculum was based on C....

      Best tech book ever! (Well, I have the 3rd edition or something older.)
      For anybody who really wants to understand the stuff, go look up all the classwork for CS61c at UC Berkeley.
      It's the undergrad course that uses this book. Heck, Patterson even taught it from time to time.

    2. Re:Three Divisions of Computer Science by ripvlan · · Score: 1

      Yes - thank you for this - I'll add my follow on here.

      I've heard people speak of this difference as Computer Scientist (strategy/concepts) vs a Computer Engineer (code monkey/skills)

      Your job will be to solve problems - what language you use is secondary. Solving the problem efficiently is more important than the language you use. My current company outsources to the lowest bidder the code monkey/maint jobs and retains the educated people to solve the hard problems.

      Differences in teaching methodology via an example: I recently took a Relational database class at the local University (my alma mater), and a younger friend did the same at a local "skills" College. I learned Relational Algebra & Calculus, how one mathematically reduces a statement to find the shortest/fastest "plan" - brush up on set theory, and how modern "search" is really done. He learned SQL Syntax and how to write/type SQL. I also looked at his C#/Java class and he was learning Syntax - whereas I remember learning Linked Lists the differences between Asm/Lisp/C/Prolog (yea - a while ago) - Functional vs Imperative vs Logic vs... etc and syntax came only as part of learning the concepts and visiting each language.

      Coding-wise, when I went to University - Java didn't exist (actually, ANSI-C had just become - well ANSI Standard C, my K&R book was stamped "NEW! Updated for ANSI-C"). But I learned what Garbage collection was - in the class on memory management and CPU architecture. What is a Heap/Stack and why approaches such as Garbage collection are useful (including algorithms for multi vs single pass culling) There were little 1 credit classes to learn specific languages(e.g. later on C++). Heck - I even learned how an ALU physically works in my EE class (that was way-cool ! A light bulb went on and I switched from EE to CS)

      The best classes where the Analysis of Algorithms & Data Structures. While I hated it at the time, learning what O(n) means has turned out to be very helpful - esp when applied to other concepts like Bandwidth and Latency. A lot of "new" programmers don't understand latency and believe trips across the wire are just fine - yo - make as many as you'd like. In my day a trip across the wire was from the CPU to main memory. No adays it is from browser to web-server. However, with proper training one learns the Min/Max of "as few as necessary"

      If your method of solving a problem can't possibly go faster - fiddling with code will only improve it in single digit percentages. Knowing why this is and finding the better algorithm or mathematical simplification/reduction will improve execution time by double/triple or maybe exponentially - and thus make you a better asset.

    3. Re:Three Divisions of Computer Science by Anonymous Coward · · Score: 0

      Spend some time with

      http://www-cs-faculty.stanford.edu/~uno/

      I recall using 3 volumes from Don...

  32. Exposure to multiple environments and languages by Troy+Roberts · · Score: 1

    Many of the modern CS students spend all there time in a single environment and a single language (Java on Windows). If this is the case for your school they are doing you a disservice. I was exposed to the at least 5 operating systems and 7 or 8 programming languages and wrote assembly that ran on bare metal in school. If you experience a variety of environments and languages you will have a much better base to judge what is good and bad when developing solutions.

    1. Re:Exposure to multiple environments and languages by jandrese · · Score: 1

      It's hard to find that many OSes these days. Once you get beyond Windows/Linux (Unix)/MacOS you start talking about a lot of stuff that's basically "Linux but...". I guess if you were particularly generous you could count BSD as a fourth OS, but that's stretching it. It really depends about what you mean when you say you've "learned" an OS. Have you learned how to manage it? How it handles devices and memory under the hood? The interface between the OS and the applications it runs? Or is it just "I know how to log in and do the 'ls' and 'cd' equivalents."?

      --

      I read the internet for the articles.
    2. Re:Exposure to multiple environments and languages by jbolden · · Score: 1

      Windows/Linux (Unix)/MacOS/BSD

      Solaris / AIX = the last true remaining big box UNIX out there. Many features not found in any of the above.
      IBM System i = integrated database operating system totally unlike the ones you listed.
      Mainframe: z/OS, z/VM, z/VSE, and z/TPF
      Real Time: QNX (well implemented microkernel), VxWorks, PikeOS, eCos
      Network operating systems: Cisco's iOS, JUNOS, ExtremeXOS
      etc...

    3. Re:Exposure to multiple environments and languages by jandrese · · Score: 1

      You had mainframe access in school?!? I don't count embedded "OS"es like Cisco's iOS--you are just running an application for configuring the device. It's semantics and I can see the arguments for and against it. When you learn those, you're not really learning the OS so much as just learning the device, it's not especially portable knowledge.

      --

      I read the internet for the articles.
    4. Re:Exposure to multiple environments and languages by jbolden · · Score: 1

      I was in school a while ago. In middle school I had access to VMS in an enrichment program. When I was in college NeXTStep and AIX were the primary Unixes. In grad school: SunOS, AIX, IRIX and that's when I started to use Linux. Many schools do use iSeries. But my point is there are many OSes. As for embedded ones, no. Cisco iOS crosses devices and abstracts the hardware just like any other OS. The fact you can use mostly the same commands on a mid 1990s $400 firewall and a 2014 $75k router indicates how good the abstraction is.

  33. "Real programming" is BS by Anonymous Coward · · Score: 0

    There's no such thing as "Real Programming"
    http://www.eggwall.com/2014/05/theres-no-such-thing-as-real-programming.html

    Posting anonymous to avoid Karma whoring.

    1. Re:"Real programming" is BS by UnknownSoldier · · Score: 1

      That's a bogus argument.

      Real should be replaced with "Good". Are there "good" Javascript, Java, Visual Basic, etc., programmers? Yes there are always exceptionally gifted people -- however that is not the norm as those language encourages sloppy design principles. If programmers come from a C background they tend to be "better" programmers:

      ALL good programmers understand TINSTAAFL. Namely,

      * Floating Point
      * Memory
      * Pointers
      * Budgets: CPU budgets, Memory budgets, Disk budgets, Network budgets, People budgets (such as programmer time vs machine time)
      * Macro-optimization = Algorithm
      * Micro-optimization = Assembly language
      * GOOD programmers understand both the strengths and weakness of high level programming languages and low level programming languages. They are not married to the dogma of "one size fits all" -- they are aware that each language was designed to solve certain types of problems. They use the right tool for the right job.

      I would also add unless you can read assembly language you're probably not as good as a programmer as you think you are.

      I still maintain the "last good programmers" were those that could read 6502 assembly. Later generations are mostly clueless about the implementation costs.

    2. Re:"Real programming" is BS by Troy+Roberts · · Score: 1

      So, you are arguing that only being exposed to one environment is fine? I didn't mention anything about real or good. I just said if your school is only exposing you to a single environment and language, then the school is doing you a disservice.

    3. Re:"Real programming" is BS by angel'o'sphere · · Score: 1

      I would add 68k to the 6502 :)
      However ARM is mot and either, in fact it is simple and straight forward.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    4. Re:"Real programming" is BS by Euler · · Score: 1

      The things you list are excellent. Without understanding basic pitfalls and trade-offs, no amount of MIPS or RAM can save you.
      6502 was very limiting; I'm grateful that we have cheap micros that can do 30 MIPS instead of 0.5 MIPS. So whole new classes of problems can be solved in real-time. But embedded programming is still a place were bytes and number of instructions are a big deal.

      It boggles my mind how inconsiderate programmers have become where a news webpage can bring a multi-GHz 64 bit CPU to its knees.

  34. Bias by whitedsepdivine · · Score: 1

    Everyone has a bias on what a true developer should be. You will not have the same interview for the same job title no matter what industry. Some managers will worry about how long it takes you to complete your work; Some managers will worry about the quality of work; If an architect interviews you they may care only about the design patterns you know; There is a Bias for everything. If your want to know a very low level language you need to know about memory management. If you want to use an abstracted language you should at least know it exists.

  35. Build stuff by Bamfarooni · · Score: 2

    Yes, the concern is real and common. The antidote is building stuff. A bunch of stuff. The more stuff you build, the more likely it is you'll have to get "dirty" with the underlying guts of it, the more you'll know, and the more valuable you'll be.

    For instance:
    Of the many garbage collectors Java offers, have you ever used anything but the default? Do you have any idea what the trade-offs are and when you might want to use another one?
    Have you ever profiled any Java code?
    What do you know about Java byte code?
    Ever SWIG wrap anything into Java?
    Ever used Java serialization? Do you know what's wrong with it and why you wouldn't want to use it?
    Custom class loaders?

    My adivce: go learn everything there is to know about "something", it doesn't really matter what (maybe you want be the worlds foremost expert on malloc). In the process of gaining a very, very deep understanding of that 1 specific sliver; you're going to also learn about a ton of other stuff on the way.

  36. Advice by Shortguy881 · · Score: 2

    C does offer the ability for explicit memory management and if thats what you want to learn I suggest picking up C. In programming the lessons are transferable and always useful when looking at another language. What you learn in C can be applied to what you do in Java.

    That being said, Java does a lot of the heavy lifting in memory management, but it isn't fool proof. If its java you want to learn about, try running your jvm with less and less memory. This will make you conscious of the size of large objects and ways of getting around memory barriers. In java this really starts to apply when you are using huge data sets and repetitive tasks. Poorly written code will start to see oom and stack overflow errors. There are plenty of tools out there that will analyze memory usage of your code. I'd suggest getting some and trying to decrease your programs memory footprint without a loss in speed.

    This, of course is all computer science, and has little to do with most software engineering done today. Knowing these things, though, will definitely put you leaps and bounds in front of other software engineers.

    --
    Brilliance without wisdom, power without conscience. Ours is a world of nuclear giants and ethical infants.
    1. Re:Advice by Anonymous Coward · · Score: 0

      C does offer the ability for explicit memory management and if thats what you want to learn I suggest picking up C.

      No, no it doesn't. C offers malloc(), free(), and a stack, which are high level abstractions that teach you absolutely nothing about how memory management actually works.

  37. memory management circa 2014 by Connie_Lingus · · Score: 1

    go out and buy another gig or two of ram for a few bucks.

    seriously...its hard enough to find professionals to build software without getting bogged down with mallocs and leaks for god's sake.

    when java first hit in the 90's, prettty much the #1 feature was its automated garbage collection...why now are we debating this now?

    oh...i know why...its same group of old folks who live in the past and think anything not invented or produced 20 years ago is shit.

    --
    never bring a twinkie to a food fight.
    1. Re:memory management circa 2014 by Anonymous Coward · · Score: 0

      Yup. Manual memory management is something relegated to compiler design and those few high performance applications. For 99% of software, it is simply an insane waste of programmer time and a way to introduce bugs.

    2. Re:memory management circa 2014 by confused+one · · Score: 1

      clearly written by someone who doesn't do any embedded programming on 8 bit processors. Your world is full of 8 bit processors. They outnumber the 32 bit and 64 bit processors by an order of magnitude.

    3. Re:memory management circa 2014 by mjwalshe · · Score: 1

      Actually I did a map reduced based system in the 80's and compared to Pl/1 Java is crap for that

    4. Re:memory management circa 2014 by KlomDark · · Score: 1

      Oh come on, you think your little niche is the whole world? A modern day "real programmer" wouldn't waste any time on a shitty 8bit processor.

      I did my time in the 8bit 6502 days. I loved them. Those days are gone.

      If you're not coding 64bit then you are stuck in the past. Tell yourself anything you want, but if you are still coding on a 8bit processor then you are horribly obsolete.

    5. Re:memory management circa 2014 by confused+one · · Score: 1
      Sorry. coding 8-bit, 32-bit and 64-bit embedded, as well as desktop apps. You missed the point. parent said

      go out and buy another gig or two of ram for a few bucks. seriously...its hard enough to find professionals to build software without getting bogged down with mallocs and leaks for god's sake. when java first hit in the 90's, prettty much the #1 feature was its automated garbage collection...why now are we debating this now?

      The reason I'm arguing it's important is that there are still a lot of applications out there where dropping in another gigabyte of RAM isn't an option. Embedded doesn't always have gigabytes of memory; sometimes your cost constraints put you in a 25 cent processor with kilobytes of memory. I'm coding 8-bit processors because I write code for embedded application which are cost sensitive. I'll use a 32-bit processor if the design specs show it's called for.

    6. Re:memory management circa 2014 by kefalonia · · Score: 1

      Sorry to be cynical, but here it goes: Next time your smartphone slows down horribly or plainly crashes, remember the above words of you. It's how this game is played by you guys, yet all systems people frown upon the concept of "wrap around software deficiencies by buying more hardware"...

    7. Re:memory management circa 2014 by brantondaveperson · · Score: 1

      And who do you think writes code for these things? Faries?

  38. Neither by Anonymous Coward · · Score: 0

    Please allow me to be very snobby and arrogant.

    I think to focus on either camp is to miss the whole point of "Computer Science", and focus on "Computer Programming" instead. With my CS degree, we had to focus on math, combinations, algorithm analysis, language theory, parsing, OS design, complexity theory, etc...

    I think the difference between one language and other is a scalar difference, while the difference between "just programming" and all the theory is an exponential difference. The latter stretches the mind and gives us more mental tools (macros) when attacking a problem in real life many years after the degree. Furthermore, it's perhaps easier to learn a new language on your own, but it's much more difficult to learn (or to motivate yourself to go and learn) about language theory, for example.

    On a separate note, the C vs Java comparison can be flipped, one could criticize C/ASM/Binary programmers as not having enough experience with OOP design. Again, same poop, different pile.

  39. Re:More important things than memory management ex by HornWumpus · · Score: 1

    CS is not a programming course. But a programming course or three is part of CS.

    --
    John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
  40. Old quote of disputed origin explains this by Dareth · · Score: 1
    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  41. What do you plan to DO with your degree? by rujasu · · Score: 2

    Web development? Keep learning Java. You will rarely ever have to worry about memory management. Learning C won't make you a better Java programmer, and there are plenty of jobs for people with Java backgrounds. Of course, you should also know HTML/CSS etc. if you're going this route.

    Video games? Learn C and C++, probably in that order. Java isn't going to cut it, you'll need to learn things like memory management and graphics programming. However, the object-oriented programming stuff you learn in a Java-centric curriculum will still be very helpful in C++ (or C# if you go in that direction), so you have a solid base to work with.

    Embedded systems? You're in either the wrong school or the wrong major for that, you need to focus on C and Assembler for that. Completely different world from Java.

    You get the idea. Figure out what you plan to do with your career if you don't already know (in a broad sense, you don't have to nail down a specific job), and steer your studies that way. If you want to keep your options open, teach yourself some basic C or C++ and see if it's right for you. If you can't figure out how to manage pointers, then you know what type of programming not to get into.

    1. Re:What do you plan to DO with your degree? by angel'o'sphere · · Score: 1

      I would bet there are minimum 100 cross platform game engines for OS X, Windows, iOS and Android, and probably Linux that only need JavaScript. No memory management, no C etc required.
      If you want to write a video game in C++ you rather have a multi million dollar budget in either dollars or time or both.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    2. Re:What do you plan to DO with your degree? by hibiki_r · · Score: 1

      If there's anything wrong with starting with Java is not really the old thing about memory management: Today, many languages used in the industry are garbage collected one way or the other, yes, even in games.

      However, the problem with Java is that it teaches you relatively little of what a programming language can do for you. It's a language that moves glacially slowly. It just now got basic support for lambdas. It's still about as verbose as you are going to get this side of Cobol.

      So if I had to recommend a curriculum today, I'd make sure students can see the world outside of Java. Even within the JVM, Clojure, Scala and Groovy are are much nicer to work with than plain Java. One could teach some F#, or some Haskell. A key part of being a professional developer is learning new tools, so why just teach one?

    3. Re:What do you plan to DO with your degree? by Anonymous Coward · · Score: 0

      Are you confusing Java with Javascript?

  42. McDonalds is hiring by Anonymous Coward · · Score: 0

    When I was in college, Java did not exist. Take your script kiddie language and make Flappy Bird clones with it. Real programmers learn Assembly and C.

  43. Experience by dentin · · Score: 1

    The problem isn't so much that new grads are missing some specific piece of technology or some specific piece of information. It's that new grads are typically missing, quite frankly, everything.

    Programming and software engineering are -hard-. If you're a couple standard deviations above the average IQ, you can become barely passable in four years and reasonably good after ten. 'Reasonably good' is ideally the minimum standard that most companies would prefer to hire at, and the percentage of new grads which meet that standard is quite low.

    Your best bets are two-fold: maintain one large personal/open source project for many years to demonstrate that you understand software engineering, and work on many smaller projects to gain diversity of experience. Optionally, you can pour your effort into the large project if it supports sufficiently diverse requirements. As an example, my large project was a mud server, which exposed me to everything from web server management, volunteer team building, and customer support to memory management, unix sockets, reference counting and coroutines.

    In short, nothing substitutes for experience and breadth.

    --
    Alter Aeon Multiclass MUD - http://www.alteraeon.com
  44. Re:wow great by Tyrannicsupremacy · · Score: 0, Offtopic

    Wow could you please not downvote me please thanks? That's really rude.

    --
    http://i.cubeupload.com/T6cyLu.png
  45. Data Structures and Algorithyms by QuietLagoon · · Score: 1
    If the CS grad did not take a course in Data Structures and Algorithms, or have verifiable knowledge on the topic, then the candidate wouldn't get past the first couple hours of interviewing.

    It is not which languages you know, languages are merely the means to express your computer science knowledge.

  46. Re:More important things than memory management ex by Anonymous Coward · · Score: 0

    Yes, and nowadays that is a Java course, which doesn't teach you manual memory management (but if it doesn't totally suck explains how garbage collection works). The point is that CS isn't vocational training for code monkeys. The important problems need to be solved at a higher level.

  47. Ask yourself what you want to do. by kelemvor4 · · Score: 1

    Do you want to go work somewhere and write Java programs for a living? Maybe you'd like to go write games or work on an office suite? Then learning high level languages like Java will serve you well. Do you want to write low level stuff and do "real" computer science? Maybe you want to develop a new high level language, or do hardware development or other significant development. If that's what you want to do, then you're right. High level Java and other languages should just be a footnote. Focus on Math, assembler, maybe some C/C++. Other low level work that provides a good foundation would also be wise.

    Both of those are "Computer Science" disciplines in the modern sense. Obviously they are significantly different from each other in both required study and expected results.

  48. Real programmers use assembly by swschrad · · Score: 2

    and the Godheads sling opcodes. THIS is memory management, making all of your 1K count.

    --
    if this is supposed to be a new economy, how come they still want my old fashioned money?
    1. Re:Real programmers use assembly by Pseudonym+Authority · · Score: 1

      Absolutely none of that should be taught. That belongs in the Code Monkey department, where they focus on churning out enough passable ``programmers'' to satisfy the lust of industry, not the Computer Science department.

  49. But let me elaborate by ZahrGnosis · · Score: 2

    I agree with the parent (@HornWumpus -- good name), but I'd like to elaborate.

    First, I agree that "There have always been a subset of CS students that didn't get anywhere close to the metal. They suck.", and I agree that "C isn't good enough." No language is good enough by itself. If you haven't played with Functional, Procedural, Object-Oriented, and hardware-level (Assembler) languages by the time you've graduated, you've missed something.

    You can figure it out no matter what they teach you, you just have to be inquisitive and ask good questions. You should take compiler, operating systems, and a numeric computing class which will each teach you about overflow and precision and memory allocation, in different ways, regardless of programming language used. You should have a basic understanding of how to do everything from scratch, with bare hardware, short of soldering the chip to a board (unless that's your thing, then go learn that too).

    But then you should also learn that many "higher" languages make this easier... they have garbage collection built-in and you should learn why and when that's a good thing and why and when it's a bad thing. Java is good for some things, bad for others. If you go through a CS degree and all that you come out with is knowing one language, get your money back. Ask "why" early and often.

    You should learn concepts and hands-on. You should learn the ideas so that, when a new language comes up next year, you can understand the literature about the pros and cons. But you should also be able to sit down with a couple of languages and pound out some simple algorithms and I/O with no references.

    I liked my CS degree, but there were things missing. I had to learn network programming (TCP/IP, etc.) on my own. We didn't do embedded systems, so I didn't have much experience with small hardware and the nuances that come with them. But the advice I'd give is to avoid too many classes that are "just" programming, and focus on the fundamentals. Use as many languages as possible. Take Artificial Intelligence, Compiler design, Operating systems, data structures, numerical computing. Take a comparative languages class if one is offered. Take a database class. And take these all realizing that they're teaching you exactly the same thing -- how to solve problems using computers.

    It's all ones and zeroes in the end. Once you've mastered pushing them around for one thing, you should be able to push them around for another, it just takes practice. Practice as many things as possible.

  50. Deeper experience by c · · Score: 1

    I'd trust a programmer who's never dealt with the sorts of problems caused by manual memory allocation (or, even nastier, compiler bugs) about as much as I'd trust a plumber who's never gotten shit on his hands.

    It's not that I think garbage collection is bad, but the sorts of bugs caused by memory stomping tend to be some weird non-deterministic stuff which makes you question your sanity and your tools. You have to learn to narrow things down as deep as possible, to trust nothing, question everything, abuse your tools, and occasionally go on some very strange side-trips.

    Now, Java can lead you down some strange alleyways (concurrency, for example), but it doesn't even come close.

    --
    Log in or piss off.
  51. Major in Math by Anonymous Coward · · Score: 0

    Picking up programming if it still interests you.

  52. Let me guess by Anonymous Coward · · Score: 0

    You probably have also heard this gem from the same person... "Java is unfit as a programming language because it uses too much memory" (with no attempt at even defining what amount is too much)...

    Java is just capable enough to do almost any task, and just universal enough to run on just about any CPU architecture. If you are OK with your career in computer science being confined to "almost any task" and "almost every architecture" then stay the course. If you are concerned that you won't feel fulfilled until your career takes you to "every task" and "every architecture" then stay a little longer and learn more bare metal topics.

    But make no mistake, any toolbag that discredits Java without specific reasons (besides the aforementioned "its a resource hogG!!!!!11a") is worth about two fucking nothings.

  53. The Story of Mel by cant_get_a_good_nick · · Score: 1

    A Real Programmer

    Jokes aside, i don't think Mel would get much work now. We're so far from doing that low level (for most things) that he'd spin his wheels for 2 days on a loop while real work needed to get done

    1. Re:The Story of Mel by confused+one · · Score: 2

      I just went on a rant at work because one of our programmers decided, at some point in the past, to write blocks of code in inline hexadecimal. With little to no comments. It had a bug... five bugs actually. I spent two days in the code, finding and fixing problems which should have taken at most a couple of hours, all because someone decided to be a "Real Programmer", aka elite ass. I don't care what the esteemed Mr. Raymond and Mr. Nather (the author of the article in catb.org) believe; we created higher level languages, like C, to make it easier to write and maintain code. I can write code directly using machine instructions too; but, I have too much work to do. As the parent said, don't be like Mel, we all have real work that we have to get done and someone will hate you later.

    2. Re:The Story of Mel by cant_get_a_good_nick · · Score: 1

      As an aside, one of my digs at Steve Gibson is related to this.

      Steve has an odd fascination, in 2014, with doing stuff in assembler. Though it's cool to say "hey I can make my own computer by squeezing sand into computer chips", we have a much more complex world now.

      Steve "lets worry about security" and Steve "lets write code that may be attacked in assembler, the mode with the fewest checks and constraints against bugs and bad coding" are very much in conflict, almost violently so.

  54. Narrow scope. by Vellmont · · Score: 1

    The programmer you're referring to has a very narrow scope. Software development is big, and we don't all have the same problems. People are often very narrow in their view of the world, and assume THEIR view of the world and their problems are the only one that exists. Thus the C programmer who thinks that Java programmers are inferrior because they don't have to deal with memory management. (i.e. you don't feel our pain, so you're not one of us).

    I can equally tell you that C programmers don't understand OO principles. If you don't do OO, that's fine. Just like if you don't need to deal with all the memory management issues, that's fine too.

    Your programmer is just doing the same cultural bullshit that's been going on for decades "These kids these days aren't any good because they have/didn't-have BLAH-1. Back in MY day we had BLAH-2". 40 years ago (and outside of the software world) it was that doggone rock music.... "back in my day we appreciated Henry Miller, not these blasted Beatles and their long hair!"

    People become attached to their view of the world and can't imagine it without it. This is the pitfall of age and experience.

    --
    AccountKiller
  55. Real programmers use assembly by kfractal · · Score: 2, Interesting

    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.

  56. Depends on where you work... by stoicfaux · · Score: 1

    If, like the vast majority of CS grads, your career is to write code for a standard/traditional software company, i.e. web, business apps, etc., then no, you don't need to know a lot about how a computer works. Your goal is to implement business decisions (i.e. write software that makes the business more efficient, more money, etc..) Anything that distracts you from implementing business code, such as memory allocation, vi/emacs, overly complex version control (*cough*git*cough*), "fringe" languages, and so on, is inefficient.

    However, if you dislike being a code drone, or just happen to work in a career where scalability, parallelism, performance, and/or resource efficiency is paramount, then yes, you will appreciate a class in C, Assembly, or even an intro EE course that introduces you to IC chips and breadboxes.

    On a side note, you will also appreciate taking a few business courses so that you can appreciate how differently business people speak and think from engineers. Heck, I would even recommend a few sociology, psychology, and/or history courses as well.

  57. What are the student's goals? MacPaint '83 vs. '85 by davidwr · · Score: 1

    If the student's goals are to get a marketable career that will last at least until his next career, he needs to learn whatever employers will want him to know, not whatever is deemed the one true definition of computer science.

    If the student's goals are to think and act like a computer scientist or a master engineer he needs to take the appropriate classes and gain the appropriate experience.

    Anyone who wants to "think like a computer scientists studying memory management" should know and understand the memory management of not only assembler but also other languages that handle memory in other ways, such as traditional C or managed-memory languages like Java. They should also know how different hardware architectures present memory to applications - is the assembler code really running on the bare metal or is the microcode or hardware-virtualization-layer playing games behind your back?

    Likewise, the student who wants to think like a master engineer needs to know enough to say "I will choose library A, compiler B, and run-time implementation C, middleware layer D, operating system E, and hardware F over others because together, they provide the best balance of speed, cost, maintenance, ease of programming, and other factors compared to competing products." For some applications, "knowing enough" means knowing enough about memory management to recognize when memory will be an issue that requires engineering attention/optimization and when it won't be an issue.

    Here's a trivial example of how the passage of just two years from 1983 to 1985 changed the need to grok memory management:

    In 1983, the early public release of MacPaint running on the early public release of MacOS is said to have used all but 384 bytes of the 128KB of the original Macintosh's RAM. Granted, it relied heavily on the routines that were in the original Mac's 64KB of ROM and it used its own spiritual analog of "disk-based memory" by storing most of the image on the floppy drive instead of in RAM. How did it do this? In addition to being written with a significant amount of assembly language code, it's my understanding that either MacPaint or the ROM routines or both used some very tight loops that, if memory were not so tight, would have been "unrolled" for the sake of speed. Today, or for that matter even 2 years later when RAM was relatively plentiful and cheap, a similar program could have been written in a high-level language without any fancy programming and without the need to "page out" the parts of the image that were not visible on the screen. The very task that required intimate knowledge of memory management in 1983 no longer required this knowledge in 1985.

    Useful links:

    * https://en.wikipedia.org/wiki/...
    * http://www.computerhistory.org...
    * https://en.wikipedia.org/wiki/...
    * https://en.wikipedia.org/wiki/...
    * https://en.wikipedia.org/wiki/...
    * https://en.wikipedia.org/wiki/...

    and links embedded in the pages listed above

    --
    Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
  58. Re:wow great by mrvan · · Score: 4, Funny

    Wow could you please not downvote me please thanks? That's really rude.

    Why don't you impose a $500 fine?

  59. Learn Assembly by Anonymous Coward · · Score: 0

    Buy a microcontroller and its associated programmer/debugger, program something non-trivial to run on it in assembly.

  60. Understanding versus Knowling by Anonymous Coward · · Score: 0

    I would not just make this about Java or C. To me the problem is that newer students start at such a high level that they do not appreciate or understand what the tools do for them or how the automation works. If you don't understand memory management, or variable scope, or how to write space/time efficient code, what the compiler does for you, how code is optimized, the way an actual HTTP request is communicated/served by the webserver, or how a GUI widget is actually implemented, then when it does not work you will have NO way to debug or even understand where to start looking. Automation and abstraction layers and higher level languages are great at helping to be more efficient, but if you don't understand enough of how the basics work, you will always be dependent on people who know how it works and therefore less valuable to your employer.

    If you want to augment your skills to be a better employee (coming from a hiring manager), learn C, read a book on operating systems, write a windows GUI program using C, learn to program in bash. There are good books and even on-line tutorials and become familiar enough to write these, and the couple of weeks of time, might not be enough to take that "C" coding job, but will for sure put you head and shoulders over your competition in that first job and earn you much respect with the more experienced team members.

  61. limited resources are often an issue, even now by Chirs · · Score: 1

    There are plenty of places where you can't just add more memory...embedded devices in particular. Your phone is limited to 2GB of RAM, and you really don't want any one app chewing it all up. Raspberry Pi, Arduino, BeagleBone, etc. are all relatively limited in terms of resources and to use them efficiently you need to be careful.

    Even on really beefy virtualization hosts with a couple hundred GB of RAM, you want to be able to dedicate as much of the resources as possible to the guests, not the host management software--so you need to be able to put strict limits on how much memory the host itself will use under any circumstances.

  62. I took both C++ and Java in CS by Anonymous Coward · · Score: 0

    Looks like I have a unique experience here. When I took CS 10+ years ago in my final year they switched from C++ to Java. The reason being that Microsoft that year, in their infinite wisdom, stopped giving universities a deal on Visual Studio and other MS products. The university responded with dropping C++ from the curriculum and switching to Java. Fortunately for people like me in their last year _most_ professors allowed the students to submit assignments in either language.

    So this taught me one thing, a hatred for Java right down to my bones. Taking 4th year classes and doing 4th year assignments in a new (and yes it was pretty new at that time) language took so much more time. Java was a slow kludgy pos as anyone who suffered though the browsers of the day with their horrific java plugins knows.

    But I do know this, I think they dropped some of the lower level programming classes when Java came along. You know, the ones dealing with pointers, balancing a red-black tree, etc etc. I don't know if knowing this stuff made me a better programmer or not but I know I hate Java.

  63. Learn how to learn. by unimacs · · Score: 1

    As someone who has been in the field a long time now, I've learned not to judge programmer's talent so much on what they were taught or even what they're currently doing. It's how quickly they can pick up something new. And it's not alway about technology. It's also about being able to effectively grasp the subject matter that's the basis of the software you're developing.

    My recommendation is to constantly challenge yourself to learn something new. If all your current CS work has been java based, then definitely it's time to expand beyond that, and not because there is anything wrong with java. I'd say the same thing if you had been using C++ instead.

    To me you can make the same sort of argument about CS Grads never being exposed LISP/Scheme/Clojure. The problem is that a 4 year degree must include other things besides CS courses (which is good), but there is only so much time. You can't learn everything in 4 years which is why you must continue learning your entire career.

    I'm willing to bet that the dude complaining about modern CS grads is woefully deficient themselves in some areas of CS that could they could really benefit from.

  64. Computer Science != Software Engineering by jader3rd · · Score: 1

    There's a difference between software engineering and CS. Dealing with freeing memory pointers is SE, not CS.

  65. focus on engineering by a2wflc · · Score: 3, Interesting

    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.

    1. Re:focus on engineering by presidenteloco · · Score: 1

      Hmmm. As a CS who often works with engineers (and scientists) from various disciplines (or managers who come from those backgrounds), I can say that many of them have a blind spot regarding software. Some see the surface and not the ocean. Their questions amount to "how long will it take to implement a user interface that is like this, using software", and that reflects their lack of grasp of the depth of issues that may be dealt with in software specification, design, and construction.

      Symptoms of this are:
      - "Let's build this critical system (which should be network-centric and reliable-server-based) using a Windows PC glommed onto my techie hardware (because windows PCs, that's what computers are, aren't they?)"

      - "The demo/prototype worked, what more work could there be to do? Aren't we done?"

      - "Let's use circa 1970/80s serial communications protocols for this distributed monitoring and control system, because they're fast!" (What do you mean that security, and future-proof, scalable, standard TCPIP-based architecture is more important than latency and bandwidth in this supervisory control application?)

      - "What's an interface and design by contract? Here's the signal list. There couldn't possibly be any disagreement about it."

      - "You asked for an interface with 3 monitored value communications one on/off control, and one setpoint setting method. We gave you this 100 signal signal list. Why would you be complaining when we gave you so much more features and flexibility. You can toggle them in any sequence. Of course turning it on is a 20-step flow chart of signals list monitoring and toggling. See how flexible that is?"

      - "I haven't seen a software problem for which visual basic, matlab, Fortran, or C was not the answer."

       

      --

      Where are we going and why are we in a handbasket?
  66. CS != Programming by nedlohs · · Score: 1

    And hence the language is essentially irrelevant.

    If it's actually CS more time will be spent on Turing machines and pushdown automaton than on C or Java anyway.

  67. There are two kinds of programmers by 0xdeadbeef · · Score: 3, Informative

    Those who can write in Java, and those who can write Java.

    Or those who can write in C#, and those who can write the .NET runtime.

    Or those who can write in PHP, and those who can create PHP. Wait, those are the same.

    You get what I'm saying. The programmers who whine about requirements to understand low-level memory management are in the first category, and their knowledge and skills are laughable compared to the kind of programmers who get hired by the likes of Google, Apple, and Microsoft.

    Stop trying to pretend you're as good. If you were as good you'd be doing something interesting instead of slapping together enterprise bloatware.

    1. Re:There are two kinds of programmers by Anonymous Coward · · Score: 0

      Those who can write in Java, and those who can write Java.

      Or those who can write in C#, and those who can write the .NET runtime.

      Or those who can write in PHP, and those who can create PHP. Wait, those are the same.

      You get what I'm saying. The programmers who whine about requirements to understand low-level memory management are in the first category, and their knowledge and skills are laughable compared to the kind of programmers who get hired by the likes of Google, Apple, and Microsoft.

      Stop trying to pretend you're as good. If you were as good you'd be doing something interesting instead of slapping together enterprise bloatware.

      That's kind of a dumb argument. I've been around greybeards my entire life and we all respect the fact that we operate at different levels in the stack and sometimes at the same level yet solving different problems. Ask a low-level engineer to write a complex system in JavaScript and his head would explode. Similarly, ask a driver developer to write a video game (what I do) and he knows fuck all about 3D, 2D, GPU optimizations, AI, multiplayer latency algorithms, and suddenly he looks like a tool.

      I think the real truth is that developers are specialized and like to look down on anyone not in their specific specialty. Humility is part of being smart, and becoming smarter. Right now I'm moving into Machine Learning, I grew up on C/C++ and yet I'm a noob compared to the guys who know nothing about C but are sharp and have specialized in ML or statistical languages. Do I look down on them for having never allocated a byte of memory? No. I listen and learn.

      I'd also consider writing Machine Learning algorithms to be more interesting than optimizing a driver, but that's just me..

    2. Re:There are two kinds of programmers by 0xdeadbeef · · Score: 1

      I think the real truth is that developers are specialized and like to look down on anyone not in their specific specialty

      Only morons do that. You almost get the point I'm making, but you confuse domain knowledge with programming.

      Knowing how memory allocation works is not freakin' domain knowledge, at least not to any programmer worth a damn. It's basic year one stuff. It's programmer potty training. If you don't understand it then it means you're happy treating the whole software stack as a magic black box. It means you had a deficient education.

      I know I have a wider exposure to that stack than most people, having worked on virtual machines and embedded systems, but for fuck's sake, I learned how malloc worked in school. I was able to pick these things up on the job because I had a solid background in CS.

      ask a driver developer to write a video game (what I do) and he knows fuck all about 3D, 2D, GPU optimizations

      You have a really dim understanding of the kind of people who do driver development. You think GPU optimization and game engine design isn't the sort of thing that gets their dick hard?

  68. Not so much memory management by Yunzil · · Score: 1

    I think it's not just about memory management but more about understanding what's really going on in the CPU while your program is running, and memory management is just a part of that.

    Some of this stuff is still very relevant today. If you want to understand how a buffer overflow exploit works you need to understand what's happening in your program at the level of bits and bytes in the processor.

    It wouldn't hurt to take an assembly language course, preferably one that uses some small 8-bit processor. Nothing gives you an appreciation for the mountain of layers of software piled on top of the CPU these days like having to write your own function to divide two numbers.

  69. Sweet explanation... by bayankaran · · Score: 1

    Sweet explanation on the 'recent grad'.
    I am guessing you (and your C++ wife) were programming equivalents of sliced bread when you started your career compared to the "unschooled" Java programmer.
    Why is Java popular...its good enough for most of the tasks and reasonably competent people can write non-scary code.
    Not every programmer needs to understand "bit bashing" and a mental model of computers at the assembly level. Its an overkill.

    --
    Tat Tvam Asi
    1. Re:Sweet explanation... by Anonymous Coward · · Score: 0

      Why is Java popular...its good enough for most of the tasks and reasonably competent people can write non-scary code.
      Not every programmer needs to understand "bit bashing" and a mental model of computers at the assembly level. Its an overkill.

      I can only assume that you are a "web application developer" based on the above comment:

      a) The reason you can get away with it as a web application developer is because someone else - who understands bit bashing and computer architecture-level
      understanding - has written a framework that you plug tiny bits into

      b) The reason your web application will eventually fall over when scaling out is due to not understanding "bit bashing" or having a computer architecture-level understanding

      OTOH, keep blindly charging forward, it's people like you that keep people like me employed.

    2. Re:Sweet explanation... by bayankaran · · Score: 1

      'What I am' does not matter. You will be employed if your skills are in demand, whether than involves frameworks, bit chasing...it does not matter.
      Good to know you are employed. Now please stop being condescending.

      --
      Tat Tvam Asi
  70. Never stop learning... by Anonymous Coward · · Score: 0

    One has to never stop learning to go far in the systems development world.

    Programming:
    1. Learn assembly language - specifically how to maintain data on a stack, heap and static data segments.
    2. Learn an old programming language like FORTRAN and understand what FORTRAN looks like in assembly language.
    3. Learn some straight jacket language like Java and why it is for anal retentive project managers who think you need training wheels.
    4. Learn a strongly typed language like C++ so you can understand how to apply software engineering discipline to your projects and why!
    5. Learn C and Perl because you need to write some code quickly and with freedom.
    6. Learn Python and Ruby because languages like these are the future.
    7. Algorithms!

    Software Engineering:
    1. Design patterns!
    2. Never reinvent the wheel!
    3. Understand how good design in development can save lots of time in maintenance later.
    4. Understand the multilayer cake of a software system: data, middleware, business rules, presentation layer

    Systems Engineering:
    1. Hardware
    2. Firmware
    3. Software
    4. How to partition system requirements among all three to save time and to increase reliability.
    5. System of Systems approach!

    Half the "programmers" never open another computer science book after graduation.

    Keep in mind companies don't think you are sexy after age 35...

  71. Learn the languages you want by angel'o'sphere · · Score: 1

    First, if people learn C they can not do memory management either. When Bertram Meyer propagated is programming language Eiffel (basically a mix between C++ and Ada) he introduced a linker level/global code optimizer that also chose 'the right' garbage collection algorithm for this particular program and linked it (from a set of about a dozen).
    He made many studies comparing (relatively simple) Eiffel programs with C counterparts. The Eiffel programs where on average 30% faster, regarding memory management, and all but one of the C programs had memory bugs.

    There will be plenty of posts that claim if you learn C and assembly (probably C++) that will make you a better programmer. Unfortunately it is a fallacy. C is just a portable (macro) assembler, nothing fancy about it except the pitfalls. You can make pissing contents all night long in a pub about niche problems in C and pointing out how smart you are (which does absolutely not save you from making mistakes exactly in those areas ... giving you smart comments next pissing contest when you are again in the pub and admit your failures). In C++ that would be even worth, frankly I forgot more about C++ in the last 20 years than the average /. will ever know anout it, I don't really miss it. However my next job is in C++ again, will be funny. Programming in assembler is even more fruitless as there are not many interesting processors out there where it makes sense to program in Assembler, no one programs a Sparc or an (modern) X86 in Assembler ... 68k systems or ARMs, that would make sense. Would you learn anything relevant for:
    Perl
    Python
    PHP
    Prolog
    Pascal/Modula (2)/ Oberon
    Lisp/Scheme/CLOS
    Smalltalk .Net / C#
    Basic (regardless which)
    Java
    Erlang ...
    Haskell
    Miranda
    ML/OCaML
    Fortran
    Forth
    SQL
    ???
    Nope. Absolutely nothing. If you learn assembler you learn how that particular processor works. If you learn C you already have learned: how a particular processor works, is irrelevant.
    If you learn C/C++ the only thing beyond memory management you might learn is: there are resources even more scarce than memory, e.g. file handles/sockets. And: you will fail for 4 to 5 years on doing memory management 'correct'. Afterwards some guru will tell you, that your code is 'quite correct' but you don't do it 'right'. And after 30 or 40 years programming in C/C++ you still will have memory related bugs in YOUR code or in code of your TEAM. Murphies law: if something can go wrong, it will go wrong (sometimes).

    To become a better programmer only two things are interesting: broaden your horizon, that means look into requirements engineering, architectures, processes, audits/reviews, technologies, tools; and different paradigms: learn a true OO language, learn a language with life images (Smalltalk, Self, Newspeak), learn a functional language (Erlang, Lisp, Haskell) or slightly mixed paradigm languages like OCaML or Miranda. Learn logic based languages like Prolog.
    If you are into it, even learn C++ and how to mimic functional and logic programming with functor objects and operator overloading, but be adviced and use a GC library for C++ ... or learn hacking LLVM ... hm, or how is that other C++ meta programming suit named? Forgot it ... anyone has an idea?

    Oh, you could of course learn specification languages like Z or compiler specification languages like ENBF and based on that Yacc/JavaCC or ANTLR (compiler construction tools).

    There are in fact things you can learn if you do learn Assembler. E.g. on an 68k you could access memory byte wise, word wise and long word wise (8, 16, 32 bit words).
    A guy once claimed to get fast graphics you have to do it in assembler. He wrote a Brezenheim algorithm for black and white graphics for Macs (something around 1992) see:

    --
    Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    1. Re:Learn the languages you want by Anonymous Coward · · Score: 0

      all the time you spent writing this post you could have spent instead doing something useful for yourself, for example learning C and how a particular processor works.
      Because learning C is a very good way to understand the problems that languages and runtimes _in general_ have to solve, and learning how a particular processor works is a very good way to understand the problems that hardware _in general_ has to solve.

      When you get a bit past the surface, languages are not _that_ different and architectures aren't either, because they are trying to solve underlying issues which are always the same, and will become clear to you once you drop your "I don't need to learn that" attitude. Go deep instead; it always pays off.

  72. Don't fear by Plouf · · Score: 1

    I'm doing a lot of programming interviews these days, and I can tell you that it really doesn't matter.

    During interviews I couldn't care less about pointers: I will check problem solving skills, I will assess how they react to existing code they are not familiar with (this is the real challenge you face when getting a new job). I will use good old FizzBuzz test, I will play with basic recursion (insane how most candidates will fail at even the most basic recursive logic). None of this is language specific.

    C developers might also be lacking notion of proper data abstraction and will scatter global variables all over the place. This is as bad (if not worse). And believe me, most C developers don't understand memory management neither (is this virtual memory? is this page committed or just reserved in the address space? how comes you get an out of memory in your process and yet you still have tons of free physical memory? what is heap fragmentation? is malloc slow? is it thread-safe? what are heap protection canaries?) A lot of C developers will be using static data with constant size in order to avoid dynamic memory allocation. The result? Java developers are typically more versed in dynamic structures such as double linked lists than C developers...

    And by the way, Java has "pointers", we just call them references, and any Java developer worth working with knows the difference between a value-type (int) and a pointer (Integer), they just have different names, you can't assign arbitrary values to your references and you don't need to free them explicitly, that's all.

  73. Bring Examples by Anonymous Coward · · Score: 0

    When you show up for a job interview, have examples of all the cool stuff you have worked on in your own time. Then it does make jack shit difference what degree you have or what the curriculum was.

  74. Much less should be written in C by Animats · · Score: 1

    Low-level programming is a specialist issue. Maybe it's time to turn C programming over to people with real EE degrees, or who can at least use an oscilloscope and wire up an Arduino. At the application level, who has time to manage memory by hand any more? EEs and mechatronics people, and OS and compiler developers, need to learn C, but most application programmers today do not.

    The emphasis on Java isn't unreasonable. The pure-interpreter languages (Python, Perl) are too slow for large server-side operations. (If it's 3x as slow, you may need 3x as many server racks. That costs.) Java is memory-safe and goes reasonably fast. Go may become an alternative, but it's a little too weird to go mainstream yet. C++ has turned out to be a mess. It adds hiding to C without adding memory safety, an unfortunate feature combination unique to C++.

    Realistically, a CS degree today needs to cover machine learning, which is all about calculus and matrix math. There's less need for discrite math and bit-pushing.

    I have classic CS training - all that stuff in vol. 1 of Knuth, automata theory, optimization of logic gates, formal methods, proof of correctness, etc. It's just not that useful any more. Mostly I write Python and Javascript.

    1. Re:Much less should be written in C by Anonymous Coward · · Score: 0

      I have classic CS training - all that stuff in vol. 1 of Knuth, automata theory, optimization of logic gates, formal methods, proof of correctness, etc. It's just not that useful any more. Mostly I write Python and Javascript.

      Well your choice. It is telling how you put the "classical CS training" and all your complaints about C in opposition to "I write Python and Javascript".

    2. Re:Much less should be written in C by GiganticLyingMouth · · Score: 1

      C++ has turned out to be a mess. It adds hiding to C without adding memory safety, an unfortunate feature combination unique to C++.

      Adds hiding? You mean... encapsulation?

      Is that the only thing you can think of that C++ adds to C? If so, that may explain why you have such a poor view of C++

    3. Re:Much less should be written in C by jbolden · · Score: 1

      At the application level, who has time to manage memory by hand any more? EEs and mechatronics people, and OS and compiler developers, need to learn C, but most application programmers today do not.

      We've just seen a major platform shift in the last 7 years where a platform that focused on performance (iPhone) pushed out higher level language platforms like JavaVM. Performance often still matters. That doesn't mean it always matters. Most applications performance doesn't matter but then again it never did. Which is why COBOL, VAXBasic, PL/1... were popular even when C was being created.

    4. Re:Much less should be written in C by Uecker · · Score: 1

      C++ has turned out to be a mess. It adds hiding to C without adding memory safety, an unfortunate feature combination unique to C++.

      Adds hiding? You mean... encapsulation?

      Is that the only thing you can think of that C++ adds to C? If so, that may explain why you have such a poor view of C++

      Adds hiding? In C++ you put your classes in the header which makes the calling code dependent on it.

      C++ is so broken that even Scott Meyer admits to making a living by having to explain this mess:
      http://dconf.org/2014/talks/me...

      Which is funny, because it reminds me about this famous interview with Bjarne Stroustrup..
       

    5. Re:Much less should be written in C by GiganticLyingMouth · · Score: 1

      I'm not quite sure I understand your gripe properly. You're saying that since C++ has classes, and classes are defined in header files, that calling code is dependent on the class because... it's in a header file?

      If it bothers you so much, use the PIMPL idiom. Or forward declarations where you can. Or template your calling code and write to static interfaces. You've got plenty of options, you just need to know how to use them. C++ is admittedly a very large (arguably too large) language, which is both it's most compelling feature and it's biggest drawback. You can use it for pretty much everything, but fully grasping the language and knowing when to use what feature takes time. This is partly due to trying to maintain backward compatibility with C, while still incorporating new language features. Because of this hodgepodge, iterative development, some dubious choices have been made. D is meant to take the good parts of C++ and cut out the bad; it is a good idea, and a lot of the foremost C++ experts are D supporters. It's a shame that D will probably never take off.

      If you're going to complain about C++, at least use valid complaints. Like about how 2 primary aspects of the language (templates and OOP/dynamic polymorphism) are partly incompatible, or about how there's no dynamic multi-dispatch built in to the language still, or how there's no concepts, or how C++11 async doesn't really give task parallelism. (And yes, there are others, many others). But classes and header files? Cmon.

      And yes, the famous, fictional interview...

    6. Re:Much less should be written in C by Uecker · · Score: 1

      If you change a private implementation detail in a class, you have to recompile everything which uses the class. This is the opposite of encapsulation. And no, it is not my only gripe with C++...

      The problem with C++ is not that it is large or that it backwards compatible with C. The problem with C++ is that almost every language feature has been added in without much thought because it seemed cool at some point in time. So the whole thing is a mess of incoherent, incomplete, and sometimes broken features, which do not work together.

    7. Re:Much less should be written in C by GiganticLyingMouth · · Score: 1

      If you change a private implementation detail in a class, you have to recompile everything which uses the class. This is the opposite of encapsulation.

      Yes, that's what the PIMPL idiom is for. Here's a nice introduction to it .

      As with most everything, there's a way to solve that problem in C++, it just takes some work and knowledge to know what, when, and how to use it. I do agree that the language is too big though; conceptually, C++ could be broken into 4 distinct components (C, STL, templates, OOP), as each have their own quirks and idioms that don't necessarily carry over well to the other, and some are even Turing complete on their own (ie template metaprogramming)

    8. Re:Much less should be written in C by Uecker · · Score: 1

      If you change a private implementation detail in a class, you have to recompile everything which uses the class. This is the opposite of encapsulation.

      Yes, that's what the PIMPL idiom is for. Here's a nice introduction to it .

      Yes I know this.

      As with most everything, there's a way to solve that problem in C++, it just takes some work and knowledge to know what, when, and how to use it.

      Sure, but why waste so much time working around short-comings in the language? This idiom is a very good example. A lot of code and complexity which does nothing useful but is required to work around the stupidity of the language designer.

      I do agree that the language is too big though; conceptually, C++ could be broken into 4 distinct components (C, STL, templates, OOP), as each have their own quirks and idioms that don't necessarily carry over well to the other, and some are even Turing complete on their own (ie template metaprogramming)

      I use the C component. It is not perfect, but not as mis-designed as what has been added in C++.

  75. Of course, if you really want to manage memory... by Anonymous Coward · · Score: 0

    ...You can program everything in brainfuck.

    Of course, this would be silly and useless and imagine how risible it would be for someone to claim that not doing this (or not spending time learning how to do this) is somehow a detriment to one's ability to write working code for an actual application.

    The fact is, we automate memory management for the same reason we write code to do calculations instead of pulling out a pencil and paper - it makes things /easier/. Is it sometimes necessary to bypass certain automation when the problem constraints demand it? Of course. Are these situations common enough for us to put forth some silly mandate that not practicing doing this makes you a lesser programmer? No, not in the vast majority of actual applications for computer science. Right now, in a vast portion of the computer science problem space, the programmer neither needs to know nor care about how memory is being handled. This was not the case a few decades ago. This is an obvious improvement, and anyone who says otherwise is a foolish idealist or an elitist twat.

  76. Learn more languages by sjames · · Score: 1

    A big problem is that they learn everything they know in relation to only one language. They should be using more than one throughout their education so that they properly generalize the principles. Personally I think Python is a good choice because it supports a variety of programming styles from procedural to functional. It has a number of features that are either missing or clunky in Java. On the flip side, Java's strong typing is a good contrast to Python's duck typing.

    Another issue is that CS is treated as if it was an engineering program when it really isn't anything of the sort. As a result, the recent CS grad will have little to no knowledge of maintainability or making code to be genuinely reusable. They will know little to nothing about designing an API that can be lived with years later.

  77. Advice from a CS Researcher by Anonymous Coward · · Score: 0

    Firstly, "Yes", to your question. People who use managed programming languages (C#, Java, etc) are generally not as good programmers as people who use C, C++, Assembly, etc.

    The reasons for this are multi-faceted, but can be broadly summarized as the difference between turning out fast, employable youths, and people who want to do specialized tasks. If you're looking to really learn how a machine works, skip the fast track to intro level developer / QA jobs and find something your passionate about--problems in vision, pattern analysis, whatever else. Then go do that and do it non-stop. If you are just looking for a starting developer role, stay with the Java track and learn more languages as you go.

    Just my 2 cents. Enjoy. ;)

    1. Re:Advice from a CS Researcher by Anonymous Coward · · Score: 0

      And err, please forgive the 'you're' grammar mistake; too lazy to login to post, and now can't edit. ;) Joy.

  78. Smart Person Ego by LeotheQuick · · Score: 1

    So you're asking - is the quality of the programmer determined by ability to write in lower level languages? Well, then I'd have to say the answer is a resounding "no". Having an understanding of the machine and how modern languages came to be is extremely useful, but managing memory yourself without a clear reason (such as limitations at the hardware level where optimal performance matters) has no purpose but to supplement the egos of the programmers involved. It is a question of mental prowess - not skill as a programmer. It is roughly equivalent to asking someone to rub their belly and pat their head at the same time. There are those of us who do better with managing complexity, and we can deem them "smarter" or "possessing more intellect" if you like. If that's you, then congratulations for you. You're more capable than others at this. Bet you can't write in straight binary! Languages like Java exist for the same reason programming languages in general do - to lessen the burden on the human mind and allow us to concentrate on the real problems instead of the machine problems. Playing "how low can you go" is a childish game.

    1. Re:Smart Person Ego by Anonymous Coward · · Score: 0

      The knowledge of low level languages is a necessary, non-sufficient condition for being a good programmer. You cannot be a well-rounded programmer without knowledge of your tools, and you won't know your tools if you don't understand the concepts behind them. But as mentioned there are many more things needed (first and foremost, hard work and the willingness to learn constantly).

  79. You are all just programming technicians by Maclir · · Score: 1

    So, you "I'm the real programmer because I program in C" types... tell me, how will having to handle memory management and all the crufty bits help you when you get a real work problem, and deal with a bunch of users who really don't know what they want their system to do, or you have to deal with management who have no idea what IT can do. When your requirements keep changing, but the deadline can't shift. When you have to take a poorly written system, and adapt it to the new business environment - but you don't have the time, budget or resources to rewrite from scratch. Get your collective heads out of your "this is what real programming is" arsehole. Thirty years ago, the same was said about people who programmed in BASIC or COBOL vs those who coded in Fortran or Assembler. You're just a bunch of irrelevant elitist snobs.

    1. Re:You are all just programming technicians by Anonymous Coward · · Score: 0

      it does help you. Learn your C (and get to know your machine as well) if you want to understand enough of your tools to then move on higher.
      And yes we might be a bunch of elitist snobs but we are not irrelevant. And we have the nice jobs and are paid well - whatever languages and tools we happen to use today.

    2. Re:You are all just programming technicians by jbolden · · Score: 1

      Choice of language increases programmer efficiency. Most of the problems you listed aren't solved by efficiency. They are better solved by abstraction and flexibility. Java is not particularly abstract or flexible. So I'm not sure how your rant is relevant other than it shows why people want CS grads to have a good grasp on programming languages. As an aside COBOL has some excellent abstractions though these aren't flexible and BASIC's level of abstraction and flexibility is highly dependent on which variant.

  80. Comp Sci vs Programming by Anonymous Coward · · Score: 0

    If you learn one language to do everything, like Java, odds are that you are not in a Computer Science program, but are rather in a programming program. It's the difference between learning Electrical Engineering and learning to be an electrician.

    Computer science is about how the things work, not how to program them. Computer scientists use languages as tools, rather than having the language as the end.

    Has the school ever taught you memory management? File system structures? Anything other than Unix or Windows? If not, it's not a CS program.

  81. The acronym STEM supplies some insight by anegg · · Score: 1

    The acronym STEM breaks down into Science, Technology, Engineering, and Mathematics; and this is a good way of categorizing the different kinds of learning that lie behind really knowing computer science and other STEM disciplines.

    A "computer science" degree at an accredited 4-year college should cover topics related to computer science in all four of these areas:

    Science: The science behind the technology, including chemistry and physics necessary to implement the technology that is used to build computational devices

    Technology: Hardware and software technologies, including: logic gates, CPUs, memory (primary and secondary), communications interfaces, operating systems, compilers, databases, programming languages, etc.

    Engineering: techniques for analyzing problems and engineering solutions to those problems (using software, typically)

    Mathematics: binary math, formal logic, formal language theory, etc.

    All of these together provide the grounding to enable the student, after matriculation, to go forth and do good things. As with all disciplines, the better prepared the student, the more deliberate the graduate's approach to solving problems and being productive.

    I have an aquaintance who was (by her own admission and grades) fairly poor at her CS studies, but who was exposed to lots of core computer science STEM material in college. She is now an excellent practitioner/manager in a software development position. She is often frustrated by the plethora of "programmers" (both young and old) who didn't get exposed to the full range of computer science material. They don't know how to think about different ways to solve problems, or what the machine is doing, or how their code is translated into lower level instructions, and this limits their ability. Using tools at a higher level of abstraction is absolutely essential for achieving modern rates of productivity in programming (i.e., Java instead of assembler) but doing so without an understanding and appreciation of what your tools are doing for you is like running a race with blinders on.

  82. It's Math by Anonymous Coward · · Score: 0

    You can compare CS and Math to Physics and Chemistry. On the surface, Physics is more applied and deal with larger things (what happens if you drop an anvil on a freshman) where Chemistry deals with foundations: the atoms underlying the anvil and freshman. As physics grew, it got an applied branch (engineering) and a much more foundational theoretical branch (elementary particles, string theory and that sort of stuff).

    On the surface, CS is applied math: big humming machines blasting thru multiplication as if it was addition. In reality, it has a practical part: dealing with programming and physical machines and a theoretical part. The theoretical branch of computer science (logic) is even more foundational than math. Foundational computer science does not concern itself with computers, but abstract computing devices (most know (of) Turing machines, but also GÃfdel's recursive functions, Chomsky's context-sensitive grammars and many other formalisms comprise the same). Here, we deal what can be computed (computing whether a program always terminates is not possible to do with a computer, optimally planning a route is) to the point of theoretical circle jerk (there are infinitely many levels of things we cannot compute, e.g.).

    More practical is algorithmics, where we informally argue using Turing machine-like arguments, to classify complexity of things. Sorting using Bubble sort is slow, sorting using Quicksort is theoretically just as slow (bet you most didn't realize that), using merge or radix sort is faster (in the case of radix sort only in some cases). This level makes it possible to select the correct algorithm and data structure for a job (use an array if you need random access, use a linked list if you often add/remove elements). This level has circle jerk as well (is prime factorization fast? can we plan a route thru a number of cities fast?) Things like cryptography is a mix of math and complexity.

    When it comes to distributed systems, things become closer to the real world, but still interesting; for example, the routing protocols uses a well-known gaph algorithm from complexity theory. Data-bases are kept in sync using various commit protocols. Assumptions are made, and we get closer to the hardware, while still dealing with purely abstract models (we can now pass messages in either a synchronous or asynchronous manner). No hardware is necessarily involved. Many distributed system concepts are integrated in modern enterprise application frameworks (e.g., queueing systems, redundancy algorithms for scalability and replication).

    People who say you need to know C are not computer scientists. They are just old. Fuck C. C has its place and knowing memory layout can be useful in some cases. Most C programmers don't know enough about memory anyway and fuck up (knowing about cacheline sizes, caching behavior, etc. is more important than a smug working against the garbage collector). Anybody claiming C is better than Java because it gives you control of the memory is as dumb as somebody claiming assembler is better than C because it's faster (or writing machine code instead of assembler because you have control of the exact instructions which you don't have with modern assemblers). For 99% of cases, the computer is better at the optimization than you. This most likely goes doubly if you think you can out-smart the computer.

    A good computer scientist needs to be aware of these levels. There's abstractions from the physics allowing semi-conductors, the gates allowing circuits, the processors allowing code to run, assembler, low-level languages like C, medium-level languages like Java, high-level languages like SQL, abstract algorithms like quicksort, math like Turing machines, and logic like why Aggerman's function is recursive but not primitive recursive.

    Most people just work at a few of the levels. Know of the level above and below and ignore most of the others. If you make enterprise applications, know how a component container works and ignore deta

  83. Reverse by DarthVain · · Score: 1

    Applying for a job that has a larger programming component than I am used to...

    When I went to school I learned on, Pascal, C, COBOL, Assembly, VB...
    Position will likely want someone with Java. While I have dabbled in some Javascript using Google Maps API, I'm not exactly current on it.

    On the other hand DB is what I do, and SQL is probably the scripting I use the most these days.

    Anyway I have done some training on Python, but most of my languages are pretty antiquated by today's standards which I am wondering if it will diminish my chances. Here is hoping more emphasis is placed on analysis and not on initial coding.

  84. Same old by Anonymous Coward · · Score: 0

    Deva vu? http://en.wikipedia.org/wiki/Real_Programmers_Don't_Use_Pascal In fact, it's not about Java or C -- it's about how deep your knowledge, expertise, and experience go. If you think you're an expert because you googled up some code and copy-pasted it in your application, you're wrong. But you can only see this in hindsight.

  85. Most Companies Aren't Looking for "Real" by Maltheus · · Score: 1

    Most companies aren't interested in you recreating the wheel, they want you to get a working, maintainable product out the door in as little time as possible. Design patterns are more important to focus on than memory management these days.

    C and C++ have their uses, but at the end of the day, C is little more than a macro-assembler and is completely inappropriate for most tasks in the business world. I've never worked anywhere where the C/C++ side of the project (there's always one group of holdouts) isn't consistently the long pole in the tent. After seeing several projects fail over this, I'd rather they "keep it real" on their own time.

  86. The Digital Yorkshiremen by Stormy+Dragon · · Score: 1

    Yeah, well I'm sick of people learning CS in C. They don't know about manually managing the stack like they would if they'd learned in assembly.

  87. Yep by Anonymous Coward · · Score: 0

    It's the same thing that is happening to airline pilots, they now spend most of their time just dialing in destinations into the knobs below the glare shield, so they "forget", over time, what it feels like to fly an airplane. So you end up with ridiculous situations where if some bees clog up the airspeed tube, the plane crashes, because the pilots have forgotten what a plane near stall feels like.

    Garbage collection is just swell, really, really swell, until you actually need one large 2Gb chunk of memory for some reason and you find that you can't get it, because you have 347,677 little objects scattered all over the place.

  88. Computing is bigger than any one language! by Frater+219 · · Score: 1

    I'm no fan of Java-based curricula, for the same reason I'd be no fan of Fortran-based curricula. Computing isn't about one language. Each language and system shows you one hyperplane of a vast multidimensional space. The best programmers know lots of languages, and choose wisely among them — or even create new ones when appropriate.

    In the production world, there are times where some C++ or Java code is appropriate ... and there are times when what you want is a couple of lines of shellscript and some pipes ... and there are times when the most sensible algorithm for something can't be neatly expressed in a language like C++ or Java, and really requires something like Common Lisp or Haskell. If you need to exploit multiple processors without getting bogged down in locking bullshit and race conditions, you're much better off using Go than Java.

    (Just last night, at a meetup, I was talking with two bright young physicists who reported that their universities don't do a good enough job of teaching Fortran, which is the language they actually need to do their job. Scientific computing still relies heavily on Fortran, Matlab, and other languages well removed from what's trendy in the CS department — no matter if that CS department is in the Java, Haskell, or Python camp. But if you want to learn to write good Fortran, you basically need a mentor in the physics department with time to teach you.)

    And there are times when the right thing to do is to create a new language, whether a domain-specific language or a new approach on general-purpose computing. There's a good reason Rob Pike came up with Sawzall, a logs-analysis DSL that compiles to arbitrarily parallel mapreduces; and then Go, a C-like systems language with a rocket engine of concurrency built in.

    (And there's a good reason a lot of people adopting Go have been coming not from the C++/Java camps that the Go developers expected, but from Python and Ruby: because Go gives you the raw speed of a concurrent and native-compiled language, plus libraries designed by actual engineers, without a lot of the verbose bullshit of C++ or Java. Would I recommend Go as a first language? I'm not so sure about that ....)

    What would an optimal computing curriculum look like? I have no freakin' clue. It would have to cover particular basics — variable binding, iteration, recursion, sequencing, data structures, libraries and APIs, concurrency — no matter what the language. But it can't leave its students thinking that one language is Intuitive and the other ones are Just Gratuitously Weird ... and that's too much of what I see from young programmers in industry today.

  89. Why do CS grads become lowly programmers? by Anonymous Coward · · Score: 0

    Nether, I'd get a construction crew.

  90. What can I do ... by Culture20 · · Score: 1

    "What can I do to supplement my Java-oriented studies?"
    Learn C. Learn C++. Learn Assembly. On the other end of the spectrum: Learn LISP. Learn Prolog. Learn learn learn.
    BTW, I heartily agree that Java should be a second-year type of language. "Now that you know all about pointers and how to use them to make the data structures we discussed in CS 190, we'll let the computer handle memory management so we can focus on algorithms."

  91. Not A Maxim by Baby+Duck · · Score: 1

    Those grads are merely inferior for tasks where memory management is paramount, that's all. Just like someone who graduated with a database class would be inferior for database programming. It doesn't make them inferior all around. Java is just easier to teach AND learn with, really.

    I remember doing all these exercises in C about storing multiple "strings" in the same character array. Most programming jobs out there wouldn't deign themselves to be concerned with such low-level solution-space details. Even when I had to deal with "packed arrays" in C++, Java, and JavaScript, the first thing I did was write a class around it to abstract all those details away.

    --

    "Love heals scars love left." -- Henry Rollins

  92. Buggy whip techniques by michaelmalak · · Score: 1

    Much that is taught in CS today I had to learn on my own because it hadn't matured enough yet to be incorporated into CS programs: multi-threading, unit testing, OOP, SQL, data mining, all of the web technologies, etc.

    But perhaps today's graduates will be complaining ten years hence how new graduates just rely on quantum computing searches and don't know anything about pruning search trees.

    Seriously, though, to the point, I'd be more leery of those who graduated ten years ago and had not kept up their skills as opposed to those who graduated recently and did not learn skills from ten years ago.

  93. learn C and an architecture by sick_soul · · Score: 1

    learn C and an architecture, then you can go back to the more abstract languages and all that cool CS stuff. If you want to do it at that point.

  94. Oh Pooh by the+eric+conspiracy · · Score: 1

    Java programmers (at least those writing non-trivial code) do need to understand memory management, in particular how Java manages memory, and how they can influence the JVM so that what it does is appropriate for the problem under consideration.

    How this is a CS issue I have no idea.

  95. Experience Only counts If You Learn From It by mckellar75238 · · Score: 1

    After 10 years in IT, you should already have a good answer to your own question. If you don't, you may already be too far behind the curve. Look at your peers; in particular, look at what the successful ones know that the others don't.

    You should understand how computers work. You should understand how systems talk to each other. You should understand how to communicate what you want to the computer. The more of this you do, in fact, know, the better off you'll be in the future. Try to learn it ALL; you won't, but the closer you get the better off you'll be.

    Of course, when you start getting close enough to stand out, either you'll be running your own company successfully, or you'll be wondering why those whippersnappers around you are waiting for you to fall over dead. Whatever you do, don't spend your money just because you have it. Either gamble big and win (i.e., get the Big Bucks for designing and building the Next Big Thing) or save carefully so that you won't be depending on Social Security (or the current equivalent when you get that far) to pay for your food, clothing, and shelter.

  96. what about just the classes needed to work so you by Joe_Dragon · · Score: 1

    what about just the classes needed to work so you have to take 4+ years of student loans.

    I say all you really should need is 1-3 years PURE class room.

  97. Standard Elitist C Bullshit by ttucker · · Score: 1

    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.

    This is snobbery at its best. Pay attention in computer architecture class, you will be fine.

  98. My take -- learn to use something "useless" by mi · · Score: 1

    In my opinion, education is not about how to do something immediately useful, but primarily about learning to learn. Vocational schools may be different, but that's why they are generally frowned upon — I wish, universities weren't teaching with Java exactly because it is in such wide use in the industry today.

    While studying, learn to use a language (or two), which you aren't likely to encounter at any future workplace. Pascal. Lisp. Fortran — whatever. That will still teach you to learn things and force you to learn again, when you are hired. Not only will you be more adaptable to future changes in fashion, you'll also have the awareness of how various problems are solved in different languages — making you a better programmer every day.

    --
    In Soviet Washington the swamp drains you.
  99. Oh forgot one by presidenteloco · · Score: 1

    Object? What's an object?

    --

    Where are we going and why are we in a handbasket?
    1. Re:Oh forgot one by PipsqueakOnAP133 · · Score: 1

      An object? It's a struct with a pointer to a struct with function pointers. And some fancy compiler macros that makes the syntax shorter. ;)

  100. Don't worry by Anonymous Coward · · Score: 0

    This co-worker of yours sounds like he's butt-hurt, because his memory management skills that he spent years honing aren't that relevant anymore. Unless you're looking for a very specific line of programming work, where manual memory management is required, your time is better spent learning other more valuable programming skills.

  101. CS should be inclusive by Anonymous Coward · · Score: 0

    A good computer science curriculum should cover a wide breadth of subjects, and not just the current popular language and methodology. It should include, for example, one solid course of assembly language; algorithmics; operating system design; computational geometry; compiler writing; complexity theory; computer security; VLSI design; discrete math; user interface design. Students should be able to design a domain-specific language for a given problem and write a compiler for that language; reason about zero-knowledge proofs and use them to implement secure web transactions; understand the strengths and weaknesses of various languages and software engineering approaches, and suggest the ones most appropriate for a given situation.

  102. Re:wow great by mrvan · · Score: 0
  103. Aim higher by guacamole · · Score: 1

    At the best undergraduate CS departments, the students have to learn the basics of C, assembly, Java or some other high level programming language, plus some elementary algorithms and data structures.. that's before the end of sophomore year. I know in my school they learned some Lisp, C, assembly, and Java in the basic courses.

  104. It's always good to understand lower levels by Anonymous Coward · · Score: 0

    Computer Science is for theoretical things, like if you want to be a professor/teacher of CS. Learn to program by programming Arduino/Atmega/PIC or one of the many little processors, if you really want to understand what is going on. If you work at the enterprise level you will use Java/PHP or .NET most likely, and it's all an abstraction. But those things can almost be replaced by code generators. The coming 'thing' is IOT and for that you should know lower levels.I work wirh about 60 developers - a few of us know C/C++ and do that work when needed, but most are PHP/Javascript. It is good to know and understand assembly language. Useful with a difficult segfault problem or something like that, but we have not done anything in assembly in 20 years.Our strongest and best developers do in fact know C or C++, whatever language they use (we use PHP, Javascript, XHTML, XML, css, C, C++, Perl, Python, others). Developers who know Assembly/C/C++ also write more efficient PHP code (performance wise). Javascript/css developers mostly work on making pretty UI interfaces. PHP developers handle the enterprise/business aspect. The PHP is intermixed PHP/XHTML and Javascript/css, so all of our developers can do these.

  105. IT == CS by globaljustin · · Score: 1

    i'm amazed at how much Computer Science and Network Engineering (or telecommunications) overlap.

    I did an MS in Information & Communication Science and part of our required coursework was to get a CCNA. They integrated the Cisco coursework and test into their own stuff. It really boosted their hire rate for graduates b/c anyone w/ a CCNA can find work somewhere.

    We did alot of stuff in signal processing and encoding that is very similar to the 'bit twiddling' you guys are talking about. Headers, flags, etc its all there...we used stuff like Dijkstra's algorithm but not to the same complexity as CS.

    The craziest stuff we did was beamforming & satellite stuff...that was fun

    --
    Thank you Dave Raggett
  106. That developer is a douchebag. by Anonymous Coward · · Score: 0

    Memory management is an important thing to understand, but to pretend like it is a daily concern of most developers is woefully misguided.

  107. FTFY by globaljustin · · Score: 1

    serving web pages to 100,000,000 concurrent users tracking their behavior accessing the same DB of products, manipulating the data users see by behavior modeling,and hosting all the infra structure on 4 IBM mainframes that the NSA, int'l criminals, and a bored Zuck can view instantly, run the web front ends on 10,000 virtualized linux boxes running slackware linux (2002) and IBM Java 1.3. ...

    everything not in bold is a question of networking and internet coding and graphic design

    facebook needs all those engineers to mine our data & make it available to outside parties

    **i am impressed** with how facebook.com's scalability and speed, I don't deny it at all...but like I said, alot of what makes www.facebook.com "facebook" is just basic transfer of images and text with alot of interface layers as to harvest data...

    --
    Thank you Dave Raggett
  108. Oregon Tech College Programming by Anonymous Coward · · Score: 0

    The College I went to I think only offered Java as an elective for the Software/Hardware Programming degrees. From start to finish, you get familiar with ~15-20 languages and/or variations of languages. All the CS majors (Software/Hardware/Electrical) start off with C and C ++ and then it diverges from there. I went the hardware route and I was still had to write programs in close to 10-15 languages albeit most were variations of other languages but still. I took C, C++, OOP, ABEL, ORCAD PLD, 8051 assembly, 8086 assembly, i960 assembly, verilog, vhdl, RISC, and others, I don't remember them all.

  109. the car analogy by qsoe81 · · Score: 1

    Do you think Ayrton Senna knew what kind of thermodynamic happens in the engine? (No)
    Would he have been a better racer, if he knew? (No)

    I am a programmer, but I have a Mechanical Engineering degree. Everything I learned in school after the age of 14 is inapplicable to writing businnes applications. I do not need to know how C works, because I do not work with C. For 99.9% percent of business applications written in Java, C does not matter. If you want to learn, great, do it. But most likely it will not benefit you in any other way than you can look down on those who did not learn it.

    Most of the math you learn after multiplication will not come up in 99% of programming jobs. Learn how the Java garbage collector works if you use Java, but HASKELL/Lisp/C++ is just a nicety, like Spanish or cooking.

  110. Not this again. by Shirgall · · Score: 1

    When I got my CS degree I had to learn FORTRAN, COBOL, Pascal, Ada, C, and three different varieties of assembler 6052, 80386, and VAX.

    I need to buy some suspenders.

  111. Old fashioned by Anonymous Coward · · Score: 0

    If you master Knuth (algorithms), Kernighan (C and Unix), and Codd(SQL) you have a sold foundation to do anything in software. Learn from the masters, all else is noise.

  112. Been there, done that... by Anonymous Coward · · Score: 0

    To me, Java (and C#, et al) are C++ with training wheels. Until you get rid of them, you will never be able to properly ride a bike!

    I wrote a deterministic reference-counted garbage collector for C++ - trust me, it wasn't simple or easy! That said, in 10 million lines of application code, there were no deletes, and no memory leaks. It was code that has to run 365x24 and downtime to clients had a cost of $10M per hour in lost profits... The fact that it runs most semiconductor, flat-panel display, and disc drive plants in the world today should say something.

    At my last place of employment, we had a LOT of java code. The issues with memory management and garbage collection can cause serious system and performance issues. So much so, that we switched over to C++ and JavaScript. Even PHP has a reference-counted garbage collector.

    That said, there are a lot of companies that are married to Java, and are looking for Java programmers. As far as I'm concerned, a little Java is ok. A lot of Java is a real PITA!

  113. Berkeley CS 61A by Anonymous Coward · · Score: 0

    I didn't study at Berkeley, but one of my friends from work did. He pointed me to this lecture series, and I thought it applies very well here:

    First read this list.

    Then listen to this.

  114. Timothy's Streak Continues by Fnord666 · · Score: 1

    Hey Timothy, have you ever noticed that submenu over on the left of the front page? You know, the one that lists the various sections that you can posts stories to? Ever notice that there is one called "Ask Slashdot", which just happens to match up exactly with the premise of this story, not to mention the title. Why don't you do all of us who filter by section a favor and try posting "Ask Slashdot" stories to the "Ask Slashdot" section every once in a while? Thanks

    --
    'The tyrant will always find pretext for his tyranny.' - Aesop's Fables
  115. Go Learn and Love Assembler ya girls! by Anonymous Coward · · Score: 0

    Seriously. Java abstracts you too far from the hardware. It's the attitude of "I'll not write efficient code .." (..because they can't and weren't taught to) ".. I'll just get a faster computer .." that's at fault.

    Also to be fair modern CS wing-nuts didn't grow up in an era where you had a single student VAX with under 5 MIPS and 40 students logged in compiling, hacking, learning. You learn pretty quickly to be frugal with your cycles and CPU quota for the day.

    It's all the spoon feeding and dumbing down that's the problem and enforcement of the ideas that "that's not necessary to learn.. and computers have advanced so it's not as important". This is partially true.

    It's recently been amazing to watch some 2014 Java code vomited out by four top paid CS graduates in a 6-core Xeon system. It's a straight code translation with no feature creep yet. The goal is to replace a 20+ year old COBOL and C system on a sub 20 MIPS SMP system doing 71 of "our" transactions a second compared to the legacy system they're replacing that does 290 per second. Again, this is a straight code translation. They didn't even need to think. Also the legacy system stays up for years at a time, doesn't degrade to 5 transactions per minute once the 1024 mb memory heap size runs out and System.gc(); is being forcably called hundreds of times a second.

    The great part was being lectured as to why this was a superior solution and how difficult it was to accomplish.

    Not just these guys, but generally modern CS grads just don't get concurrency. They don't get compiler design. They're spoilt with too many MIPS. They don't get heap management. They have no attention span to sit down and 'really' think through an elegant, robust and efficient algorithm. They only know one language and don't have that rich diversity of concepts that came from being forced to do units in COBOL, C++, SmallTalk, LiSP, PROLOG, Fortran, Ada. These are languages that teach concepts and ways of thought, not "how to do everything with the same java screw-driver".

    We're now investigating emulators which run our legacy system at close to 400 transactions per second.

  116. Beards and suspenders. by Anonymous Coward · · Score: 0

    no. they write glsl shaders

  117. Real CS check list by Anonymous Coward · · Score: 0

    With regards to how much should one learn to be a good computer scientist.
    Setting that bar is a personal choice, but you can pick from the menu of what's out there.
    One would hope that at least a CS grad would have an inkling of the path available to him.
    I'm not sure that is the case in most case.

    Here's a strawman list:

    A top to bottom understanding of what a computer is and how to it works from gates to objects.
    Experience solving problems in an assortment of problem domains
    Experience in what theory academic CS has to offer. (Art of computer programming updated to now?)
    Experience is a variety of languages, systems, toolsets, etc.
    Experience in programming programmers to build big systems.

    A detailed knowledge of the guts (not just an operator or installer's knowledge) of a good percentage of the following:
          data structures and algorithms
          compilers and build systems
          operating systems,
          networking,
          graphics,
          web,
          databases,
          numerical analysis,
          real time and embedded applications
          data compression and encryption
          digital signal processing
          error correcting codes and associated mathmetics
          no doubt many other things I've forgotten or not seen

    A big bag of tricks with and understanding of the tradeoffs for six ways to solve the problem at hand.

    Good judgement and temperament
    Works and plays well with those pesky humans.
    Good knowledge of what's out there to prevent reinventing the wheel.
    Ability to teach and lead others.

    A genuine curiosity to understand how things work.
    A desire to make them better.

    Not interested in World Peace, that's too limiting. Wants Universal Peace instead.
    Looks good on beer commercials.

    1. Re:Real CS check list by Anonymous Coward · · Score: 0

      instead of from gates to objects
        perhaps from gates to user experience

  118. Get with the times... by Anonymous Coward · · Score: 0

    Memory management isn't taught so much these days because, what in the hell are you going to write that's going to use 16GB of RAM?

    In all seriousness though, memory management was important when software and hardware were on par with one another. However, (IMO) hardware has outpaced software at this point. I defy you to find a program my gaming PC can't run whilst I simultaneously play Crysis and browse Slashdot. In addition, most high level languages are incredibly forgiving when it comes to bad memory management, thanks to good built-in garbage collection. Sure, it helps to know that grittier low level, less abstracted stuff. Knowing what your computer is doing on that level would make you exceptionally efficient. However, if you are an experienced programmer, who understands best practice and can competently scour an API for the most efficient classes and methods to use in your object oriented programming, I see no reason why you shouldn't be seen as a "real" programmer. Anyone who says otherwise needs to get with the times...

    1. Re:Get with the times... by daviskw · · Score: 1

      Memory management isn't taught so much these days because, what in the hell are you going to write that's going to use 16GB of RAM?

      In all seriousness though, memory management was important when software and hardware were on par with one another. However, (IMO) hardware has outpaced software at this point. I defy you to find a program my gaming PC can't run whilst I simultaneously play Crysis and browse Slashdot. In addition, most high level languages are incredibly forgiving when it comes to bad memory management, thanks to good built-in garbage collection. Sure, it helps to know that grittier low level, less abstracted stuff. Knowing what your computer is doing on that level would make you exceptionally efficient. However, if you are an experienced programmer, who understands best practice and can competently scour an API for the most efficient classes and methods to use in your object oriented programming, I see no reason why you shouldn't be seen as a "real" programmer. Anyone who says otherwise needs to get with the times...

      If you only program on Windows then you are write. Welcome, however to the real world where windows is but a very small fraction of the hardware devices in existence and the very vast majority of them do in fact require memory management to function. Bad Advice is in the end Bad Advice.

      Funny thing about games even, it turns out that if you were writing games even on Xbox you would find that your employer would fire you with that advice. You should keep it to yourself.

      --
      Beware the wood elf!!!
  119. Learn assembler by waimate · · Score: 1

    Doesn't matter much which one, just learn to so some even trivial things in assembler. Then understand *this* is reality, and everything else is an abstraction.

    For bonus points, then do it in hex without the benefit of an assembler to translate mnemonics into opcodes and calculate your relative addresses.

  120. "Real" OOP by Anonymous Coward · · Score: 0

    All these folks spending so much time learning how to manage memory never understand the big picture of an Object-Oriented application!

  121. Keeeeerhiiist I want to laugh at this... by Xaedalus · · Score: 4, Funny

    but gawddamn, if I meet ONE more unshaven skinny ratty-haired white dev/programmer in his late twenties/early thirties with an aversion to water, soap, matching colors and food (what is it with devs and eating disorders???) here in Seattle, I might just have to defenestrate the fucker to save my sanity. Preferably out an upper window at the downtown Macy's, so that said dev/programmer might actually observe cleanliness and fashion through visual osmosis prior to becoming one with pavement. I don't care if said beautiful mind is autistic, aspie, or what-not--Hygiene is source code!!!!!! Execute it on a daily basis! And if the sensory stimulus is THAT much of an overload then spend some of your six figure salary to get therapy and coaching on how to minimize input while maximizing the ability to incorporate the close proximity of other people!!! I much prefer the Indian and Chinese devs and programmers, not least because they don't have eating disorders and they both understand and practice a minimal standard of hygiene.

    --
    Here's to hot beer, cold women, and Glaswegian kisses for all.
    1. Re:Keeeeerhiiist I want to laugh at this... by russotto · · Score: 1

      but gawddamn, if I meet ONE more unshaven skinny ratty-haired white dev/programmer in his late twenties/early thirties with an aversion to water, soap, matching colors and food (what is it with devs and eating disorders???) here in Seattle,

      Wow, things have changed since I was that age. Back then, the stereotype was that we were fat.

    2. Re:Keeeeerhiiist I want to laugh at this... by russotto · · Score: 0

      but gawddamn, if I meet ONE more unshaven skinny ratty-haired white dev/programmer in his late twenties/early thirties with an aversion to water, soap, matching colors and food (what is it with devs and eating disorders???) here in Seattle,

      Wow, things have changed since I was that age. Back then, the stereotype was that we were fat.

    3. Re:Keeeeerhiiist I want to laugh at this... by skids · · Score: 1

      Wow, to get that upset about someone else's appearence and habits you must have deep psychological problems. Maybe you should be the one seeking therapy, to realize the world isn't a fashion show or beauty contest put on for your own aesthetic entertainment. Your rant makes me want to go back to wearing white socks and sandles just to piss people like you off.

    4. Re:Keeeeerhiiist I want to laugh at this... by Xaedalus · · Score: 1

      Dude, I got no problem with socks and sandles guys. Knock yourself out--hell, send me photos of yourself giving me a goatse in socks and sandles and I'll critique your thread counts and anal wrinkles. What I have a problem with are senior devs that smell like they live in a dumpster that's been coated with the oils from their armpits, wear clothes that came from said dumpsters, and who insist on eating only vegan bean soup from Whole Foods for every meal because they are recovering from an eating disorder (and gawd forbid I should eat anything else other than vegan bean soup from Whole Foods around them because I might trigger their eating disorder again or a sudden food allergy they didn't know they had until yesterday). AND said dudes make a LOT of money--more than enough to hire a therapist to help coach them through managing sensory input and a maid service for their clothes.

      --
      Here's to hot beer, cold women, and Glaswegian kisses for all.
    5. Re:Keeeeerhiiist I want to laugh at this... by Xaedalus · · Score: 1

      Not anymore. Fat devs and programmers don't get hired on as full time staff anymore. If they manage to get hired at all, they'r contractors. If you're under thirty and skinny, basically, then you will be hired because you're perceived as being a minimal risk in light of rising health care costs. Oh, and you send the informal corporate message that Health is In.

      --
      Here's to hot beer, cold women, and Glaswegian kisses for all.
    6. Re:Keeeeerhiiist I want to laugh at this... by Anonymous Coward · · Score: 0

      interesting, the racial stereotypes in your anecdote are entirely inverted in my experience.

    7. Re:Keeeeerhiiist I want to laugh at this... by Anonymous Coward · · Score: 0

      my hygiene package segfaulted mate and i don't have the source, it's not my fault

  122. There are two kinds of programmers by ragnarokxg · · Score: 1

    I am going to add to this, especially since self teaching myself both Scala and Groovy. i came from a school that Introduction to Programming was taught using C and the basics of functional programming. The next classes focused on OOP and started with C++ but eventually the head of the CS department was a Java advocate and everything got switched over to that focus. And they focused too much on the OOP and not enough on the benefits of functional programming. So my anecdote is: There are those that write OOP code and those that write functional code. Not to say that those that write functional code don't know how to write OOS code, they just know how to make their code better and more efficient than those that focus on just the object oriented aspect of it. I do believe that if more students nowadays focus on learning functional programming, and this is possible with Java, we wouldn't see the problems with software and memory bloat. With the proper mix of OOP and Functional Programming you can let 'GC' do its thing and it will be efficient and sufficient.

  123. Just Do It! by Anonymous Coward · · Score: 0

    I don't intend this to be sarcastic, so please don't take it as such:

    You already have the answer...go write some C! (Or C++or some other language that makes you manage memory.) I'd recommend starting with a project that you already know how to do in Java, and re-write it in C (I found that school projects were great for this). You'll almost certainly have to start dealing with pointers, and stack vs. heap allocations once you progress beyond "hello, world", and the quickest way to get comfortable is to just write some code.

  124. Hiring manager by jbolden · · Score: 1

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

    I'm a hiring manager. Not knowing low level absolutely counts against you in terms of breadth of knowledge. It generally isn't a deal breaker but it would be treated the same way as not knowing OS theory, not knowing database theory, not understanding algorithms design, or machine learning. Its a hole, you lose a few points and we move on with the interview. As far as it being common CS grads differ a great deal from school to school, the curriculum is not remotely uniform. A recent CS grad can vary tremendously in what they know and what areas the degree doesn't mean anything than they've had some classes in some computer stuff.

    In terms of what you can do to supplement. Learn things unlike Java. Definitely at least one functional language and one procedural language so you have something other than OO programming. Learn a low level language and a very high level language. Languages can do double duty so for example Mathematica is very high level and functional while C or Assembler (better choice BTW) is low level and procedural.

    1. Re:Hiring manager by Kittenman · · Score: 1

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

      I'm a hiring manager. Not knowing low level absolutely counts against you in terms of breadth of knowledge. It generally isn't a deal breaker but it would be treated the same way as not knowing OS theory, not knowing database theory, not understanding algorithms design, or machine learning. Its a hole, you lose a few points and we move on with the interview. As far as it being common CS grads differ a great deal from school to school, the curriculum is not remotely uniform. A recent CS grad can vary tremendously in what they know and what areas the degree doesn't mean anything than they've had some classes in some computer stuff.

      In terms of what you can do to supplement. Learn things unlike Java. Definitely at least one functional language and one procedural language so you have something other than OO programming. Learn a low level language and a very high level language. Languages can do double duty so for example Mathematica is very high level and functional while C or Assembler (better choice BTW) is low level and procedural.

      I've been a hiring manager (well, a manager who's hired). In general I don't care about the amount of low-level a candidate knows, I'm more concerned about how he writes the program (if that is what I'm hiring him to do) and how he'll fit into the project. Does he know the language syntax. What sort of stuff has he written. What sort of problems has he had, how did he get around them. In real big-boy operating systems, memory management is left to the OS: I just need someone who knows to be careful of the resources. And writes good, clean, maintainable code

      A car analogy. I don't care if you're able to tune the engine to get that last fluid ounce of petrol. Just keep an eye on the MPG and most importantly, don't crash.

      --
      "The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
    2. Re:Hiring manager by jbolden · · Score: 1

      My feeling is recent graduates don't have professional level skills in whatever language they'll be working in so I don't care too much (though there is a slight advantage) if they have academic experience in a language. Now of course if they've done a project with a professional toolset in the language that genuinely does help.

      As for good and clean I test for that. Maintainable i.e. coding standards ... that's up the senior who is doing code reviews. I just take it for granted recent graduates document the wrong stuff. They are focused on homework type documentation showing they know how to do X rather than explaining the tie between business rules / requirements that justify what they are doing.

  125. As spoken by someone who's never programmed inJava by Anonymous Coward · · Score: 0

    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.

    Even in Java there are heaps of examples where to do something interesting with the host you have to manage the memory yourself because the native API methods you are calling are handing back to you system-allocated memory pointers.

  126. How to fix short coming of CS curriculums by jamej · · Score: 1

    Write a compiler.

  127. Beards and suspenders. by Anonymous Coward · · Score: 0

    I know it's mainly tongue in cheek but it's largely true. It's a generational thing. There are plenty of crapy CS grads of all ages. In fact most are not of much use (I am one by the way). That said I don't think it's been any different, at least not in the 25 years since I graduated. It's just that when you get old young people are stupid because you've ceased to adapt. This mixed with the fact that most people in general are stupid and useless gives the dinosaur plenty of "proof" to point at that say he's right and everything is going to hell with these young people.

  128. Always try to understand at least one level down by snkline · · Score: 1

    I don't think everyone needs to learn C, however I think it is important to try to understand at least the level below where you are working. If you are working in Java, learn how the Java runtime behaves. Learn how the Java compiler interacts with different code constructs to produce different bytecode. Learn how the Java libraries implement their various functions so that you understand their underlying behavior and possible performance implications. Most of my work these days is done in C#, and while 90% of the time I don't have to worry about all the underlying details, knowing them is invaluable the other 10% of the time.

    While I did learn Assembly (MIPS and SPARC), C, and C++ in school rather than Java, I don't think those low level things actually had a significant impact on my job coming out of college. You don't need to understand how C allocates memory if you are not working in C. You do need to know how the environment you are working in allocates memory though, even if that behavior is hidden from superficial inspection.

  129. I know this sounds like a troll but the truth is.. by Anonymous Coward · · Score: 0

    Computer Science majors are functional retards, period. And no, this is not just at a "shit school" that they always love to rebut with. And yes, I do know what advance CS courses are like.

    CS majors don't learn a damn thing in university. They don't know how to code. The old adage that 99.5% of graduates can't code fizzbuzz level stuff in any programming language whatsoever couldn't be truer. Neither do they learn any really amount of theory at all. Sure they have courses in discrete math, algorithms, computability theory, but they are so watered down they can't really be said to cover much of anything at all besides merely definitions, yet they still manage to fail them in droves. Contrary to the name, they know nothing about computer operation despite having course in architecture nor do they learn any logical problem solving skills in either a concrete domain or the abstract. Apathy and ignorance are the king and queen of CS and constantly driving the curriculum down the drain as pressure mounts for more majors.

    I would never hire a CS major for anything, not even mopping floors.

  130. I find this all very funny by dbIII · · Score: 1

    Because back in the day we were disparaged as engineers and not real computer scientists if we worried about memory and addressing things at the processor level. Real computer scientists apparently used things like Modula-2 and then Java instead of that messy C and FORTRAN that only lowly engineers like myself should touch.

  131. C++/C by Anonymous Coward · · Score: 0

    It's not really so much about inferiority as much as the field of CS you want to spend your time and career focusing on.
    But if you want to do operating system kernel development, you will have to know C/C++. Just take a look at Linux on Github.

  132. Instead of a degree, try this by johnnyb · · Score: 1

    I actually noticed this trend about 8 years ago, and wrote a book to solve it. The book is called Programming from the Ground Up. It is a Linux-based assembly language book, but also teaches a lot about systems programming in general, but without being too technical.

    For the other CS-oriented stuff that they don't teach, the two books you should get are how to design programs and Structure and Interpretation of Computer Programs. After that, I have written a series of articles to apply those ideas to "real" programming languages on IBM's developerWorks. You can find links to them here.

  133. Simple by Anonymous Coward · · Score: 0

    Java is a good language for learning CS when used properly. Here is what I mean by that.

    1) Design a simple assembly language

    2) In Java implement a compiler that translates your assembly language into machine codes.

    3) In Java implement a virtual microcomputer (CPU, RAM, non-volatile storage etc.) that understands machine codes that your compiler generates.

    4) Learn to code in your assembly language

    By the time you will finish coding a simple OS that car run on your Java-based microcomputer, you will be light years ahead of your peers who think that putting together a bubble sort algorithm or a simple web server in Java makes them skilled in computer science. That's how they taught me 20 years ago.

  134. YES! CS isn't about programming lang. by Anonymous Coward · · Score: 0

    You could learn CS using only javascript and HTML5.

    The reality is today's CS is really engineering and CS started out as a Math degree; somewhere in the middle of the transition was actual CS. Actual CS should be something that almost nobody learns. Software Engineering is the degree almost everybody is actually doing. As far as learning more hardware oriented things-- it's just not that big of a deal anymore and will be less so with time. For the few people who need to know that stuff, they can hire the CS grads (who'd have few job prospects) or the hardware oriented engineers. Oh, there is an obscure degree called Computer Engineering which is more hardware oriented; those people could deal with that.... I suppose CS people could work on compilers... Most demand should be software engineers-- and if they only know scripting-- fine, that is where it's most of it is going anyhow.

  135. High School is in bad shape too. by bussdriver · · Score: 1

    High Schools are offering "college in the classroom" programs today. I think it reflects poorly on both that they can fill so much "wasted time" in high school with low level college courses which have degraded to the point of being near the more difficult end of high school curriculum.

    If your mommy can bitch to your professor about your progress or grades, IT IS NOT COLLEGE!

    Meanwhile we have high school kids entering who are so poorly prepared that the remedial courses are overloaded.

    The culture is shifting and I do not think it has anything to do with embracing modern education "technology." First off, university is for the motivated - if you can't be serious then you shouldn't waste the money. I've even had people allude to the "A for effort" type reasoning... Also, I've had people who complain something was on an exam that wasn't covered in lecture! (As if there is an unspoken rule.) Homework IS required people!! Most students don't realize the reason 12 credits is FULL TIME is because the total time required is the same as a 40 hour per week job. So then I have to hear sob stories about how they have a full time job and 8-12 credits of coursework. You simply can't condense the same experience into that much less time, humans have not evolved, and education psychology has made little progress (something which I dabble in because I do make an extra effort to be effective.)

    There is a great deal of pressure on staff to not flunk too many people or upset the "customer" too much-- as the admin brings in more high paid MBA types to tell us how the world is a business and their hammer experts are worth the high fees. Too many fear that it reflects badly upon them and you'd think a bunch of smart people would realize correlation is not causation (besides it takes more than 1 whole group flunking to even begin to do correlations.) No curve, if they all suck they must all flunk; it is the only way a quality standard is maintained.

    Allowing the current behavior and culture continue will gradually produce worse results as the bar slowly lowers due to student pressure... It's like an evolutionary pressure... This is one area where "the market" should be forbidden because those forces lead to trite certifications by correspondence school (and we have such great respect for those... once we put "cloud" or "online" into the marketing.)

    Speaking of which, the classroom has degraded to the point that students have no clue what a real functional classroom looks like... and the profs are not much better themselves. Most the tech encourages what is wrong with education today. Oddly, like how cell phones seem to have make people more distant than bring them together (in general. Sure I can email somebody far away but it also means I don't bother to see people next door because I can email them instead.)

    End of rant. There are so many issues one could do a series of books.

  136. Doesn't matter by Anonymous Coward · · Score: 0

    It really doesn't matter what languages are used for teaching provided you learn to see the wood for the trees and learn to find that on your own.

    You can "learn" C or some esoteric machine code or Java and still be an awful developer, but you can also learn any of the above and pickup algorithms, data structures, design skills and independent personal development along the way.

  137. Coding Challenge by Anonymous Coward · · Score: 0

    "Is this a common concern with new CS grads?"
    Yes ! : 'Oh. My program needs more memory, Just add some to the server.'
    => memory is nowadays cheaper than days of optimizing code. Yes this is sad and leads to awful situations as the software will hit new limits later and quite harder this next time. (and hey, let's talk about Environment Health)

    "What can I do to supplement my Java-oriented studies?"
    => Find a student project which will push the machine to the limit. Response time should be part of the notation.

    and Why not do a Coding Challenge ? a Code game with prizes for the most efficient solution ?
    => Students will find way to optimize code if it's a goal. if not, they would now be aware. Next they would listen to the good optimization advices.

  138. Programmer doesn't have to do memory management by Racerdude · · Score: 1

    Ideally, for most high level applications, the programmer doesn't have to use a programming language that forces him or her to do manual memory management. The programmer can use a language like Python or Java where memory management happens in the background. And that is how it's supposed to be. There are more relevant problems to deal with.

    Now, on the other hand, let's say that the project is writing some sort of device driver or real time software. Perhaps something operating close to the 'core' and in an environment with limited resources. Then that programmer will have to use a language like C or C++ and do their own memory management.

    It's a good thing that we have an education system that produces both these types of programmers. However, I think that most programmers, during their career, learn to do both these types of programming. For me: I started out programming in C/C++ and I've since moved on to Python and Java, because that's the kind of projects that I usually get these days. Now, if someone hired me to work on an application that required tight resource management. Well, then I would use C/C++ and do memory management myself

  139. C++ did not let me understand the concepts. by Anonymous Coward · · Score: 0

    My university does nothing but C++ in all courses. As useful as it may be to learn how to use it as a tool, it is very detrimental to understanding the concept. Take a course on compilers and language symantics where I have to write own parser, lexer, and abstract syntax tree manager handler. Or the Design Pattern class that is supposed to teach about Observers, Strategies. Doing it in C++ is a big problem. There is a massive overhead thinking about memory model and static typing taking away from focus on the concepts. I don't focus about how expression expands into another expression to complete a statement, how do tokens come together to form particular expression type - I think about how not to make memory leaks and annoying object allocation. By the end of the term I did not learn either. Understanding Design Patterns and algorithms same problem - I do not know how Strategy is supposed to solve problem of indirection and dynamic polymorphism. I barely know how to make the code to compile by deadline, much less understanding the patter. This also forces the lectures to go into a lot of details about underlying C++ architecture spending only a small percentage of the total time on what the course should be about. Huge part of the course was dedicated towards teaching how vtables work to be able to do Inheritence assignment, as opposed to the concept of Inheritence itself.

    Java would have allowed me to focus and be good at the concept and learn memory management and other low level knowledge in courses dedicated to that, such as Operating System and Digital Logic.

  140. Unless there are resource constraints by Slashdot+Parent · · Score: 1

    Unless you're targeting an embedded system with resource constraints, I see no reason not to implement it similar to the above.

    It's straightforward. You're unlikely to introduce any bit-twiddling bugs. It wouldn't take more than a few minutes to write and debug. And, most importantly, it's readable for people who aren't accustomed to bitwise operations.

    --
    They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
  141. 4 years is not enough by Anonymous Coward · · Score: 0

    The truth is that 4 years (and presumably only half of your classes during that time are actually CS-related) is not nearly enough to become a worthy computer scientist / software engineer / programmer. CS is a big field and expertise takes time.

    Programming seems deceptively simple -- in the first few days, you learn all the programming constructs you'll ever use, and it's easy to think that as long as you have the kind of brain that can logically string together a chain of commands, you're already an "expert". But that's like assuming that because you know how to slap two bricks together, you're ready to go out and build the next skyscraper. It takes a lifetime to understand the ideas behind the many amazing algorithms and programs that have already been developed, and to develop the skills needed to make the next great software that will solve hard problems and change the world.

    So yes, it's a shame that you don't know C/C++. But that's just the tip of the iceberg. You don't really know anything about programming yet. And it's not just you: Nearly all CS grads are weak, unless they've been studying CS since elementary school. Even those that have already learned C/C++ have a thousand other gaps in their knowledge, because as I said at the beginning, 4 years is not enough. Employers mostly have accepted this sad state of affairs, and are prepared to hire the weak graduates that universities produce.

    My suggestion is to go out into the world with a sense of humility, accepting that there is so much more to learn. Know that you can not rest on what you've learned at university -- you'll need to spend the rest of your life learning in your spare time, reading CS books, watching talks, trying out new languages, studying algorithms -- if you want to be truly great.

  142. I was never taught low-level bit-fiddling by Ulric · · Score: 1

    I studied CS in the 80s. The first language was LISP. I don't think we were taught any language that required explicit memory management. We did learn, of course, how a computer works from the silicon level and up. On the other hand, it was impossible to do anything without learning C, so we learned C.

  143. Same Story - Next Verse by servant · · Score: 1
    I grew up in the write Assembler, read dumps, memory and even bulk data storage was dear.

    Core memory was just coming down from $1/bit to $0.10/bit, and it would be $0.01/bit soon. Tape was (and still is) king for bulk offline data.

    Keeping down memory usage and getting LOTS of functionality for each cycle and byte was paramount.

    Cobol programmers (replace with Fortran, C, C++, Java, Easyout, RPG, APL, RPG II, Snobol, etc, etc) programmers weren't concerned unless they hit a 'wall'. The wall that assembler geeks hit every day. So unless you write assembly and poop core dumps, you aren't a 'real programmer', ... back in the day.

    Fast forward to today. We whine of only 32G on our phone that has more processing power than mainframes of yore. We use 90+% of computing power on 'human interface issues' rather than addressing the problem being solved. Programmers do program without ever knowing what the hardware is let alone how it works (even to the digital level, let alone electronics - the discussion that ALL ELECTRONICS IS ANALOG is an argument for another day).

    IMHO, this is not all bad. It does turn out programmers that don't think of limitations, they just drive to possibilities (that is a good thing). Embedded systems geeks are the new low level programmers (programming closer to the metal) than most programmers today.

    Not all CompSci 'professionals' are scientists. I have a CS degree from 30+ years ago. I am more of a programmer, and long ago gave up bemoaning the 'real' programmer wars. But not all programmers do, or should, program at all levels (hardware wise). Micro-controller and embedded device programmers are doing more with less than ever. Smaller and cheaper electronics make that possible. Uber-power CPUs and cheap memory allow programmers at higher levels to not worry about those resources.

    Todays 'restrictions' seem to have more to do with the 'size of your pipe to the internet' and the amount of super-fast-bulk-storage you can get use effectively. From my old days, hainveg 16T of data in my hall closet that I waste space on just to watch yet another episode of a time wasting TV show is unthinkable. Having more CPU power in my android phone than on my desktop or laptop seems odd too.

    What I find scary is how we are 'surprised' when an 'enemy' slips in a few hundred thousand more transistors onto chips we have them build internet routers with and don't even recognize it for a long time. (You can do the looking up the articles on why the NSA, DOD, CIA, and other TLA organizations are not using some routers coming from China and other places.). We ignore the details of the resources (equipment, fuels, etc) we use because we want it fast and cheap.

    But I digress. We don't need as many 'real computer scientists' as we are generating degrees for. We need more systems analysts, designers, and coders. We will have, and need SOME computer scientists. They do the esoteric research, blaze trails that I can't begin to imagine. I am sure there is a modern day Lady Ada, Bool, Babbage, Touring, etc out there. We all don't need to be them, but we do need some REAL explorers in the field that do more than play video games and build internet toasters.

    --
    ... "When you pry the source from my cold dead hands."
  144. Assembler by Anonymous Coward · · Score: 0

    I hated it, but it does make you think about the bowels of the system. Maybe it is a good place to create a low level language that makes this learning easier. Of course my dad had to change switches and tubes on a huge board to program...then he got to look at machine code for fun.

    Actually this also creates an issue with the user as well. The more user friendly we make systems and software the less the user will learn about what he is using. Don't get me wrong, I love usability, and I do not think a user should need to care what goes on behind curtain, but it also gives college students an inaccurate idea of what it takes to be a sysadmin, programmer, developer, analyst, etc. When that gets reinforced by teaching high level programming languages you receive a product that really does not understand how to see the entire picture of any data process.

  145. Don't listen by darkarena9789 · · Score: 1

    If you take a computer architectures class and KNOW how memory works, who flipping cares. Truth is, much like nobody programs in assembly any more, all modern languages have garbage collection and most have eliminated pointers. Why? Well the reasons are many. First off, such techniques are error prone at best. Even IF someone understands them, sometimes things get overlooked and when they do, they are hard to debug. The reality is that the OO paradigm and in the near future functional models will be 99% of what the overage programmer will be exposed to. I'd rather hire someone who was comfortable with these concepts then someone who could map put and manage their own memory any day of the week.

  146. No, posting on Face Book is not CS by Anonymous Coward · · Score: 0

    Believe it or not I had this discussion with a student a few days ago.

  147. CS teaches low-level programming by eanbowman · · Score: 1

    As far as I'm aware, any university level CS (now dubbed computer studies and not science) has a required module where you learn processor logic down to the flip-flops, you make machine code in an emulator and you make your own "OS" which is really just a string processor that can interleave the strings as if they were tasks.

    To get through CS you need to at least see this stuff and achieve a 60 or higher. Sure, the language they teach you abstract data types has changed over the years. When I started it was Pascal in the intro course and standard C in the abstract data type courses. Then C++ in the object oriented courses until midway through my studies they switched over to Java for things like the machine learning and simulations courses. Generally you could use whichever languages you wanted for your submitted work, however.

    That said, I was always surprised by the skill-level of people who were able to temporarily remember the material for said courses but who could not grok it for the life of them. Usually, I hope, these were people from other majors who wandered into a CS course to fulfil a requirement. I shudder to think that some of them intended this as a career.

  148. Software is Art by daviskw · · Score: 1

    If you go to college and all you learn is Java when you got your CS then your an idiot. I got my degree in Math, taught myself C, avoided Fortran like it was Ebola (it is in Software terms, not wait, that's Forth). Anyway, Software is Art. It isn't science, it isn't Engineering. It is Art. It should be taught like Painting, only with Math and to Nerds, and Geeks, and people with severe social problems who are way too smart.

    The thing is, that the people who are good at this, really good, are so good that you will never, no matter how much you work at it, be as good as they are. They are gods. I've been doing this for twenty five years and I'm good, I'm slow but I am good. But I have seen really good, I have seen artists who are like Rembrandt, these guys like Linus Torvulds (never met him but you know his work) these guys come along and they just kiss the canvas and they change our lives. They pretend that they are writing software but they are creating art.

    The rest of us do that to, and most of us are pretty good, we invent languages, and rules, and say stupid things like, "if you don't get close to the machine for a semester then you aren't a real Computer Scientist". And then we expect that other people will just follow along.

    In the end the things that makes you a computer scientist, a software engineer, a computer programmer, an engineer, a mad scientist, a developer, they are all pretty much the same things. You know what tools you need to do your job. You work to get those tools. You don't bitch about it if you can't get them, or you leave, and in the end. You write software that works. That is it. You write software that works. You want to be a Computer Scientist? Can you write software?

    --
    Beware the wood elf!!!
  149. Go low level by w1gglyw0rld · · Score: 1

    I'd recommend a class in assembler language. It's sufficiently nuts and bolts to reveal the nature of the computing world.

  150. SICP, AoA by jknapka · · Score: 1

    Read "Structure and Interpretation of Computer Programs" by Abelson & Sussman (http://mitpress.mit.edu/sicp/) and "The Art of Assembly Language Programming" by Hyde (http://www.plantation-productions.com/Webster/www.artofasm.com/index.html). Do at least some of the exercises. Bask in the knowledge that the Java that makes up your peers' sole exposure to the art and science of programming is a mere corner case in the coherent universe of Turing-complete symbol systems. (Recommendations from my idiosyncratic experience, obvs.)

  151. CS Grads by Anonymous Coward · · Score: 0

    A few things to note as I have been working as a professional programmer for about 30 years and have taught CS classes for the past 19 years

    Not all CS degrees are created equal

    In general especially at the Masters level one would expect that you have learned

    Automata
    Algorithms
    Compiler Theory
    Some AI
    Data Structures
    Operating System

    As such you would have had experience with a few languages and perhaps some specific languages you created for a class project.

    So java would not be the only language you are introduced too and I actually think Python is being used more frequently in Academia than Java now.

    Having said that MIS degrees and scores of other degrees out there don't cover everything I have mentioned. Of course day in and day out I tend to use Java heavily occasionally use C#,C++ and some C and javascript yada yada

    So can you solve problems?
    Are you willing to continually learn?

  152. Great question - shows great thinking by ambient_bryan · · Score: 1

    A programming language is just a tool. Don't focus on the tools so much. To me, real CS is algorithm design and data structure design, both theory and application to real and imagined problems.

  153. Code Monkeys by Anonymous Coward · · Score: 0

    I live in the database world, so I look a the data side of the house. If you cannot design data, you are dead and not amount coding will save you. The best you can do is to get the wrong answer faster. The author Jorge Luis Borges describes this example of an alternate taxonomy, taken from an ancient Chinese encyclopÃf¦dia entitled Celestial Emporium of Benevolent Knowledge.
    The list divides all animals into one of 14 categories:
    Those that belong to the emperor
    Embalmed ones
    Those that are trained
    Suckling pigs
    Mermaids (or Sirens)
    Fabulous ones
    Stray dogs
    Those that are included in this classification
    Those that tremble as if they were mad
    Innumerable ones
    Those drawn with a very fine camel hair brush
    Et cetera
    Those that have just broken the flower vase
    Those that, at a distance, resemble flies

    Or would rather use Dewey Decimal?

  154. Look at Stack Exchange's Computer Science page by Doug+Jensen · · Score: 1

    It contains submitted questions and responses. The question titles alone will give you an interesting perspective on what a computer scientist is. There are few questions that have anything to do with software development or programming. That corresponds to my experience as a former faculty member in the CMU Computer Science Dept., and to my experience since then working with computer scientists.

    But there is an important distinction that was not raised in the question: almost all the computer scientists I have known have Ph.D.'s in computer science, and mostly do research (which may or may not involve software much less programming).

    --
    Doug Jensen
  155. Low level understanding is important to build scal by SpeakingStones · · Score: 1

    Coming from a strong C background and now working mainly as an architect closely with devs in c# I bemoan their lack of understanding of how memory, SQL, caches or networks really work. If you are making highly scalable systems (as we are) it is important to understand how a single line of linq can cause major memory churn, or that entity framework is terrible at certain things or the fact network latency matters, or your fancy cache is actually making it run slower. The key is to measure everything using something like statsd and graphite/grafana. Then poor performing code will clearly show up and the devs learn the error of their ways and improve. We all need to keep learning, don't just blindly rely on some new fancy framework to solve issues; think about it and become better

  156. Do EEs need to know Ohm's Law? by Required+Snark · · Score: 1
    If you assume that CS is in the same category as Electrical Engineering, you should make a meaningful comparison.

    EEs need to know the basics of electrical theory. Even if they use design tools that handle all the low level details, to do a good job and avoid mistakes they need to know simple things like Ohm's law. No one says "that's too low level, the state of the art has made Ohm's law only useful to a small set of professionals."

    The low level tools of CS are languages and interfaces. A professional needs to have knowledge of both high level and low level tools. If they don't their training is inadequate. Even if the exposure is in school, and not used professionally, it's important to have the experience.

    By the way, so called Software Engineering is a bad joke. It is almost non-existent. Real engineers, like ME or EE or Civil Engineer types can design something for a predictable cost that has a very high likelihood of meeting all it's design goals. If the cost, time or result is wrong it's because someone failed. By that criteria all software development is always a failure. Using the term "Software Engineer" is fraudulent. Other engineering disciplines should stop computer software developers from degrading the term Engineer.

    --
    Why is Snark Required?
  157. Re:Software is Art {CS is /= software) by Doug+Jensen · · Score: 1

    I know lots of computer scientists--which to me means requires they have a Ph.D. in computer science from a good school--and their needs to write software vary all over the map, depending on the kind and amount of computer science (=research) they are doing. But all of them understand at least the Ph.D. level principles of software science, plus a decent amount of software engineering too. Some of my computer scientist colleagues are fabulous programmers and others are stopped at the competency level they needed to get their Ph.D.'s.

    --
    Doug Jensen