Wednesday, January 9, 2008

undergraduate programming is crazy

i just finished reading undergraduate programming from mr. joel. i had to read it a couple times...

basically he says:

JavaSchools are not operating in a vacuum: they're dumbing down their curriculum because they think it's the only way to keep CS students. The real problem is that these schools are not doing anything positive to attract the kids who are really interesting in programming, not computer science. ... It would be a huge magnet to the talented high school kids who love programming, but can't get excited about proving theorums.

woah.. i can't believe he just said that. that sounds like trade schools to me.

i can't believe that we've come to that approach. while i think its good that we have programmers, i value things like critical thinking, research abilities, having broad area of knowledge, etc. bottom line is that being a software engineer is much more than writing code. being a great developer requires more knowledge than just knowing how to write code.

does the industry really just want programmers?

anyway... i'm a little confused about his post.


austen.ito said...

So I re-read it and he is just saying that some people love to code (me being one of them) and they should have the ability to learn it at the university level. He doesn't want a trade school, he wants universities to teach SE better. You can have critical thinking, research abilities, and learn different areas by _applying_ SE skills rather than just twiddling your thumbs learning that O(logn) is better than O(n^2).

I think you did all of that working on Hackystat right? How much of what you learned in school did you apply to your research and hacking on Hackystat?

aaron said...

software engineering is a big research area. keywords in there are research area.

learning software engineering and learning programming are totally different.

so, in my opinion, learning SE is computer science.

anyway, i think the confusing part of this is that he is mixing up software engineering and programmers.

here is what waterloo's ad looks like for their SE course work:

Software engineering is a systematic and disciplined approach to developing software. It applies both computer science and engineering principles and practices to the creation, operation, and maintenance of software systems. Software Engineering requires expertise in data management, design and algorithm paradigms, programming languages, and human-computer interfaces, and it requires knowledge of digital hardware systems. It also demands an understanding of and appreciation for systematic design processes, non-functional system properties, and large integrated systems.

The program’s technical requirements include a solid foundation in mathematics, computers and networks, computer science, and engineering. Software engineering courses build on this foundation and introduce disciplined development processes, technical documentation, software design principles, project management, and quantifiable analysis. Non-technical requirements include teamwork, technical presentations, reports, peer evaluations, and co-op work experience.

compare that with what joel is talking about:

undergraduate curriculum that consists of 1/3 liberal arts, and 2/3 software development work. The teachers are experienced software developers from industry. The studio operates like a software company.

see the difference now?

austen.ito said...

Let me try to flesh out what is in my brain...

I think my confusion is my classification of SE and what he is saying in his article. To me there are two types of software engineering:

Type 1: SE to develop software, hacking, coding, provide a product to customers. As Waterloo says, it's a structured approach to developing software.

Type 2: Software engineering where you perform research on the bleeding edge techniques that practitioners in the industry eventually use.

I believe that Joel is talking about improving Type 1 because right now the universities are in sad shape. He may say programmers, but I think he really means Type 1 SEs. You don't become a good Type 1 SE (which is what I think he wants) if you only learn how to program. You need to learn the discipline well, which again is what he wants. Thats why I think he means SEs when he says programmers.

aaron said...

actually, i think waterloo is much more than type 1. that was my point.

aaron said...

i'm sure we've all seen the coding horror post How Should We Teach Computer Scientist? by now.

i'd like to reiterate the fact that jeff brought up: software engineering skills like source control is the bare minimum of a computer science education. you can't have just a developer education nor can you just have an algorithm education. you need both to be a master hacker and a master thinker.

i don't like how he ends the post though. computer science is so much more than just bug reports and cursing at web hosting. i'd like to turn the tables on jeff a little. maybe the reason why there are less and less good developers out there is the lack of attention to solid computer science classes.

in any case, everyone needs to realize that its both theory and practicality that makes a great software engineer.