TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Nobody Wants to Learn How to Program

316 pointsby jemeshsuabout 13 years ago

29 comments

nhashemabout 13 years ago
When I was in high school (late 90s), they had kind of a weird curriculum for teaching programming. We had AP classes for Computer Science A/AB, which you had to be at least a sophomore to take. There was also a class called 'Computer Programming' that anyone could take, which I did as a freshman, although the students in the class were actually pretty evenly distributed between all four grades.<p>Basically we were taught QBASIC and given assignments. The first few weeks seemed pretty mundane as the OP describes, getting into conditionals and loops, etc, but after we learned those, my teacher told us to make something like 'Choose Your Own Adventure' text-based game. I remember loving that assignment and even compiling it as an EXE and sending it to my other friends. This pretty much followed through the whole year, learning some new programming concept (arrays, functions, etc) and then making some sort of game as an assignment. We had the usual "write a program to display all the factors of a number" assignments too, but I just remember loving the game projects. I didn't know anything about Big-O or AVL trees or whatever, just that I could create cool stuff on a computer.<p>In 10th grade I took Computer Science A, and about half the class hadn't taken Computer Programming already. The material was a lot drier, obviously, and I remember a lot of those students switched out. I witnessed the same thing my freshman year of college -- no 'Choose Your Own Adventure Games' as an assignments, just grueling midterms on polymorphism and inheritance.<p>So this post really resonated with me, because my thoughts have basically echoed this for awhile -- why isn't software engineering taught as a discipline that can let you implement and create, since that's exactly what it is?
评论 #3662599 未加载
评论 #3663352 未加载
评论 #3662432 未加载
评论 #3662869 未加载
edtechdevabout 13 years ago
This is stuff educational researchers have known for over 20 years, and theorists have known for 100 years (John Dewey). It's called situated cognition. Learning happens in context. You have to give students a <i>reason</i> to learn, not just learn something for its own sake. It explains why for example a Brazilian street kid may be a whiz at math, and a 6 year old may have hundreds of Pokemons memorized. See for example the work by James Paul Gee or Jean Lave. John Dewey said 100 years ago that we shouldn't educate just to prepare kids for a future they know and care little about, we should educate them for today, teach them stuff that is useful and interesting to them today.<p>An example of my own - at 9 my father attempted teaching me programming with basic - I thought it was pretty boring all that work just to draw a US flag on the screen, especially compared to the videogames I was playing. I was similarly bored with a basic programming class in high school and a survey of programming languages (lisp, C++) class in college (worst class I ever took in my life, actually).<p>It wasn't until early college when I started making CGI web applications, games, and educational software that I learned real programming and saw the value of it (along with the value of similarly boring calculus/linear algebra stuff).<p>I disagree with the author of this article's put down of GameMaker and similar tools. Python was not designed for beginners, and neither was Javascript, of course. Right now Scratch may be the best tool for teaching kids how to program, although it is very limited and not so great for creating games as other tools.
评论 #3663049 未加载
评论 #3662634 未加载
karpathyabout 13 years ago
This post very eloquently expresses what I've believed for a long time as well.<p>It really hurts me to see newbie programmers in first year classes going through Java, writing getter and setter methods for a monster Object Oriented cash register or something. The code is spread across 40 different functions in 10 files, each function containing at most 5 or so lines of code. I'm sure it is a nice starter code for an amazing cash register application that can potentially scale to thousands of lines of code correctly, but it is not the way to teach programming. What a disaster.<p>I've made my own set of tutorials in the past on programming (see the set at <a href="http://karpathy.ca/phyces/tutorial4.php" rel="nofollow">http://karpathy.ca/phyces/tutorial4.php</a>, though this set is for intermediate students who are already familiar with coding). I've always felt that coding should be taught in context of doing something concrete, not just by itself. Snippets of code without the whole don't mean anything. I also take a somewhat extreme view in that I think that game programming specifically is the best way to teach, because making games is engaging and students learn all the programming only as a by-product. Once they are comfortable with the basics, they should be introduced to progressively larger code bases, and at some point it becomes obvious why Object Oriented paradigms, for example, are a good idea.<p>As a last point, I think Udacity recognizes this as well and shares a similar philosophy. Notice their first two classes: "How to build a Search Engine" and "How to build a Self-driving car", not "101: Computer Programming", with Chapters 1. Variables, 2. Control flow, etc.
评论 #3662403 未加载
评论 #3664428 未加载
zedshawabout 13 years ago
I have about 200k+ unique visitors a day reading my books, and over a million since I started tracking in May last year. I have comments on nearly every exercise on my books, which means people are actually going through them. I have 2200 people taking my udemy course which is the most popular paid class on the site (last time I checked). My books are used in workshops all over the world, have readers from all over the world, and have taught people from nearly every age group that can read English.<p>And my books do exactly what this article says you shouldn't do.<p>I'd say if nobody wants to learn basic programming concepts from you, then it's not the concepts, it's you.
评论 #3662947 未加载
评论 #3663199 未加载
评论 #3663673 未加载
评论 #3663008 未加载
endlessvoid94about 13 years ago
"If you want to build a ship, don’t drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea." - Antoine de Saint-Exupery
trjordanabout 13 years ago
As I sit here, past 3 in the morning, playing with an Arduino for the first time, I find myself thinking...<p>GOOD LORD THIS IS FUN.<p>The Arduino folks have this whole thing nailed. The install process (especially for something that involves, you know, buying resistors) was super-easy. The examples seem endless (they have a UDP implementation? Nifty!). The troubleshooting page is relevant and specific. The default environment is so stripped down it hurts, but you know what? I don't care.<p>This _feels_ like I'm just getting started again, and I'm totally jazzed about it. This whole system is approachable, understandable, and _fun_.
评论 #3662825 未加载
评论 #3662444 未加载
AlexeyMKabout 13 years ago
The cleanest comparison I can think of is, nobody wants to work out. They want to look good, feel good about themselves and be admired and have their pick of their opposite sex.<p>This makes sense, as does the fact that working out can get you there. They don't want to work out, they want to _want to_ work out.<p>At the University of Pennsylvania, we (CS club) held a Codecademy-style event (hackertrails.com) targeted mainly at business folk. We had 150 folks, mostly MBAs, show up to the first event and maybe 15 to the second.<p>They want to start companies, and get that programming gets them there. But they don't actually want to learn to program, they _want to_ want to.
评论 #3662358 未加载
jdietrichabout 13 years ago
To quote eight-time champion bodybuilder Ronnie Coleman:<p>"Everybody wants to be a bodybuilder, but don't nobody wanna lift no heavy ass weight."
评论 #3665249 未加载
kibaabout 13 years ago
<i>The more material you give your students to plagiarize, the wider the range of derisive works they’ll make from them.</i><p>Derisive should be derivative?
hnwhabout 13 years ago
This is one thing that Logo got right. You didn't learn to program, you learned to draw cool pictures and animations with the turtle
评论 #3662830 未加载
john2xabout 13 years ago
I think part of the problem why some aspiring programmers give up is because the bar is too damn high. They get fed a constant stream of beautiful 3D games and iPhone apps, and when they start to make one (from following a book/tutorial, for example), it looks like shit compared to what they/others are expecting and they lose their initial enthusiasm.<p>Compared to a few years ago where a simple 2D/text-based game is already considered pretty cool.
j_bakerabout 13 years ago
I agree with the general principle behind this. But I don't agree with it in practice. It's a bit like saying "Nobody wants to learn how to drive, they want to learn to get to the store.". And strictly speaking, that's true. I mean, nobody wants to know about how to use the steering wheel or blinkers. Now, the first time I got behind the wheel, did I get to drive to the store? No. I got to drive around the parking lot <i>after</i> taking a class about how the steering wheel and blinker work.<p>Now clearly this example is different from programming because it's much more difficult to hurt or kill someone learning to program than it is when learning to drive, but I'm not convinced that the general principle is any different. With programming, you'be simply gotta learn about variables and loops, just like you've gotta learn how the steering wheel and blinkers work.<p>What I'm concerned about with this approach is that it might give newbies a premature sense of accomplishment that might hide just how difficult programming really is. In other words, it's like trying to convince someone that they've driven to the store when all they've done is driven around the parking lot.
评论 #3663736 未加载
mrichabout 13 years ago
Nobody wants to work hard (learn to program), everybody wants to show off a coding masterpiece, say Quake or Future Crew's second reality, to their friends. A good teacher leverages the latter to motivate students to do the former.
capkutayabout 13 years ago
While learning piano, no one wants to sit in a room playing scales over and over. They want to play Claire De Lune. Programming is similar in that it can be an art but it is first and foremost a skill. You need to struggle with boring parts until you figure out that you can actually make very cool things...but first you need to learn about loops and variables.
评论 #3662666 未加载
geonabout 13 years ago
I tought a highschool level intro class in C++ programming. Sadly, it was very short, only 1.5 weeks of 2 hours per day, so we didn't even have time to cover classes.<p>What I <i>would like</i> is to walk the class through implementing a naïve Brainfuck interpreter, optimizing it, then implementing a Brainfuck-to-C compiler and optimize that.<p>It would bring a whole lot of understanding I didn't gain until much, much later.<p>After that, a simple text based adventure game engine to illustrate data driven programming.<p>That would show the difference between hard coding behaviour in assignments and creating actual usefull applications. It would also show that doing it properly isn't necessarily more difficult, and definately less code.
评论 #3662566 未加载
评论 #3662661 未加载
crewtideabout 13 years ago
As someone who learned to program in my 30s (spent my 20s as a professional musician) I can't agree more. The book that was recommended to me was K&#38;R, which I found so dry as to be impossible to read through. The first book I really used was C++ in 21 Days, which has you writing working programs from...well, from day 1.<p>I always thought the reason for this problem in teaching programming is that what you need to know when switching to a new language is totally different from what you need to know when you don't know how to program. If you already know how to program, the first thing you need to know is the syntax: data types, iterators, etc. It's like being a carpenter and going to a new shop -- what are the tools? But if you don't know how to use the tools, being told the torque on an impact wrench is completely useless information. Not only is it useless, it's easy to look up, and therefore a waste of time to teach.<p>I now help teach the Boston Python Workshop, a weekend workshop for non-developer women and their friends. We do cover loops and data types on Saturday morning, but then all afternoon is projects -- building programs that cheat at scrabble, access twitter, and draw colored grids.<p>I totally understand why experienced programmers teach the way they do -- it's what they'd want to know. But the focus should not be on the language, it should be on the skill of how to program regardless of language. And yes, that's really hard to teach.
jiggy2011about 13 years ago
Perhaps a good way to teach people beginning programming would be to show them how to use a simple web framework.<p>It would have to be something purpose built to be easy though probably with a dedicated language.<p>A bit like this:<p>No libraries or APIs , everything required is built into the standard library.<p>Database is a simple key/value store that can be used transparently within the language. Something like "Store X = 3" and "Get X" where X is the key name.<p>Of course you would need some form of lists too, not sure what a friendly syntax for that would be.<p>Very simple looping syntax, in my experience beginning programmers struggle with this more than anything else.<p>Something like, "do X 3 times" where of course X would be a a subroutine, this would make functional programming seem quite natural later.<p>A WYSIWYG HTML editor that can integrate seamlessly with the language itself. Save teaching HTML/CSS until later.<p>Very friendly error messages that provide links to simple documentation that explains where they have most likely made the mistake.<p>Documentation should include many videos as well as text.<p>Graphical debugging should also be taught through a super simple debugger that just dumps the values of every variable at a breakpoint and allows users to browse the DB.<p>One click "deloy to web"
AznHisokaabout 13 years ago
is this the same with foreign languages as well? Noone really wants to know the rules of a grammar. They just want to impress others, understand anime or foreign tv shows, or curse in another language
评论 #3662269 未加载
评论 #3662543 未加载
评论 #3662299 未加载
JVIDELabout 13 years ago
I think the biggest fallacy these days is that "programming is easy". I bet pilots think flying is easy, and surgeons will repeatedly tell you cutting someone open and removing this vestigial part of the cecum is routine, but if you did that the patient will bleed to death from the first incision.<p>My point is that coding might be easy for you, easy for me, and it must be easy for most people here, but the rest of the world?<p>I'm going to sound like Spock here but most individuals out there aren't logical. People out there don't thing in terms of ¬P-&#62;Q, so for them even the basics of programming are very hard, if not impossible to understand.<p>And even if you work around your limitations and learn how to program there's a long way between "hello world" and the engineering behind the kind of stuff that motivates most people to learn how to code, like building the next Google.
leouznwabout 13 years ago
That remembered how I learn programing, at the beginning of the course I wasn't at all into that, learning pascal, printing words into a black window, but when I started my project, I got a goal and it become very fun and I was very enthusiastic into that...<p>I think sometimes the common sense of the right way of doing things its not the best way, other thing that comes to my head about that, is when you end up in big projects with very complex design patterns applied but since nobody b-sides the creator fully understand the pattern, and the shift of people in the project is very high, the thing becomes a mess.<p>teaching is about enthusiast your students and programing is about make programs with readable code...<p>but what i really see today, is teaching about be difficult with a ton of unused things, and programing about to be most complex that u can..
nazgulnarsilabout 13 years ago
plenty of people are fine with learning how to program. It's Learning How To Program that people don't want to do. I blame hiring practices TBH. If anything programming should be the ONE field that leaves the bullshit signaling aside and just hires people who can make things work.
评论 #3662083 未加载
评论 #3662289 未加载
hsshahabout 13 years ago
I believe (and teach) programming the way I learn a new language ('Human' language not a computer language).<p>It should be segmented in a way that at the end of each segment there is a 'reward' (an application of the learning that is considered beneficial/cool by the student) and a 'desire' to learn more to achieve the bigger reward.<p>So typical segments for a new language could be: - bragging/showcasing to your family and friends that you know how to count some numbers and words - being able order food in restaurant in the new language - communicating with someone who speaks only the new language - being able to enjoy a TV show/movie in the new language etc<p>That's why I really like Scratch tool. I can gradually introduce new capabilities (and implicitly new programming concepts).
dansoabout 13 years ago
I disagree that regular expressions should be deferred to later. For professionals who are trying to figure out what value programming has for them, regexes have more use than game concepts
projctabout 13 years ago
Randy Pausch helped create Alice, which is a bit like a modern Logo or Mindstorms - helps you create 3d animations and various other cool stuff, while teaching Java syntax.<p><a href="http://alice.org/" rel="nofollow">http://alice.org/</a> (and if you haven't seen it yet, Randy's last lecture is amazing... <a href="http://www.cmu.edu/randyslecture/" rel="nofollow">http://www.cmu.edu/randyslecture/</a> )
Tychoabout 13 years ago
On a related note, I put an advert on Gumtree a while back offering to teach/tutor people in programming for free, but didn't get any responses.
评论 #3662896 未加载
altrego99about 13 years ago
Well, I do. And I also did, in 1990's, when I was 10 years old.
loveitbabyabout 13 years ago
There are two ways to teach programming:<p>1. SICP 2. Everything else<p>If you think there is a method in (2) that is superior to the method in (1), then please reply to this comment.
georgieporgieabout 13 years ago
Can anyone with kids comment on whether or not computers are even exciting and empowering anymore?<p>When I was eight, we got a Commodore VIC-20. It plugged into the TV and booted into BASIC. Just running PRINT statements and simple loops was unbelievably cool. I learned key positions (and how easily mistakes are made) by spending hours typing in bytecodes printed in magazines. With any luck, at the en of it, a completely unforeseen game would appear.<p>Getting to play with Logo on the Apple ][e was awesome, too. Shapes and angles and horribly flickering animations were exciting.<p>Now, it seems to me that the difference between Dive Into Python (or whatever) and Call of Duty are so immense, that even running Hello World would be a disheartening experience. But maybe I'm just too nostalgic.<p>Incidentally, I distinctly remember from my first proper high school programming course (Pascal) that the instructor asked why we wanted to learn programming. Every single student responded, "to make games."
评论 #3662261 未加载
评论 #3662321 未加载
评论 #3662267 未加载
评论 #3662347 未加载
评论 #3662292 未加载
评论 #3662552 未加载
评论 #3662418 未加载
评论 #3662217 未加载
评论 #3662729 未加载
Craiggybearabout 13 years ago
I agree that involving beginners with OOP is a distraction -- albeit a very important principle. But they must be able to write their own modules, functions and classes first then be comfortable with exporting those <i>then</i> OOP can come naturally from that. Most software is still highly procedural in nature (while it may consume and refer to objects) and even in languages like Python where everything is an object you can still write software that has a clearly defined beginning, middle and end. Once you have a handle on all that, you can then start utilising the objects and their properties and that is huge fun in Python and Ruby.