5 ms·
Since we're talking about Dijkstra, thought I'd bring up the letter he wrote to the University of Texas when they replaced Haskell with Java in their introducto
by Cieplak 8y ago
Since we're talking about Dijkstra, thought I'd bring up the letter he wrote to the University of Texas when they replaced Haskell with Java in their introductory programming course:
https://chrisdone.com/posts/dijkstra-haskell-java https://chrisdone.com/posts/dijkstra-haskell-java
https://www.cs.utexas.edu/users/EWD/OtherDocs/To%20the%20Budget%20Council%20concerning%20Haskell.pdf https://www.cs.utexas.edu/users/EWD/OtherDocs/To%20the%20Bud...
- rcdmd 8y agoGreat letter (2001). It predictably focuses on language quality and side-steps practicality-- the assumption being practicality isn't as important as learning a high-quality language in an introductory course.
- AnimalMuppet 8y agoDepends on what you think you're teaching. Are you teaching computer science, or are you teaching software engineering? Hint: Of your graduates, probably 95% will work as software engineers, and only 5% will be computer scientists. But CS departments think they're computer science departments, even though they mostly are located in the college of engineering. (I accidentally typed "enginerring", which I thought was amusing...)
- TeMPOraL 8y ago> Depends on what you think you're teaching. Are you teaching computer science, or are you teaching software engineering? > But CS departments think they're computer science departments, even though they mostly are located in the college of engineering. I used to think this is true in the form you presented, but now I feel it's really a more relaxed form that's true - CS departments in universities think they're still in universities, not in glorified vocational schools. They try to teach you more than the immediate needs of your likely job, so that you understand the context of what you're working with, and are exposed to more powerful ways of thinking. (I mean, 99% of the time, your typical JavaScript-slinger doesn't need to know what an "algorithm" is and what can be solved with one. These days, a popular language, StackOverflow and open-source libraries are enough to do acceptable levels of work. However, some extra theoretical knowledge will help tackle more complicated problems, solve them better, and will enable one to do something more challenging if they want to leave the web/CRUDsphere.) Related: we now have "vocational schools" for programming too. They're called "bootcamps", for some reason. Tangential: there's a feedback loop between workers, universities and employees in every industry. Progress of the "industry standard" must come from somewhere. If all the new people are being exposed to is Java(Script), the industry will forever keep being stuck on Java(Script). So I feel it's good that at least some people in some universities try to teach above the level required by the industry.
- majewsky 8y ago> Related: we now have "vocational schools" for programming too. They're called "bootcamps", for some reason. Bootcamps are a joke. Germany has had proper vocational schools for programmers for decades. After high school, you can spend three years to become a Fachinformatiker (it's difficult to translate, but basically means "applied computer specialist"). There are two subflavors, Anwendungsentwicklung (application developer) and Systemintegration (systems integrator, this curriculum combines sysadmin and development tasks). All that is entirely separate from CS courses at university, which is an alternate path that one can take (and one that has a higher entry barrier since you need to have at least 8 years in secondary education, i.e. until 12th or 13th grade). In the vocational training, you alternate between weeks at school and weeks at your employer where you work on actual projects under supervision of a qualified mentor.
- Sharlin 8y agoIn Finland we have three tiers of formal programming education. There's vocational secondary school awarding "technician" level degrees, an alternative to more academic Gymnasium type secondary education (grades 10 to 12). The learning is very hands-on and practicality oriented. Then there's "vocational" or "applied science" colleges you can enrol in after either vocational or academic secondary school. They offer four-year bachelor-level degree programs in various fields from healthcare to engineering. The education attempts to mix theory and practice (with varying success). Finally there's the "real" universities, offering primarily five-to-seven-year BSc+MSc programs (before the Bologna Process you used to go straight to master's; these days the steps are somewhat more discrete), and of course PhD programs for those wishing to pursue an even higher level of education.
- majewsky 8y agoAh yes, we have "applied science" colleges as well. What you describe sounds pretty much identical to the German system.
- lr4444lr 8y agoThe real problem here in the US is that we have gotten away from tracking students at all levels, and we were never even doing it much compared with most of Europe or Asia to begin with. It's dragging down the whole system. But I don't want to totally derail this thread, so I'll just leave it there.
- zBard 8y agoSoftware engineers should know and start from Computer Science, why not ? Mechanical and Electrical engineers have to learn Physics, Control dynamics and Differential equations the first couple of years.
- throwawayjava 8y ago> Depends on what you think you're teaching. Are you teaching computer science, or are you teaching software engineering? Either one. But certainly not "Java Programming". Good thing, too -- I doubt many of the UT Austin students Dijkstra was teaching back in the day ended their careers still pounding out punch cards...
- sevensor 8y agoI have some university degrees in (non-software) engineering. Engineering school is pretty far from a vocational program, but engineering students often mistake it for one. When I was in industry, it was easy to spot the people who'd made that mistake -- they couldn't engineer their way out of a wet paper bag. Engineering is applied science, and if you don't understand the science, you're going to have a heck of a time trying to apply it. The difference between engineers and scientists is that scientists know how to make new science, and engineers know how to make new things using science.
- AnimalMuppet 8y agoYes, exactly. Chemical engineers needs to know chemistry, but they need to know more. They need to know "how do we make this stuff, efficiently, at scale, without blowing up the plant." They're not going to get that from the chemistry department. So, does a software engineer need to know some computer science? Absolutely, but they need to know more than that. They need to know how to efficiently produce working software at scale. And, to return to my previous post, starting with Haskell could still get you to a software engineering education, as opposed to a computer science education. But it feels to me like the initial direction is aiming at a CS education, not at a software engineering education.
- TeMPOraL 8y agoIn a sense, those two are not conflicting, but reinforcing - practicality in software "engineering" usually means lowest-common-denominator, cheapest-workforce technology. It's good to have exposure to more powerful tools and ways of thinking, and the industry isn't likely to give you one unless you actively come looking.
- ereyes01 8y ago> A very practical reason for preferring functional programming in a freshman course is that most students already have a certain familiarity with imperative programming. Facing them with the novelty of functional programming immediately drives home the message that there is more to programming than they thought. While later on, he does gripe about language quality, I think this is the most salient point of that letter. It touches upon IMO one of the most misunderstood things about Computer Science- it's a science curriculum, not a vocational school. The best (only?) way to build practical skills is doing practical things and learning through experience. Computer Science is more about rigorous reasoning about programs and their mathematical properties. While learning about practical things like building web apps is fine and well, universities are not well equipped for this sort of vocational curriculum. They are primarily institutions optimized for performing scientific research.
- xenophonf 8y ago> it's a science curriculum, not a vocational school I griped about this to my CS/SE professors until my senior year of college, when I finally understood why they were teaching us all these weird languages and styles instead of the C/C++ that I assumed everybody used at the time: Programming languages come and go - hell, entire platforms come and go - but the underlying concepts (and the ability to teach oneself) are forever. I haven't written a single line of C/C++ professionally, but thank goodness I have the mental tools necessary to pick up all the different programming languages, libraries, protocols, etc. I did end up using.
- deleted 8y ago[deleted]
- lr4444lr 8y agoI absolutely adore Djikstra's stubborn and always eloquent insistence on rigor and purity in CS education, his unabashed refusal to see even one tendril of its mathematical connections be sacrificed for mere code production efficiency. If this case isn't going to be made at the university level, then where?
- Bromskloss 8y agoI agree with you! Something I've wondered, though, is how he would propose writing a formal specification for, say, a graphical application. Does anyone know?
- commandlinefan 8y agoOne thing I noticed even decades ago when I was in school is that the education system - from kindergarten up until grad school - encourages "bare minimum" thinking. The goal is an A - if you happen to learn something en route to getting that A, great, but the goal is an A. Everything about the way things are structured encourages you to find the path of least resistance to that A. Now that I'm (much) older, I'm going back and trying to re-learn the things that I learned just enough to get by when I was in college, I wonder - if the curriculum had been more "rigorous", would I have learned more, or would I have been washed out?
- dfxm12 8y agoIt seems like college taught you "how to learn", which I think is way more important that learning Haskell vs Java, etc., especially in a field as ever changing as Comp Sci. I don't know how many decades ago you were in school, but imagine all those people who were "rigorous" with learning punch cards in 80s in depth, at the expense of getting a wider education...
- hnal943 8y agoThat's pretty reductive. Rigorous learning in the punch card era would have involved a lot of programming on paper, which requires you to understand the program you are writing in a more comprehensive way than does trial and error. There's a discipline to that type of work that lends itself more naturally slowing down and to thinking about architecture. Also, while software engineering changes frequently, I'm not convinced that computer science is changing rapidly. It's expanding, but it's not as if fundamental computer science concepts are being rendered obsolete.
- ben509 8y agoGPA and class rankings do seem to be counterproductive measures if you're trying to get people to challenge themselves. The classes I got the most out of are the ones I got B's and C's in, or even had to redo in one case. It definitely makes more sense if you look at the idea of the "sheepskin effect" where the degree is not a signifier of material mastered, but a signifier that you are a good worker. In that case, what you learn is generally far less important than whether you work well on a team. And a high GPA means you are orderly, methodical and conscientious.