The article referenced does identify a major problem in an undergraduate programming curriculum. I like the idea of a BFA in programming (this idea has been around for a while), as well as a rigorous program that requires a much deeper understanding of programming languages. Java schools are a problem, no question about it.
But I'm a little sceptical about how much it will help in the grand scheme of things. I'm starting to figure that trying to create a truly talented programmer through a CS curriculum is like trying to create a truly talented novelist through a creative writing program. An intellectual environment is valuable... but how many students are there who would have learned the things listed in this report (functional programming, proper memory management in C, LISP, ada, proper use of threads, a deep understanding of what happens under the hood, as well as solid mathematics) if and only if the curriculum had been different? Or would these students, who will be few under any circumstances, find their way to these subjects anyway?
I don't know the answer to this question. I have a feeling that a better curriculum is worthwhile, and would improve the number of excellent graduates - in other words, while I think that some will find their way to this material on their own, I do agree that there are people who will not achieve the talent level they are capable of because of misguided course requirements. But I wouldn't expect this to turn lots of people into highly talented programmers any more than a writing program is going to produce a bunch of spectacular novels. It just ain't in a lot of people (including, I'm starting to suspect, myself).
"I'm starting to figure that trying to create a truly talented programmer through a CS curriculum is like trying to create a truly talented novelist through a creative writing program."
On news.yc we tend to only talk about truly great programmers because that is what is required for startups, but I feel like there is still some role in the world for programmers who are merely competent and good at what they do, in the same way that there is still a need for proficient writers to produce technical manuals and ad copy.
we tend to only talk about truly great programmers because that is what is required for startups
That's not what we look for. The evidence so far (and there is now quite a lot of it) suggests that it's more important that the founders be very effective people than great programmers.
I suspect this is true even in research, but certainly in startups, someone who is reasonably smart and very driven will beat someone who is brilliant but ineffectual.
Definitely. Graduating from college, because you lose the option of going back to school if you fail. Having a taste of success. Doing something that will be judged by your peers. Feeling like what you do will make a difference to the world. Having people depend on you. Losing the illusion that you have infinite time.
Trying to increase your productivity by changing your intrinsic work ethic seems difficult and also inefficient.
How hard people work also depends to a large extent on the systemic environment in which the work takes place. The Hawthorne studies showed this back in the 20s. The basic idea was these researchers went to to study the effect of lighting on worker productivity. They went to this factory with two rooms, and they dimmed the lights in one and walked around and asked people how they felt about the change. The worker's output was measured in pieces produced, so it was easy to measure productivity. What they found was that when the room was dimmer, worker productivity increased. This didn't seem right to them, so they made the lights even dimmer and productivity increased again. And then they made it so it was almost pitch black and the productivity was at an all time high. What they found was that worker productivity was increasing due to having the scientists walk around and take interest in the factory workers. (I would have linked to the Wikipedia article, but it isn't very good.)
There are a whole series of studies since then showing that the idea that some people are hard workers and some people are lazy is misleading at best, because someone's work ethic is more determined by the environment than any intrinsic quality (although different people need different environments).
This is the same basic idea behind the Milgram experiments, where he showed that the majority of people had the capability to carry out the deeds of the Nazi's under the right systemic environment, and that the evil deeds of the Germans weren't so much intrinsic to the people themselves rather than the larger social system.
Even today there is a lot of really really valuable research coming out in this area. Just as an example, this is a good article on using psychology to motivate contributions to online communities:
In many ways, PG's suggestions do imply a change in your environment as well. And so, it may not necessarily be contradictory to your position / the cited research.
one confounding factor is that software development, even more than programming, is a creative art with vague parameters.
I still remember visiting a music store and seeing this dude take a guitar off the wall and blow everyone away with his talent. The things he could do with his fingers were amazing. He was probably a better guitarist than Dylan, Lennon, and Springstein. He was certainly a better guitarist than Andre3000, who (I read somewhere) used G, C, and E minor as the basis for "Hey Ya" because they were the three chords he knew how to play on the guitar.
Unlike the musicians mentioned above, he was also available for private beginner lessons ;)
On news.yc we tend to only talk about truly great programmers because that is what is required for startups
While truly great programmers will help the business become profitable and successful sooner, they are by no means required.
I think there are plenty of non-vc funded startup businesses out there that do ok with so-so programmers. You just don't hear about them in the media because they are privately held.
>There are already several programs going in this direction: a lot of Canadian universities, notably Waterloo, have Software Engineering programs...
Waterloo has Software Engineering, but its not really aimed in the direction he is suggesting. Software engineering is basically Computer Science (math dept) and Computer Engineering (engineering dept) combined. Really, I do mean combined, because it approaches double the work of either program, or it did a few years ago.
What Waterloo has done to address the issues Joel presents is to create a new Bachelor of Computer Science (not to be confused with a BS, it is a BCS). This program is designed to reduce some of the math requirements in later years and allow individuals to have more upper year CS courses. They have not eliminated any of the math or theory out of the curriculum in the first few years.
Waterloo has not had a problem teaching Java to first year students, mainly because the focus is not put on the language. They don't really have any courses designed to just teach you a language, the goal is to teach programming concepts. Early on OOP, data structures, and so on are taught, then things move into algorithms.
He makes a great point. Perhaps an apprenticeship more than a degree? I know friends in a neighbouring university where part of the course requirement is to work in industry at least one day a week. I've learnt far more working for 6 months in a startup than I did in 3 years of Computer Science.
The trouble is you might not know that you don't enjoy computer science until you've tried it. How would you advertise the course?
In all fairness, I guess it depends on what you need to do. For the vast majority of the day to day coding, it involves more of the architecturing and creative and puzzle solving side that joel talks about.
However, if an abstraction breaks down, you'll need to have a deeper understanding of the innards, which a sound theory can only help the deeper down you go. I think this is even more applicable if you're using something based on math that isn't as mature of a technology (which means they're not a commodity and you'll probably have to fix it if it goes haywire), such as machine learning techniques or computer vision.
How often would that happen? Not very often. But when it does, and you have the background to learn, understand, and fix it, that'll make all the difference between you and the next guy.
I have nearly the exact opposite opinion of Joel here. I think the problem is that Java schools try to teach programming without teaching computer science. Mostly they avoid programming and computer science as much as possible and try prepare their students for jobs in IT departments and enterprise and maintenance coding.
I have zero time for any programmer who isn't interested in algorithms, structures and languages. But I've never met a good programmer who isn't.
I spoke to 2nd year Comp Sci undergraduate a few days ago. I'm about 70% sure he said the main language they teach is Java (I don't recall him ever speaking about C/C++). I was telling him about my forays into Haskell and how function composition combined with recursion often confuses me.
His reply: What's recursion?
It's surprising really. Although I hate Java it does have a wide range of concepts within, including recursion surely. Perhaps they focus on displaying a GUI window rather than understanding binary search, etc.
* * *
I think drawing up an "Arts" programme in computer science is a good idea. But only as a MA lest you'll see more variations of the aforementioned example. Things are different in the UK though because university enrolment is linked to university funding.
If I did meet an artistic person who was interested in computer science I'd give her the following advice: learn the very basics of computer hardware (input, encoding into bits and logic, ouput), learn how to read programming documentation/books/tutorials (I'm not sure how I'd expand on this). Once you've understood for loops, switch statements, closures, recursion, etc take those in the same way you took the building blocks you used in your childhood games. Then build something using them.
Of course it may well be wise to take an undergraduate in computer science (of the old c/c++ kind -- ones that focus on core concepts basically) to practice the for loops, closures, etc if the artistic person isn't great at self-study.
There is a lot of cynicism about undergraduate CS -- but no one in the industry offers internships to anyone but students. If you don't like what the Universities are selling, stop buying it!
The article referenced does identify a major problem in an undergraduate programming curriculum. I like the idea of a BFA in programming (this idea has been around for a while), as well as a rigorous program that requires a much deeper understanding of programming languages. Java schools are a problem, no question about it.
But I'm a little sceptical about how much it will help in the grand scheme of things. I'm starting to figure that trying to create a truly talented programmer through a CS curriculum is like trying to create a truly talented novelist through a creative writing program. An intellectual environment is valuable... but how many students are there who would have learned the things listed in this report (functional programming, proper memory management in C, LISP, ada, proper use of threads, a deep understanding of what happens under the hood, as well as solid mathematics) if and only if the curriculum had been different? Or would these students, who will be few under any circumstances, find their way to these subjects anyway?
I don't know the answer to this question. I have a feeling that a better curriculum is worthwhile, and would improve the number of excellent graduates - in other words, while I think that some will find their way to this material on their own, I do agree that there are people who will not achieve the talent level they are capable of because of misguided course requirements. But I wouldn't expect this to turn lots of people into highly talented programmers any more than a writing program is going to produce a bunch of spectacular novels. It just ain't in a lot of people (including, I'm starting to suspect, myself).