The Joel on Software Discussion Group (CLOSED)

A place to discuss Joel on Software. Now closed.

This community works best when people use their real names. Please register for a free account.

Other Groups:
Joel on Software
Business of Software
Design of Software (CLOSED)
.NET Questions (CLOSED)
Fog Creek Copilot

The Old Forum

Your hosts:
Albert D. Kallal
Li-Fan Chen
Stephen Jones


By the end of that piece, all I could think about was how ticked off I am that there are people nowadays who call themselves "Ham radio operators" even though they never learned Morse code.
Eric Sink Send private email
Thursday, December 29, 2005
Implying then that rather than communicate with long and short signals via radio, they have devices which are not kosher?
Clay Dowling Send private email
Thursday, December 29, 2005
Doesn't this article badly contradict the viewpoint from "Lord Palmerston on Programming" at which maintains that the basic programming skills are only 10% and the API knowledge is now 90% of whatever your looking at?

If not totally, at least with respect to the "can pick up Java in 2 days and do better than people with 5 years of Java"?
Richard Campbell Send private email
Thursday, December 29, 2005
Joel was really off on this one. At least he admitted that he is fighting for something (pointers) that is becoming as unecessary as latin, saving us from the work of pooking holes at his logic.

The real problem is: how do you find and hire great programmers? It's hard, and there is no simple answer to that. In theory, companies like IBM would be in better position to refine their hiring techniques, as they hire thousands per year. How can Fog Creek hit bulls eye with just one open slot each nine months? Luck, I guess...

Besides this, the market needs all types of programmers, not just the A types. In my college class I could point out five people out of fourty that where really good. Ten years later, at least 50% of the class is doing quite well.
Mauricio Macedo Send private email
Thursday, December 29, 2005
I was a Tech for awhile, but I was 12 or so at the time. And I did get the morse after a few months! (I just got mail about renewing. Maybe I should go for general or something.)

And I recently started watching the video series he mentions! I thought I was evaluating them so I could recommend them to my sister or whoever, but nooooo. (5 hours pass.) The first guy (Abelson?) has the worst hair I've ever seen, but he is a great teacher.
Jesse Millikan
Thursday, December 29, 2005
Aren't the great programmers Joel is looking for going to search out new opportunities that will force them to learn the subjects being dropped on the floor? If one of them wants to write a linux device driver to turn a CueCat into a burglar alarm, she'll need to learn pointers herself. Or if she wants to shape an up-and-coming dynamic language (Perl 6) she'll likely get into Haskell and functional programming so she can figure out what's going on with PUGS.

