Discussions

News: The Perils of Java Schools

  1. The Perils of Java Schools (228 messages)

    In The Perils of JavaSchools, Joel Spolsky takes a look at universities that have moved to exclusively using Java as teaching language of choice. He starts by describing his education experience (with unforgiving tools like punch cards) and how in the old days difficult courses were used to weed out the pretenders from the contenders early on in the process.

    Joel Spolsky operates FogCreek, a small software company located in the heart of New York City. From his previous writings, you learn that he likes his company to hire directly from colleges. Lately, he has run into trouble screening applications that come from those institutions that have moved exclusively to Java.
    Not that I don't want to hire smart kids from Duke and Penn -- I do -- it's just a lot harder for me to figure out who they are. I used to be able to tell the smart kids because they could rip through a recursive algorithm in seconds, or implement linked-list manipulation functions using pointers as fast as they could write on the whiteboard. But with a JavaSchool Grad, I can't tell if they're struggling with these problems because they are undereducated or if they're struggling with these problems because they don't actually have that special part of the brain that they're going to need to do great programming work.
    He continues by saying that OO also makes things easier for people with so-so programming skills to slide though the educational system.
    When you struggle with an OOP problem, your program still works, it's just sort of hard to maintain. Allegedly. But when you struggle with pointers, your program produces the line Segmentation Fault and you have no idea what's going on, until you stop and take a deep breath and really try to force your mind to work at two different levels of abstraction simultaneously.
    Another point he brings out:
    The most sympathetic interpretation of why CS departments are so enthusiastic to dumb down their classes is that it leaves them more time to teach actual CS concepts, if they don't need to spend two whole lectures unconfusing students about the difference between, say, a Java int and an Integer. Well, if that's the case, 6.001 has the perfect answer for you: Scheme, a teaching language so simple that the entire language can be taught to bright students in about ten minutes; then you can spend the rest of the semester on fixed points. [Editor's note: 6.001 here is a required introductory course, "Structure and Interpretation of Computer Programs," from MIT.]
    One observation is that one of the goals of designing better tools is to make them more available to those that are less gifted. It now seems that we (the computing industry) are starting to succeed in achieving that goal, as can be observed by Joel's frustration with the current skill level of CS graduates that he is encountering.

    Is Joel is living in a past where it takes brilliant programmers to implement even the most mundane task? There is surely a need for programmers that understand how pointers and recursion work - after all, you can't write a JVM without these things (and quite a bit more.) The question is, does everyone who programs a computer need to have a deep understanding of these concepts?

    Take pointers, for example. Imagine the world today in which people are deploying enterprise systems that need to run for extended periods of time. Now think of this in terms of transaction monitoring services and Enterprise Java Beans (or perhaps just "enterprise services," if you're not a fan of EJB.) In this scenario with using a language that supports pointers (or, more appropriately, leverages them explicitly), the deployment of even the simplest of services could bring the entire system down with a segmentation violation. Clearly, removing pointers from the mix has created a situation where people can write programs that are much more forgiving of mistakes. If Java has become the new age COBOL (i.e., the programming language of choice for the masses) and Java doesn't contain pointers, should those using Java need to learn about them?

    Of course, this discussion goes beyond Java and it's role in building systems to support industry. This discussion dives into the question of what is the role of a university or college in our educational systems. And what of their responsibility to society and industry in general?
    [Universities are] not vocational schools! It shouldn't be their job to train people to work in industry.... the bottom line is that a JavaSchool that won't teach C and won't teach Scheme is not really teaching computer science, either.
    If universities are supposed to be forward-thinking and promote such thinking, then is it useful for them to be teaching C and Scheme? After all, these languages are much older then Java. What is to be learned from using C and Scheme except that the older languages are much harder to learn and use? One doesn't need to use a horse and buggy to realize that the automobile offers an easier mode of transportation for the masses. However, it's difficult to argue against the teaching of basic concepts, ones Java has no pressing need for, apart from JVM or JNI hacking.
    ...there's nothing hard enough about Java to really weed out the programmers without the part of the brain that does pointers or recursion...
    Could a counter argument to this be that when programming becomes easy enough that anyone can do it, and then everyone will? Isn't bringing more programming capability to the masses a bit like bringing blogging to the masses? You often hear the argument (though less and less these days) that blogging degrades the level of journalism because anyone with access to the internet can publish what ever they want without any editorial controls what so ever. Just as it is becoming accepted that reporting on current events is not exclusively in the domain of the traditional press, it should be recognized that programming is no longer exclusively the domain of traditional IT departments. This does not mean that there is no room for professionalism in programming. Clearly software engineering will remain an important discipline for quite some time. The question is, should everyone who programs a computer know about pointers and recursion and what of the educational system moving to single language environments? Is this really a good thing and does it help us to move to a point where programming is truly available to the masses?

    Threaded Messages (228)

  2. -Abhijit
  3. The Perils of Java Schools[ Go to top ]

    Joel seems to entirely miss the point of schools. There is no explicit attempt at 'weeding out'. The goal is to educate, not weed people out. The dropouts are a tiny proportion of students, in general.

    Secondly, he seems to be mostly upset at the fact that he's a modern day dinosaur. The skills and judgement he uses to determine whether a graduate is worth hiring or not are woefully inadequate, and his panties are in a bunch over the fact that he is incapable of judging the current crop of candidates. It's the usual hand-wringing that 'old' people like to indulge in, mewling endlessly about the good old days with rose tinted eyewear welded in place.

    Java does dumb down certain aspects of computer science. That does not however equate with a dumbing down of its developers. The set of relevant concepts has just taken a sideways shift. It's very common for the compsci primadonnas (a la Paul Graham, and the slashdot crowd) to lend a religious element to their profession, and turn it into some form of higher being, whereas the reality is nothing of the sort. The relevant aspect is, and always has been, centred around problem solving. Java just gives you a different set of problems; ones that happen to value good design, intelligent algorithm selection, and 'bigger picture' type issues than pointers. Just have a look at a random selection of open source Java projects to see that most Java developers are, in fact, morons, with next to no knowledge of the basics of computer science, good design, or any of a host of things that compsci can teach you.

    I realise that most of the TSS readership is likely sans computer related degree, so no doubt they'll all leap up about how it's a useless thing to have in the first place, but that's a bit offtopic so I won't digress.

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.
  4. The Perils of Java Schools[ Go to top ]

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.

    Yet he is pointing out two very respected Universities that have moved to an all Java program? I'm not sure I know what that means after all a program that includes courses on building a JVM may claim to have an all Java focus but clearly this requires one to use a system level language such as C++. So just what does "all Java" mean?

    Regards,
    Kirk
  5. The Perils of Java Schools[ Go to top ]

    Joel seems to entirely miss the point of schools. There is no explicit attempt at 'weeding out'. The goal is to educate, not weed people out. The dropouts are a tiny proportion of students, in general.
    And that is the problem – there must be high level of drop outs for better education. Unfortunately many educational systems are focused on letting less than smart people feel good, rather on educating them and training pupil's brains.
    Lowering standards starts early in the elementary school and continues further. I formulate it as 'multiple choice' enforced stupidity. Nothing kills brain as efficiently as multiple choice exams. Joel is absolutely correct: educational system is not focused on brain training any more.

    Here is an extended and controversial essay on the topic, but it well worth reading IMO http://www.ishmael.com/Education/Writings/unschooling.shtml
  6. The Perils of Java Schools[ Go to top ]

    And that is the problem – there must be high level of drop outs for better education
    What schools should do is show all classes via TV. Of course each class needs to be a half hour or 1 hour with breaks every 10 or so minutes.

    Better yet, make all courses into video games. And instead of, for instance, having English Lit, have "Planet [insert some cool sounding name] Ancient Scrolls" and the syllabus would read like "To proceed to torture chamber level you must first master [insert cool thing] by learning to decipher the meaning of ... ."

    Obviously I am not a gamer because I would have been able to come up with cool words and places and things.
  7. The Perils of Java Schools[ Go to top ]

    Joel seems to entirely miss the point of schools. There is no explicit attempt at 'weeding out'. The goal is to educate, not weed people out.

    Knowing many people from the faculty board, can definitely ensure you that 'weeding out' is one of the inofficial goals of the first course (noone wants to teach morons). The scale of the 'weeding out' is a different issue, in my school those who can't cope with Formal logics and Calculus get the boot, but I'd like to see "Structure and Interpretation of Programming Languages" being taught instead of OOP by Java on the first course. You can always take Java as a an optional course later...
  8. The Perils of Java Schools[ Go to top ]

    Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.

    I couldn't agree more. Thinking in terms of recurssion or pointer arithmetic it self is no brainer, if you do that every day the learnig is in your fingers not in your brain. Besides this it encourages you to think in terms of machines as opposed to high level problem solver. Some of the discipline requires thinking in terms of low level but most of them don't. If you don't need it, don't even bother, if you do, you will learn it very quick.

    Blog like above is so shallow and the writer himself should go to school again, this time I recomend him a major in social science, so he really learns some thing more of a substance than 1 and 0, machine addresses and bunch of push and pop stacks :-) No offense to CS majors, I my self guilty of doing that..
  9. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.

    I couldn't agree more. Thinking in terms of recurssion or pointer arithmetic it self is no brainer, if you do that every day the learnig is in your fingers not in your brain. Besides this it encourages you to think in terms of machines as opposed to high level problem solver. Some of the discipline requires thinking in terms of low level but most of them don't. If you don't need it, don't even bother, if you do, you will learn it very quick.Blog like above is so shallow and the writer himself should go to school again, this time I recomend him a major in social science, so he really learns some thing more of a substance than 1 and 0, machine addresses and bunch of push and pop stacks :-) No offense to CS majors, I my self guilty of doing that..

    But once a person gets a humanities or social science degree, what job are they going to get :) Actually, my degree is in humanities, so one can always code for living, but study literature, philosophy, sociology, linguistics and art for fun.

    peter
  10. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.
    I couldn't agree more. Thinking in terms of recurssion or pointer arithmetic it self is no brainer, if you do that every day the learnig is in your fingers not in your brain. Besides this it encourages you to think in terms of machines as opposed to high level problem solver. Some of the discipline requires thinking in terms of low level but most of them don't. If you don't need it, don't even bother, if you do, you will learn it very quick.Blog like above is so shallow and the writer himself should go to school again, this time I recomend him a major in social science, so he really learns some thing more of a substance than 1 and 0, machine addresses and bunch of push and pop stacks :-) No offense to CS majors, I my self guilty of doing that..
    But once a person gets a humanities or social science degree, what job are they going to get :) Actually, my degree is in humanities, so one can always code for living, but study literature, philosophy, sociology, linguistics and art for fun.peter

    Peter here you go, you proved me right. When ever I read your post on TSS, it seems to me you have much more common sense than the most of TSS community:-)
  11. The Perils of Java Schools[ Go to top ]

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.

    +1

    Back in the day, I learned binary arithmetic and boolean logic, the how transistors formed gates, how gates formed higher level logic blocks (adders, muxes, etc), how logic blocks formed simple processors, machine code (in binary), assembly, C, C++, discrete mathematics, datastructures & algorithms (in C++), fancier logic blocks, fancier processors and buses, and automata theory. Then onto electives.

    In the end, you knew, in a nutshell, how everything worked. The thing is, you don't get that if you skip all the digital design stuff, the theory stuff, or the low-level programming stuff (machine, assembly, C). I think this material is necessary to produce computer scientists with a wholistic knowledge of computers.
  12. The Perils of Java Schools[ Go to top ]

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.
    +1Back in the day, I learned binary arithmetic and boolean logic, the how transistors formed gates, how gates formed higher level logic blocks (adders, muxes, etc), how logic blocks formed simple processors, machine code (in binary), assembly, C, C++, discrete mathematics, datastructures & algorithms (in C++), fancier logic blocks, fancier processors and buses, and automata theory. Then onto electives.In the end, you knew, in a nutshell, how everything worked. The thing is, you don't get that if you skip all the digital design stuff, the theory stuff, or the low-level programming stuff (machine, assembly, C). I think this material is necessary to produce computer scientists with a wholistic knowledge of computers.

    Exactly.

    Interesting is that only people without the degree are telling you that the degree is useless.

    Imagine a civil engineer designing a bridge with no degree. Imagine a chemist managing a chemical process in the big factory with no degree. Imagine an Intel engineer designing the pentium4 CPU with no degree. Imagine a geologist planing a mine with no degree. Imagine a ship designer designing a big tanker with no degree. Imagine a bank CIO with no degree ...

    Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement. In UK is sometime required to have a degree only from a redbrick university. In the Czech rep. if you have only Bachelor degree they think you are stupid, because everybody has Masters.
  13. The Perils of Java Schools[ Go to top ]

    Imagine a civil engineer designing a bridge with no degree...
    Yes. What will they put in that empty frame on the wall? :)
    Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement.
    LOL. Most of those are posted by HR and Recruiters and Management. [head shaking]
    Interesting is that only people without the degree are telling you that the degree is useless.
    Uh. No. That is not what is being said. (There might have been one or two saying that). Hmm. I wonder wonder how many people here have a literature or grammer or philosophy degree? Maybe there is some truth to the theory. :)

    Education (learning) is important. But education for education sake is not. Honestly, unless you are single (or don't have kids), I don't see how anyone has time to get a masters while in this industry and still keep up with the changes. I spend to much time learning to be able to go back and get a masters. :)
  14. The Perils of Java Schools[ Go to top ]

    Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement.
    LOL. Most of those are posted by HR and Recruiters and Management. [head shaking]

    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it. You also get there by your academic merits alone and competition can be fierce to get into some of these schools - many people try for years to pass the entry criteria. People do this because it will open them many doors that otherwise stay strictly closed. IT is no exception.
  15. The Perils of Java Schools[ Go to top ]

    Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement.
    LOL. Most of those are posted by HR and Recruiters and Management. [head shaking]
    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it. You also get there by your academic merits alone and competition can be fierce to get into some of these schools - many people try for years to pass the entry criteria. People do this because it will open them many doors that otherwise stay strictly closed. IT is no exception.

    They are important because someone says you gotta have one. They are not, necessarily, important in and of themselves. That is what is being discussed.

    [Formal]Education is free in Europe (some countries)? Guess I need to move there. Unless I can't take my guns, thoughts and other freedoms. :( Come to think of it, education is free in the US too. And some of it is formal education. Just need a good internet connection.
  16. The Perils of Java Schools[ Go to top ]

    [Formal]Education is free in Europe (some countries)? Guess I need to move there. Unless I can't take my guns, thoughts and other freedoms. :( Come to think of it, education is free in the US too. And some of it is formal education. Just need a good internet connection.

    Free is an interesting term. How much extra taxes do people pay over their lifetimes in order to get that "free" formal education?
  17. The Perils of Java Schools[ Go to top ]

    [Formal]Education is free in Europe (some countries)? Guess I need to move there. Unless I can't take my guns, thoughts and other freedoms. :( Come to think of it, education is free in the US too. And some of it is formal education. Just need a good internet connection.
    Free is an interesting term. How much extra taxes do people pay over their lifetimes in order to get that "free" formal education?
    Especially if they can't ever qualify for that free stuff that they paid for.
  18. The Perils of Java Schools[ Go to top ]

    [Formal]Education is free in Europe (some countries)? Guess I need to move there. Unless I can't take my guns, thoughts and other freedoms. :( Come to think of it, education is free in the US too. And some of it is formal education. Just need a good internet connection.
    Free is an interesting term. How much extra taxes do people pay over their lifetimes in order to get that "free" formal education?
    Especially if they can't ever qualify for that free stuff that they paid for.

    Surely nothing is 'free' in the strict sense of the word. But put yourself into shoes of a student from a poor family who normally could not afford education or even dream about it.

    The education is not only 'free' in terms of taking courses, but also to a large degree in paid living expenses, housing, and even free transportation. This is the kind of investment governments are putting into their next generation. Is your country investing in you and believing in you, or are you only a number.
  19. The Perils of Java Schools[ Go to top ]

    Surely nothing is 'free' in the strict sense of the word. But put yourself into shoes of a student from a poor family who normally could not afford education or even dream about it.

    It's called loans. You borrow the money. Education is like any other investment. There's nothing magical about it. If you don't expect the payback to exceed the cost, don't do it. Obviously there's a lot of people who have acheived great things without tons of formal education.

    There's more incentive to studying something useful (meaning something you can turn into a career) when it's your own money on the line.
  20. The Perils of Java Schools[ Go to top ]

    One of the ladies I used to work with sent this to me:

    http://ocw.mit.edu/index.html
  21. The Perils of Java Schools[ Go to top ]

    They are important because someone says you gotta have one. They are not, necessarily, important in and of themselves. That is what is being discussed.[Formal]Education is free in Europe (some countries)? Guess I need to move there. Unless I can't take my guns, thoughts and other freedoms. :( Come to think of it, education is free in the US too. And some of it is formal education. Just need a good internet connection.

    Of course, but it is also very dangerous to assume that you never need one or even to have casual attitude towards education. These kinds of attitudes seem to be popular in the IT field in particular. I have a feeling that the IT bubble was not only a bubble for companies but for people who entered the work force at a time when anyone was qualified enough, education or not. I suppose people need to reinvent the wheel a few times over before they realize that people need to go back to schools.

    I don't even feel that schools should concentrate on teaching how to program in C, C++, Java etc. It should be part of it, but only a small part. They would seriously concentrate on how to apply those skills to various fields and problems. Apply it to telecommunications, data centers, automation, industrial processes, electronics and embedded systems, business, and so many others.

    This is what technical universities do at least in some corners of the world, and they produce graduates who are very sought-out and wanted in the industry, so much so that the companies build their offices right around the campus. Companies also actively teach courses for free to give the students the stuff they need. Since many of the students are also employed while studying, they can identify new talented students from the ranks. It also works for the students because it is clear for them what courses to take to support their work, and their experience from work can be taken back to new learning situations at school. It's a shame to miss that kind of opportunities.
  22. The Perils of Java Schools[ Go to top ]

    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it.

    This is approximately as quantifiable and factual as saying that in Finland, a conscientious objector will have trouble finding a job, and that in Europe, employers see military service as an important item on the recruitment checklist because almost everyone has the opportunity to participate for free, so no-one has an excuse for not having military experience.
  23. The Perils of Java Schools[ Go to top ]

    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it.
    This is approximately as quantifiable and factual as saying that in Finland, a conscientious objector will have trouble finding a job, and that in Europe, employers see military service as an important item on the recruitment checklist because almost everyone has the opportunity to participate for free, so no-one has an excuse for not having military experience.

    Well, I was just looking for a JAVA architect job in UK (www.jobserve.co.uk) and in 50% of adverts the degree was required

    SUN was hiring in 2000 in the Czech rep. for Netbeans team and Masters requirment was the FIRST text line in the advert.

    France and Germany are even more strict. It is common to put your academic title on your door and your business card in half of Europe.

    Americans and also South Africans do not understand it as their degrees are quite expensive.

    So take it or leave it, but this is an European reality. You almost can not get a senior job with out the degree in Europe. Europe does not have a tradition of a self made man.
  24. One word[ Go to top ]

    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it.

    This is approximately as quantifiable and factual as saying that in Finland, a conscientious objector will have trouble finding a job, and that in Europe, employers see military service as an important item on the recruitment checklist because almost everyone has the opportunity to participate for free, so no-one has an excuse for not having military experience.

    Well, I was just looking for a JAVA architect job in UK (www.jobserve.co.uk) and in 50% of adverts the degree was requiredSUN was hiring in 2000 in the Czech rep. for Netbeans team and Masters requirment was the FIRST text line in the advert. France and Germany are even more strict. It is common to put your academic title on your door and your business card in half of Europe.

    Americans and also South Africans do not understand it as their degrees are quite expensive.

    So take it or leave it, but this is an European reality. You almost can not get a senior job with out the degree in Europe. Europe does not have a tradition of a self made man.

    Ouch!!!

    that is really quite a shame. I for one was not aware that's how things are in Europe. about the only thing I do know about Europe is they get more vacation time than the US :)

    peter
  25. One word[ Go to top ]

    Ouch!!!that is really quite a shame. I for one was not aware that's how things are in Europe. about the only thing I do know about Europe is they get more vacation time than the US :)peter

    AFAIK

    US school system helps you to be an excellent. If you want to be the best you will get the best conditions, materials, equipment. If you do not want they will let you do nothing, they do not care.

    European school system assures everybody will rich some minimal standard. Not the best, but let's say a better average. If you do not reach the standard you will be fired with out the degree.

    This is probably a reason, why in Europe the degree is used as a very important decision maker for a job hiring.
  26. One word[ Go to top ]

    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it.
    This is approximately as quantifiable and factual as saying that in Finland, a conscientious objector will have trouble finding a job, and that in Europe, employers see military service as an important item on the recruitment checklist because almost everyone has the opportunity to participate for free, so no-one has an excuse for not having military experience.
    Well, I was just looking for a JAVA architect job in UK (www.jobserve.co.uk) and in 50% of adverts the degree was requiredSUN was hiring in 2000 in the Czech rep. for Netbeans team and Masters requirment was the FIRST text line in the advert. France and Germany are even more strict. It is common to put your academic title on your door and your business card in half of Europe.Americans and also South Africans do not understand it as their degrees are quite expensive.So take it or leave it, but this is an European reality. You almost can not get a senior job with out the degree in Europe. Europe does not have a tradition of a self made man.
    Ouch!!!that is really quite a shame. I for one was not aware that's how things are in Europe. about the only thing I do know about Europe is they get more vacation time than the US :)peter

    [Editorial Comment] I'm getting the sense that this is turning into a my system is better then yours flame war. Instead of going down this route may I suggest that we look at this as an opportunity to learn more about how each other's systems of education do work.

    Kind regards,
    Kirk Pepperdine
  27. OOps[ Go to top ]

    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it.
    This is approximately as quantifiable and factual as saying that in Finland, a conscientious objector will have trouble finding a job, and that in Europe, employers see military service as an important item on the recruitment checklist because almost everyone has the opportunity to participate for free, so no-one has an excuse for not having military experience.

    Well, I was just looking for a JAVA architect job in UK (www.jobserve.co.uk) and in 50% of adverts the degree was required SUN was hiring in 2000 in the Czech rep. for Netbeans team and Masters requirment was the FIRST text line in the advert. France and Germany are even more strict. It is common to put your academic title on your door and your business card in half of Europe.Americans and also South Africans do not understand it as their degrees are quite expensive.So take it or leave it, but this is an European reality. You almost can not get a senior job with out the degree in Europe. Europe does not have a tradition of a self made man.

    Ouch!!!that is really quite a shame. I for one was not aware that's how things are in Europe. about the only thing I do know about Europe is they get more vacation time than the US :)peter

    [Editorial Comment] I'm getting the sense that this is turning into a my system is better then yours flame war. Instead of going down this route may I suggest that we look at this as an opportunity to learn more about how each other's systems of education do work.

    Kind regards,
    Kirk Pepperdine

    my apologies to everyone, didn't mean to go down that path.

    peter
  28. The Perils of Java Schools[ Go to top ]

    Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement.
    LOL. Most of those are posted by HR and Recruiters and Management. [head shaking]
    Degrees are important in many European countries. In fact, very important. Education is practically free in many of these countries and there is no excuse not to have it. You also get there by your academic merits alone and competition can be fierce to get into some of these schools - many people try for years to pass the entry criteria. People do this because it will open them many doors that otherwise stay strictly closed. IT is no exception.

    But education in Europe is taken to the next extreme. For example one can't work in a shop without the proper diploma. This totally ingores the fact that people can become "experts" in a field without any formal education.

    That said, if you are looking to hire someone and are faced with a room full of resumes and you've got one hour to run through them are you going to spend time looking for resumes of people who haven't pre-qualified by taking a degree program? These "useless" pieces of paper do have value.

    Kind regards,
    Kirk

    http://www.javaperformancetuning.com
  29. The Perils of Java Schools[ Go to top ]

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.
    +1Back in the day, I learned binary arithmetic and boolean logic, the how transistors formed gates, how gates formed higher level logic blocks (adders, muxes, etc), how logic blocks formed simple processors, machine code (in binary), assembly, C, C++, discrete mathematics, datastructures & algorithms (in C++), fancier logic blocks, fancier processors and buses, and automata theory. Then onto electives.In the end, you knew, in a nutshell, how everything worked. The thing is, you don't get that if you skip all the digital design stuff, the theory stuff, or the low-level programming stuff (machine, assembly, C). I think this material is necessary to produce computer scientists with a wholistic knowledge of computers.
    Exactly. Interesting is that only people without the degree are telling you that the degree is useless.Imagine a civil engineer designing a bridge with no degree. Imagine a chemist managing a chemical process in the big factory with no degree. Imagine an Intel engineer designing the pentium4 CPU with no degree. Imagine a geologist planing a mine with no degree. Imagine a ship designer designing a big tanker with no degree. Imagine a bank CIO with no degree ...Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement. In UK is sometime required to have a degree only from a redbrick university. In the Czech rep. if you have only Bachelor degree they think you are stupid, because everybody has Masters.

    Let me clarify my statement a little bit.

    I said the knowledge gained while studying for my degree in CS was important, and that the holistic nature of it is important. It's hard to get that breadth of knowledge on the job, there's too much pressure to be expedient. With that being said, 95% of the CS and math I learned was either (1) from programming projects or (2) from reading text books and papers. I never got much out of lectures and rarely asked professors questions. Consequently, I don't see anything that would stop a motivated and disciplined individual from aquiring the knowledge w/o the costs of a university.

    Honestly, I never would have learned all of it on my own if I wasn't told I had to learn it to get a degree. Programming, software design, and general software engineering principle: yes. Advanced mathematics, theory, and h/w design: probably not. Spanish: absolutely not, but I don't understand how I passed that anyway...

    Which brings up another point: My general experience is grades don't correspond well to retained knowledge or ability to apply knowledge (ultimately knowledge is useless if you can't apply it). Consequently, I think there are a lot of people out there with fancy degrees who have forgotten everything they learned.

    So I think a degree, especially from a good program, is a decent indicator that a person possesses a reasonable set of knowledge and intelligence. I neither think it is a requirement for aquiring that knowledger, nor is it proof that the knowledge was really aquired.

    However, per my previous posts, I think the volume of resumes received for most job postings these days is so large that companies need cost effective filters. Filtering out people w/o a degree in a particular field is easy, and honestly is probably a decent hueristic.

    I haven't seen many job postings that say a degree is a requirement. Most say "degree or equivalent experience." My thing is I don't think you get the core through experience, because much of the core isn't directly applicable to anything. Knowledge DFA and NDFAs and turing machines and regular grammars and context free grammars and such isn't very directly applicable, yet having that knowledge makes "modern" technologies like XML seem rather quaint, clunky, inelegant, and simplistic.

    So I think you need the knowledge, and you need evidence that you have it. I have it in the form of a degree in CS. Peter Lin has it in the form of his work on Drools. Honestly, if I were looking at two resumes, and one person had a degree, and another had a leadership role of a OSS project, I would take the later, assuming I could verify it. But given 5000 resumes, I would be lazy and filter on the degree.
  30. A funny joke[ Go to top ]

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.

    +1Back in the day, I learned binary arithmetic and boolean logic, the how transistors formed gates, how gates formed higher level logic blocks (adders, muxes, etc), how logic blocks formed simple processors, machine code (in binary), assembly, C, C++, discrete mathematics, datastructures & algorithms (in C++), fancier logic blocks, fancier processors and buses, and automata theory. Then onto electives.In the end, you knew, in a nutshell, how everything worked. The thing is, you don't get that if you skip all the digital design stuff, the theory stuff, or the low-level programming stuff (machine, assembly, C). I think this material is necessary to produce computer scientists with a wholistic knowledge of computers.

    Exactly.

    Interesting is that only people without the degree are telling you that the degree is useless.Imagine a civil engineer designing a bridge with no degree. Imagine a chemist managing a chemical process in the big factory with no degree. Imagine an Intel engineer designing the pentium4 CPU with no degree. Imagine a geologist planing a mine with no degree. Imagine a ship designer designing a big tanker with no degree. Imagine a bank CIO with no degree ...Degree is important. Check job adverts for senior IT jobs (architects) in Europe. The degree is a basic requirement. In UK is sometime required to have a degree only from a redbrick university. In the Czech rep. if you have only Bachelor degree they think you are stupid, because everybody has Masters.

    And how many people in the IT industry today do not have CS degrees? The percentage is fairly high from what recruiters tell me. On a lighter side. There's a show on discovery channel called "dirty jobs". Many of the shows are about jobs cleaning sludge and "poop" as the host calls it. On one occasion the host asked a person what their previous job was. The answer was psychologist. That's right, a person went from a getting a medical degree to cleaning sludge.

    So by simplistic metrics, one might think, "a person cleaning sludge isn't smart enough to get a degree." clearly in many cases, that way of thinking is wrong. People by pass degrees for many reasons. Just some food for thought.

    peter
  31. The Perils of Java Schools[ Go to top ]

    Any serious compsci course will ensure that students know how it all fits together, from the basic circuitry to high level OO constructs. The problems on every point on that range are different. Not harder or easier, just different. Intelligence is not, within any chosen discipline in computer science (or indeed, any engineering/scientific field) optional.
    +1Back in the day, I learned binary arithmetic and boolean logic, the how transistors formed gates, how gates formed higher level logic blocks (adders, muxes, etc), how logic blocks formed simple processors, machine code (in binary), assembly, C, C++, discrete mathematics, datastructures & algorithms (in C++), fancier logic blocks, fancier processors and buses, and automata theory. Then onto electives.In the end, you knew, in a nutshell, how everything worked. The thing is, you don't get that if you skip all the digital design stuff, the theory stuff, or the low-level programming stuff (machine, assembly, C). I think this material is necessary to produce computer scientists with a wholistic knowledge of computers.

    My friend if you talk about Computer Scientists than may be you are right and we may need the disciplines you mentioned above, even though you can easily learn these disciplines out of school. C# creator Anders Hejlsberg (Who also worte the first Turbo pascal compiler) is one of the most distingiushed computer scientist we all know, and according to my knowledge he never has an official CS degree:-) Besides this writing business components (90% of the IT job)doesn't demand you to be a computer scientist, yes if you want to write the "Lisp" compiler you might wanna know one or two things about stacks and recursion:-)

    Interesting is that only people without the degree are telling you that the degree is useless.

    You are absolutely wrong. First of all no body is saying that degree is useless. Second please read all the post on this forum carefully, there are lot of CS majors who are opposing the blog just because it doesn't make any sense and it is too shallow to start with...
  32. The Perils of Java Schools[ Go to top ]

    Hani,

    +1

    From an old dinosaur...
  33. I think some of the points that Joel mentions are pretty valid. Personally, I grew up with 8086/88 computers from the old age and evolved with C and C++ and finally moved into Java. I believe that this experience has given me the ability to think beyond APIs that does not happen with people who become Java experts in the dot.com era, as I have painfully come to understand when I conduct interviews.

    That said, I also think that there is a strong need to align academics with industry to bring out graduates who can also be of practical use right out of the box.

    My suggestion would be two have two different courses - one focussing on the practical aspects of programming and the other focussing on the theoretical. Ideally, a student should study both, but depending on their interest, they can chose either one.

    The practical course should focus on a number of things that an experienced person does normally.

    1. A solid understanding of databases and SQL
    2. OO design principles and their real meaning (like in Robert Martin's book). I have come across a lot of people who claimed to do abstractions without having a clear understanding of Liskov Substitution principle.
    3. Refactoring. You will end up doing it in your work. So, better to learn what it is and how to work on it.
    4. UML 101. Enough to understand the concepts and identify the drawings.
    5. Test driven development. This is extremely hard to practice once you are used to coding without testing. The best time would be to learn when you are learning computers.
    6. Management 101. You have to know how to work with time constraints if you are working in a project and also know how to track your progress.
    7. Communications 101. Talking to business users is a must.
    8. Understanding APIs. Countless number of times, I have seen people not able to sift through an API document.
    9. Debugging 101. How to study threads, profilers, stacks, stacktraces, etc.
    10. Open Source 101. What are open source projects, how they work, how to contribute, pitfalls, etc.

    On the theoretical side, one can focus more on the internal aspects such as Virtual Machines, networking, distributed programming, threading, etc. to get a more detailed understanding of the stuff that happens behind an abstracted API.

    A Java Course just focussing on the structs of a language is as useful as using a phrasebook as a tool for learning a new language. It's good for getting through for a few days, but won't work in the long run.
  34. You need two schools of thought[ Go to top ]

    11. How to use www.google.com.

    I taught a class a few years back on beginning programming (using VB). My first lesson? How to press F1.
  35. The Perils of Java Schools[ Go to top ]

    I have seen plenty of C/C++ developers who were not good at Java (or things like it) nor creating business applications. I've seen many who were good at Business Apps but crappy at algorithms. Not to say that some weren't good at both.

    What I do agree on - this industry really needs a good weeding out process. Now the problem is just who gets to do the weeding and who gets weeded. :)
  36. perils?[ Go to top ]

    This Spolsky guy reminds of egghead who interviewed me a while back. Most of the interview revolved around multi-threaded apps. I’ve been a successful Java developer since 1999 but have little experience or concrete knowledge of multi-threaded apps. It’s usually not an issue in our business. The container supplies the threads and we just need to know how to use it. So I asked him if we were going to build multi-threaded components in the project. He said no.

    Then he asked me a question that started out with “Pretend there is no such thing as a Java List, Collection, Set, etc. How would you keep track of a group of objects?”. At this point I realized that no matter what my knowledge level of programming is, I would not want to work for this guy.
  37. Data structures?[ Go to top ]

    Then he asked me a question that started out with “Pretend there is no such thing as a Java List, Collection, Set, etc. How would you keep track of a group of objects?”. At this point I realized that no matter what my knowledge level of programming is, I would not want to work for this guy.
    So, he asked you a very simple data structures question - How do you implement a Bag? Is it really that tough to say, "With a node that holds a value and a next pointer", or "With an array that tracks its own length and can grow itself" ?

    Really - what is it about the question that makes you unhappy?
  38. Data structures?[ Go to top ]

    It's like asking a carpenter, "Pretend we don't have hammers, screwdrivers or other modern tools. How will you build this?"

    The point is we have modern tools at our disposal. Why should I dwell on outdated methods of construction? Would the construction foreman really expect me to build anything without a hammer and screwdriver? Of course not. If he did, I would not want to work for him because his methods are inefficient.
  39. Data structures?[ Go to top ]

    Why should I dwell on outdated methods of construction? Would the construction foreman really expect me to build anything without a hammer and screwdriver? Of course not. If he did, I would not want to work for him because his methods are inefficient.

    Actually, you should 'dwell' on these 'outdated' methods because that's how those data structures are actually created. Do you think Big Daddy Gosling just hardcoded Hashtable into the VM? Understanding how Hashtable, ArrayList, etc are implemented is part of the knowledge-base which separates someone who writes good code from bad.

    In this specific case, knowing the right data structure to use for the problem you're trying to solve is a matter of understanding how that data structure is implemented and how it will interact with your particular set of data. You'll have a really hard time understanding why you should never override equals() without also overriding hashcode() if you don't know how Hashtables work. And you'll have a hard time creating a good hashing algorithm if you don't know what the goals of the algorithm are, goals which are driven by the underlying logic of the Hashtable.

    Your earlier comment about not understanding thread safety and not considering it to be a big deal is more of the same. Despite the container providing the threads for you, it's possible to violate thread safety quite a bit. Do you use Spring? Did you realize that the default instantiation model for Spring objects is that there be one created for the entire app, aka singletons with another lookup routine? The result is that all your threads can be in the same block of code. Do you understand what that means? It sounds like you don't.

    Even if you don't use Spring, this comes up all the time elsewhere, for instance the only performant servlet architecture has exactly the same issue.

    I hope I'm not coming across too harshly, but these are definitely issues which I expect Sr Java Engineers to know and understand, and be able to cover in an interview.

    James
  40. rule governed behavior[ Go to top ]

    You'll have a really hard time understanding why you should never override equals() without also overriding hashcode() if you don't know how Hashtables work.

    I don't need to know why I should always override hashCode when I override equals. I don't need to know how hashtables work. I only need to follow Rule 8 of Effective Java.

    Programming is nothing more than verbal behavior, to be explained the same way we explain other forms of behavior. The examples you provided describe rule governed behavior. I don't need to understand Java's memory model to write correct multi-threaded code. I only need to follow a few rules (i.e. don't invoke wait() outside a loop, synchronize access to shared mutable data, perform time consuming tasks off EDT, etc.).
  41. rule governed behavior[ Go to top ]

    You'll have a really hard time understanding why you should never override equals() without also overriding hashcode() if you don't know how Hashtables work.
    I don't need to know why I should always override hashCode when I override equals. I don't need to know how hashtables work. I only need to follow Rule 8 of Effective Java. Programming is nothing more than verbal behavior, to be explained the same way we explain other forms of behavior. The examples you provided describe rule governed behavior. I don't need to understand Java's memory model to write correct multi-threaded code. I only need to follow a few rules (i.e. don't invoke wait() outside a loop, synchronize access to shared mutable data, perform time consuming tasks off EDT, etc.).

    Sure, and a 3 year old could do a paint-by-numbers picture of Snow White & The Seven Dwarves, but you probably wouldn't hire her to do the next Pixar movie.

    At some point, you've got to move past heuristics and actually be able to reason about your code. You may be satisfied with simply regurgitating code samples from various websites you visit and books you've read, but if you don't understand _how_ it works and _why_ it works, you're not able to safely write new code, and that disqualifies you from a very large number of interesting projects.

    James
  42. rule governed behavior[ Go to top ]

    I don't need to know why I should always override hashCode when I override equals. I don't need to know how hashtables work.
    Then how can you decide what kind of data structure to use for a particular situation? Efficiency is a direct result of choosing the right container for a task. I can't believe this line of reasoning.
    I don't need to understand Java's memory model to write correct multi-threaded code.
    How do you propose to understand Java's double checking locking pattern while writing singleton classes is broken **precisely** because of its memory model?
    I only need to follow a few rules (i.e. don't invoke wait() outside a loop, synchronize access to shared mutable data, perform time consuming tasks off EDT, etc.).
    Rules don't exist in vaccum. They are not axioms. They are invariably connected to a predecessor which if you back-track long enough will lead you straight to the underlying problem. Not understanding the reason for a rule is simply laziness couched in i-will-know-only-what-i-need-to-get-the-job-done. I have seen the resulting mess.
  43. rule governed behavior[ Go to top ]

    [blockquote]At some point, you've got to move past heuristics and actually be able to reason about your code. You may be satisfied with simply regurgitating code samples from various websites you visit and books you've read, but if you don't understand _how_ it works and _why_ it works, you're not able to safely write new code, and that disqualifies you from a very large number of interesting projects.[/blockquote]

    You're speaking in vague generalities. I most certainly do NOT need to know why I must override hashCode when I overrride equals. I only need to know that I must do it, and what the consequences are if I don't. The why is irrelevant.


    [blockquote]Then how can you decide what kind of data structure to use for a particular situation? Efficiency is a direct result of choosing the right container for a task.[/blockquote]

    Effciency has nothing to do with why I must override hashCode as well as equals.

    [blockquote]How do you propose to understand Java's double checking locking pattern while writing singleton classes is broken **precisely** because of its memory model?[/blockquote]

    Another fine example. Knowing why the double-checked locking idiom doesn't work is IRRELEVANT. How it relates to the memory model is irrelavant. I only must follow the rule, "Do not use the double-checked locking idion."

    [blockquote]Rules don't exist in vaccum. They are not axioms. They are invariably connected to a predecessor which if you back-track long enough will lead you straight to the underlying problem. Not understanding the reason for a rule is simply laziness couched in i-will-know-only-what-i-need-to-get-the-job-done. I have seen the resulting mess.[/blockquote]

    Laziness is one of the three characteristics of great programmers (or whatever the saying is).
  44. rule governed behavior[ Go to top ]

    Another fine example. Knowing why the double-checked locking idiom doesn't work is IRRELEVANT. How it relates to the memory model is irrelavant. I only must follow the rule, "Do not use the double-checked locking idion."

    Yes! I could not agree more. Focus on what is relevant.

    Just the other day someone asked me "What kind of server is the app running on in production?" and "Where IS the production server?" I told him I did not know and really didn't care. I write the code, where it runs does not concern me.
  45. rule governed behavior[ Go to top ]

    Just the other day someone asked me "What kind of server is the app running on in production?" and "Where IS the production server?" I told him I did not know and really didn't care. I write the code, where it runs does not concern me.

    I can think of one situation where I "wouldn't care" what the server is or where it's at, and that's if I was selling a library or product that needed to run on any app server. Since it doesn't sound like that's what you're doing, I'm left thinking you're either a troll or really are just that out of touch with how understanding the context your code runs in is important when you're writing it. Either way, we don't have a lot to discuss.

    James
  46. You need to know why sometimes[ Go to top ]

    You're speaking in vague generalities. I most certainly do NOT need to know why I must override hashCode when I overrride equals.

    In this case you do, if you don't how can you realize the contract between those methods ? ;-)
  47. rule governed behavior[ Go to top ]

    At some point, you've got to move past heuristics and actually be able to reason about your code. You may be satisfied with simply regurgitating code samples from various websites you visit and books you've read, but if you don't understand _how_ it works and _why_ it works, you're not able to safely write new code, and that disqualifies you from a very large number of interesting projects.
    You're speaking in vague generalities. I most certainly do NOT need to know why I must override hashCode when I overrride equals. I only need to know that I must do it, and what the consequences are if I don't. The why is irrelevant.
    Then how can you decide what kind of data structure to use for a particular situation? Efficiency is a direct result of choosing the right container for a task.
    Effciency has nothing to do with why I must override hashCode as well as equals.
    How do you propose to understand Java's double checking locking pattern while writing singleton classes is broken **precisely** because of its memory model?
    Another fine example. Knowing why the double-checked locking idiom doesn't work is IRRELEVANT. How it relates to the memory model is irrelavant. I only must follow the rule, "Do not use the double-checked locking idiom."
    This is the path of a user, not of a programmer.
  48. rule governed behavior[ Go to top ]

    At some point, you've got to move past heuristics and actually be able to reason about your code. You may be satisfied with simply regurgitating code samples from various websites you visit and books you've read, but if you don't understand _how_ it works and _why_ it works, you're not able to safely write new code, and that disqualifies you from a very large number of interesting projects.
    You're speaking in vague generalities. I most certainly do NOT need to know why I must override hashCode when I overrride equals. I only need to know that I must do it, and what the consequences are if I don't. The why is irrelevant.
    Then how can you decide what kind of data structure to use for a particular situation? Efficiency is a direct result of choosing the right container for a task.
    Effciency has nothing to do with why I must override hashCode as well as equals.
    How do you propose to understand Java's double checking locking pattern while writing singleton classes is broken **precisely** because of its memory model?
    Another fine example. Knowing why the double-checked locking idiom doesn't work is IRRELEVANT. How it relates to the memory model is irrelavant. I only must follow the rule, "Do not use the double-checked locking idiom."
    This is the path of a user, not of a programmer.

    Only in terms of whatever vague definitions you want assign to the terms. In terms of the executable code written by the two, they may very well be indistinguishable.
  49. rule governed behavior[ Go to top ]

    You'll have a really hard time understanding why you should never override equals() without also overriding hashcode() if you don't know how Hashtables work.
    I don't need to know why I should always override hashCode when I override equals. I don't need to know how hashtables work. I only need to follow Rule 8 of Effective Java.

    How do you know that Joshua Block's recommendation are any good? How can you critically separate good recommendations from bad ones?

    Thinking and deep understanding is what separates a high level professional from a technician. A software developer from a "code monkey".

    I won't hire anybody who doesn't understand or refuses to understand fundamentals. What happens when your company decides to adopt new tools?
  50. Data structures?[ Go to top ]

    Your earlier comment about not understanding thread safety and not considering it to be a big deal is more of the same.

    Did I say that I don't understand thread safety? No I didn't. Please don't put words in my mouth. Understanding how to write thread-safe code is not the same as writing components that spawn threads.
    Despite the container providing the threads for you, it's possible to violate thread safety quite a bit.

    No sh|t Sherlock.
  51. Data structures?[ Go to top ]

    Did I say that I don't understand thread safety? No I didn't. Please don't put words in my mouth.

    Ok, you said:
    I’ve been a successful Java developer since 1999 but have little experience or concrete knowledge of multi-threaded apps.

    Please excuse the fact that my grasp of the English language is too limited to parse the fine distinction between the statements you've made here.

    James
  52. Data structures?[ Go to top ]

    Did I say that I don't understand thread safety? No I didn't. Please don't put words in my mouth.
    Ok, you said:
    I’ve been a successful Java developer since 1999 but have little experience or concrete knowledge of multi-threaded apps.
    Please excuse the fact that my grasp of the English language is too limited to parse the fine distinction between the statements you've made here.James

    I stand corrected.

    I should have originally said "...little experience or concrete knowledge of building thread-spawning applications".
  53. Data structures?[ Go to top ]

    It's like asking a carpenter, "Pretend we don't have hammers, screwdrivers or other modern tools. How will you build this?"The point is we have modern tools at our disposal. Why should I dwell on outdated methods of construction?
    It's an interview question, it gives the interviewer an insight on how you think and it says absolutely nothing about the interviewer or the company you're interviewing for. It's dumb of you to draw such radical conclusions so fast.

    If you get offended by such a question (which is very relevant, in my opinion), wait until you get asked a brain teaser such as "how many gas stations are there in America?".

    --
    Cedric
  54. Data structures?[ Go to top ]

    wait until you get asked a brain teaser such as "how many gas stations are there in America?".-- Cedric

    The answer is "more than three", right?

    How is that a brain teaser?
  55. Data structures?[ Go to top ]

    How is that a brain teaser?
    That reminds me of an incident. In an interview, the interviewer offered a candidate an option of being asked 1 very tough question or many easy questions. The candidate opted for the tough one. So the interviewer asked "Which came first, the chicken or the egg?". The candidate replied, "the egg". The interviewer asked, "How the heck?". The candidate replied, "Nah.. you said only 1 tough question!" :-)
  56. Data structures?[ Go to top ]

    It's an interview question, it gives the interviewer an insight on how you think and it says absolutely nothing about the interviewer

    No, it tells me quite a bit about the interviewer. He has a huge ego and he likes to makes sure that all developers under him understand this.

    If you get offended by such a question...

    I didn't say I was offended. (Why do so many of you insist on putting words in other's mouths? You should read more carefully) No, I just went to the next interview and got that job instead. The best part is that I make more money than the egghead who first asked me "Pretend there is no such thing as a Java List..."
  57. Data structures?[ Go to top ]

    It's an interview question, it gives the interviewer an insight on how you think and it says absolutely nothing about the interviewer
    No, it tells me quite a bit about the interviewer.
    Wow.

    --
    Cedric
  58. Data structures?[ Go to top ]

    It's an interview question, it gives the interviewer an insight on how you think and it says absolutely nothing about the interviewer
    No, it tells me quite a bit about the interviewer.
    Wow.-- Cedric
    Cedric et al.,
    conducting an interview is a science. Do you have any training, whatsoever, in it? Or just because you may be a good software engineer you think you have "natural talent" to be a good interviewer, too. Or that you know how to conduct one?

    Just a question...
  59. Data structures?[ Go to top ]

    It's an interview question, it gives the interviewer an insight on how you think and it says absolutely nothing about the interviewer
    No, it tells me quite a bit about the interviewer.
    Wow.-- Cedric
    Cedric et al., conducting an interview is a science.
    Actually, I disagree. It's much more of an art than a science, because there are so many human factors involved that you just can't apply the scientific method.

    I don't claim to be a better or worse interviewer than anybody else. All I can say is that I have conducted about 100 interviews just this past year, so I have a little bit of experience interviewing and being interviewed.

    Having said that, my reaction of disbelief above was simply triggered by the original poster saying that she can judge an interviewer instantly just because they asked one single question.

    This boggles my mind, but maybe it's just that this person is very young and needs to spend a few years in this industry to realize that human beings are a little bit more complex than that.

    --
    Cedric
  60. Data structures?[ Go to top ]

    Data structures and algorithms are the science in computer science. Would you hire a civil engineer that doesn't understand physics?
  61. Data structures?[ Go to top ]

    How do you implement a Bag?
    Paper or Plastic?
  62. Data structures?[ Go to top ]

    How do you implement a Bag?

    I have taken DS&A course and they taught me DS allright, but Bag DS was never taught. I would have asked "Paper or Plastic" (like the other guy ;) ) but Smalltalk education helps me to understand the Bag data structure.

    However if were to ask Bag structure and how to implement it in Java to an interviewee, I am sure I may not have my job the following day ;)
  63. Data structures?[ Go to top ]

    I have taken DS&A course and they taught me DS allright, but Bag DS was never taught. I would have asked "Paper or Plastic" (like the other guy ;) ) but Smalltalk education helps me to understand the Bag data structure.However if were to ask Bag structure and how to implement it in Java to an interviewee, I am sure I may not have my job the following day ;)

    Actually, the very fact that you did not learn how to do it makes it an interesting question. Would you use a linked list? A dynamic array? A hash table of lists? Some tree structure?

    Why?

    The answers to these questions may tell me how you APPLY your DS knowledge which is far more interesting than knowing if you memorized a particular implementation or not.
  64. The Perils of Java Schools[ Go to top ]

    I think Joel is correct that there needs to be some weeding out (my first CS course went from 108 students down to about 40). The school says it's having a hard time keeping new students-- is it because the cirriculum is too difficult or is it that to keep students interested, they must jump into high level concepts of software design (using Java)?

    I wouldn't point at Java's automated pointer management as the decline of CS education. It is important that a CS grad has experience with other languages and how they work (functional, declarative, imperative, etc).
  65. The Perils of Java Schools[ Go to top ]

    +1
    It is important that a CS grad has experience with other languages and how they work (functional, declarative, imperative, etc).

    I think that why Univs have MIS degree. Here is an opportunity for them to teach what industry wants - Business + Technology = Java, VB, .NET etc.

    No CS program should water down their CS program structure by adopting only single technology wheather it is pure C++ or pure Java. Of course, if folks dont have stomach to handle pointers in C++ or deal with recursion, then they should drop out to pursue MIS or other degree program
  66. It is important that a CS grad has experience with other languages and how they work (functional, declarative, imperative, etc).

    I'd take it one level further and ask the applicant: "using the language(s) of your choice, or no language at all, describe how you would solve problem X in imperative, declarative, object-oriented, and functional fashions".

    Sure, there are thousands of programming languages. What interests me is how many programming models there are? Near as I can tell, then answer is somewhere between 6 and 10 (and I'd kill for a textbook that focuses on models of programming!)

    Going back to Joel's desires, I'd be happy if the applicant could even begin to define those different models of programming!
  67. A voice of treason[ Go to top ]

    Being a recent graduate from one of the universities which taught most subjects in Java, I'll give a voice of support to Joel.

    Currently I'm being employed as one of the top technical decision makers in one of the biggest software development companies in my country. And I repeatedly see that people are not taught to think in the university.

    The fact is that I don't expect university to teach anything very practical. It's pointless, since technologies used in IT change pretty rapidly, while being at the core rehashes of pretty mush same old things. What I want a decent university to do is to teach people to think broadly enough, that when they see the next SOA or Ruby on Rails, they would see it for what it is and would be able to use it in a matter of days, not months.

    Of course one may argue that industry needs considerably more programmers than can be taught to think in such a way. The point is however that such programmers need not to study in the university to start writing code. They will learn really little there (though it will somewhat prove their resistance to stress and pressure).

    I personally would even support even lower approach and make people program not only in C, but also hardware in assembler microcodes. To my knowledge at least in Cambridge CS they do that, to great results...

    Personally I feel that though I learned my share of functional programming (which comes very much in handy seeing that most of business layer and integration can be very well understood & designed in functional POV). I would however really like to see more of C taught, because even until today I haven't really programmed anything in it (though I seen my share of pointers in Pascal and Assembler).

    To summarize my point: university should teach to think, and just because we need more people than can be taught to do that, we shouldn't give them the same degrees as to those who can actually think in Haskell or hack pointers.
  68. A voice of treason[ Go to top ]

    +1 for this post and for Joel's main points.

    I'm the (circa 1999) product of a university which fortunately taught students studying for a CS degree about Computer Science, not about programming. Like MIT and Yale we started with Scheme, moved on to C/C++, and then finally were able to coast on to Java (with some MIPS assembly thrown in for good measure). Java is still my language of choice (though I’m already more fond of Ruby), but I have a lot of relevant knowledge from those other languages.

    I think the main point Jevgeni and Joel are catching on to is that good schools teach students how to think and learn, not how to program. If you haven't been through a course with a functional language then you're really missing out on a huge chunk of CS knowledge - thinking in terms of recursion is something that you won't pick up just using Java the entire time. Recursion leads to beautifully simplistic code when used correctly. Without that knowledge you may get some hacked up loops with breaks and gotos that are harder to maintain and understand. Functional languages also teach you to think of functions as first-class members of the language. Without that background you may not be able to fully grasp and appreciate code closures very well (how is this relevant to anyone doing Java? Spring makes great use of Java's anonymous inner classes to simulate closures in its DAO framework - a very elegant solution to the problem).

    Along the same lines someone who hasn't taken a course in C/C++ or assembly probably doesn't have a very good understanding of what's going on at the machine level. You may not get very efficient code out of such a developer, and they may not be good at optimizing it if needed.

    All of these are core tenants of a good CS curriculum. If students aren't getting a wide variety of exposure they probably won't be prepared for the future. Knowing Java is great for when you graduate. What about the next 40 years? The more languages and programming models you know the easier it is to pick up new ones. I can guarantee you that someone who has a good background with a functional language and good OO skills can pick up something like AspectJ much faster than someone who has only had exposure to Java or C#.

    As one of our CS profs was fond of saying – if you want to learn how to program you could have gone to ‘Cougar High’ (a nearby college whose CS program focused on programming, and not computer science). A lot of developers I interview these days just don’t cut it – often because they aren’t very good about thinking through a problem, only solving those they have been taught.
  69. A voice of treason[ Go to top ]

    you haven't been through a course with a functional language then you're really missing out on a huge chunk of CS knowledge - thinking in terms of recursion is something that you won't pick up just using Java the entire time.

    Has someone changed the definition of recursion? Since when can you not use recursion in Java?
  70. Definition of recursion[ Go to top ]

    Has someone changed the definition of recursion? Since when can you not use recursion in Java?

    Nope, it hasn't changed, and nobody said you can't do it in Java. But people who have exposure to a functional language are more likely to think in terms of recursion than loops.
  71. Definition of recursion[ Go to top ]

    Has someone changed the definition of recursion? Since when can you not use recursion in Java?
    Nope, it hasn't changed, and nobody said you can't do it in Java. But people who have exposure to a functional language are more likely to think in terms of recursion than loops.

    A lot of problems are a lot easier to solve with recursion than loops. Traversing a tree, implementiong quicksort. Any CS grad should have dealt with these.

    I'd also like to note that you are basically making the opposite argument that Joel makes. He is saying they don't have low-level understanding. I see functional languages as being much more high-level than Java.

    Personally, my CS cirriculum lacked a lot of high-level topics. I learned about writing machine code but very little about OO. The OO concepts have been much more useful. Not saying that I don't think low-level concerns are important, it's just that they are the foundation not the goal for most people.
  72. Definition of recursion[ Go to top ]

    you are basically making the opposite argument that Joel makes. He is saying they don't have low-level understanding. I see functional languages as being much more high-level than Java.

    My original post advocated exposure to languages at higher (Scheme/Lisp) as well as lower (C/C++) levels than just Java. Thinking in Java is great for today’s developers, but thinking in Java with a more diverse background is better for dealing with the future.
  73. Definition of recursion[ Go to top ]

    you are basically making the opposite argument that Joel makes. He is saying they don't have low-level understanding. I see functional languages as being much more high-level than Java.
    My original post advocated exposure to languages at higher (Scheme/Lisp) as well as lower (C/C++) levels than just Java. Thinking in Java is great for today’s developers, but thinking in Java with a more diverse background is better for dealing with the future.

    I don't disagree with you. My point is that blaming Java for this is stupid. When I was in school I scoffed at developers who only knew VB. It's not the language, it's the program.
  74. Definition of recursion[ Go to top ]

    you are basically making the opposite argument that Joel makes. He is saying they don't have low-level understanding. I see functional languages as being much more high-level than Java.
    My original post advocated exposure to languages at higher (Scheme/Lisp) as well as lower (C/C++) levels than just Java. Thinking in Java is great for today’s developers, but thinking in Java with a more diverse background is better for dealing with the future.
    I don't disagree with you. My point is that blaming Java for this is stupid. When I was in school I scoffed at developers who only knew VB. It's not the language, it's the program.

    progam == curriculum
  75. Joels point is...[ Go to top ]

    A lot of developers I interview these days just don’t cut it &#x2013

    And that is what Joel said, it's hard to judge during interview if the person only knows Java.

    He did not say the next step, which would be:
    if you only know Java, I may not even interview you, since the % is not in your favor.

    Its good to know and use other Langs, that's all. It tells you something.

    .V
  76. Joels point is...[ Go to top ]

    A lot of developers I interview these days just don’t cut it &#x2013
    And that is what Joel said, it's hard to judge during interview if the person only knows Java.

    Can you give an example of what you can't ask if the developer only knows Java?
  77. Joels point is...[ Go to top ]

    Can you give an example of what you can't ask if the developer only knows Java?

    Implement breadth-first search on a graph using pure recursion only (without using any stack structures or global variables). It's hard even to state this program in Java, whereas in any decent functional language it's a very good test of how a programmer can manipulate recursion on non-recursive structures.
  78. Joels point is...[ Go to top ]

    Can you give an example of what you can't ask if the developer only knows Java?
    Implement breadth-first search on a graph using pure recursion only (without using any stack structures or global variables). It's hard even to state this program in Java, whereas in any decent functional language it's a very good test of how a programmer can manipulate recursion on non-recursive structures.

    So the idea is that you want them to use the language features as a shortcut instead of implementing it from basic pieces.

    This would seem to me to be the opposite of the point Joel is making.
  79. Joels point is...[ Go to top ]

    It is just a way to show that you think outside the box (box being Java in this case). Recursion is possible in any decent language, but until you're made to use it everywhere you won't grasp the concept that there's no real difference between recursion and data structure. And once you do that patterns like Visitor will seem very natural to you.
  80. Joels point is...[ Go to top ]

    It is just a way to show that you think outside the box (box being Java in this case). Recursion is possible in any decent language, but until you're made to use it everywhere you won't grasp the concept that there's no real difference between recursion and data structure. And once you do that patterns like Visitor will seem very natural to you.

    I'm just not convinced that I can't implement the algorithm in Java. But I'm willing to be convinced if you give me an example. And I find the Visitor pattern very natural. It's pretty much a requirement in some Java applications as Java lacks double-dispatch.
  81. Joels point is...[ Go to top ]

    It is just a way to show that you think outside the box (box being Java in this case). Recursion is possible in any decent language, but until you're made to use it everywhere you won't grasp the concept that there's no real difference between recursion and data structure. And once you do that patterns like Visitor will seem very natural to you.
    I'm just not convinced that I can't implement the algorithm in Java. But I'm willing to be convinced if you give me an example. And I find the Visitor pattern very natural. It's pretty much a requirement in some Java applications as Java lacks double-dispatch.

    I don't know about the algorithm but this discussion reminds me of my "Computer languages" class where we learned ML and Smalltalk. God I loved this class, it was like an history class for CS.

    Anyway, I had experience in a lot of differant programming paradigm during university. It made me came up with the conclusion that basic Java design patterns are just kind of hacks to implements some other language features when it is needed.

    For example, in ML you use closure. Well the command pattern and visitor pattern are related to the closure concept.

    Factory and creational patterns are supported directly in dynamic languages like SmallTalk.

    Prolog and other relational languages like Lisp suppotr natively the interpreter pattern.

    Iterator pattern is very natural too in relational and functional languages.

    So I guess the general point I am trying to make is every thing is doable in Java but you will understand and know when to use the basic design patterns way faster if you learned different programming paradigms. You already understand the strengths and weaknesses of those patterns.

    What do you think?
  82. Joels point is...[ Go to top ]

    So I guess the general point I am trying to make is every thing is doable in Java but you will understand and know when to use the basic design patterns way faster if you learned different programming paradigms. You already understand the strengths and weaknesses of those patterns.What do you think?

    Perhaps. One could also argue that implementing those patterns in a language that doesn't support them natively gives you more insight into the pattern. If it is done for me, I don't have to really understand it.
  83. Joels point is...[ Go to top ]

    So I guess the general point I am trying to make is every thing is doable in Java but you will understand and know when to use the basic design patterns way faster if you learned different programming paradigms. You already understand the strengths and weaknesses of those patterns.What do you think?
    Perhaps. One could also argue that implementing those patterns in a language that doesn't support them natively gives you more insight into the pattern. If it is done for me, I don't have to really understand it.

    Yeah but I would answer having them already implemented allow to focus of the functional part of the pattern (advantages/weaknesses).
  84. Joels point is...[ Go to top ]

    So I guess the general point I am trying to make is every thing is doable in Java but you will understand and know when to use the basic design patterns way faster if you learned different programming paradigms. You already understand the strengths and weaknesses of those patterns.What do you think?
    Perhaps. One could also argue that implementing those patterns in a language that doesn't support them natively gives you more insight into the pattern. If it is done for me, I don't have to really understand it.
    Yeah but I would answer having them already implemented allow to focus of the functional part of the pattern (advantages/weaknesses).

    Sure, I can buy that.

    On a very weakly related note, I've been getting kind of interested in Scala. It's functional and (fully) OO and not only runs on a JVM, can use any Java class natively. I would think the functional guys would be all over it.
  85. Joels point is...[ Go to top ]

    I'm just not convinced that I can't implement the algorithm in Java. But I'm willing to be convinced if you give me an example. And I find the Visitor pattern very natural. It's pretty much a requirement in some Java applications as Java lacks double-dispatch.

    All right, first of all I don't argue that you can't implement something in Java. Being a Turing-complete language you can implement pretty much anything worth implementing in Java. However the question is not so much what you can or can't implement, but how naturally does it occur to you.

    Also as the specific task had constraints (can't use an accumulator structure or a queue) it tied it to aspecific language feature (in this case lazyness).

    In the Haskell case you can define a function that refines a list of pathes adding one node longer pathes than before and then take a fixpoint over it. It is possible to define a similar function in Java as well, but it will look pretty cumbersome (and in both language cases it won't be anyhow efficient).

    The point of the task was that pretty few people understand lazyness and recursion well enough, so asking such a question would weed out a lot of competition on an interview. And that was Joel's original point -- once everyone learned Scheme, and you could ask such question knowing that only a quarter of people get anywhere near programming with them and asking how to implement even a simple task (lazyness can be emulated by a technique called 'thunking'), would be more than enough to determine whether this person is good enough. Now you'll just find out whether he learned Scheme...

    I mentioned Visitor pattern, since in some functional languages it can be captured in one generic function (typically called 'fold'). As much of the business layer in a typical application deals in some or other way with data transformation and manipulation, and this being what functional languages are best at (in fact "functional" is somewhat of a misnomer) this gives me personally a lot of insight how to build the business layer in such a way that I would be able to reuse it when new requirements come up.
  86. Joels point is...[ Go to top ]

    And that was Joel's original point -- once everyone learned Scheme, and you could ask such question knowing that only a quarter of people get anywhere near programming with them and asking how to implement even a simple task (lazyness can be emulated by a technique called 'thunking'), would be more than enough to determine whether this person is good enough.

    I think the real point is Joel wants to feel superior and feels a person needs to know X to be considered "good enough." There are a lot of people who are terrible at interviews, bad with text book definitions, and hate to answerng hypthetical questions, but are solid programmers. That would be like me asking a potential candidate "explain the pros/cons of RETE algorithm with respect to real-time data and reasoning." the interviewee may have never heard of RETE, or know what I mean by "real-time data" or "reasoning."

    for me to pre-maturely pass judgement without giving the person a chance to express their interest doesn't do me or the candidate any good. by asking a question like that, I'm just tell the person I'm a snob. from an interviewee perspective, it would look like I already had a preconcieved notion of what "a programmer" looks like. At the end of the day, it's just a waste of time for all parties involved.

    I'm always suspicious when someone uses terms like "good enough". If an employer isn't going to give a candidate a fair chance at expressing their interests and showing their skills, why bother interviewing? Isn't this just another form of eletism?

    peter
  87. Trees and Java[ Go to top ]

    I recently had to implement a Tree in Java, one where nodes could have multiple parents and some branches may be 'supressed' for a certain user if he/she does not have access to them so each user logging in should see a different view of the hierarchy. This is a real world problem which was actually much easier to solve using OO. I wrote a framework with Tree,node,path etc objects. I believe it would be much harder and more complicated to implement the same tree in a language such as C.
    I do agree that it's good to understand pointers and how things work under the covers but it's certainly not all there is to solving real world business problems. I started out 10 years ago with an OO language and always felt that my lack of experience with C was preventing me from really understanding computer science and then I taught myself C for the Palm and worked on a two year C/Palm project. Perhaps it helped a little but really whats more important in I.T today is understanding something like why you would use something like ASM or Veritas, or why you should EJB or not and how to version source code properly etc. For example while I have worked with both Makefiles and Ant I much prefer to use Ant because it's a lot more natural to use. While some people may feel that a person is more of a "real" programmer if they use Make and using Ant is easy and requires less skill I think the programmer which uses the more maintainable and understandable Ant certainly provides more value to the business (for Java projects at least) since new people coming in will have an easier time maintaining the build system if it's written in Ant as versus Make.
  88. Trees and Java[ Go to top ]

    I recently had to implement a Tree in Java, one where nodes could have multiple parents and some branches may be 'supressed' for a certain user if he/she does not have access to them so each user logging in should see a different view of the hierarchy. This is a real world problem which was actually much easier to solve using OO. I wrote a framework with Tree,node,path etc objects. I believe it would be much harder and more complicated to implement the same tree in a language such as C.

    Technically I think you had a graph, probably directed, not a tree (which is a type of acyclic graph), because what you describe would (potentially) have cycles in it. You just rendered it in a tree-like way.

    It's an important distinction because if you have an acyclic graph you can navigate from one node to another without keeping track of your entire previous path. With a graph that isn't acyclic you have to keep track of your entire path in order to ensure you don't enter an infinite loop.

    That's computer science.
  89. Trees and Java[ Go to top ]

    That's computer science.

    Hats off to Erik, a true genius. Sir, I am honored to walk in your shadow.
  90. Joels point is...[ Go to top ]

    Can you give an example of what you can't ask if the developer only knows Java?
    Implement breadth-first search on a graph using pure recursion only (without using any stack structures or global variables). It's hard even to state this program in Java, whereas in any decent functional language it's a very good test of how a programmer can manipulate recursion on non-recursive structures.

    Can you give an example of this algorithm in a functional language? I'll admit I'm not that familiar with functional development and am having no luck finding an example of it. You've piqued my interest.
  91. Joels point is...[ Go to top ]

    Can you give an example of this algorithm in a functional language? I'll admit I'm not that familiar with functional development and am having no luck finding an example of it. You've piqued my interest.

    It was given as a problem by Doaitse Swierstra on AFP'04 (http://www.cs.ut.ee/afp04/). Sadly I didn't find the solution, though I remeber doing it in Haskell. There's an implementation available in the GHC standard libraries, but it uses a queue. I remember that it involved a fancy trick involving lazyness, but not much more :)
  92. Joels point is...[ Go to top ]

    There's an implementation available in the GHC standard libraries, but it uses a queue. I remember that it involved a fancy trick involving lazyness, but not much more :)

    Ha but isn't using a queue not much different then using a stack? This problem is easy with a list/queue data structure.

    Regards,
    Kirk
  93. Joels point is...[ Go to top ]

    There's an implementation available in the GHC standard libraries, but it uses a queue. I remember that it involved a fancy trick involving lazyness, but not much more :)
    Ha but isn't using a queue not much different then using a stack? This problem is easy with a list/queue data structure.Regards,Kirk

    I'm trying to figure out how you avoid repeating the nodes if there is no common data structure. If you can explain that, I would appreciate it.
  94. Joels point is...[ Go to top ]

    You need "Set" data structure to store visited nodes, but you can use recursion or stack to traverse graph. It was very popupular algorythm to learn languages like PASCAL.
    I see it is used to lean JAVA too http://www.holtsoft.com/books/data_structures_java.html (Chapter 11 and 14)
  95. Joels point is...[ Go to top ]

    My view is the old saying

    "Stop studying and start learning"

    Mohan
  96. Joels point is...[ Go to top ]

    Can you give an example of what you can't ask if the developer only knows Java?
    Implement breadth-first search on a graph using pure recursion only (without using any stack structures or global variables). It's hard even to state this program in Java, whereas in any decent functional language it's a very good test of how a programmer can manipulate recursion on non-recursive structures.

    What? Maybe I'm rusty on graphs, but christ, this doesn't sound difficult in java at all. References are pointers, the edge graph is just a list of references.

    Java and your precious functional lang are both turing complete. Code length differences, whether lengthwise or widthwise will be roughly equivalent.
  97. Joels point is...[ Go to top ]

    Can you give an example of what you can't ask if the developer only knows Java?
    Implement breadth-first search on a graph using pure recursion only (without using any stack structures or global variables). It's hard even to state this program in Java, whereas in any decent functional language it's a very good test of how a programmer can manipulate recursion on non-recursive structures.
    Does this really matter? most developers I met and worked with needed good understandanding of patterns & frameworks: how much effort can you spend in discovering understandings of low-level algorthms?
  98. Joels point is...[ Go to top ]

    A lot of developers I interview these days just don’t cut it &#x2013
    And that is what Joel said, it's hard to judge during interview if the person only knows Java.
    Can you give an example of what you can't ask if the developer only knows Java?
    What is the default param on the DISP card.
  99. that's funny[ Go to top ]

    +1 for this post and for Joel's main points.I'm the (circa 1999) product of a university which fortunately taught students studying for a CS degree about Computer Science, not about programming. Like MIT and Yale we started with Scheme, moved on to C/C++, and then finally were able to coast on to Java (with some MIPS assembly thrown in for good measure). Java is still my language of choice (though I’m already more fond of Ruby), but I have a lot of relevant knowledge from those other languages.I think the main point Jevgeni and Joel are catching on to is that good schools teach students how to think and learn, not how to program. If you haven't been through a course with a functional language then you're really missing out on a huge chunk of CS knowledge - thinking in terms of recursion is something that you won't pick up just using Java the entire time. Recursion leads to beautifully simplistic code when used correctly. Without that knowledge you may get some hacked up loops with breaks and gotos that are harder to maintain and understand. Functional languages also teach you to think of functions as first-class members of the language. Without that background you may not be able to fully grasp and appreciate code closures very well (how is this relevant to anyone doing Java? Spring makes great use of Java's anonymous inner classes to simulate closures in its DAO framework - a very elegant solution to the problem).Along the same lines someone who hasn't taken a course in C/C++ or assembly probably doesn't have a very good understanding of what's going on at the machine level. You may not get very efficient code out of such a developer, and they may not be good at optimizing it if needed.All of these are core tenants of a good CS curriculum. If students aren't getting a wide variety of exposure they probably won't be prepared for the future. Knowing Java is great for when you graduate. What about the next 40 years? The more languages and programming models you know the easier it is to pick up new ones. I can guarantee you that someone who has a good background with a functional language and good OO skills can pick up something like AspectJ much faster than someone who has only had exposure to Java or C#.As one of our CS profs was fond of saying – if you want to learn how to program you could have gone to ‘Cougar High’ (a nearby college whose CS program focused on programming, and not computer science). A lot of developers I interview these days just don’t cut it – often because they aren’t very good about thinking through a problem, only solving those they have been taught.

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.

    Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.

    I better go apply now.

    peter
  100. that's funny[ Go to top ]

    For someone to be a "good" programmer, they have to go through the college weeding process.
    From what I hear, it is a good place to get on weed.

    Yeah Peter. You need to go to college. Only so you can understand Rolfs posts. :)
  101. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.I better go apply now.peter

    I think you're missing the main point of the original post. Some schools are limiting what students are being exposed to, and the students are coming out with less exposure and experience because of it.

    For people (such as you) who go out and actively learn new technologies and methodologies on their own this is probably not a problem. But for students that are coming out of school with only exposure to a single language it could be. My takeaway from the original posting is that schools should not be restricting their course schedule to a single language – I agree with this entirely. This is not to say that people can’t learn on their own.

    The argument isn’t that you need x, y, and z experience to be a good developer, but that you are better off if you aren’t restricted to just one of those.
  102. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things.

    I know a few people that can do all this and more and they've never stepped inside a college. In fact, two of them never finished high school! So it can be done however this is the exception and certianly not the rule. The one thing that a college program gives you is a set of related subject that should cover off the major topics in the subject. I find with self taught people is that their knowledge tends to have holes .

    Regards,
    Kirk
  103. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things.

    I know a few people that can do all this and more and they've never stepped inside a college. In fact, two of them never finished high school! So it can be done however this is the exception and certianly not the rule. The one thing that a college program gives you is a set of related subject that should cover off the major topics in the subject. I find with self taught people is that their knowledge tends to have holes .
    Regards,
    Kirk

    Holes? If it was just a few holes, I'd consider it holes in my knowledge. If I had to weigh what I "think I know" versus what is out there in the CS world, I'd be lucky if I my knowledge covered 10%. But is this any different than someone who went to school? How many people sitting in classes and read textbooks really understand the topic? I know quite a few guys who also never went to college, and run circles around me. Setting aside my silly jokes and non-sensical-ness.

    I find the idea that one should define knowledge, skill or worth from an external source slightly crazy. Just because someone gets a degree from Standford, Harvard, MIT or Caltech is no indication of the person's actual programming capabilities. A person's actual programming skill should only be measured by what they can produce. Relying on crutches like degrees or certification to measure a candidate is lazy. The only thing that produces is hiring the wrong guy.

    peter
  104. that's funny[ Go to top ]

    How many people sitting in classes and read textbooks really understand the topic?
    What kind of crazy argument is that? Because a bunch of useless retards went through a CS course without having a clue to what they are studying, the concept of proper education is totally devalued?
    I find the idea that one should define knowledge, skill or worth from an external source slightly crazy.
    external source? what exactly is external here?
    Just because someone gets a degree from Standford, Harvard, MIT or Caltech is no indication of the person's actual programming capabilities.
    Yes it is. An MIT, or a Harvard or a Stanford, for the most part, does not consist of those morons who end up having no clue as to exactly what they are trying to study and understand. There is a rigorous selection process that tries to weed out the less smarter ones from the more smarter ones just so that kind of talent can be nurtured and nudged in a proper direction.
    A person's actual programming skill should only be measured by what they can produce.
    Say you are applying for a position in Google. Are they supposed to hire you and pray that you "produce"? or are they supposed to blindly believe what you have "produced" earlier?
    Relying on crutches like degrees or certification to measure a candidate is lazy.
    I won't disagree with you if someone uses that as the only criterion for determining the worth of an individual.
  105. that's funny[ Go to top ]

    How many people sitting in classes and read textbooks really understand the topic?
    What kind of crazy argument is that? Because a bunch of useless retards went through a CS course without having a clue to what they are studying, the concept of proper education is totally devalued?

    I went to college, but not for science. I think college is valuable learning experience. I'll put it another way. Even though I read a ton of books in 6 years of college, most of that has fallen through the holes in my brain. What I learned in college is to think critical and always question. That wasn't something a book taught me? No, it wasn't. It was the process of making mistakes and realizing "I don't know anything." But that's my experience. Others may have a different experience.
    I find the idea that one should define knowledge, skill or worth from an external source slightly crazy.
    external source? what exactly is external here?
    an external source being a School, a position, a certification or some other silly label given by some body or business.
    Just because someone gets a degree from Standford, Harvard, MIT or Caltech is no indication of the person's actual programming capabilities.

    Yes it is. An MIT, or a Harvard or a Stanford, for the most part, does not consist of those morons who end up having no clue as to exactly what they are trying to study and understand. There is a rigorous selection process that tries to weed out the less smarter ones from the more smarter ones just so that kind of talent can be nurtured and nudged in a proper direction.

    I'm inclined to say we disagree and leave it at that. I've met plenty of morons from well known and respected colleges.
    A person's actual programming skill should only be measured by what they can produce.
    Say you are applying for a position in Google. Are they supposed to hire you and pray that you "produce"? or are they supposed to blindly believe what you have "produced" earlier?

    Isn't that the million dollar question. There is no fool proof or simple way. This is one reason I prefer to work with people who have worked on open source projects. All I need to do is look at the code the person has written. I'm totally bias though, since I participate in several OSS projects.
    Relying on crutches like degrees or certification to measure a candidate is lazy.
    I won't disagree with you if someone uses that as the only criterion for determining the worth of an individual.

    In the past, I've met people who have Masters in CS, but couldn't code as well as a friend who never graduated from College. I've also met 14 year old kids who could code partical animation in assembly. These types of people are rare and have special talent. The only thing a college degree tells me is the person did the homework and got sufficient grades to pass. Whether that person simply memorized the text to pass the grade or really knew it by heart isn't something a grade can tell me.

    peter
  106. that's funny[ Go to top ]

    I went to college, but not for science. I think college is valuable learning experience. I'll put it another way. Even though I read a ton of books in 6 years of college, most of that has fallen through the holes in my brain.

    On the lighter sider, the current state of education is aptly captured by this clip

    Incidentally, the whole slide deck is interesting for the subject on hand.

    For example, this slide has interesting bit about people from highly respected schools not knowing about science they should have learnt in grade school.

    But does this make all education bad, I don't think so. We have to increase the quality of education and teaching application of science instead of just pure concepts.


    Venkat
  107. that's funny[ Go to top ]

    Say you are applying for a position in Google. Are they supposed to hire you and pray that you "produce"? or are they supposed to blindly believe what you have "produced" earlier?

    What is the point of these questions ? Nobody is devaluing anything here. This is one more example of this entrenched mentality that makes one think school and college drop-outs are retards and morons. Many people who have achieved in the CS field have had a "misspent" youth life. They are not morons by any means. It is not just the CS field. Look at other fields.


    Mohan
  108. learning to learn[ Go to top ]

    I find with self taught people is that their knowledge tends to have holes .
    Sure. But everyone has holes. How much can one learn in 4 years? At college. Really. And then how much does one remember? I'm not knocking college but it is just one way of learning.
  109. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.I better go apply now.peter

    I know you are not dismissing schools but people often underestimate their importance, and downplay their role....especially ones who never got the education themselves.

    Don't get me wrong, it all requires interest and enthusiasm about the topic. You can have all education you want, but if you are not interested in what you do, you get nowhere. I know many people who have the booksmarts but can't write decent software.

    Just as an example, I wrote several compilers as a school assignment. So did the whole class. The compilers ranged from simple pretty printers for C, to entire interpreted computer languages, designed and implemented by you and your team. Now, let me guess, how many people would go and just do it outside the course? Not many.

    Now, how many would delve into telecommunications networks, protocols, switches, IP-telephony, etc. etc. People do in schools. How many would know about robotics, artificial intelligence, artificial machine vision? How many would know about industrial production processes and how to control them. How about nuclear plants and their computerized control. Well, the list goes pretty far, but you are starting to get the idea, right?

    Schools give you an invaluable edge, which you can use to your advantage if you wish. It all can rot and melt away, but you are well equipped and categorically beat a copy of yourself you did not have the education, period.

    Schools do not just give you the booksmarts but can give you toughness and ruggedness how to survive in the real world. Just getting through the toughest of curriculums give you self dicipline and organizational skills that you can rarely get elsewhere.
  110. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.I better go apply now.peter

    I know you are not dismissing schools but people often underestimate their importance, and downplay their role....especially ones who never got the education themselves.Don't get me wrong, it all requires interest and enthusiasm about the topic. You can have all education you want, but if you are not interested in what you do, you get nowhere. I know many people who have the booksmarts but can't write decent software.Just as an example, I wrote several compilers as a school assignment. So did the whole class. The compilers ranged from simple pretty printers for C, to entire interpreted computer languages, designed and implemented by you and your team. Now, let me guess, how many people would go and just do it outside the course? Not many.Now, how many would delve into telecommunications networks, protocols, switches, IP-telephony, etc. etc. People do in schools. How many would know about robotics, artificial intelligence, artificial machine vision? How many would know about industrial production processes and how to control them. How about nuclear plants and their computerized control. Well, the list goes pretty far, but you are starting to get the idea, right?Schools give you an invaluable edge, which you can use to your advantage if you wish. It all can rot and melt away, but you are well equipped and categorically beat a copy of yourself you did not have the education, period.Schools do not just give you the booksmarts but can give you toughness and ruggedness how to survive in the real world. Just getting through the toughest of curriculums give you self dicipline and organizational skills that you can rarely get elsewhere.

    I'm just being sarcastic and playing devil's advocate. I'm glad I worked fulltime and took 24 units every quarter in UC system in California. The life lessons students acquire in college is invaluable. Having a place to explore helps broaden a person's perspective. Clearly, what one does in a given environment is the important part.

    Sadly, many people do not see it that way and believe that a degree or piece of paper makes them "qualified" or better. Just trying to point out that education is as much a crutch as it is a tool. If a person interviewing a candidate only looks what the candidate took in college, they might not see the full picture. The premise that one must study X to know Y is a complete falicy. Sometimes that is true. other times it isn't. Great programmers are great because they have an innate skill and drive, not because of some school. The school is simply reaping the benefit of attracting a talented individual. Did the admissions board have any clue the person would do great things? Probably not, it's game of chance.

    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education. I think it's important to remember to look at the whole person, and not just the papers attached to their name.

    peter
  111. that's funny[ Go to top ]

    If a person interviewing a candidate only looks what the candidate took in college, they might not see the full picture. The premise that one must study X to know Y is a complete falicy. Sometimes that is true. other times it isn't. Great programmers are great because they have an innate skill and drive, not because of some school.

    Bravo Peter, couldn't agree more.
    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education.

    I would say almost all of them. The biggest example in our industry is Bill Gates.

    Schools are for prepies and average people and most of them are dumb enough not to think out side the box, they follow what ever they have been told and taught, kind of TSS community:-)
    I think it's important to remember to look at the whole person, and not just the papers attached to their name.peter

    Bravo again. But Alas most of the time people who take interviews in our industry are as shallow as the bloger above. Peter you know the most famous inteview question, yes it is our favourite "recursion", and you know co-incidently:-) they all ask you to write a recursive function for Fabanoci series. You know why rigtht? Because every computer science shcool in this country teaches you the Fabanoci series when they teach you recursion. If you ask these interviewers to write a recursive function for some other problem they themselves start crying like babies.
  112. that's funny[ Go to top ]

    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education.
    I would say almost all of them. The biggest example in our industry is Bill Gates.Schools are for prepies and average people and most of them are dumb enough not to think out side the box, they follow what ever they have been told and taught, kind of TSS community:-)

    That's not true, some of the greatest thinker did not go to school for a long time, Edison for instance, but some did. Couple of name I can think of Stephen Hawking, Albert Einstein, Alexander Graham Bell, Guglielmo Marconi,Carl Friedrich Gauss and the list can go on and on. So I think, the similiraties between this guys are being smart, talented, passionate and hard-working people.
  113. that's funny[ Go to top ]

    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education.
    I would say almost all of them. The biggest example in our industry is Bill Gates.Schools are for prepies and average people and most of them are dumb enough not to think out side the box, they follow what ever they have been told and taught, kind of TSS community:-)

    I bet you have kept a real good count of who had education and who did not. People like cinderella stories, and dismiss the realities. "Great thinkers" do not emerge from thin mist, no matter how hard you would like to believe it.

    People do not just 'invent' things without hard work, failure, trial, and experience. Had Bill Gates been a construction worker in some rural area of the country, there would not be Microsoft. Even Bill Gates had formal education or enough of it to allow him to understand the importance of computers. But I could throw out some famous quotes from Bill Gates where he as a 'great thinker' did not have any clue what computers could do in very close future. You could count it as luck as much as 'great thinking'.
  114. that's funny[ Go to top ]

    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education.
    I would say almost all of them. The biggest example in our industry is Bill Gates.Schools are for prepies and average people and most of them are dumb enough not to think out side the box, they follow what ever they have been told and taught, kind of TSS community:-)
    "Great thinkers" do not emerge from thin mist, no matter how hard you would like to believe it. People do not just 'invent' things without hard work, failure, trial, and experience. Had Bill Gates been a construction worker in some rural area of the country, there would not be Microsoft..

    If Bill Gate would have been a construction guy I bet there must be a huge construction company named "MegaHard" and the home you would be sitting must be from them:-) Cheers my friend
  115. Isn't hard work a better measurement?[ Go to top ]

    "Great thinkers" do not emerge from thin mist, no matter how hard you would like to believe it. People do not just 'invent' things without hard work, failure, trial, and experience. Had Bill Gates been a construction worker in some rural area of the country, there would not be Microsoft. Even Bill Gates had formal education or enough of it to allow him to understand the importance of computers. But I could throw out some famous quotes from Bill Gates where he as a 'great thinker' did not have any clue what computers could do in very close future. You could count it as luck as much as 'great thinking'.

    Isn't working hard the key to most things. Well luck helps too, but without hard work it's very difficult to "get any where". How one judges a candidate has "worked hard" is the tricky part. I've worked with some people who take the perspective that they will only hire a programmer that a team member has worked with in the past. I think Joel's blog incorrectly blames colleges or Java for something that is far more complex. But that's my bias perspective.

    peter
  116. that's funny[ Go to top ]

    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education.
    I would say almost all of them.
    I would say hardly any of them.

    Of course, you can take the most prominent counter-examples (Bill Gates is not one of them, by the way, he did get quite a bit of education before dropping out), but if you start adding up the numbers, it's not even close.

    Just start with all the CEO's of the major companies around the world. They define our economies and sometimes even our culture, as do all the people who report to them, and you can bet that 99% of them have gone some through some very rigorous and painstakingly hard educations.

    There's nothing wrong with being a non-conformist, by the way, but if you really want to make a change in the world, be a non-conformist *and* get an education.

    --
    Cedric
  117. oops[ Go to top ]

    Some of the greatest thinkers and do-ers in history were non-conformist who rejected formal education.
    I would say almost all of them.

    I would say hardly any of them.Of course, you can take the most prominent counter-examples (Bill Gates is not one of them, by the way, he did get quite a bit of education before dropping out), but if you start adding up the numbers, it's not even close.

    Just start with all the CEO's of the major companies around the world. They define our economies and sometimes even our culture, as do all the people who report to them, and you can bet that 99% of them have gone some through some very rigorous and painstakingly hard educations.

    There's nothing wrong with being a non-conformist, by the way, but if you really want to make a change in the world, be a non-conformist *and* get an education.-- Cedric

    I didn't mean to switch the debate to non-conformists. I totally with with you that interviewing is an art. a good interviewer shouldn't be making a decision based on 1 esoteric technical question. Unless of course the question is "do you wan to work here?" and the person answers "no, I don't".

    :)

    I'll stop playing devil's advocate now.

    peter
  118. that's funny[ Go to top ]

    Peter you know the most famous inteview question, yes it is our favourite "recursion", and you know co-incidently:-) they all ask you to write a recursive function for Fabanoci series. You know why rigtht? Because every computer science shcool in this country teaches you the Fabanoci series when they teach you recursion. If you ask these interviewers to write a recursive function for some other problem they themselves start crying like babies.

    tell me about it. I had to do that once for an interview. I was annoyed, but I wrote the damn thing to show them i could. what was worse about this specific case is they couldn't install Netbeans correctly and only had the JDK installed. So I wrote the thing notepad and compiled it manually. Two weeks later, they asked me to write it down, so they could compare other people's responses.

    I've even been asked questions like, "how do you implement a database connection pool?" I asked, "why would i do that, when writing a robust scalable connection pooling driver takes deep expertise?" Needless to say, I declined to go back for further interviews.

    peter
  119. that's funny[ Go to top ]

    Schools give you an invaluable edge, which you can use to your advantage if you wish. It all can rot and melt away, but you are well equipped and categorically beat a copy of yourself you did not have the education, period.

    This sounds good, but I haven't seen it play out in the real world.
    Schools do not just give you the booksmarts but can give you toughness and ruggedness how to survive in the real world. Just getting through the toughest of curriculums give you self dicipline and organizational skills that you can rarely get elsewhere.

    Umm... this isn't specific to a CS degree, but applies to college in general.
  120. that's funny[ Go to top ]

    Schools give you an invaluable edge, which you can use to your advantage if you wish. It all can rot and melt away, but you are well equipped and categorically beat a copy of yourself you did not have the education, period.
    This sounds good, but I haven't seen it play out in the real world.
    Schools do not just give you the booksmarts but can give you toughness and ruggedness how to survive in the real world. Just getting through the toughest of curriculums give you self dicipline and organizational skills that you can rarely get elsewhere.
    Umm... this isn't specific to a CS degree, but applies to college in general.

    I just think that people are over-jealous about their own backgrounds and are defensive due to their personal experience. It escapes me why the same person without the education would would be more qualified than the person with it. That's where the issue of having education and not having it boils down to.

    I am still looking for the same enthusiastic and driven people, but I rather have one with solid education. Education does not erode people's capabilities; it enhances them.
  121. that's funny[ Go to top ]

    It escapes me why the same person without the education would would be more qualified than the person with it.

    It is my experience that recently graduated CS students need to unlearn a lot of questionable "truths" their professors and teaching assistants told them, simply to be able to learn things with business value to their employer without experiencing significant cognitive dissonance.

    That's why I tend to never recruit CS students with no business experience, but have no problem with recruiting non-CS students with some applicable experience. It's simply a money-losing proposition.
  122. that's funny[ Go to top ]

    It escapes me why the same person without the education would would be more qualified than the person with it.
    It is my experience that recently graduated CS students need to unlearn a lot of questionable "truths" their professors and teaching assistants told them, simply to be able to learn things with business value to their employer without experiencing significant cognitive dissonance.That's why I tend to never recruit CS students with no business experience, but have no problem with recruiting non-CS students with some applicable experience. It's simply a money-losing proposition.

    Interesting approach. People are always looking for the short gain. I wonder if it is the schools that are at fault to the severly eroding school system or people who devalue education. A great breeding ground for outsourcing in deed.
  123. that's funny[ Go to top ]

    Interesting approach. People are always looking for the short gain. I wonder if it is the schools that are at fault to the severly eroding school system or people who devalue education. A great breeding ground for outsourcing in deed.

    In this question, immediate gain is not at all in conflict with long term gain. I will gladly hire CS graduates who have shown in practise that they are high value producers, but it is not in my interest to bear the higher cost of finding out which CS graduates can keep on learning at a higher pace after they perceive their time of learning to be over, and which of them can shift their decision-making process from the valuation model taught to them in the academia to a valuation model which will enable them to work in diverse teams and actually make money.

    I would moreover argue that your comment of devaluing education is misdirected.

    Tero, your original comment was as follows:
    It escapes me why the same person without the education would would be more qualified than the person with it.

    I have provided an argument for that position for your education. I'm not arguing that this is the whole story, but instead that such a point of view exists, is quantifiable and is not trivial. It is simply a part of the picture, not the whole of it.
    (Simone:) So I go for CS students, because I can combat false religions much more easily then ingorance!

    Horses for courses.

    I am certainly not arguing that CS is unnecessary, I am arguing that the current educational processes in use produce a seemingly high yield of graduates, but because of severe quality problems associated with the production process, one is much better off employing students who have already undergone burn-in testing, or for such work that does not require or significantly benefit of CS studies (the majority of IT and development positions,) one can manage risks better by using graduates who have undergone different production processes.
  124. that's funny[ Go to top ]

    It escapes me why the same person without the education would would be more qualified than the person with it.
    It is my experience that recently graduated CS students need to unlearn a lot of questionable "truths" their professors and teaching assistants told them, simply to be able to learn things with business value to their employer without experiencing significant cognitive dissonance.That's why I tend to never recruit CS students with no business experience, but have no problem with recruiting non-CS students with some applicable experience. It's simply a money-losing proposition.
    hmmm interesting point... my experience is quite different: nowadays students embrace 'religions' (Open Source, Java, MS etc...) and thus might lack flexibility. But the real problem is that I, as an employer, can tell them 'use this tool', while I simply don't have time to teach them the 'big picture' which University gives to them. So I go for CS students, because I can combat false religions much more easily then ingorance!
  125. that's funny[ Go to top ]

    It escapes me why the same person without the education would would be more qualified than the person with it.
    It is my experience that recently graduated CS students need to unlearn a lot of questionable "truths" their professors and teaching assistants told them, simply to be able to learn things with business value to their employer without experiencing significant cognitive dissonance.That's why I tend to never recruit CS students with no business experience, but have no problem with recruiting non-CS students with some applicable experience. It's simply a money-losing proposition.
    hmmm interesting point... my experience is quite different: nowadays students embrace 'religions' (Open Source, Java, MS etc...) and thus might lack flexibility. But the real problem is that I, as an employer, can tell them 'use this tool', while I simply don't have time to teach them the 'big picture' which University gives to them. So I go for CS students, because I can combat false religions much more easily then ingorance!

    +1!
  126. that's funny[ Go to top ]

    It escapes me why the same person without the education would would be more qualified than the person with it.

    It is my experience that recently graduated CS students need to unlearn a lot of questionable "truths" their professors and teaching assistants told them, simply to be able to learn things with business value to their employer without experiencing significant cognitive dissonance.That's why I tend to never recruit CS students with no business experience, but have no problem with recruiting non-CS students with some applicable experience. It's simply a money-losing proposition.

    hmmm interesting point... my experience is quite different: nowadays students embrace 'religions' (Open Source, Java, MS etc...) and thus might lack flexibility. But the real problem is that I, as an employer, can tell them 'use this tool', while I simply don't have time to teach them the 'big picture' which University gives to them. So I go for CS students, because I can combat false religions much more easily then ingorance!

    Yeah, I'll believe a CS degree increases the likelihood a person is "less ignorant" when it actually happens. I find that line of argument simplistic. As I've stated, I've never taken a college CS course, and yet I am able to implement my own rule engine using RETE algorithm. How many CS students getting a bachelors degree can do that. How many PHd and Masters students in CS can do that?

    Take JESS rule engine for example. Ernest Friedman-hill has a degree in physical chemistry. JESS is one of the top 5 rule engines and Ernest is an expert in the rule engine domain. Rather than relying on CS degree to judge a candidate, wouldn't taking time to get to know the person be better?

    peter
  127. that's funny[ Go to top ]

    Yeah, I'll believe a CS degree increases the likelihood a person is "less ignorant" when it actually happens. I find that line of argument simplistic. As I've stated, I've never taken a college CS course, and yet I am able to implement my own rule engine using RETE algorithm. How many CS students getting a bachelors degree can do that. How many PHd and Masters students in CS can do that?Take JESS rule engine for example. Ernest Friedman-hill has a degree in physical chemistry. JESS is one of the top 5 rule engines and Ernest is an expert in the rule engine domain. Rather than relying on CS degree to judge a candidate, wouldn't taking time to get to know the person be better?peter

    Peter,

    When it comes to hiring people, I wouldn't be looking to weed out potentially good software engineers with non-technical majors, when there are plenty with technical degrees out there worth looking at first. A CS degree is important in that it demonstrates that the candidate has more than a passing interest in development -- after that it comes down to whether or not they are capable of doing the job at hand, and then whether or not they are the best amongst the candidates.

    If I need to build a rule engine, I'm going to look to build the foundation of the team with people with rule engine expertise, and then staff that team with good developers who have technical degrees as well as some level of experience in the technology we're using.

    You said “How many PHd and Masters students in CS can do that?” -- well I'd like to see how deep your conversation gets with someone who spent the last 5 years of their life studying rule engine theory, writing papers and programs, and proving specific concepts.

    Thomas
  128. that's funny[ Go to top ]

    Yeah, I'll believe a CS degree increases the likelihood a person is "less ignorant" when it actually happens. I find that line of argument simplistic. As I've stated, I've never taken a college CS course, and yet I am able to implement my own rule engine using RETE algorithm. How many CS students getting a bachelors degree can do that. How many PHd and Masters students in CS can do that?Take JESS rule engine for example. Ernest Friedman-hill has a degree in physical chemistry. JESS is one of the top 5 rule engines and Ernest is an expert in the rule engine domain. Rather than relying on CS degree to judge a candidate, wouldn't taking time to get to know the person be better?peter
    Peter,
    When it comes to hiring people, I wouldn't be looking to weed out potentially good software engineers with non-technical majors, when there are plenty with technical degrees out there worth looking at first. A CS degree is important in that it demonstrates that the candidate has more than a passing interest in development -- after that it comes down to whether or not they are capable of doing the job at hand, and then whether or not they are the best amongst the candidates. If I need to build a rule engine, I'm going to look to build the foundation of the team with people with rule engine expertise, and then staff that team with good developers who have technical degrees as well as some level of experience in the technology we're using.

    You said "How many PHd and Masters students in CS can do that?" -- well I'd like to see how deep your conversation gets with someone who spent the last 5 years of their life studying rule engine theory, writing papers and programs, and proving specific concepts.

    Thomas

    I don't consider myself an expert in rule engines, but I would say my knowledge of rule engines is good enough that I can file a patent for distributed reasoning. I won't bother explaining distributed reasoning, since that would take several pages.

    The RETE implementation I donated to drools can provide near constant scalability as the number of rules increase for simple rules. Google on RETE rule engines and you'll see not many rule engines can claim that.

    I know people with CS degree who are brilliant and I know programmers without degrees that are brilliant. Overall, my experience is that a degree is a poor indicator. An individual's passion and dedication is what I look for. Your experience may be different, but that's my first hand experience.

    My point is that one should not rely on degrees as a primary benchmark for a "good developer". Within the field of rule engines, many of the best rule developers did not study CS, so atleast within this specific domain, it definitely does not hold true. In other areas it may be true. Take ID's John Carmack. He does have a degree in CS and he happens to be a great programmer. I suspect there's nothing I could say to change your mind, but I hope the next time you interview someone without a degree this debate comes to your mind.

    peter lin
  129. that's funny[ Go to top ]

    Peter, I would never have guessed that your degree is what it is. I would have guess CS+Masters in Engineering.

    James said
    A CS degree is important in that it demonstrates that the candidate has more than a passing interest in development

    and you said
    An individual's passion and dedication is what I look for

    [this is more for James]
    Having a CS degree doesn't prove passion (as is proven by you and me and ...) or demonstate more than a passing interest. Look at the numbers currently going into CS programs. Way, way down. Why? Cause few have the passion and the $$$. Many of those who have taken CS degrees were only in it for the money.

    Also, only looking at CSers limits those who are of the generation that computers were not that common and knew little if nothing of them. Some of us had to take different paths to get at the same destination.
  130. that's funny[ Go to top ]

    Peter, I would never have guessed that your degree is what it is. I would have guess CS+Masters in Engineering.

    thanks for the compliment. There's still so much more I don't know and would like to understand better.

    peter
  131. that's funny[ Go to top ]

    Peter, I would never have guessed that your degree is what it is. I would have guess CS+Masters in Engineering.
    thanks for the compliment. There's still so much more I don't know and would like to understand better. peter
    NP. I have a lot to learn too. My point was that a CS degree is only one way to get to a certain point.
  132. that's funny[ Go to top ]

    [this is more for James]Having a CS degree doesn't prove passion (as is proven by you and me and ...) or demonstate more than a passing interest. Look at the numbers currently going into CS programs. Way, way down. Why? Cause few have the passion and the $$$. Many of those who have taken CS degrees were only in it for the money.Also, only looking at CSers limits those who are of the generation that computers were not that common and knew little if nothing of them. Some of us had to take different paths to get at the same destination.

    These kinds of things depend on the country and culture you come from. If you have to pay big bucks for your education something has to be wrong about it all. It all leads to the erosion and devaluation of the entire school system and education as whole.

    It is a whole lot to chew for young people who end up being under a heavy debt load when they are supposed to start families and start life. Since they paid tons of money for their education, they must earn big bucks, which companies are not going to pay to people who have no experience, especially now. Then the companies cry that they don't have people with education they need, and salaries are too high. Let's outsource it to countries that have the educated people who can do the job cheaply. Cause and consequence, who's digging their own grave?
  133. that's funny[ Go to top ]

    I suspect there's nothing I could say to change your mind, but I hope the next time you interview someone without a degree this debate comes to your mind.peter lin

    Actually, you don't need to change my mind -- when I look at a CV, I start with experience and work my way backwards. If someone has a few solid years of development and then a degree in something non-tech, I probably would have them in for an interview provided their experience matched what we needed. But I do have a preference -- someone with a degree in physics, math, engineering, CS, etc. is likely to have a better understanding of logic than someone with a degree in something else. Of course this doesn't always hold true -- and I can say this from personal experience too. But when you talk about spending 100+$ per year on hiring, training, and indoctrinating an employee, a company is going to try to fill that spot with someone who fits their needs as closely as possible, and I don't blame them for taking this approach.
  134. that's funny[ Go to top ]

    I suspect there's nothing I could say to change your mind, but I hope the next time you interview someone without a degree this debate comes to your mind.peter lin
    Actually, you don't need to change my mind -- when I look at a CV, I start with experience and work my way backwards. If someone has a few solid years of development and then a degree in something non-tech, I probably would have them in for an interview provided their experience matched what we needed. But I do have a preference -- someone with a degree in physics, math, engineering, CS, etc. is likely to have a better understanding of logic than someone with a degree in something else. Of course this doesn't always hold true -- and I can say this from personal experience too. But when you talk about spending 100+$ per year on hiring, training, and indoctrinating an employee, a company is going to try to fill that spot with someone who fits their needs as closely as possible, and I don't blame them for taking this approach.
    This is the best post I have read in this entire thread (after scrolling nearly 150 odd posts) that neatly summarizes exactly what I have been struggling to convey. If this is not what Peter Lin has been trying to convey all along then there isn't much one can do to reconcile the apparent differences.
  135. that's funny[ Go to top ]

    Actually, you don't need to change my mind -- when I look at a CV, I start with experience and work my way backwards. If someone has a few solid years of development and then a degree in something non-tech, I probably would have them in for an interview provided their experience matched what we needed. But I do have a preference -- someone with a degree in physics, math, engineering, CS, etc. is likely to have a better understanding of logic than someone with a degree in something else. Of course this doesn't always hold true -- and I can say this from personal experience too. But when you talk about spending 100+$ per year on hiring, training, and indoctrinating an employee, a company is going to try to fill that spot with someone who fits their needs as closely as possible, and I don't blame them for taking this approach.

    How does this work when you have thousands of resumes for just a few positions?

    Filtering on things like degree (and the university it's from), GPA, years of experience, and technology "keywords" can easily be done by a computer. Interpreting the experience listed on a resume takes time and expertise.

    So often times no human being will even look at a resume missing some "key" element like a degree in CS, and the first human to look at it will be in HR and will barely be more than a keyword filter.

    I think a solid foundation in computer science is essential for a software engineer, and that knowledge can be aquired in or out of school. I also agree with Peter that participation in an open source project can superior evidence of skills to a degree from even the most competitive school. But checking on participation takes even more time than reading a resume.

    What's needed is a better automated resume reader.
  136. that's funny[ Go to top ]

    Actually, you don't need to change my mind -- when I look at a CV, I start with experience and work my way backwards. If someone has a few solid years of development and then a degree in something non-tech, I probably would have them in for an interview provided their experience matched what we needed. But I do have a preference -- someone with a degree in physics, math, engineering, CS, etc. is likely to have a better understanding of logic than someone with a degree in something else. Of course this doesn't always hold true -- and I can say this from personal experience too. But when you talk about spending 100+$ per year on hiring, training, and indoctrinating an employee, a company is going to try to fill that spot with someone who fits their needs as closely as possible, and I don't blame them for taking this approach.
    How does this work when you have thousands of resumes for just a few positions?
    So what if you have thousands of resumes for a few positions? Going by your logic, yes, the automated "intelligent" resume reader is going to filter out resumes that do not have the required keyword. The candidate is _still_ going to be interviewed, right? His resume is still going to be examined. A competent interviewer can still look beyond a degree and see the candidate for what he really is. At that point it becomes an issue of whether the interviewer is good enough to weed out the elements in the given subset of candidates claiming to possess a CS degree or whatever it is the company needs. This also means that even more competent developers who unfortunately do not have a formal CS degree are going to be filtered out. Well, bad luck then -- that's the edge you lost. It doesn't say anything about you -- its just the luck of the draw.
  137. Filtering Resumes[ Go to top ]

    How do you reduce 5000 resumes from internet job boards to 50 for interviews without having a dedicated staff of experts reading them? It costs too much. Period. You need automation.

    It's really a common type of problem domain in CS. The challenge is finding a good hueristic. Google uses the number of extrenally linking containing a search term to a given site containing a search term as a hueristic to determine that sites relevance to the search term.

    So develop a hueristic and design a search engine around it. Or ask interviewers to rate candidates and use some sort of machine learning technique to train a filter.

    Given the cost of recruitment, the unmeasurable importance of hiring the right people, and overwhelming volume of resumes that get submitted for a given job (never mind that many employers don't care who applied, they just want to search the resume database for a person they want) I'm shocked this doesn't already exist...an expert system trained to your company's hiring prefences.
  138. If someone figured out a good automated way to filter resumes, they could easily put sites like hotjobs out of business. Actually I doubt that would happen, but it would give existing job sites serious competition.

    Having gone through stacks of resume in the past, I have to say it sucks to read through piles of resumes. It's one reason why head hunters make good money. A recruiter who is good at both technology and people skills are able to go through resumes fairly quickly. It's a special skill and art form, which I don't have. But having used recruiters in the past, I know that my best bet it to go with a recruiter. Blindly submitting resumes or blindly going through hundreds of resumes is not efficient or productive.

    peter
  139. Language graduates[ Go to top ]

    <blockquote-- someone with a degree in physics, math, engineering, CS, etc. is likely to have a better understanding of logic than someone with a degree in something else. Of course this doesn't always hold true -- and I can say this from personal experience too.
    Indeed.

    I am your worst nightmare - an architect without a degree. However I did alot of (human) languages at school and afterwards (as well as maths, physics, etc). IMO, designing good software is much closer to analysing and translating a foreign language than solving a mathematical problem. I recommend putting language graduates/experts high on the list of potential recruits.

    2p
    Kit
  140. Maybe only to a few[ Go to top ]

    <blockquote-- someone with a degree in physics, math, engineering, CS, etc. is likely to have a better understanding of logic than someone with a degree in something else. Of course this doesn't always hold true -- and I can say this from personal experience too.

    Indeed. I am your worst nightmare - an architect without a degree. However I did alot of (human) languages at school and afterwards (as well as maths, physics, etc). IMO, designing good software is much closer to analysing and translating a foreign language than solving a mathematical problem. I recommend putting language graduates/experts high on the list of potential recruits.2pKit
    I know quite a few people who do not have a science degree, but are rather extraordinary. I've worked a person who used to be a chef before he started programming. Now he is a lead architect and has recieved numerous excellence awards. He even has his name on several patents. So I think you're not alone :)

    peter
  141. that's funny[ Go to top ]

    wouldn't taking time to get to know the person be better?peter

    Absolutely.

    However...how does one get in the door? Depending upon the competancy of your HR group/recruiter, you might not get to know someone if they don't have the right degree etc.

    Unfortunately, someone's ability doesn't always translate well to a resume that recruiters understand. Perhaps this is why resume blogs are becoming popular, so that people can circumvent the system when their domain specific knowledge is too deep for the first screener to understand.
  142. Point taken[ Go to top ]

    wouldn't taking time to get to know the person be better?peter

    Absolutely.

    However...how does one get in the door? Depending upon the competancy of your HR group/recruiter, you might not get to know someone if they don't have the right degree etc. Unfortunately, someone's ability doesn't always translate well to a resume that recruiters understand. Perhaps this is why resume blogs are becoming popular, so that people can circumvent the system when their domain specific knowledge is too deep for the first screener to understand.

    You're absolutely right. I've been on both ends of that. In the past, I've gotten HR people in trouble for "filtering out" good candidates who didn't have degrees. One year I went through 10 interviews, as a result of the HR department's policy of "all those without a degree place in HOLD stack." I had to ask to see the "HOLD" stack to find a good candidate, so that kind of thing happens a lot. I've know some really bad recruiters and some really great recruiters in the past.

    the bad ones go by degree and certifications. the good ones spend an hour or two to get to know a candidate. they end up finding a candidate that match a customer's needs. Finding the "right" person for a position is extremely hard, and it's terrible to hire the wrong person. It can really damage the morale and chemistry of the team. When a team works well, it's usually because the person hiring tried to find a person who fits the team, rather than just a degree.

    I'm totally bias, but I think Open Source is a great source of solid talent. Not only can one look at the person's contributions, but they can see how well the person communicates. I find that solid communication skills is crucial for team morale and chemistry. Bad chemistry can really screw up a good team.

    peter
  143. Point taken[ Go to top ]

    When a team works well, it's usually because the person hiring tried to find a person who fits the team, rather than just a degree.
    As long as you are just trying to say that relying simply on the degree alone isn't always the right approach, I'd agree with you. Look how many qualifiers I needed to put in that sentence because empirical evidence doesn't seem to bear your slightly extremist view that a formal CS degree isn't really relevant.
    Lets take a practical example. If I go to google.com/jobs and try to search for any position in the Engineering or IT department the one requirement that stays common is that the candidate MUST have a BS/MS/PhD degree (Math, CS or Physics). That is, you can't even get your foot on the door unless you possess certain minimum educational background IRRESPECTIVE of whether such background has or has not contributed to your overall development as a software engineer. Its in the nature of work they do. They constantly deal with massively scalable, highly distributed, fault tolerant, robust systems and repeatedly push the edges of any technology they happen to work with (think GMail). They need people who they believe would have gone through the rigors of a certain curriculum -- once again IRRESPECTIVE of whether such exposure has really separated candidate from other non-CS-degree majors.

    The point where they try to flesh out areas that I copped out with that IRRESPECTIVE remark is at the interview stage.

    So you need some basic/fundamental skillset to even get in.

    Are they wrong? Maybe, maybe not -- the stuff coming out of Google labs is for all to see.

    However there are certainly going to be cases when they look at a resume and find a candidate who has implemented a Rules engine and contributed majorly to all kinds of open source software development and decides to give him/her a chance. That's definitely going to be an oddball case to be sure.

    This methodology has worked for them.

    Would you disagree?
  144. Point taken[ Go to top ]

    When a team works well, it's usually because the person hiring tried to find a person who fits the team, rather than just a degree.

    As long as you are just trying to say that relying simply on the degree alone isn't always the right approach, I'd agree with you. Look how many qualifiers I needed to put in that sentence because empirical evidence doesn't seem to bear your slightly extremist view that a formal CS degree isn't really relevant.

    Lets take a practical example. If I go to google.com/jobs and try to search for any position in the Engineering or IT department the one requirement that stays common is that the candidate MUST have a BS/MS/PhD degree (Math, CS or Physics). That is, you can't even get your foot on the door unless you possess certain minimum educational background IRRESPECTIVE of whether such background has or has not contributed to your overall development as a software engineer. Its in the nature of work they do. They constantly deal with massively scalable, highly distributed, fault tolerant, robust systems and repeatedly push the edges of any technology they happen to work with (think GMail). They need people who they believe would have gone through the rigors of a certain curriculum -- once again IRRESPECTIVE of whether such exposure has really separated candidate from other non-CS-degree majors.The point where they try to flesh out areas that I copped out with that IRRESPECTIVE remark is at the interview stage.

    So you need some basic/fundamental skillset to even get in.

    Are they wrong? Maybe, maybe not -- the stuff coming out of Google labs is for all to see.However there are certainly going to be cases when they look at a resume and find a candidate who has implemented a Rules engine and contributed majorly to all kinds of open source software development and decides to give him/her a chance. That's definitely going to be an oddball case to be sure.

    This methodology has worked for them.

    Would you disagree?

    My views are a bit extreme, but they are from first hand experience. I'm sure others have different expereince.

    I would only consider CS degree important for an entry level position. For a mid level position, a CS degree is a nice "bonus" if someone has it, but first is experience. For a senior position, passion and experience are going to be the only things I look at. At that level, it's a waste of time to ask a senior level developer basic questions. I would much rather ask questions about specific challenges they've encountered. For example, I'd ask someone what type of scalability issues they come across and how they went about solving the problem. If the individual can explain clearly the problem and their approach to solving it, chances are the person might be a good fit.

    Once a person has pass the technical part, it's still crucial to determine if the personality will fit the team. Depending on the person's answers, I might ask questions like "how would you test race conditions in a distributed application?"

    The key for me, is asking specific questions based the work experience the candidate displays. If a person says they worked on real-time messaging, they should have encountered certain challenges. Like wise, if a person was responsible for designing application API, they should be able to answer questions about trade-offs the individual made and the result of those choices.

    that's my bias, but I find it works much better for me than relying primarily on degrees and certs.

    peter
  145. Point taken[ Go to top ]

    I'm sure others have different expereince.I would only consider CS degree important for an entry level position. For a mid level position, a CS degree is a nice "bonus" if someone has it, but first is experience. For a senior position, passion and experience are going to be the only things I look at. At that level, it's a waste of time to ask a senior level developer basic questions. I would much rather ask questions about specific challenges they've encountered.

    I think this is more realistic and practical. Moreover most of the people I work with don't have a CS degree. So the requirement here is a engg. degree. It is assumed that a person with any engg. degree is generally smarter than a person with a non-engg. degree but somehow this does not seem to apply to the programming field. It is true in other fields.
  146. ...Not only can one look at the person's contributions, but they can see how well the person communicates. I find that solid communication skills is crucial for team morale and chemistry. Bad chemistry can really screw up a good team.

    Oh yes! Do schools stress the team nature of modern software development practices? I'd take a reasonably skilled software developer who works well with others, who can divest their ego from their work (ala Tom DeMarco), fess up to their mistakes/shortcomings and effectively impart knowledge than the superstar who creates a din of clacks and blurs as their fingers magically glide across the keyboard.
  147. I am able to implement my own rule engine using RETE algorithm.

    An aside: Why would you want to do that? Unless you are a tool/middleware vendor, you should instead pick an existing rule engine, learn to use it, and spend your time expressing the solution to a customer's problem using that. The rule engine is a "part" you put into your solution. Someone brought up a driver/manufacturer analogy; car manufacturers buy parts they assemble - software manufacturers should do the same.

    Customer focus, not technology focus, is the order of the day. A software engineer is there to solve a problem, not create new ones by reinventing the wheel.

    In those situations, having someone with a different major (and CS knowledge either self-taught or as supplementary education) is better because they may bring domain knowledge about a field with potential customers, and they have shown an ability to learn. Which you will continue to do after you leave academia. (The latter is important - I met too many inside academia sitting in ivory towers creating technology for its own sake.)
  148. Why would you want to do that? Unless you are a tool/middleware vendor
    I think you just answered your own question. Not everyone here is cranking out basic business apps.

    To top it off - his time is his time. Some people like to garden as a hobby. Some people like to play/watch sports. Some people like to create rules engines.
  149. I am able to implement my own rule engine using RETE algorithm.

    An aside: Why would you want to do that? Unless you are a tool/middleware vendor, you should instead pick an existing rule engine, learn to use it, and spend your time expressing the solution to a customer's problem using that. The rule engine is a "part" you put into your solution.

    That's a valid and excellent question. As I mentioned in a previous post, I've been working on a distributed reasoning algorithm, which extends RETE. There are some excellent rule engines in the market already, but none of them currently support distributed reasoning. My interest is pushing the "state of art" in RETE rule engines, so the best way to do that is to get down to the nuts and bolts.

    I've been using and researching RETE for 5 years now, so there were certain optimization techniques which I stumbled across that do not exist in current offerings. I you're really curious and want to learn more, you can find my blog using google or technorati.

    If I didn't spend the laste five years exploring RETE, you're right. Writing my own engine without significant experience would be a waste of time. Luckily for me, I do have the experience and was able to help Drools.

    peter lin
  150. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.I better go apply now.peter


    Imagine a brain surgeon or a 747 pilot telling you same things ...

    We will think that these people are an idiots ...

    Why not in IT??? Are we less professional ???
  151. that's funny[ Go to top ]

    Imagine a brain surgeon or a 747 pilot telling you same things ...We will think that these people are an idiots ...Why not in IT??? Are we less professional ???
    Different domains require different skills, training, techniques, etc. So comparing brain surgery with piloting and either one of those with programming is like comparing apples with oranges. Yes they are both fruit and are round. But they are different. You will want to peel the orange before you eat it.

    Is it important that programmers know what they are doing? Sure. Is it imperative that they know how to do it right before they did it for real for the first time? No. Is there any standard way of knowing that they know how the first time and for all types of programming? No. Is there some types of programming that should be regulated? Sure - where it involves human life.
  152. that's funny[ Go to top ]

    Is there some types of programming that should be regulated? Sure - where it involves human life.

    I think you got the point. 90% of application programming is done in VB, C# and Java by unskilled programmers. However, high-performance middleware and application software that is mission critical to make some tools work (including surgery rooms and jet planes) is not written in Java or VB, though the console that allows its configuration may be. Here you will find only C, ADA, Pascal or the like.

    What the author is complaining about is that using Java at school may produce an engineer that is ready for joining the ranks of application programmers, but not for writing mission critical software. It may be true that you may use a mediocre programmer to write a business application, but this is not true of firmware or operating systems. If you are hiring for the latter field you must make an extra effort to understand if the guy is ready for the extra complexity once you teach him or her a more complicated language.
  153. that's funny[ Go to top ]

    However, high-performance middleware and application software that is mission critical to make some tools work (including surgery rooms and jet planes) is not written in Java or VB, though the console that allows its configuration may be. Here you will find only C, ADA, Pascal or the like.

    You may want to take a look at what Boeing are doing with Java. They are now using Java in preference to C++ and Ada for exactly this sort of software.
  154. that's funny[ Go to top ]

    I think you got the point. 90% of application programming is done in VB, C# and Java by unskilled programmers
    It could/can be done that way. Doesn't mean they are "unskilled programmers". I'm sure a fair number are, though.
    However, high-performance middleware and application software that is mission critical to make some tools work (including surgery rooms and jet planes) is not written in Java or VB
    Other than VB Classic, there are mission critical apps in Java (and ...). And more are showing up. You did read about the NASA Mars Rover?

    Mission critical != Life Critical.
    Not knowing how to program firmware or os != mediocre.

    I have meet plenty of engineers who were great at firmware or os but stunk at Business Apps. Why? Mainly because of focus. Most business apps focus mainly on supporting other parts of the business not squeezing nano seconds out of a sort routine.
  155. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.I better go apply now.peter
    Imagine a brain surgeon or a 747 pilot telling you same things ...We will think that these people are an idiots ...Why not in IT??? Are we less professional ???

    No disrespect to any profession but you don't need a degree to fly 747, all you need is a chance. I would say the same thing about brain surgeon, there is not much difference between a butcher and a brain surgeon, it's all in your hand(again no disrespect to butchers as well as doctors). Of course there are some socail factors too when it comes to pilots and doctors, these professions demands serious dedication; not becuase dcotors and pilots are hollier than though; but because they deal humans, and humans are much more precious than the software products we write every day.

    BTW in my personal opinion writing software requires more creativity and brain power than the professions you mentioned above. If one can be a good software engineer with out a degree, I would say one can be a good brain surgeon and pilot with out a degree too. BTW in some third world countries rural areas where no doctors available, surgeory are done by "Medicine men" who never been to any medical schools.
  156. that's funny[ Go to top ]

    I've never taken a college computer science course in my life and I don't plan to either. Yet, some how I can still write a compiler for XML Schema, JavaCC grammar for CLIPS and recursive functions.

    Don't get me wrong. School is a place of learning, but one doesn't need school to learn these things. Oh wait, I'm wrong and Joel's right. For someone to be a "good" programmer, they have to go through the college weeding process.

    I better go apply now.

    peter

    I'd take someone who taught himself programming and programs in his spare time over a CS grad any day. Learning programming is like learning a second language - it's best done young. A good programmer should have started programming, of his own volition, as soon as he had enough computer access to start writing programs (and can read and do basic math). I think maybe 10 is the right time to start. That's was before the university.
  157. The Perils of Java Schools[ Go to top ]

    How about a professional programmer license? Follow the example set by the engineering community:

    PIT: Programmer in Training
    PP: Professional Programmer

    To move from one level to the next you need to pass a "real" certification exam and when you get your license, you are held responsible for your code, just like a CE was designs a bridge.

    Takers?
  158. The Perils of Java Schools[ Go to top ]

    How about a professional programmer license? Follow the example set by the engineering community:PIT: Programmer in TrainingPP: Professional ProgrammerTo move from one level to the next you need to pass a "real" certification exam and when you get your license, you are held responsible for your code, just like a CE was designs a bridge. Takers?
    The problem with this is who gets to decide what is required. As is already shown in this thread, different problem domains require different skill sets. There is some cross-over and some can cross over. But will a good game programmer be a good business app developer? Do they require the same skills? Are they both developers?

    Another twist - there are plenty of developers with certs, but many of them are good at passing tests. Not so good at development.

    So no matter what, it still comes down to being able to evaluate the individual - their knowledge AND abilities.
  159. The Perils of Java Schools[ Go to top ]

    It follows the same logic as using the Bar exam to test would be lawyers. The have to prove a basic level of competency in all areas of the law. Passing the Bar or becoming a PE is not trivial like getting an MS certification.

    If this not sufficient, then add a professional internship as well, like an EIT. Then besides passing a difficult test, you also have a reasonable level of assurance the programmer was also given real world training in addition to their degree and license. You can't totally eliminate all bad people, but you can hold them accountable, to a degree, for their actions.

    Would you feel comfortable working in a skyscraper designed by someone with our (IT) level of certification? This will become an issue as more and more embedded systems take control of our daily lives and safety.
  160. The Perils of Java Schools[ Go to top ]

    Would you feel comfortable working in a skyscraper designed by someone with our (IT) level of certification? This will become an issue as more and more embedded systems take control of our daily lives and safety.
    I want someone who knows what they are doing and is able to do it and be able see outside the box. Certifications and internships don't prove this or necessarily provide a way for this to happen.

    Would you want someone with 20 years COBOL experience telling you how to design Java apps? There are people who have 6 months experience that I would trust more than those with degrees and certs and 30 years experience.

    I know of at least one person who had no formal training/certs yet was an engineer AND he came up with and idea that made him lots of money.
  161. The Perils of Java Schools[ Go to top ]

    Cool, I think I'll go pick up a copy of Gray's Anatomy and start practicing medicine in your area ;-)

    You are missing the point, I think my solution offered a bit of everything to lower the level of risk: education, testing and practical experience. My solution does not try to show who is a business layer or a nuts and bolts programmer. It is just a suggestion to provide a means of judging basic competency in our choosen field.

    BTW some of the best out of the box thinkers I have worked with are creative types who weren't schooled in hard core logic and were excellent software engineers to boot.

    Having an open mind, please describe to me your solution to the problem.
  162. The Perils of Java Schools[ Go to top ]

    Cool, I think I'll go pick up a copy of Gray's Anatomy and start practicing medicine in your area ;-)

    Good thing I never go to the doctor. Mostly cause I can't get in to see one. "Yes, I know you've had a heart attack. But our earliest appointment is next month."
    Having an open mind, please describe to me your solution to the problem.

    I've not described one because I don't think there is one. I wish I did. I don't like it when people put down my ideas with no solutions.

    We have to evaluate talent individually. It is a pain, but it is the best we have.
  163. The Perils of Java Schools[ Go to top ]

    Mark,

    Maybe we hit on an idea, teach yourself to be a doctor and no problems trying to see one, "Physician, heal thyself" could have a whole new meaning.

    I appreciate your candor and I absolutely agree that everyone needs to be evaluated on an individual basis.

    Happy New Year!

    Keith
  164. The Perils of Java Schools[ Go to top ]

    Maybe we hit on an idea, teach yourself to be a doctor and no problems trying to see one, "Physician, heal thyself" could have a whole new meaning.
    Sadly, some will think that hitting themselves on the forehead and saying "Be healed!" would work just as well. :)

    Happy New Year to you too!
  165. The Perils of Java Schools[ Go to top ]

    Cool, I think I'll go pick up a copy of Gray's Anatomy and start practicing medicine in your area ;-)You are missing the point, I think my solution offered a bit of everything to lower the level of risk: education, testing and practical experience. My solution does not try to show who is a business layer or a nuts and bolts programmer. It is just a suggestion to provide a means of judging basic competency in our choosen field.BTW some of the best out of the box thinkers I have worked with are creative types who weren't schooled in hard core logic and were excellent software engineers to boot.Having an open mind, please describe to me your solution to the problem.

    Firstly, schools should already have this separation.

    My school offered the following:

    Computer Science
    Computer Engineering
    Management Information Systems

    CS and CE were offered by the Engineering school, MIS was offered by the business school.

    In MIS, you learned things like Access, and C++ programming.

    In CS you learned things like Big O notation, algorithm design, data structures, databases, discrete math, Networked programming, Assemmbler, etc.

    In CE you learned most of the things in CS (in fact most students went for CE simply because the electives for CS fell into CE), but you also learned things like Software Engineering, OO Design, Digital Logic, VLSI, etc.

    We were taught Turbo Pascal in the early 90s to start, and every class thereafter you had to learn the language you were to use in the first 2 weeks.

    It wasn't easy. But the differences between the classes were highly evident. I struggled in many of the classes, but learned a lot...I would have cruised through MIS however.

    If the school isn't putting out CS or CE majors under those banners, then don't recruit from those schools. If you want a programmer, hire from DeVry, U of Phoenix, or even an MIS program somewhere. If you want a creative type who can design a system, you likely want to look for someone coming from a hard engineering school with a hard science background.

    In otherwords, instead of Duke or Yale, maybe you would be better suited looking at RPI, Mellon, Case, Lehigh, MIT and the like.

    That said, my brother is a Civil Engineer and has an exam to take to get licenced. It would be great if Computer Engineering had a standard language to be licenced in. Civil Engineering, is Civil Engineering. There is no language to it.

    Unfortunately, we don't have that, so it is up to the creators of various software packages to make their certifications hold weight in the marketplace. IMHO, Microsoft, Sun, Oracle, whoever has a certification has it in their best interest to make that exam difficult and make it worthwhile for practicioners to seek out.

    The issue is that, it doesn't hold weight. It doesn't hold weight because not enough people seek them out. Folks with 5 years of Java experience will likely win out over someone with a year who has passed the SCJP, SCJWP and SCJWS exams. Until the market is convinced of the value of these exams by hiring people with those qualifications over someone who does not have them (same goes for a college degree...) then you will always have difficulty finding an employee who knows what you want them to know.
  166. The Perils of Java Schools[ Go to top ]

    Let me start by prefacing:

    I've got a BFA in photography. I architect enterprise-scale applications. Now, I did take some CS classes in college during the time when I was a Physics major, but I was very turned off by starting with Scheme, etc. and the general theoretical, rather than practical, nature of the program. I was looking for practical solutions for analyzing data, not trying to write compilers or my own language.
    Firstly, schools should already have this separation.

    My school offered the following:
    Computer Science
    Computer Engineering
    Management Information Systems

    CS and CE were offered by the Engineering school, MIS was offered by the business school.

    I've seen schools doing this more... In fact, at RIT in Rochester, NY there's actually a Software Engineering program that includes internships and real team-based projects, so they're getting more of a feeling for how real-world software development is done. I think this is a positive move, because there's really a split in most CS departments between the theoretical, which is more of an extension of mathematics, and the practical side that uses computers to do something useful.
    If you want a programmer, hire from DeVry, U of Phoenix, or even an MIS program somewhere. If you want a creative type who can design a system, you likely want to look for someone coming from a hard engineering school with a hard science background.In otherwords, instead of Duke or Yale, maybe you would be better suited looking at RPI, Mellon, Case, Lehigh, MIT and the like.

    Ok, now this is crap. If I want a creative type, I'd look for someone with a background in art or music who loves programming enough to have learned it themselves (hmmm... someone like me :-) ). Hard sciences aren't that creative. They're highly constrained by the limits of the real world, much more than programming where you're largely limited by your understanding of the problem and your ability to imagine and visualize a solution.

    My dad's a PhD Chemistry Professor and between that and my experience in Physics departments across a few universities, I can tell you that degrees aren't something to be impressed by. I've met and worked with many PhDs, many from very good schools, and there's plenty to whom I had to explain basic concepts (see, you can't sound like you're bragging and end a sentence with a preposition).

    What a degree tells you, and especially a post-grad degree, is that someone had a minimal level of intelligence to understand some concepts (and you'd be surprised how low this minimal level often is) and they had the perserverance and organizational skills to keep going through a long process. That's not a bad thing, but don't mistake it for something it's not. It's not a certification that this person is brilliant. A PhD in a hard science doesn't tell you if this person is the next Einstein and is fundamentally moving the field forward, or if they understood previous works well enough to incrementally build on top of them and try to get a teaching gig at a small university somewhere.

    A PhD physics prof my wife was just IM'ing with gave me this analogy:

    "A degree in music theory gives you a lot of tools in your toolbox, but doesn't make you a virtuoso."

    The same goes for CS degrees. There are various roles in a software project. Some are more like engineering: implement this spec using the standard best practices laid out for the project. Some are more like architecture (the kind with buildings) or even art: design and evolve a flexible and extensible solution to a vaguely understood problem with moving requirements and various stakeholders. Likewise there are varying skillsets needed in a software project. Don't forget maintenance engineers who take over a project once it's in the wild and fix our bugs. It's a job that would lead me to the roof for a long drop, but it's vital.

    And let's not forget that there's lots of different types of projects. I'm not implementing javac or the JVM. I'm not even doing some of the cool stuff that people in here like Mike Spille write about. What I do is challenging, but in a big-picture way more than a bit-fiddling way.
    That said, my brother is a Civil Engineer and has an exam to take to get licenced. It would be great if Computer Engineering had a standard language to be licenced in. Civil Engineering, is Civil Engineering.

    Umm... I know a guy who's a CE. He's bored off his ass. From what I can tell it's a lot about using the software package to drag the standard bridge pieces onto the diagram. Maybe that's an oversimplification, but he's not too excited about it.
    Until the market is convinced of the value of these exams by hiring people with those qualifications over someone who does not have them (same goes for a college degree...) then you will always have difficulty finding an employee who knows what you want them to know.

    Umm... I'd say take a little longer interviewing people, and base more hires off of recommendations from people you respect. I'm not particularly concerned with people knowing certain things (beyond a certain base level), but more with their ability to grasp new concepts. You most certainly can start to understand a person's ability to think and understand concepts in an interview by starting to ask them to solve problems that are independent of programming.
  167. The Perils of Java Schools[ Go to top ]

    My dad's a PhD Chemistry Professor and between that and my experience in Physics departments across a few universities, I can tell you that degrees aren't something to be impressed by.

    Heh, that's not to say my dad's not a bright and impressive guy, I meant more in terms of growing up at the Chemistry building and meeting a LOT of post-doc students and profs.
  168. The Perils of Java Schools[ Go to top ]

    Let me start by prefacing:I've got a BFA in photography. I architect enterprise-scale applications. Now, I did take some CS classes in college during the time when I was a Physics major, but I was very turned off by starting with Scheme, etc. and the general theoretical, rather than practical, nature of the program. I was looking for practical solutions for analyzing data, not trying to write compilers or my own language.

    This is precicely the reason that when I went back to school for a graduate degree that I did not go into a Computer Science or Enginneering degree, but instead found a program in MIS that was more focused on being a tech MBA than a programming class.
    Firstly, schools should already have this separation.My school offered the following:Computer ScienceComputer EngineeringManagement Information SystemsCS and CE were offered by the Engineering school, MIS was offered by the business school.
    I've seen schools doing this more... In fact, at RIT in Rochester, NY there's actually a Software Engineering program that includes internships and real team-based projects, so they're getting more of a feeling for how real-world software development is done. I think this is a positive move, because there's really a split in most CS departments between the theoretical, which is more of an extension of mathematics, and the practical side that uses computers to do something useful.

    I should have included RIT actually.
    If you want a programmer, hire from DeVry, U of Phoenix, or even an MIS program somewhere. If you want a creative type who can design a system, you likely want to look for someone coming from a hard engineering school with a hard science background.In otherwords, instead of Duke or Yale, maybe you would be better suited looking at RPI, Mellon, Case, Lehigh, MIT and the like.
    Ok, now this is crap. If I want a creative type, I'd look for someone with a background in art or music who loves programming enough to have learned it themselves (hmmm... someone like me :-) ).

    I disagree. The premise was on hiring someone out of school who has the basics to do this sort of thing. I am talking strictly about classes they would take.

    THe classwork of an MIS degree means you'll have to do less training after you hire on things like language.

    Now the reason why people like Bill Gates complain about the schools sending people into the workforce unprepared is because the CS and CE degrees are prepping people to develop things from scratch rather than use the toolsets out there.

    From my perspective, when you hire out of school you have two things to look at. Their grades/classwork and Their internships. After that you have personality and the interview.

    Once you've got 5 years under your belt, the education matters little compared to what you did on the job.

    I agree with the remaining piece that you wrote...I did a poor job of explaining my position. This is simply from the perspective of hiring straight out of college.
    That said, my brother is a Civil Engineer and has an exam to take to get licenced. It would be great if Computer Engineering had a standard language to be licenced in. Civil Engineering, is Civil Engineering.
    Umm... I know a guy who's a CE. He's bored off his ass. From what I can tell it's a lot about using the software package to drag the standard bridge pieces onto the diagram. Maybe that's an oversimplification, but he's not too excited about it.

    The point was more about the licence is required for him to sign off on designs. Essentially with the certification he can start his own practice and get sued if the building fails. We don't have anything close to that since Software Engineering isn't as mature as bridge building. Unless we hit the signularity, in about 50 years, software engineering will be less about art and more like civil engineering.
    Until the market is convinced of the value of these exams by hiring people with those qualifications over someone who does not have them (same goes for a college degree...) then you will always have difficulty finding an employee who knows what you want them to know.
    Umm... I'd say take a little longer interviewing people, and base more hires off of recommendations from people you respect. I'm not particularly concerned with people knowing certain things (beyond a certain base level), but more with their ability to grasp new concepts. You most certainly can start to understand a person's ability to think and understand concepts in an interview by starting to ask them to solve problems that are independent of programming.

    Which you can only get out of an interview. However, if I see a guy who's picked up Java in the past 2 years after programming in COBOL for the last 10...there's a good chance they'd hit that requirement...I won't be sure until the interview.
  169. Educating versus training[ Go to top ]

    I've noticed that employers may say they want 'education' but what they are really after is training.

    "Do you have <insert # years> years experience in <insert technology here>?"

    Repeat ten fold.
  170. Along the same lines, what seems to be confused here is the difference between "computer science" and "development". The latter falls on the "skill/trade" side of things, the former is more a "what's under the hood" training.

    It's like the difference between a driver and a mechanic: sure, they both are concerned with cars, but the driver only needs to know *how* to work the car, not *why* the car works as it does. A developer is fine knowing only Java and how that works; a computer scientist also knows *why* what the developer does with Java works.

    They are two very different kinds of education, and arguably a university should be educating computer scientists and development should be taught more as a "trade" as Joel indicates.
  171. The Perils of Java Schools[ Go to top ]

    I guess they would deny my license for the English language based on my last post ;-)
  172. pointer arithmetic == Code-Fu[ Go to top ]

    I think it's important to have a solid foundation in the theory of computer science, but I fail to see how pointer arithmetic is the primary benchmark of a good developer. For those who are dyslexic with numbers (like myself), having to do pointers is painful. I readily admit I'm a bad programmer (by joel's description), but with time I'll become a good programmer.

    On second thought, the whole java community should pack up and quit. Joel is right and we all suck cuz Java is for whimps.

    peter
  173. pointer arithmetic == Code-Fu == Magic[ Go to top ]

    but with time I'll become a good programmer.
    And if you wish really hard ... . :)
  174. The Story of Mel[ Go to top ]

    I think Joel should go read The Story of Mel and keep reminiscing the good 'o days, and leave us java weenies alone.

    But seriously, of his complaints, pointers we can certainly do without; and there are plenty of opportunies to have fun with recursions in an algorithm class.

    And remember, Real Programmers write in FORTRAN.
  175. The Story of Mel[ Go to top ]

    Good programer delivers product on time with good enought design.
  176. Learning beyond the school.[ Go to top ]

    Every one of us has a choice of learning CS in University for 4 years, or 2 years in College or just spent 6 months learning Java and learn the rest during employment.

    I think learning and getting paid is the best option:)
  177. Learning beyond the school.[ Go to top ]

    My point exactly. But if you want to bear responsibility for big systems it's best you also know how to learn from existing expirience (which is way bigger than 6 months of learning). Some ideas are just much easier to come by if you have broader education...
  178. Learning beyond the school.[ Go to top ]

    You must be smart about how much time to spend on education.

    We are lucky to have diverse CS educational system for people with different needs and brains.
  179. Learning beyond the school.[ Go to top ]

    You must be smart about how much time to spend on education.We are lucky to have diverse CS educational system for people with different needs and brains.

    I agree but lumping it all under one umbrella is confusing, especially to people on the outside. If we are going to have two different types of CS programs we should make it explicit.
  180. Learning beyond the school.[ Go to top ]

    CS is fast moving profession that education can barely catch up with.

    It is extremely difficult to put standards on CS programs and at the same time make it easy for people on the outside to choose.
  181. Learning beyond the school.[ Go to top ]

    CS is fast moving profession that education can barely catch up with.It is extremely difficult to put standards on CS programs and at the same time make it easy for people on the outside to choose.

    There are very few scientists in our midst, I think you meant that IT is moving fast. However in my mind there's been very few fundamental changes in IT and most of them in this way or another came from CS (except maybe methodologies, which are still suprisingly mostly ignored by the CS community).

    And any person with a good background in CS can cope with these changes, since they can quickly identify a similar approach used before, and relate to new problems using old expirience. Eventhough CS is also slowly advancing, most of its nowaday developments are in more exotic areas like bioinformatics or massive parallelization. The custom software development core fundamentals stay pretty much the same.
  182. Learning beyond the school.[ Go to top ]

    Actually I believe it is not only IT but the fundamentals of CS are rapidly changing.

    The size and scale of enterprise applications are getting bigger so does the fundamentals to support them will and is changing (a person who learnt to write elegant solutions to linked list problems or recursive ADT in school will be lost in jungle of software frameworks, methodologies, designs and wide array of languages and libraries).
  183. Learning beyond the school.[ Go to top ]

    Every one of us has a choice of learning CS in University for 4 years, or 2 years in College or just spent 6 months learning Java and learn the rest during employment.I think learning and getting paid is the best option:)

    When I was in school I would have agreed. It took about two months of professional experience to realize how all that theory was beneficial, and working with someone who learned Java on-the-job with no CS background to do a 360.

    Computer science is to software engineering as chemistry is to chemical engineering. Or at least that's how it should be.
  184. The Perils of Java Schools[ Go to top ]

    Programming is like anything else. You either have the knack for it or you don't. It can't be taught in school. Whether Duke or Penn teaches Java or ASM really makes no difference in that regard.

    So have the lower level languages become graduate courses or have they disappeared altogether?
  185. Programming is like anything else. You either have the knack for it or you don't.
    Maybe after millions of years of trying to teach those who don't have the knack, it will just suddenly appear within their decendants. So I think we should keep trying.

    Honestly, I think the trying to teach people to think is pretty much futile. Either they can, or they can't. You can hone the skill if they got it. That is about all.
  186. Honestly, I think the trying to teach people to think is pretty much futile. Either they can, or they can't. You can hone the skill if they got it. That is about all.

    Well maybe universities should at least separate the two :) And teach those who have any talent to be able to apply it...
  187. The Perils of Java Schools[ Go to top ]

    Programming is like anything else. You either have the knack for it or you don't. It can't be taught in school. Whether Duke or Penn teaches Java or ASM really makes no difference in that regard. So have the lower level languages become graduate courses or have they disappeared altogether?

    Most CS courses are not about specific languages or they shoudln't be. Things like advanced Java or intermediate C++ are training courses. The language is just a tool for projects. The teacher may require a certain language for their convienience e.g. one of my professors had an automated code compiler/tester for C++ so we needed to be compliant with that compiler or fail the project. I would imagine in most graduate programs you can use pretty much whatever is appropriate for the project. If the professor doesn't know the language he/she may let you use it at your own risk.
  188. Scheme is hard ... really hard[ Go to top ]

    Before I cut on Scheme, I would like to say that I love education. I am currently working on a PhD in Computer Science and have taught at 3 universities.

    While Scheme is a small language, it is also really really hard to do anything in it. I hate Scheme. Java is much better.
  189. Scheme is hard ... really hard[ Go to top ]

    That's kinda is the point -- to learn to program functionally is very hard and not very practical, but then when you return to Java, you get some new ways of thinking...
  190. That's kinda is the point -- to learn to program functionally is very hard and not very practical, but then when you return to Java, you get some new ways of thinking...

    scheme isn't hard. It just sucks

    (((caddrarddr(caddr(cadddddr((3,(3,3,3)4,4),4))))

    Screw that.
  191. Scheme is hard ... really hard[ Go to top ]

    That's kinda is the point -- to learn to program functionally is very hard and not very practical, but then when you return to Java, you get some new ways of thinking...
    scheme isn't hard. It just sucks(((caddrarddr(caddr(cadddddr((3,(3,3,3)4,4),4))))Screw that.

    +1

    ( I'm getting dizzy looking at this :-D )
  192. I don't understand why so many people give Joel Spolsky so much credit. This is the same guy who tells us that exceptions should not be used. Use return codes instead.

    Anyway the entire premise of this article is false. Demonstrated in this quote:
    I used to be able to tell the smart kids because they could rip through a recursive algorithm in seconds, or implement linked-list manipulation functions using pointers as fast as they could write on the whiteboard. But with a JavaSchool Grad, I can't tell if they're struggling with these problems because they are undereducated or if they're struggling with these problems because they don't actually have that special part of the brain that they're going to need to do great programming work.

    I'm sorry I didn't realize that teaching people Java makes it impossible to teach them about recursive algorithms or linked-lists. Maybe it's because [b]it doesn't[/b].

    If the interviewee doesn't know about recursion, it's because they didn't learn recursion. It has nothing to do with whether they were taught Java.

    And I don't know why in 2005 we still talk about 'Java not having pointers'. A reference is conceptually the same as a pointer. In fact the JLS defines a reference as having a pointer as it's value. Anyone with a real understanding of Java should know this be completely comfortable with the concept of pointers. A NullPointerException can bring down a system as effectively as a segmentation fault. The things that you can do with pointers in C that you cannot do in Java are things you should not be doing anyway, at least that's what I was taught in my CS program.

    There is a problem though. The issue is that CS is becoming more and more of a programmer training program than a computer science cirriculum at a large number of schools. I think they need to seriously break apart a program for software engineering. Not every developer needs to be a CS grad. Some just need to be trained in prgramming and basic CS concepts.
  193. Agree[ Go to top ]

    I agree with you. His post sucks. Maybe Joel wanted to make his blog more popular by writing another provocative post.

    It is very easy to talk about dumb programmers who don't know what pointer or exception is and about "real" programmers 1§who know like Joel, but I can't imagine how such guy whithout this knowledge about pointers and exceptions
    could write anything working. It's not about knowledge it is about semantics.
  194. I don't think Java is the problem[ Go to top ]

    Its not that they are teaching Java. If the CS programs aren't weeding out the mediocre students, then they aren't tackling hard enough problems that Java works in:
    - threading. A good place to get their head to explode.
    - garbage collection, weak references, object pooling, etc
    - remote programming
    - recursion (this is still a valid way to solve problems in Java)
    - Low level bytecode, JVM implementation. This could be a good replacement for the 2 assembly courses I had.

    If the JavaSchools are cranking out people who have a lot experience coding simple problems in Java, then they are just crappy programs, but has nothing to do with Java itself. My first and second year of my CS programming back in the 80s was very balanced between CS, math, history, and physics. Recursion and pointers certainly weeded people out in the earlier years (much like recursion and threading might do today). But once people hit the theory classes like analysis of algorithms or operation systems that's when plenty of heads would explode. I don't see how the practical stuff being taught in Java would dull that.
  195. I don't think Java is the problem[ Go to top ]

    - remote programming
    And vcr programming too. If you can't get your vcr to work ... .

    Not sure what remotes and vcrs have to do with Java though.
  196. I don't think Java is the problem[ Go to top ]

    Its not that they are teaching Java. If the CS programs aren't weeding out the mediocre students, then they aren't tackling hard enough problems that Java works in:- threading. A good place to get their head to explode.- garbage collection, weak references, object pooling, etc - remote programming- recursion (this is still a valid way to solve problems in Java)- Low level bytecode, JVM implementation. This could be a good replacement for the 2 assembly courses I had.If the JavaSchools are cranking out people who have a lot experience coding simple problems in Java, then they are just crappy programs, but has nothing to do with Java itself. My first and second year of my CS programming back in the 80s was very balanced between CS, math, history, and physics. Recursion and pointers certainly weeded people out in the earlier years (much like recursion and threading might do today). But once people hit the theory classes like analysis of algorithms or operation systems that's when plenty of heads would explode. I don't see how the practical stuff being taught in Java would dull that.

    Good point. I'd add to your list class-loaders, protection-domains, domain combiners etc.
  197. The purpose of a bachelor's degree is not, in general, to specialize in any one language or field. The purpose is to somehow get a bit of everything in.

    You don't truely begin to specialize until you get into masters/PhD/workplace (whichever you choose).

    So a student leaving a university knowing nothing about Java/C# (I group them because they are basically the same *type* of language) is just as much a crime as a student coming out knowing nothing about C/C++ is just as much a crime as a student coming out knowing nothing about functional languages (just a little bit! please!).

    Personally, I believe universities should teach courses using the best tool for the job. Teach software engineering in Java, operating systems & graphics in C/C++, artificial intelligence in lisp.

    This isn't too much to ask, I've already done it, and went through just fine.
  198. Dawn of the dumb[ Go to top ]

    Dumb Java programmers were hired as developers when dot coms were hiring anyone. Before the bubble, talentless CS grads didn't get to develop products, they had to settle for other IT jobs. Before the bubble most developers I worked with were scary smart but those days are gone. Old dinosaurs self selected because they had a knack for it. Now programming is a good paying job for people whose "English isn't good enough to get business jobs".

    Many professions in the past have begun elite then became common. Java and it's endless frameworks allows talentless programmers to producing working code. Sadly, most companies would rather have these guys than pay more for an un-famous Bill Joy.
  199. Dawn of the dumb[ Go to top ]

    Sadly, most companies would rather have these guys than pay more for an un-famous Bill Joy.

    Not all companies need someone with the type of experience Bill Joy brings to the table, so I'm not sure this is a reasonable statement. Also, do you really believe a person with Mr. Joy's experience would ever be interested in taking up a typical development role?
  200. Why Google Scales Well[ Go to top ]

    He says that Google is massively scalable because it's based on functional=language ideas, where functions have no
    side-effects.

    Actually, the real reason Google scales well is because a search engine is a read-only application. Not to mention the lack of transactions and therefore any concept of isolation whatsoever.

    Guglielmo

    Enjoy the Fastest Known Totally-Ordered Multicast Protocol
  201. Here the point is: whom is the University working for?
    If you work the a java-lead industry then java-only might be good, otherwise you should consider preparing your students in a wider range of languages!
    At the local univeristy (Como - Italy - Politecnico di Milano) we got courses on assembly, C/C++, Java, SQL and XSLT.
    I have collegues and ex-students working with any of them, with the first two being most useful to industrial-controller industry and the latter begin targetted at Web-oriented businesses.

    Beside that I too, as a professor, find it much harder to evaluate students working with Java rather then students working with C++: in my experience however the problem is not the language but rather mostly a matter of 'size'.
    With C/C++ even small projects and exercises (like the ones described into the article) will show the bottlenecks of the student's work.
    With Java small projects are usually easily resolved via simple and consolidated patterns and the students are less like to show up their weaknesses!

    And this is a really big issue, as we don't really need many developers for 'small' projects, rather we need developers for 'large' projects, which are hard to test at university and by employment tests!
  202. The Perils of Java Schools[ Go to top ]

    Not all CS University graduates are good programmers.
    Not all good programmers are CS University graduates.

    Talent is hard to find in almost every profession.
  203. The Perils of Java Schools[ Go to top ]

    Not all CS University graduates are good programmers.Not all good programmers are CS University graduates.Talent is hard to find in almost every profession.

    Quite true !
  204. Java++ or transcend Java[ Go to top ]

    As could be expected there's a lot of emotional outpouring over the alleged inferiority of Java and Java developers.

    I think the point that we should take away is: is Paul Graham right in claiming (see linked from Spolskys article) that macroes are a must for productive development? There is a lot of redundant coding (ie boiler-plate) in the Java space at the moment that is wasteful. Competition by PHP, RoR and DI frameworks makes that Java is improving; I'm thinking of EJB3 and Seam. But still I imagine there remains redundant coding: the domainmodel that propagates redundant code through all tiers in an information system; it's the space that MDA, RoR, language workbenches and casetools like jHeadstart try to fill. There's a need for a next level after Java and I think Ruby is not it and Lisp isn't either.
     
    Should the next level Java, called Kenya, JSE 7 or 8, or otherwise, contain macrolike features? Where one can use the language itself to modify programs?

    (there are a lot of initiatives in the Java space that touch on this (uses of javassist, bcel etc) but none I think ties this in a clear unified language)
  205. Tricky Question[ Go to top ]

    He may have a point - depending of what you want to do. We used to use a very simple question in a job interview with university graduates (math/engineering/physics mainly):

    Sketch a program that adds the number from one two one hundred. You basically have three different kinds of results

    (a) Can't do that (about 30% of IT graduates fail to deliver a simple piece of pseudo code)
    (b) Write an iterative loop (generic to add other numbers)
    (c) Use the proper formula n x (n+1) / 2

    Joel seems to want (b). - well probably not really but he might fall for the b types. Maybe there is a systematic problem in how we approach IT :-).

    Oh one more thing: Non OO programs with "wild pointers" can literally go on for years without the sh*t ever hitting the fan. The problem is not that "OO programs somehow run". The problem is that obvious errors - like a runtime exception - don't get fixed but are explicitly ignored. The problem thus is that the programmer *makes* the programs to run somehow more often than not. Sort of "build in broken windows".
  206. Almost everyone who has math or physics degree must know exact answer, so it is bad test but for guys who has engeenering degree I think this is excellent test :-)

    Some time ago Joel have written about hiring process in Thoughtworks where Thoughtworks people hire only the best guys with a lot of experiencs, degrees in the best universities and said that it sucked, because it is equal to hiring random people. I think here is the same situation.
  207. The Perils of Java Schools[ Go to top ]

    One of the few roses I've seen in this pile of dung was the comment by Greg Trasuk titled Mass Production, Hand-Cut Dovetails, and Programming Languages. Thanks, Greg, for getting your hands dirty.
  208. Extremism.[ Go to top ]

    Most developers I have encountered locally or online tend to be extremist on everything.
    Every software problem requires custom approach which very few engineers know how to handle.

    Happy New Year.
  209. C is still important[ Go to top ]

    A well rounded CS graduate should have some C experience. To be an effective developer you sometimes need to go low-level.. you sometimes need to write at the OS API level.. you sometimes even need to get down to the driver level.

    Students still need to be learning C. It may be that they never actually use it.. but a well rounded graduate needs that background.
  210. C is still important[ Go to top ]

    A well rounded CS graduate should have some C experience. To be an effective developer you sometimes need to go low-level.. you sometimes need to write at the OS API level.. you sometimes even need to get down to the driver level. Students still need to be learning C. It may be that they never actually use it.. but a well rounded graduate needs that background.

    Agree with this here, C should be a must after all it is the bedrock of most modern day languages isn't it? You may never use it but the knowledge gained will be significant.
  211. C is still important[ Go to top ]

    Agree with this here, C should be a must after all it is the bedrock of most modern day languages isn't it? You may never use it but the knowledge gained will be significant.

    No, C isn't. C is simply one of the Algol family of languages. There are far better languages for teaching computing, which have a wider range of features. For a while, Pascal was used for this purpose, and very successfully. When I was at college at the end of the 70s I saw Algol68 being used for this purpose, and that seemed to work well.

    I don't see any particular advantage in learning C other than to show how easily you can mess things up in a 'low level' high-level language.
  212. C is still important[ Go to top ]

    Agree with this here, C should be a must after all it is the bedrock of most modern day languages isn't it?
    No, C isn't. C is simply one of the Algol family of languages. There are far better languages for teaching computing, which have a wider range of features. For a while, Pascal was used for this purpose, and very successfully.

    In fact, when I was at college in the '80s, Pascal was regarded as the "Educational language" and C as the "Applied languge". I.E. you learned how to write streamlined algorythms in Pascal, and later had to learn how to program in C once you had got your first job. It does not take long to learn C once you have a good understanding of machine language and structured programming (taught by Pascal).

    Java is somehow both didactically useful and good for real applications. Although this can seem good, it has the exact detrimental effects that Joel described in his blog: it makes beginners think that they are good programmers because they know the base syntax that is required for their job interview.

    I would not underestimate C as a base language that everybody should know, though. Pascal or Algol are still somehow better for educational purposes, but C++, Java and C#, that make up a large part of all application software that is written now, are all derived from C. Moreover, a good C++ programmer (one that masters OOP, not one that can write functional code with a "class" statement on the first line of the header file) can learn Java or C# in a week or so. The converse is definitely not true.
  213. C is still important[ Go to top ]

    I would not underestimate C as a base language that everybody should know, though. Pascal or Algol are still somehow better for educational purposes, but C++, Java and C#, that make up a large part of all application software that is written now, are all derived from C. Moreover, a good C++ programmer (one that masters OOP, not one that can write functional code with a "class" statement on the first line of the header file) can learn Java or C# in a week or so. The converse is definitely not true.

    Sorry, but rant against C/C++ follows....

    My experience is that C and C++ encourage bad habits - a tendency to concentrate on optimisations, memory management and hardware-specific features. C++ OOP can hugely overcomplicate things (I remember spending far too long battling with things like copy constructors years ago). A good C++ OOP programmer will (in my opinion) have been involved in far too much detail about how that OOP is actually implemented.

    This can result in C or C++ developers refusing to accept that any language that does not allow such detailed low-level coding can be anything like as efficient. (I think this is why the 'Java is slow' myth persists, against all the evidence).

    I would far rather that C and C++ were slowly relegated to their appropriate niche - low-level system and device driver development. I think that teaching them as general purpose languages simply because Java and C# have similar syntax would slow down this process.
  214. C is still important[ Go to top ]

    Sorry, but rant against C/C++ follows....
    Good post Steve. I was going to post - "Learn C. Now forget it."
  215. Languages?[ Go to top ]

    <quote>I would not underestimate C as a base language that everybody should know, though. Pascal or Algol are still somehow better for educational purposes, but C++, Java and C#, that make up a large part of all application software that is written now, are all derived from C. Moreover, a good C++ programmer (one that masters OOP, not one that can write functional code with a "class" statement on the first line of the header file) can learn Java or C# in a week or so. The converse is definitely not true. </quote>

    It's not the language (the syntax) that makes a Java/C/C++?C# programmer, but the APIs and environment where apps are developed and deployed.

    I have no doubts that average C++ guru can indeed learn Java syntax in a week. But I doubt he'll master things like building apps, understanding how containers work, classloaders, reflection, and all the thousands of APIs, components and utilities that make any experienced Java developer so productive. I'm just afraid that the when C++ guy needs to compile his stuff in Java he'll write a Makefile.

    Me, decent Java'er, can also program algorithms in C or C++ out of the box - because the syntax and language constructs are more or less similar. The pain comes later, when I need to write something more "real" and I need to look at something as simple as soundcard.h, or that automake thing, or how to set up the development/debugging environment.

    It's just another culture.
  216. Languages?[ Go to top ]

    It's not the language (the syntax) that makes a Java/C/C++?C# programmer, but the APIs and environment where apps are developed and deployed.

    Standard Java APIs are a useful feature that is in fact missing in C. There are several suites of commercial or OS libraries that can be used, like RogueWave or GNU, but they are not established standards (except for STL).
    Me, decent Java'er, can also program algorithms in C or C++ out of the box - because the syntax and language constructs are more or less similar. The pain comes later, when I need to write something more "real" and I need to look at something as simple as soundcard.h, or that automake thing, or how to set up the development/debugging environment.

    The problems would start before the soundcard is called in. Starting with a good Java skill you could easily learn how to write working code in C/C++in a couple of days. However, I doubt you could write quality code at first try, but you would not realize it. Most java programmers or unskilled C++ newbies simply abuse the new statement in C++, with the obvious results, while a good Java programmer knows when to use static or stack-based memory. Modern JVM can solve the performance issues, but they cannot teach the developer what is under the hood.

    There are simply too many useful options in C++ that do not exist in Java (some exist in C#, or Delphi) or that are handled directly by the JVM. For instance, in C or C++ you can write code that is heavily idiot-proof by simply placing the const modifier in the right place. Learning what the correct place is makes up a relevant part of a C programmer's skill. This is just not possible in Java, where the final modifier has not the same effect as const in C. This and other useful features you do not learn while developing in Java are the reason why I still think that having a C basis is definitely useful for a Java developer.

    On the other hand, practicing java definitely exposes the average developer to some good programming and design practices, which are possible but not mandatory in C++. So there is also value in knowing java for a C programmer.
  217. In some respects I agree with Joel: people who have never learned any procedural language write a lot of crappy code (based on my personal experience). But this is not about pointers, recursion or some specific technique. It's more about algorithms and understanding how computer programs work. If you have learned only OO and don't have this basic understanding, you don't see the simplest solution and often use patterns directly from a book, write very complex class hierarchies and end up with unmaintenable code.

    I don't know if using C, Pascal or some procedural language in universities is the answer to the problem. But algorithms, Turing machines and other classic stuff should be emphasized in the beginning, OO should come forward after that. So I'm not saying that OO is the problem. It's just that you have to learn to walk before you can run.
  218. An opinion from France[ Go to top ]

    I've followed the path of "engineer schools" in France (what we call "grandes écoles", which means more or less "great schools"), and though computer science teaching in those schools is very flawed for other reasons, the general way of teaching in this cursus is in my opinion the best.

    It comes from the fact that knowledge is made like a wall, with bricks you put up slowly and patiently, linking them with mortar. If one or more of those bricks is missing, your wall is not very solid. It doesn't mean that you have to know everything from how and why the tunnel effect works, to making chips with silicium and to transaction processing with COM+ or EJBs ; it means that you need to know that these things exist, and how they influence the layer you're working on. That's why I think that though it's not directly useful if you only work in Java, a programmer has to know that a computer only stores a bunch of 0 and 1, and that it's only because you type "int i" or "char c" that this bunch of 0 and 1 is interpreted by the computer as an integer or a character. You've got to know how your computer's memory works, and that includes what a pointer is.

    I'm also astonished at the very low level in algorithmic with students from computer schools. Not that you need to program a quick sort everyday to be a good enterprise programmer ; if any of my engineers programmed a quick sort instead of using an existing one from a library I would throw him out of the window. But learning that trains your brain, to be able to solve your own algorithmic problems.

    Technology doesn't come out of nowhere. And you shouldn't believe that outside your immediate surroundings, everything is magic and unknown and dangerous. That's what education is all about, that's why we're out of obscurantism.

    My 2 cents anyway :)
  219. An opinion from France[ Go to top ]

    That's why I think that though it's not directly useful if you only work in Java, a programmer has to know that a computer only stores a bunch of 0 and 1, and that it's only because you type "int i" or "char c" that this bunch of 0 and 1 is interpreted by the computer as an integer or a character. You've got to know how your computer's memory works, and that includes what a pointer is.
    Well, I sort of agree with this. It is helpful to understand what the computer is doing, but not exactly know. The more you know about computers the better you will be. But this doesn't require C or a CS degree or more than one language.

    I have a CISM degree (more tech than business). But I also have a background in electronics and communication (technician). I think that has helped me greatly as a developer. (BTW, anyone wanna guess what language(s) I learned at college?)

    All of these things we are discussing are small parts of the bigger picture. It still comes down to being able to ask the right questions of each candidate to determine if their background is what is seems. I think the background can help you formulate questions, but not so much answers.
  220. An opinion from France[ Go to top ]

    I've followed the path of "engineer schools" in France ..

    I've read a long way down this entry to hear such a sensible comment.

    I gave up on two seperate degrees and spent my twenties travelling and living in trees amongst other things. There are so many times I wish I'd finished my CSc degree even though 80% was abstract nonsense that no-one ever cares about. Because the syllabus does provide a larger picture and a greater understanding.

    Of course my CSc was not a degree to encourage creativity, enthusiasm or original thinking but with the experience I have now I can really see how useful completing it would have been.

    I agree with the many other posters that have said something like:

       degree != smart
       degree != good programmer
       no degree != smart
       no degree != good programmer
       
    however formal training is very useful once diluted with actual experience of producing software systems. The formal training/education I have done has been much broader and deeper than my adhoc learning on the job.

    Would I do a degree now ... well 3 years is a long time with no money ;-)
  221. Are pointers "core" CS?[ Go to top ]

    I've thought about it, and I don't think so. I would say the Java (and other languages) concept of a reference is, but not pointers.

    Why? Because thinking back to my school days, while I certainly had to do plenty of neat little tricks with pointers, I don't think a pointer-as-memory-address concept was ever introduced in what I would call a "theory" class.

    I think Joel's issue is that engineering is fundamentally about solving hard problems, not memorization. Java encourages memorization because it has soooo many libraries, and they are relatively easy to use. (meaning no funny linker or template instantiation problems like you get in C++)

    So maybe the problem with many of today's CS programs is not that they're adopting higher level languages, but that they're not making the assignments sufficiently more complex to make up for the challenges previously inherent to the development environment.
  222. This guy sure is lazy[ Go to top ]

    Instead of having to spend some time to think up some more revealing questions for interviewees, he seems miffed that the school system has changed so much that his simplistic interview filter is no longer reliable. "How dare they! I must blog about this abomination!" I think it would have taken half the time to come up with some good questions than it would have to write your whiney, ego-stroking blog.
  223. The Perils of Java Schools[ Go to top ]

    Congrats on whoever got this far...

    Maybe Joel is looking at the wrong schools. I graduated from Maryland in 2002 (go terps) and we were taught C, C++, and algorithms in our first year. I believe they still are. All three were weedouts, all in the first year. We learned about pointers and recursion in the first year.

    So, by Joel's standards, would I guess I could answer some of those "tough" questions that work "that special part of the brain", right? After one year of school, I can answer the questions that he finds tough?! That's sad. I learned much tough concepts than pointers and recursion at college. Oddly enough, I find that OOP's concepts are more relevant AND can be tougher to grasp than something as simple as a pointer.

    After our first year, it was almost all Java. Why? Because what's the point in CS students wasting time fixing segmentation faults when they could be programming concepts like B Trees, multi-threaded programming, rewriting the TCP/IP stack, etc.

    And you can learn what a pointer is and never program anything but Java. Our first lesson in java was about pointers (a lack of/they're actually everywhere).

    What Joel, and a good number of posters here, lack an understanding of is the ability to solve problems is much more important than knowledge of a language. A 12 year old can learn assembly folks. It's not that hard. Knowledge of it is also completely irrelevant in almost every programming job.

    Ask questions that are relevant for the job they are applying for. Asking about pointers for a job that involves nothing but Java seems to be a waste of time. Its not that they shouldn't know the concept, but there are better ways of determining whether they are properly skilled for the job.

    Do they understand interfaces (oddly enough, I had never written an interface in college ... no need to) and why they should program against them? Do they understand some basic OO concepts like a factory, singleton, why and when they should be used? Ask them what type of projects they worked on in college. Ask them to solve a problem out loud so you can get a guage on their logic skills. Get them to think in front of you. Do that, and you'll find who's deserving of the job.
  224. Recursion[ Go to top ]

    When Joel constructs recursion for a real life process he will surely find himself belly-up - floating downstream because of the huge amount of stack space required. Perhaps, he should re-educate himself about the tradeoffs.
  225. it is totally wrong to say "there is nothing complex in java". because java involves all complexities of "Object oriented programming", "Distributed application development"..etc.
    expecting every application programmer to implement complex search&sort algorithms is foolish.
     
    i agree that any dumb (who already knows litle c/c++)can become "java programmer". but it is difficult to become "Java Developer". it requires in deapth knowledge of other fundamental computer concepts too..
    there are lot of concepts in "java world" to show one's intelligence in developing good applications.. rather just in writing for,while, if statements...am i right?
  226. Let's get this clear:

    1. It is good that programming languages are easier to use these days.
    2. It is not necessary for every programmer to understand pointers or O notation for datastructures.

    But

    3. Those gifted people who can understand these things quickly are able to solve any abstract, complex problem.
    And that is the fundamental skill that is really required in solving CS and IT problems.

    If you want to weed out the bright from the average then give them an IQ test. No ammount of pretention, vain aspiration, experience or blagging can cheat such a test.

    Those that know they are gifted in abstract logical reasoning will not mind doing such a test. Those that aren't probably won't even turn up.

    Then once you know who is gifted you can look at CVs and qualifications and personalities to decided which of these bright people might have enough common sense and character too actually deliver!
  227. IQ Tests[ Go to top ]

    IQ tests focus on a person's ability to comprehend abstraction. They do not reflect a person's common sense and ability to practically apply solutions. It's a pretty incomplete assessment of someone's capabilities. "Sure, I can comprehend N-dimensions, but what is this...Java you speak of?" :)

    JB
  228. Full circle[ Go to top ]

    IQ tests focus on a person's ability to comprehend abstraction. They do not reflect a person's common sense and ability to practically apply solutions. It's a pretty incomplete assessment of someone's capabilities. "Sure, I can comprehend N-dimensions, but what is this...Java you speak of?" :)JB

    So we come full circle. No simple test is going to work for all cases or even a majority of the cases. Human problems are just difficult to solve. It's not like designing an API where the variables are managed within reasonable scope. Forgetting feature and scope creep.

    Judging human beings will always be a difficult and challenging. Finding the right employee will "probably" always be hard and require more more time than one would like. Google uses the IQ test approach right :) Though I hear they also do extensive interviews to make sure they get a balanced view of a candidate.

    peter
  229. Full circle[ Go to top ]

    <blockquoteNo simple test is going to work for all cases or even a majority of the cases. Human problems are just difficult to solve. It's not like designing an API where the variables are managed within reasonable scope. Forgetting feature and scope creep.Judging human beings will always be a difficult and challenging. Finding the right employee will "probably" always be hard and require more more time than one would like. Google uses the IQ test approach right :) Though I hear they also do extensive interviews to make sure they get a balanced view of a candidate.peter
    Yes, like you said, that's the point. You can't look at a "curriculum that focuses on Java" and say it's churning out poor computer scientists. You can't look at a degree, or lack thereof. In my opinion, you CAN look at experience, but that can be easily faked on a resume.

    Ultimately, as this thread shows, it's not an easy, pat subject. There are trends you can look for, but if you limit yourself to CS degrees or 10 year's experience in the weedding-out process, some brilliant people will slip by.

    I take the time to read a lot of resumes personally, even though it can be tedious. My team talks to a LOT of people before we hire someone. We look for practical experience, vision, common sense, and a drive to learn. That person can come from, literally, anywhere. You find one, it's worth the time and effort.

    JB