6 ms·
Undergraduate programming
- greendestiny 19y agoI 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.
- jcd 19y agoRichard Gabriel came up with something similar several years ago: The software MFA. http://www.dreamsongs.com/MFASoftware.html http://www.dreamsongs.com/MFASoftware.html He draws analogies between software composition and creative writing, performing plays, etc. Worth a look for those interested in the current thread.
- geebee 19y agoI was about to submit this one myself... 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).
- Alex3917 19y ago"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.
- bayareaguy 19y agoOn 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.
- pg 19y agowe 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.
- mrtron 19y ago>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.
- deleted 19y ago[deleted]
- edw519 19y ago"The teachers are experienced software developers from industry. The studio operates like a software company." Oh, you mean like ycombinator?
- deleted 19y ago[deleted]
- tomh 19y agoMaybe more like ArsDigita University. That went over well, but the website at least is still serving the videos: http://www.aduni.org/ http://www.aduni.org/
- Funky_ 19y agoMy college switched from C++ to Java based coding in 2005 for learning the fundamentals. I would have much rather learned C++.
- Tichy 19y agoSo get a good book on C++. Frankly, I don't consider programming languages university level at all...
- comatose_kid 19y agoI wonder if the focus/content of an undergrad program really influences the outcome for whether or not person x will be a great programmer. Many great programmers began before university, and many didn't attend university at all (John Carmack immediately springs to mind).
- iamwil 19y agoIn 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.
- danw 19y agoHe 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? Perhaps Olin College could serve as a model for this approach [http://en.wikipedia.org/wiki/Franklin_W._Olin_College_of_Engineering http://en.wikipedia.org/wiki/Franklin_W._Olin_College_of_Eng...]
- Tichy 19y ago"kids who are really interesting in programming, not computer science" I have troubles imagining that kind of person? In any case, I would be wary of a programmer who doesn't even know Quicksort.
- tarkin2 19y agoI 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.
- jsnx 19y agoThere 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!