12 ms·
Nobody Wants to Learn How to Program
- hnwh 15y agoThis is one thing that Logo got right. You didn't learn to program, you learned to draw cool pictures and animations with the turtle
- gaius 15y ago... and before you knew it, you were recursing and doing all that fancy CS stuff without even trying!
- nazgulnarsil 15y agoplenty 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.
- hsmyers 15y agoShakespeare had it wrong---not kill all of the lawyers, leave them on the list sure, but first kill everyone in human resources. Ask yourself how many times the first question asked in today's interviews is 'Can you do the job?' To my admitted old fashioned way of thinking, it should be the first , middle and last question. Particularly since it is the only question that makes a damn bit of difference. Oh---and then kill all of the lawyers...
- bdunbar 15y agofirst kill everyone in human resources. Blaming the HR guys for bad hiring practices is like blaming a coder for feature creep. The fault lies with business directing HR to do things the way they do. This probably got started when someone infected business with the idea that one should manage people the way xerox machines and staplers are managed. They changed the Personal Department to Human Resources and lurched into a Red Queen's Race to the bottom.
- JumpCrisscross 15y agoBullshit comes from interviewee and interviewer. The asymmetric information (interviewee knows self better than interviewer) and conflict of interests (interviewee wants job; interviewer wants best person for the job) is what makes it difficult. This is before accounting for the Dunning-Kruger effect, which states that people are useless at evaluating their own abilities.
- kiba 15y agoThe more material you give your students to plagiarize, the wider the range of derisive works they’ll make from them. Derisive should be derivative?
- endlessvoid94 15y 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
- AznHisoka 15y agois 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
- pozzy 15y agoI can say the same about programming languages. I'm reluctant to learn a new programming language because I don't want to spend time learning the library, the syntax, and any other intricacies. All I want is that one cool feature that X language has that Y doesn't.
- johncoltrane 15y agoSome people want to know those rules, they end in linguistic courses. Learning a language, learning programming, learning any craft is almost always done with a goal other than the learning itself.
- xiaoma 15y agoHow about just talk to others? That's been my main motivation.
- georgieporgie 15y agoCan anyone with kids comment on whether or not computers are even exciting and empowering anymore? 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. Getting to play with Logo on the Apple ][e was awesome, too. Shapes and angles and horribly flickering animations were exciting. 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. 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."
- unimpressive 15y agoI'm young enough that I feel I can comment. I started off trying to make games. Along the way I noticed all the other (Way cooler) stuff going on behind the scenes and dropped them. Anecdotally, this seems to be the same story for the few people I know in real life who claim to know some form of computer programming. (Whose claims I actually believe.)
- artursapek 15y agoI'm 19, so I've never experienced a terminal running BASIC on a TV screen or anything else from those early days. I think my oldest memory of computers is Win 98. What got me into programming originally was Lego Mindstorms (the original version, the second iteration was no good). My dad and I made robots that could follow black lines on the ground and read barcodes, and it was all with the drag-and-drop interface Mindstorms ran on. ( http://www.bouwvoorbeelden.nl/MindStorms/ShootOut_bestanden/RIS_ScrnTTL.jpg http://www.bouwvoorbeelden.nl/MindStorms/ShootOut_bestanden/... ) And it was fucking awesome. It taught the concepts of programming like loops and conditions and variables, but in a watered-down way that took care of the stuff that's not fun for a kid. As you grow you find joy in tackling more complicated things, but as a kid Mindstorms was perfect. Great role-model for any aspiring curriculum in younger education. Even though it would be way out-dated technology now I feel like Lego should start manufacturing those kits again - they were really amazing. Maybe that would be a good startup idea? Raspberry Pi for kids?
- nhashem 15y agoWhen 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. 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. 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. 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?
- maukdaddy 15y agoThis pretty much mirrors my experience in college. From 98-00 I took Computer Science (and did well) but eventually switched to MIS. Why? Because I spent two years making terminal-based C++ apps and became so frustrated at not being able to make real-world programs that I just gave up. It was so frustrating to be watching the first web bubble develop and yet be in class learning and writing something that seemed so completely different. I don't know if it was my fault or their fault for not being able to bridge the gap between theory/learning and practical skills. Probably some of both. If my courses had somehow seemed more relevant or at least had a few web-based projects where I could see the real-world application of what I was learning, my career path would probably be very different today.
- geon 15y agoI 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. What I would like is to walk the class through implementing a naïve Brainfuck interpreter, optimizing it, then implementing a Brainfuck-to-C compiler and optimize that. It would bring a whole lot of understanding I didn't gain until much, much later. After that, a simple text based adventure game engine to illustrate data driven programming. 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.
- orborde 15y ago> What I would like is to walk the class through implementing a naïve Brainfuck interpreter, optimizing it, then implementing a Brainfuck-to-C compiler and optimize that. Nowadays, I would find that an awesome assignment, but your high school students would hate you.
- muraiki 15y agoI remember having to do a similar compiler assignment in C in college. I think that it was the key assignment for making students believe that programming is absolute drudgery and in no way fun. It was the culmination of the semester, and considering how hard many of the students were working, there was frustration that this was all they could make after a semester. I think that your plan will not go well, and could quite possibly sour your students on programming for life. If you teach the text game first, though, that would make a world of difference.
- danso 15y agoI 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
- AlexeyMK 15y agoThe 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. 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. 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. 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.
- jsz0 15y agoAnother good comparison would be learning to play a musical instrument.
- keithpeter 15y agoYup, and the approach to getting children interested and motivated is similar; teach small easy pieces that sound like what their peer group is listening to.
- trjordan 15y agoAs I sit here, past 3 in the morning, playing with an Arduino for the first time, I find myself thinking... GOOD LORD THIS IS FUN. 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. This _feels_ like I'm just getting started again, and I'm totally jazzed about it. This whole system is approachable, understandable, and _fun_.
- ilovecomputers 15y agoI've programmed an Atmel microcontroller from scratch. It wasn't fun adding all those components together just to bootstrap myself. Luckily I messed with Arduinos before, so at least I knew what I was doing and was getting to barebones of embedded systems. Still, I would prefer to develop with the Arduino. It's just, such a fun way to get started with microcontrollers.
- noonespecial 15y agoI started with MC6811's typing MOV AX,BX. It was like a tiny Manhattan project just to blink an LED. How I envy you.
- gridspy 15y agoYeah, and to write and read a byte of data from an SD flash card - woah!
- karpathy 15y agoThis post very eloquently expresses what I've believed for a long time as well. 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. I've made my own set of tutorials in the past on programming (see the set at http://karpathy.ca/phyces/tutorial4.php http://karpathy.ca/phyces/tutorial4.php, 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. 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.
- ilovecomputers 15y agoI tutored a friend who was in those OOP, Java, Intro to CS class. It was her second class of the series and she was so overwhelmed by all this stuff that was made for professional software engineers, that she just dropped that class. It wasn't mainly the courses fault that she left, she also forgot how to conjure up loops and how to use them, but knowing the professor she took last quarter (he likes to weed out people by making the class difficult) I can't really blame her for not having the enthusiasm to retain such information. I was in her shoes before, so I was very familiar with the "blank page" syndrom she was going through. This "sink and swim" teaching mentality has to go. It seems like from this thread and the article that we are getting a better idea of how people like to learn programming. Let us actually put effort into teaching this way.
- capkutay 15y agoWhile 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.
- muraiki 15y agoBut you can teach new techniques in the context of full pieces, gradually introducing them, to great effect. This is the whole premise behind the Suzuki method of music education, and it's highly effective in cultivating not only technical proficiency but also musicality -- and in young kids, at that (it also substantially improved the musicality in piano playing for my wife, who is obviously an adult)
- mrich 15y agoNobody 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.
- altrego99 15y agoWell, I do. And I also did, in 1990's, when I was 10 years old.
- edtechdev 15y agoThis 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 reason 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. 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). 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). 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.
- FuzzyDunlop 15y agoTotally agreed, and it was how I got my foot in the door with web development. The first tutorial wasn't, Getting started - adding and subtracting numbers in a REPL or doing some basic Hello World nonsense. It was How to build a blog with PHP and MySQL and I came across it when I found out that I didn't have to hand-code all my pages, even in Dreamweaver (at the time). Once again I wanted to do something more, and came across the concept of frameworks (this was just when RoR was born), and then, the famous Make a blog in 20 minutes trend of tutorials that all frameworks eventually copied. I did CakePHP's, and I learnt about classes and MVC and separating concerns. My boss summed it up perfectly: "you need to be given something real to be able to learn from it and enjoy it." He was right, because I'd never have learned how to create an iOS app (and learned Obj-C) if he didn't give me a fortnight to program a design.
- Craiggybear 15y agoI 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 then 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.
- john2x 15y agoI 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. Compared to a few years ago where a simple 2D/text-based game is already considered pretty cool.
- Tycho 15y agoOn 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.
- ThePawnBreak 15y agoI'd love to take up that offer, if it's still available. I already know some programming, but I would like to have somebody as a mentor. Send me an email at mocanu_c at yahoo.com if your offer is still available.
- leouznw 15y agoThat 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... 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. teaching is about enthusiast your students and programing is about make programs with readable code... 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..
- jdietrich 15y agoTo quote eight-time champion bodybuilder Ronnie Coleman: "Everybody wants to be a bodybuilder, but don't nobody wanna lift no heavy ass weight."
- meric 15y agoEverybody wants heavy ass weights lifted, but don't nobody wanna have to be a bodybuilder to lift them.
- jiggy2011 15y agoPerhaps a good way to teach people beginning programming would be to show them how to use a simple web framework. It would have to be something purpose built to be easy though probably with a dedicated language. A bit like this: No libraries or APIs , everything required is built into the standard library. 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. Of course you would need some form of lists too, not sure what a friendly syntax for that would be. Very simple looping syntax, in my experience beginning programmers struggle with this more than anything else. Something like, "do X 3 times" where of course X would be a a subroutine, this would make functional programming seem quite natural later. A WYSIWYG HTML editor that can integrate seamlessly with the language itself. Save teaching HTML/CSS until later. Very friendly error messages that provide links to simple documentation that explains where they have most likely made the mistake. Documentation should include many videos as well as text. 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. One click "deloy to web"
- zedshaw 15y agoI 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. And my books do exactly what this article says you shouldn't do. I'd say if nobody wants to learn basic programming concepts from you, then it's not the concepts, it's you.
- angelbob 15y agoZed, you're awesome. With that said -- it's who you're teaching that lets you say this. Right now there are people who know they want to learn programming coming hell or high water, and you do a damn fine job teaching them. There are also a whole lot of people who might want to write apps, but do not want to go through the pain of learning programming. The audience of Scratch, from MIT, is the narrow end of this giant wedge of people. They have nowhere to go from there because nobody else does it that way. I miss the Apple II. It actually had a few on-ramps for people like that. Those on-ramps are pretty much dead now, though I have no idea why. The guy writing this article isn't aiming at your set of programmers. He's aiming at all the people who aren't programming but would love to be able to build apps of one kind or another. There are a lot of them, and even a lot who could, and who we do a terrible job of teaching.
- zedshaw 15y agoAnd no, I'm saying it's a huge myth that nobody wants to learn the "hard stuff". They do, you just have to teach it right. After that you just have people who aren't interested in programming at all and no amount of graphics, games, or cute cartoons is going to make them want to. You can't force or trick enlightenment on people. But more importantly, I have evidence to back my beliefs. This article has absolutely no evidence.
- Schultzy 15y ago
- crewtide 15y agoAs 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&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. 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. 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. 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.
- j_baker 15y agoI 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 after taking a class about how the steering wheel and blinker work. 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. 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.
- ilovecomputers 15y agoThe article states "A small amount of programming concepts had to be taught at the start and some single-concept examples are given, but the chapter always centers around a complete game." But besides, getting to the point of premature successes: In a way, you need a premature sense of accomplishment to keep a person motivated. Plus, if they ever come across the difficult portions of programming, that motivation might get them to go through the difficulty. To me, the difficulty in programming is solving a problem using a lot of the difference concepts that make it up, but that's true with any profession and you can't get those concepts in your head unless you learn it one at a time. What I don't want to see anymore is programming instructors teaching students a lot of concepts at the same time because to them that's the difficult way they learned and the "right" way to learn. That's just not a proper way to learn, you need to teach one concept at a time and if that means premature sense of accomplishment, so be it in the short term.
- projct 15y agoRandy 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. http://alice.org/ http://alice.org/ (and if you haven't seen it yet, Randy's last lecture is amazing... http://www.cmu.edu/randyslecture/ http://www.cmu.edu/randyslecture/ )
- JVIDEL 15y agoI 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. 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? 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->Q, so for them even the basics of programming are very hard, if not impossible to understand. 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.
- loveitbaby 15y agoThere are two ways to teach programming: 1. SICP 2. Everything else If you think there is a method in (2) that is superior to the method in (1), then please reply to this comment.
- hsshah 15y agoI believe (and teach) programming the way I learn a new language ('Human' language not a computer language). 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. 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 That's why I really like Scratch tool. I can gradually introduce new capabilities (and implicitly new programming concepts).