Or are all the great programmers only turned out by CS departments? (Wait, that's another show...)
Chris Winters Send private email
Thursday, December 29, 2005
I can understand why Joel complains about "JavaSchools", but I'm not really sure there's a problem here.

Let's assume that there is a Normal (bell curve) distribution of programmers: some are brilliant hackers, some think Karel the Robot is too mentally taxing, but most fall within one standard deviation of "average".

Schools with easy curriculums will probably churn out more than their share of average programmers, with the occasional goomba and even more rare superstar.  But that doesn't matter.


I'm willing to bet that software follows a very similar distribution.  There are wicked cool software products that smart people work on passionately, there are Microsoft Bob's, but mostly, there is average, uninteresting software.

My theory is that people settle onto the software curve based on where they fall on the programmer curve.

Note: I don't claim there is a causal relationship between either curve, though there might be.  I just think there's enough mediocre software that needs coding to employ all the mediocre programmers.

Not everyone will be a superstar, but not every software product needs one.  In fact, most don't.
Thursday, December 29, 2005
I was both a ham radio operator who had to learn morse code, and a CS student who took a data structures course taught in C.  I also used punch cards.  I am not kidding.

Isn't there a private club someplace where we all can meet?  Smoke cigars in leather wingback chairs while scantily clad ladies wearing white gloves mix us very dry martinis?

I suppose the Java kids don't drink martinis either ... <sigh>
Mitch & Murray (from Downtown)
Thursday, December 29, 2005
Let me start with stating that am a "Blub" programmer. Yes I do programming in Java (occasionally in PERL) only.

1.I accept Joel on this point that weeding out a good programmer is not easy. But I would say that sometimes I have interviewed people who are not even good at basic OO. But that is a different topic.
2. I have done coding with Pointers in C. But I have not gone past that as my basic degree was in Material Sciences. I came back as a s/w engineer (vs a Comp Sci engineer) with this hope of playing with pointers and asymptotic analysis of my algos and developing my mental muscles.
3. However, for the HR, I would say they can pose general aptitude questions and help the candidate come out with the abstractness. All puzzles help expand mental ability. So they can use this tool to a certain level.
4. I again have to agree that to make those puzzles be testable for their algos a Javaschool guy will not be able to make much sense.
5. However, we cannot dub anyone as dumb. Pointers are only one way to test / expand a person's mental capacity. You can pose basic physics / math questions and a solid comp sci person might not have any clue on that. I do not think Joel says this. But I want to make this point as I felt it is in context.

Sridhar Visvanath Send private email
Thursday, December 29, 2005
The important thing is not to find out if a person knows how to do linked lists or pointers, especially if your company makes software that never uses these features.  What Joel essentially wants to know is, "Can this person handle complex ideas, and solve difficult solutions".  Much like the "how do you move mount fuji?" questions.  I knew kids that could handle pointers like a champ (I never thought the concept was that difficult) but I wouldn't trust them to write a web app for me.

I think there is a better way to still find these "real programmers".  The essential thing is not to test a certain concept of a language, because smart people can study and learn linked lists and pointers but not be the kind of person that can write great code.  You want someone that can take a problem and solve it in the best way, no matter what means they use.  That requires a different kind of test, that you can still use on the "java wienies".
Phil Send private email
Thursday, December 29, 2005
All I could think of was...

"Zeros... zeros... you had zeros! A luxury! Sometime we ran out of zeros and had to use 'o's"

Seriously though, I guess you could set a (psudeo?) code audition something like:

1) Create a function that calculates n! (n-factorial) using a recursive algorithm
[This should be trivial for anyone who has studdied any recursion. It is the canonical example]
2) Create a procedure that calculates the values of 1! through n! using a non-recursive algorithm and prints the values in reverse order (from n down to 1) for an arbitrarly large value of n.
[This should weed out those who don't really understand what the recursive algorithm is doing, and lets you see who has moves immediatly towards implementing a pointer stack, etc.]
Code Slave Send private email
Thursday, December 29, 2005
I agree with Joel about the need to weed out the mediocre students, but disagree on the need for latin and greek to do that. I've had the pleasure to work with some brilliant software engineers, who write horrible Java code - because it looks like C code. Brilliant young students, if brought up 100% pure Java, will make better engineers for modern languages. To expand their thought while weeding out the mediocre, teach them mathematics.
Oded Send private email
Thursday, December 29, 2005
Reading Joel's "JavaSchools" article you'd get the impression that all of the CS departments used to teach Scheme or Lisp in their introductory courses, but because of pressures to "dumb down" the curriculum, the've all moved to Java. I don't think that's really the case, though.
Over my Christmas vacation, I had a chance to re-shelve my collection of ACM SIGCSE bulletins, and reading back through them it looks to me like the majority of introductory (CS1) courses were taught in Pascal (not Scheme or LISP) through the 80s and early 90s. With the advent of OOP, some of those schools moved first to C++, and then many of them to Java. I think that migration has been much more common than a school moving from Scheme to Java (although I know that Stanford has done that).
Of course, Joel IS correct when he observes that students don't seem as bright as they once were. I attribute that to the lack of a required Latin course.
Stephen Gilbert
Thursday, December 29, 2005
BTW, you'd think someone with a brain the size of a planet could figure out how to test a Java developer on recursion...

Philo Send private email
Thursday, December 29, 2005
Hate to discuss this on the meta level, but what's up with this essay?  Is Joel displaying his programming (target audience) street cred by insisting that all the FogCreek Fellows are able to think two levels deeper than everyone else?  Or does he believe it?

To me, I care a lot more about business goals: clear code, good ui, ability to figure out the user domain.  Is this nuts? 

I'm thrilled with FogBugz - it's a great product.  Is this because it was developed by etherial thought patterns or because smart people cared?

I may be reacting wrongly because I'm in the unwashed masses that has no real understanding of linked lists. 

Bankstrong Send private email
Thursday, December 29, 2005
I happen to agree with many of Joel's sentiments, as well as some of the feedback comments suggesting that there's no real problem with JavaSchools. Still, my take is a little unique.

I attend what could be considered a JavaSchool, a state university near Hartford, CT. Java is our de facto language, and OOP is the subject of our CS 1 course. Still, it is required that we study/learn C in a 1 credit course, and then we need it for systems programming where we are asked to really use recursion, pointers, and the like. C/C++ can crop up again if we take something like computer graphics or a special topic such as game engines, but Java is used more, especially for algorithms, and even operating systems. Most graduates know Java by heart, but there's a wide range of preference in regards to C and other languages we learn including some that are functional.

The effect on CS majors as students is most interesting to me (and a key topic of Joel's article). I agree that OOP/Java is not a great way to weed out students in CS 1. It was actually quite effective for us, because many students in those courses hadn't even seen -gasp- any sort of procedural code before. Still, many students made it through, some more easily than others. There still remained more hurdle courses where we picked up pointers, assembly, and recursion, so we are not entirely JavaSchool students. However, it may have been better for the lower end of the student spectrum if they had been dealt a greater challenge sooner so they weren't locked into our major by the time they needed to know pointers in their 3rd or 4th course. I haven't decided which is better, this gradual series of challenges, or the classical culling method akin to 6.001. At least in a program such as mine, students have the choice of how much time they spend in classical CS courses, as opposed to the ones that help them get more common jobs. Some graduates go straight into insurance software jobs while others go on to Yale grad school or ambitious Google-type careers.

As for the effects on CS majors as graduates, there is some danger of the JavaSchool effect, but it's not very drastic. I think it's bad business for universities to graduate students knowledgeable only in Java. As Joel said, these grads don't really know CS if that's all they used. I prefer that schools emphasizing Java are sure to provide other courses where their better students can learn functional languages and gain real practice in C. This prevents a pool of graduates from being so limited; some will be, but everyone had a choice in the matter. So many high school grads don't know the difference of going to a JavaSchool, a hybrid Java/classical CS school, or the MIT/Yale type. I feel bad for the ones that attend JavaSchools and don't realize they were cheated out of learning the really advanced stuff.

Industry shouldn't mind JavaSchools so much though. As others have said, the better educated will rise to the top and pursue Google-esque careers, and the JavaSchool grads will fill the vast majority of programming jobs looking for the skill-of-the-day. 10 years after graduation there will be some mixing of the two.
Will Klein Send private email
Thursday, December 29, 2005
"Isn't there a private club someplace where we all can meet?  Smoke cigars in leather wingback chairs while scantily clad ladies wearing white gloves mix us very dry martinis?"

If there isn't then it's time we start one!
Bill Rushmore Send private email
Thursday, December 29, 2005
Good points, bankstrong.  My take is this:  Joel does have a point.  Concepts like pointers posses have a layer of complexity absent in Java/Perl/Python/etc.  And so people who master C, on average, will be higher aptitude than one who masters Java.

BUT, as you said, the value of this stuff is in being able to solve business problems, something I think Joel recognizes, but may have gotten lost while Joel waved his cane and yelled at the kids to get off his lawn. :)

The point is that these higher aptitude students will provide more business value than lowers ones. (And yes, I know that's a tautology).  Recruiting these higher aptitude students was probably much easier when the CS courses did it for him.  Now the ball is back in his court and more work is thrown on his plate.

Obviously though, even the lower-on-average aptitude Java students provide enough buisiness value for *someone* or presumably there wouldn't be any JavaSchools.
Crimson Send private email
Thursday, December 29, 2005
"I think it's bad business for universities to graduate students knowledgeable only in Java. As Joel said, these grads don't really know CS if that's all they used."

But Computer Science is not about specific languages, thats what MIS and information tech courses are about.  CS is a field of study, and a science.  The principals you are supposed to learn in CS could be taught in an imaginary language, its the concepts that matter not the specific implimentations, which is why high end maths are usually required or intertwined in the CS schools.  If you just want to learn how to write programs in Java and C++, you don't need a degree in CS.
Phil Send private email
Thursday, December 29, 2005
> I am that there are people nowadays who call themselves "Ham radio operators"

That's why I call myself a Roast Beef operator. Yummy.
son of parnas
Thursday, December 29, 2005
I graduated (not too long ago) from a so-called JavaSchool.  The primary programming language taught was indeed Java.  Even in OS class.  I know that somewhere near 50% of the CS grads have no idea what a pointer is, let alone a handle. 

Anyways, that's not the point.  I remember attempting to go above and beyond on all my projects.  Reading Joel's article says to me that, while yes, that was a good move, it still wasn't good enough.  Similarly, I actually desire to get into the video game programming industry -- where they use a lot of C/C++.  The problem is, I work at a place where I code using C# most of the time, ActionScript2 ::shudder:: somewhat, and C++ rarely.

My math is all rusty (I'm reading math textbooks though again, in the hopes of shining up the math I already know and getting down those details I never had time for when there were deadlines).  So is my physics, which is next on the list of textbooks after math stuffs.

I guess this is asking for advice for the person who DOES have the mental ability, but is rather behind on the material.
Mark Ribau Send private email
Thursday, December 29, 2005
As a physics major taking a lot of CS classes in the early 80s, I saw a lot of CS students that were basically incapable of doing much of any math beyond high school algebra. It was amazing, but I thought that was due to the influx of students seeing CS as a "hot" major for high paying jobs.

Another thing people struggled with was handling assembly language programming. In addition to learning about memory management, function pointers, etc. with a higher level languages like C, I think learning the basics of assembly language are valuable for getting people to think about what the computer is really doing. That's another way to get people to think about things in an abstract manner often needed when solving problems with a computer.

As for hiring programmers, after many years of interviewing and hiring, I've decided that no matter what, if you get it right 50% of the time with otherwise unknown people, that's pretty good.
David Sheeks Send private email
Thursday, December 29, 2005
Hi Joel,

As a recent graduate of UPenn I'm going to have to disagree with your assertion that Penn has watered down the curriculum.  CSE 120/121 are indeed still weed out courses and they actually got significantly harder right after I took them.  In fact CSE 121 now covers a significant portion of CSE 220 which has been replaced by a far more rigorous CSE 320 (they use the big white grad Algorithms books instead of silly pansy undergrad texts).  To my knowledge, CSE 240 (Some C & a lot of SPARC assembly...this is where pointers get thrown at you with full force) is still around.  CSE 380 (aka write your own UNIX OS in C) is still a killer course.  Although Max Mintz (who's been described as out on a mission to 'unilaterally fight grade inflation') has retired from teaching CSE 260/261 (math foundations of computer science), in the many many years that Mad Max taught the courses the bar was held quite high.

On the topic of Java, I agree with you that Java is not hardcore enough and hides a lot of very important details that students should learn about.  However, I actually think Java is a good introductory language because it's relatively syntactically clean.

Piece of advice about interviewing Penn candidates.  Stay away from BAS degree candidates and only interview BSE degree candidates.  The difference between BAS and BSE is HUGE!!!  BAS is watered down for more liberal artsy people...yuck...I tried to get the admin to abolish that degree while I was there and these days I believe they strongly discourage people entering that degree program unless it's a part of a dual-degree.  Penn Engineering is very liberal about letting undergrads take graduate level courses.  The best and most self motivated students often do take advantage of that and often end up with a MSE as well at the end of college as I did.

In terms of interview questions, ask them about operating systems if they've taken it...although that'll limit you to juniors and seniors.  Some sophmores and most juniors will have taken Theory of Computation.  Anyone that's mastered that subject and can truly appreciate 'What is a computer?' is likely to be a superstar.  Now that Amir Roth is teaching undergrad computer architecture, CSE370/371, you might get some candidates that have a good grasp of that as well.


John Yau
Class of 2001
John Yau Send private email
Thursday, December 29, 2005
"Without debating OOP on the merits, it is just not hard enough to weed out mediocre programmers. OOP in school consists mostly of memorizing a bunch of vocabulary terms like 'encapsulation' and 'inheritance' and taking multiple-choice quizzicles on the difference between polymorphism and overloading."

Is that all it takes to know OO? What about the principles listed and linked from here:

When we interview for open positions, I've found that simply asking what coupling is weeds out quite a lot of applicants. If you don't know what that is, you don't know OO, IMHO (or am I being too picky?).
DHofmann Send private email
Thursday, December 29, 2005
JavaSchools exist to fulfill the need of 94% of IT.  When a student choses a school/curriculum they look at Dice or Monster and see what types of skills they need in order to get a job - employment - money to pay off that bill they are about to incur in the name of education. Then they look at what they can afford.  Followed closely by what they think is a "cool" place to go.

When I went to university, we learned IBM Assembler.  Not some "learn in a day" Scheme. :)  Bare metal programming taught you that the computer is alien and compilers are way to forgiving or maybe it was strict. Let's face it, you should know what data type you put into those six bytes so don't do math on them if they are not numeric. Pointers? That's all you get. Do the math and stop crying about it. Dumps gave you everything you needed, right there in the printout. Try recursion in assembler if you really want to know what the machine is doing.

Yet, I have not seen 1200 IBM Assembler job postings recently.  Java yes - Assembler no.  LISP - a few.  Today, the investment made in a school needs to pay off quickly.  If you have been in the workforce less than 10 years, what would you think of a school which uses COBOL as a teaching language?  It's bleeding edge or behind the times?  Students/parents today look at the practical aspect of careers.  You get an education to get a job.  Most Jim and Jane Developer are average (hence the average meaning). 

Java is used because it is:
 1. Widely accepted - meaning it has diverse industry saturation
 2. It is freely available - no paying thousands for a compiler or IDE
 3. It is marketable after graduation.

As for those "other skills" maybe the answer is you see those from students, or individuals who go above and beyond. Or as many businesses are doing, when they need that specific skill, they teach it. 

In a way Joel does come off as a Monty Python script.  Something most college graduates have not see either.
Thursday, December 29, 2005
You're not being too picky, I think.

The point wasn't, as far as I could tell, that OO is trivial or anything, but that it's hard to test. The questions about coupling can easily be MEMORIZED by the interviewee. All the OO theory can be memorized. Facts. Trivia.

You cannot test whether somebody understands OO with questions like "Draw an UML diagram of a chicken" (real question).
R. Sedgewick
Thursday, December 29, 2005
I'm well versed in pointers and recursion, so my ego is tempted to agree with this article, but I really think it's off base. Unless Java is some super-language that automatically solves your problems for you (snicker), you just need to ask different interview questions.  If linked lists are too easy in Java, without those macho segfaults, make candidates do something harder.  I can bang out linked lists in C in 15 minutes, but I can't solve most of ITA's questions in any language. 

Besides, if you want to weed people out, use Brainfuck, not Scheme or C.
rps Send private email
Thursday, December 29, 2005
This article sounds more like a shill to allow Joel to take back his stance on Lisp.  Although he used to criticize Paul Graham, it sounds like he's falling for some of Graham's elitist arguments regarding language choice since they met.

On pointers, who needs or cares to see down to the subatomic level when you are writing a simple issue tracker?  Apparently Joel has some l33t in him.
Egg Shen Send private email
Thursday, December 29, 2005
>  but that it's hard to test

It's only hard to test if you yourself don't understand it, which is too frequently the case. Have a conversation about OO. It's clear immediately who knows and who doesn't.
son of parnas
Thursday, December 29, 2005
I agree to Phil, since when does knowing a language make you a good CS grad. It's all about the "science" of computing.
Also, instead of blaming the java schools, won't it make more sense to actually come up with better ways to weed out the A students?
Thursday, December 29, 2005
I really love this industry.  I graduated with a cs degree about 2 years ago.  We did mainly C, c++, Cobol, JCL mixed with some m.f. uitls, and I did a year straight of IBM B.A.L.  Thrown in some vb, some oracle/sql stuff, Unix, and system analysis, and that was pretty much my bachelors.  Nobody when I graduated was looking for C, and almost no one c++.  I'd say 75% easy were looking for Java or .net, while the other 20% were looking for other web technologies (this is targetting the dev market, not sysadmin or security or networking). 

I don't think it matters what new grads are learning, cause you oldsters are always bitching about them.
redblack tree
Thursday, December 29, 2005
The thing about pointers is, if you understand pointers, you understand redirection.

And every problem in software can be solved with another layer of indirection.

Chris Tavares Send private email
Thursday, December 29, 2005

Chris Tavares Send private email
Thursday, December 29, 2005
*I* am an average programmer.  I have to think hard about pointers, although I do understand them.  I took a decently difficult course in C at Berkeley and got a "B" out of it without trying too hard.

The problem with people like me is you can't tell what I can do by my code (which works, ok).  You have to ask me (or listen to me tell stories) about my solutions, my problems, how I overcame pitfalls.  Only then do you know if I'm useful to your goal.

I have been on many "technical" interviews.  Not a single interviewer asked me how I solved problems.  They either went straight for the coding questions (which I suck at--who memorizes that shit--that's what Google is for--only dummies re-invent the wheel) or they went for my personality (which has been honed to a sharp point by years of pretending to be sincere as a sales rep in a prior life).

Most employers don't even want my real abilities.  They don't want a real problem solver.  How do I know?  Because they get a lump-lump "CTO" to do the interviewing to weed out the real contenders.  The barely capable manager doesn't want a star to make him look bad, so anyone with stellar skills isn't really a contender.

So all this talk is limited to those few companies that are actually looking for talent.  They want a yes-person that will agree and not make them look bad for past decisions.  And besides, most solutions don't require that much brain power--anyone looking for rocket scientist solutions should be out looking for rocket scientists.

So to Joel, I say, why in heck are you looking for rocket scientists to do bug-tracking software?  What really smart person who suffered through a real comp-sci program is going to want to do that kind of boring work? 

I mean, I'm all excited at the prospect of working with talented people, making good money.  But c'mon:  you do bug tracking!!!!
sharkfish Send private email
Thursday, December 29, 2005
"Nobody when I graduated was looking for C, and almost no one c++."

Are you kidding? Search on "C++"...
Thursday, December 29, 2005
I don't think the problem with "all Java" is in the Java part, it's in the "all" part.  I don't think any curriculum where all classes use one language deserves the name "Computer Science," not because you need to learn languages to be a computer scientist, but because they teach you different ways to think about software.  It also better prepares you for learning new languages when (not if) the one you were taught in school isn't the only language you use for the rest of your career.

It's true there are a large number of software jobs that don't require knowledge of multiple languages or advanced CS concepts.  And it's fine to design a curriculum to prepare people for them.  Just don't call it Computer Science if it isn't.
Jim Edwards Send private email
Thursday, December 29, 2005
My school, which is a Big State School regarded fairly well in CS, was graduating people with CS degrees in 1992 (my year) who had never touched a GUI; or programmed in C++ (and barely in C, were it not for the operating systems class, in which one could sort of avoid the C programming parts if one had the right partner).

Yes, "CS isn't a vocational school". That's great sloganeering, but hell, how many of us could afford to spend all that money on a college degree without at least pondering our job prospects?

Those of us, like me, who had internships did well in the job market - but even my first employer (IBM) wouldn't have hired somebody who hadn't touched C at that point. The theory, pushed so hard by the smug jackasses masquerading as grad students who seemed to be the primary curriculum-inspirers at the time, was that "any company will hire a good CS grad because a good CS grad can pick up any language".

This was bullsh*t then, and it's especially bullsh*t now. Even IBM, I repeat, Even IBM Didn't Buy It.
M1EK Send private email
Thursday, December 29, 2005
This also goes against some things he's posted in the past (the Fog Creek compensation articles, for example).  Some people might not be the best coders, but they do other things well.  Why this litmus test to shove those people away?

The latest article very much has the tone of a rant, and was probably prompted my his frustration reading résumés for next year's internship.

I do maintain that it's not as much of a problem as he thinks it is.  If he only wants 3.9 GPA from Yale people, that's all he is going to get.

Most software work is boring, and requires little knowledge of advanced CS concepts.  Most CS students graduate with a less-than-ideal education.

So, the problem solves itself.  He tries to attract the top talent, and he lets the rest go get jobs elsewhere.

(I have my doubts on just how exciting the Fog Creek work really is, but I'll take it on faith that the work is fantastic, and that's why he can get 3.9 Yale people.)
Thursday, December 29, 2005
We leave the era of filtering candidates by functional programming to enter - one of these days - the era of filtering by functional MRIs. C'mon don't think it's not gonna happen.
slava Send private email
Thursday, December 29, 2005
>"any company will hire a good CS grad because a good CS grad can pick up any language".
>This was bullsh*t then, and it's especially bullsh*t now.

No it isn't, I graduated from MIT in '90 for example and had three or four job offers for C positions, without knowing any C at all because it wasn't part of our curriculum. Companies know API's, languages and tools can be quickly learned on the job, which is why they're more concerned you understand low-level fundamentals and not some "language of the month."
Thursday, December 29, 2005
"Companies know API's, languages and tools can be quickly learned on the job"

Bullsh*t. Most companies don't have time to train you, and most technologies can't be learned _that_ quickly. I'm on my fifth company in my 13 years in the industry, and I've NEVER worked at a place that could afford the (a) time and (b) risk of having a 'good CS guy' educate themselves 'on the job'.
M1EK Send private email
Thursday, December 29, 2005
For instance, in another thread somewhat on this topic, see:

"Except for trivially small linked lists, arrays, etc., realloc() does not scale and is the kiss of death for production apps. Fragments memory all to hell."

I remember that myself well. Also having to deal with memory model juju when living in DOS at the time. I was trying to get some of my simpler programs built/compiled using Turbo C on my PC rather than having to go to the lab  (plus, it had a better debugger).

The grad school boneheads I used to butt heads with at Big State U used to fall prey to this kind of thing all the time - I'd have written an algorithm which worked well in resource-constrained PC environments but was less elegant than the solution they preferred - because they had never done anything BUT the big unix boxes at the time, they had no clue about these types of things. Even if they COULD pick up 'C' in a couple of weeks, they wouldn't know jack about the gotchas like that one.

If you need a "good C programmer", no, a "good programmer" who can pick up the syntax of C in a couple weeks is most definitely NOT what you need.
M1EK Send private email
Thursday, December 29, 2005
"No it isn't, I graduated from MIT in '90 for example and had three or four job offers for C positions, without knowing any C at all because it wasn't part of our curriculum."

Times have changed since 1990. Your MIT degree probably had a lot to do with the fact companies were willing to take a chance on you and let you learn on the job.

However, that is no longer universally the case. By the mid-90's, when the job market began to pick up, companies were losing people they trained to other companies that offered superior benefits and salaries. The fallout of that was two-fold. First, many companies adopted the position that they will no longer offer on-the-job training, instead opting to hire people who were experienced with the required technologies. Secondly, with the help of the ITAA, they invented a programmer shortage, which served as the impetus to increase the H-1B numbers. The goal, of course, was to decrease the newfound leverage programmers were experiencing. Today, I think it is rare for companies to offer on-the-job training for anything but very specific domain knowledge.
MBJ Send private email
Thursday, December 29, 2005
Personally I think Joel's lost the plot on this one.  The entire article comes across as elitist BS.

Why is learning pointers so important?  They're a language-specific feature and don't demonstrate any particular ability other than being able to understand pointers.  Big deal. 

I work in the aerospace industry and write simulation software for fighters using C and C++.  I can honestly say that knowledge of pointers has very little do with a programmer's quality.  In fact, developers who aren't so good at tricky pointer manipulations produce much easier to read and efficient code.  They spend less time trying to be 'smart' with obscure syntax and more time imlpementing the requirements.
Thursday, December 29, 2005
Not to further derail the topic towards "finding a job"/CS-degree correlation, but let me tell you: if you're me, you have to hustle for a job--they aren't coming to you.  If you're like all my CS degreed friends graduated and soon-to-graduate, you have to hustle for one.  Now we didn't graduate from the greatest CS school ever of all time, but we had some toughie courses.  Some of us have experience via internships, co-ops or part-time dev jobs.  But we still have to hustle for jobs.

I don't know what it's like for an MIT (or similar) grad, so I'll only guess: it's worlds easier.  You probably have job fairs where (gasp) someone wants to talk to you!  You probably have (gasp again) someone who may, you know, be INTERESTED in giving you a chance, without, you know, any of that networking stuff you heard was so important!  You probably got offered internships, or co-ops, through your university!

I don't know what it's like for you, but here's what it looked like for me, circa 2004:

* Went to university job fairs, no recruiter looking for programmers, as in zero (0).  Just pretend at this point you're the best programmer since Knuth.  Let's pretend you ARE Knuth.  You still have no chance, specifically, a zero chance.  Some 'helpful' recruiters referred me to their web site.  Thanks.

* Made fantastic resume, sent it with cover letters/email, did all that.  Let's say I sent it out to 50 serious (serious) job positions.  I call this the "resume black hole" because it was sucked in and I never heard back.  I did call a few of these places and attempted to reach human beings, and sometimes I got in.  Either way, black hole.  Zero (0) interviews.

* Of course my resume was on all the big job boards.  Somewhere earlier I read about how you update it every day to keep it at the top of the list.  Did that.

* Two months later, get a contract-no-promises gig at relatively low wages, from the job board.  Eventually hired for average wages.
FOOTNOTE: not a coding job; it's IT work.

Given my job hunting experience, the phrase "any company will hire a good CS grad" sounds really stupid, especially as applied to the entire realm of CS grads.  Oh, and my university still teaches CS-as-not-JavaSchool as defined in the article (for all the good that does).

I'd like to append one last footnote: kudos to everyone who is dedicated enough to work their way into and through the tougher CS programs in the country.  I understand that any 'easier jobhunting' you may be doing is a well-earned break; just don't tell me how trivial it is to find a job, okay?
Another State U Graduate Send private email
Thursday, December 29, 2005
I got my CS degree from the University of Wisconsin, which used C++ as the default language at the time I was there, but switched over to Java when I was a senior.

If the content of the courses didn't change -- and I have no reason to imagine it did -- then I can't believe it made a lick of difference.  Yes, C++ is harder than Java, but anyone who was going to be weeded out of CS 302 by pointers is for damn sure going to be weeded out of CS 367 by AVL trees (or CS 354 by base conversion in assembly language); so at worst, those who can't hack CS get to stay in for an extra semester.  Not really a huge deal, I think.
Mike Kozlowski Send private email
Thursday, December 29, 2005
. .-. .. -.-. - .... .- -  - .. -.-. -.- ...  -- .  --- ..-. ..-.  - --- --- .-.-.-
Raj Chaudhuri Send private email
Friday, December 30, 2005
I was going to say something and I guess someone would have said it already in this longish thread. I was right: thinker has.

He says:

- Programming skills follow a bell curve
- Programming job requirements follow a bell curve

So the world is a beautiful place. I agree. I'd add a couple of points to that:

Society evolves. For a number of reasons most of them nothing to do with software, _all_ degrees have become easier. Young people are just getting used to making less effoty. My experience is of course where I live, in Catalonia. Most of their minds are unable to do the complicated things we had to do in the earlier years of software (assembly code? hah!). But the market doesn't require them to know.

I am not denying that mastering some of the stuff I don't master would make my mind better. I take it for granted that mastering chess would be good for my mind. It's just that I have no reason whatsoever to do that. I don't need it. For a vast majority of jobs, it's unnecessary. So I'd rather listen to music or go to the cinema. I won't maximize my programming skills by doing so but I won't affect my value in the real market (only slightly) and I'll be happier overall.

Also, software development is cumulative. It's evolving very fast. Yes we had to write a string class when we first coded in C++, because there wasn't one. And lists, and smart vectors, and this and that. After a few years now we have the standard library.

And it's not only the academic life. When we were young(er) we turned on our personal computer and (with luck) something like "C:\>" appeared. I don't remember exactly. You wanted to know what was in your computer? Where's my document? dir name*.doc /s. Etc etc. Let alone write code, compile, link... Today everything is easier. You insert the DVD and the film just plays. You can even search for "music, images"... Life is easier. All this influences the fact that the frame of mind of the kids today is getting used to easy things. Don't make them link manually or specify where the STL files are. They'll show you two better IDE's they've downloaded from somewhere. They _know_ they can find easy stuff on the internet. Ready to use libraries, code, help... everything. Life is easier. People are generally "dumber" in what we were "smarter" but "smarter" in other aspects: communication, networking... And the needs in the job market are evolving in a similar way.

In a way, pretending that the schools produce the traditionally "great" programmers is a bit like pretending that every tomato is _required_ to have its traditional taste. It's just not true anymore. It's only true when you go to a good restaurant or you know where to buy it. But the food market is doing fine, thank you, because a new generation has become used to the "industrial" taste of tomatoes. It's correct to state that you like the old taste, but it's wrong to predict an economic fall in the food market by next year because of this.
Daniel Daranas Send private email
Friday, December 30, 2005
"I work in the aerospace industry and write simulation software for fighters using C and C++.  I can honestly say that knowledge of pointers has very little do with a programmer's quality.  In fact, developers who aren't so good at tricky pointer manipulations produce much easier to read and efficient code."

This is a good point, in that the sacralized knowledge of pointers has been _vastly_ misused in traditional C++.
Daniel Daranas Send private email
Friday, December 30, 2005
I managed to learn about pointers in a Pascal class about ten years ago.. but I recently picked up "The Little Schemer", and after reading it and going through "Practical Common Lisp", I'm *enjoying* programming.

BTW, I started out (technically, still am) a No-Code Tech - it gave me a "starting point" to get my feet wet before I learned Morse, and now I need to go pass the test before they eliminate it altogether (one of those "personal goals" things).
Bill Bradford Send private email
Friday, December 30, 2005

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
Powered by FogBugz