4 ms·
I completely disagree with the argument here. The class isn't a class to teach graphics or to teach how to make android games or how to put something on a phon
by TheDong 12y ago
I completely disagree with the argument here.
The class isn't a class to teach graphics or to teach how to make android games or how to put something on a phone. Beginning computer science classes explicitly should not be about those sorts of things.
Beginning computer science classes should explicitly be about what a program is, what a function is, abstractions, and so on. Not "what does code look like". Not "how do I make a hello world program". No, what a program is. Lambda calculus or a context sensitive grammar and lexer or what have you. If you look at SICP, it got it 100% right there.
Now, you say, he said programming, not computer science, and your argument presumes computer science. Even so, python and javascript are terrible language for beginners if we ever want to see our craft improve. If someone wants to be a good programmer, they should be able to understand the full implications of having a proper type system, what memory safety and management is, how functions work, and so on. They should be exposed to haskell, lisp, rust, or the like.
If we teach a beginning programmer to use C or Python or Javascript, we're simply teaching a new generation that memory leaks and buffer overflows are not a solved problem. That our languages are so poorly designed you have to constantly check if your type is what you think it is. That resource ownership is not a solved problem. That functions are weak and uncomposable. By God, you're withholding the true beauty of programming from them and showing them some mockery.
If your students find the idea of having a webpage or a game that they produced more appealing than delving into resource allocation issues and understanding what a type system is doing then they shouldn't be told they're professional programmers, they should be hobbyists coders. I'm all for people writing toys like games or webpages in unsafe languages that have learnt little from the last 50 years of CS research... coding but not programming. That's great. I'm not all for these same people being taught that they should be writing security software, banking software, and doing this stuff professionally when they have no clue what referential transparency is.
Truly, one of the reasons professionally developed software is rife with issues is that we don't teach programming or computer science in our computer science course; we teach some coding and software development and never even let them know what true programming is until the theory of computation course in senior year.
- platz 12y agoBeginners that aren't in a formal class setting (and his description more closely describes mentoring someone outside of the classroom (son/daughter)) have not yet made the decision to invest in learning things from first-principles as a university student has already locked into doing. So, for these beginners there must be some kind of reward or immediate application for their efforts if we even expect them to continue past the stage of early burn out. This is what the post speaks to.
- gcommer 12y agoDo note that the author is not a Professor teaching CS. If you click through the link in the first sentence of the post, this is the question he was trying to answer: "What's a good first programming language to teach my [son / daughter / other-person-with-no-programming-experience]?" His post wasn't really about teaching CS to students who are paying for years of classes. For his target audience, motivating them and giving them tools to quickly build usable software is important. Being able to trivially share said software is another plus.
- Jweb_Guru 12y agoEverything the GP said above is correct, though. Since so many people's first exposure to programming is through one of these languages, many people are simply unaware that it's possible to do better. Many people find it hard to switch from their first language. I agree with you that Haskell, Rust, and (to a much lesser extent) Lisp have the problem that it's hard to get started with easy graphical libraries aimed at beginners, though I don't agree that that's the case for Python. This is why historically there were languages like Logo explicitly designed as "Lisp for beginners," but today most such attempts seem to simplify programming to the point that it can hardly be described as programming at all (thinking of tools like Scratch).