47 ms·
Teaching how to code is broken
- enchiridion 5y agoIMO coding should be taught like a trade. Take woodworking for example. Sure you spend some time learning to make straight cuts etc, but you quickly move to building thing with a lot of feedback.
- dboreham 5y agoIt isn't taught that way?
- habeebtc 5y agoWhen I was in school (it's been a while), we built super boring things that nobody cared about as our assignments. Various inventory systems, which you have to sort/search. That was a big challenge of mine in school. I wasn't that interested in the assignments, because I was building boring stuff that didn't really solve problems, let alone ones I cared about. I am pretty prolific in my career, and I'm not even what you would call a hardcore dev. Which brings me to my next gripe with CS curriculum: It is geared towards training hardcore devs and not any other type of engineer. The types of coders we should have some sort of curriculum for, which we to this day mostly do not: -SRE's -Ops people -Support people -PM's -Accountants/General finance -DBA's -SysAdmins -Network engineers -Cloud engineers
- qsort 5y agoI partially agree, but how isn't the usual CS curriculum relevant for Sysadmins, DBAs, network engineers and the like? What CS curriculum doesn't include networks, relational theory, hardware architecture, os architecture? How can anybody in those roles be successful without at least informally understanding the rudiments of big-O notation or without having some light scripting skills? Certainly CS curricula could be improved, but a good one doesn't do too bad of a job at preparing you for technical roles IMO.
- habeebtc 5y agoMy inclusion of them on the list is from just 2 data points: Those sorts of classes were available when I was in school, but it was not a whole track, it was 1 class each. Second data point: These are the types of roles I meet in the wild who would benefit from coding, and they usually cannot (or can do some very light scripting). I cannot explain it exactly. They just usually are missing that skill.
- Jtsummers 5y agoIn the US, the kind of programming most immediately useful for sysadmins and DBAs, and other operations fields, are, or were, typically present in community colleges and technical colleges, not university programs (where CS dominates, or "programming for engineers/statistics" basic classes). At least that was the case 10+ years ago, have they stopped teaching those classes and providing certifications/associates degrees appropriate to those fields?
- dboreham 5y agoArticle seems to be complaining about the typical chapter layout for a reference book on a given programming language. Such books aren't intended to teach coding. The intended audience is those who already understand how to code, in a different language.
- cloogshicer 5y agoFrom my experience, many beginner books are structured in a similar way.
- systemvoltage 5y agoBasically, every YT tutorial is exactly like the Chapters listed. Corey to Sentdex, or pick your favorite "How to code" book from Amazon. It is quite rare to find a book that the article describes (use-case based learning). Can you share a few if you know?
- wiseleo 5y agoThe Head First series of books. They are available for multiple programming languages and use the same set of use cases across them all. The books are even written with techniques to suggest to the brain it should remember this information.
- pixel_tracing 5y agoI seriously hate the card game example as I rarely play card games, maybe something more modern as an example?
- mewse 5y agoI suspect that "teach coding by making Battlefield V: Definitive Edition" would likely require marginally more than the nine chapters proposed in the article for a basic card game.
- pixel_tracing 5y agoI meant something like calculate your home budget, simple todo list, etc.. Something you might actually even end up using after you finish the chapters.
- omegant 5y agoAs someone learning right now this reflects perfectly my frustration with the teaching systems I’ve found. The first part, let’s say the basic logic of programing is fine and relatively fast to learn. I have no problem with lessons starting there. Where I find the problem is with the actual translation to real projects with the languaje, how to interface the code with the data, the server and the outside world. The jump is huge! Of course you can overcome it with effort and stack overflow, but the feeling is like walking in a nice hill with clear views and path, and suddenly arriving to a vertical cliff with no clear routes up. You see others climbing easily, hanging out there, but you don’t even know where to set your first hand. In my case, I’m starting with javascript in codecademy. The first lessons are more or less clear. Some concepts are harder to grasp or to express in code correctly, but with some exercises and effort you get them. Then you start with real application stuff (promises, requests, Get, Post) , at first is easy enough, the concepts are not hard (the syntax is a bit harder, or at least the variety of syntax can be confussing). But suddenly you get thrown into AJAX, JSON, Frameworks, boilerplate. All at once, from 0. Copy this code, change this variable, lots of instructions but little learning or at leat a highlevel view of where you are. I could choose another course, but I rather keep with the good parts in this one and look for the lacking lessons outside, than start hopping schools. Also I have some great friends that are experienced programers that can help me when I get too stuck. Is interesting how different teachers explain differently. Some lessons are perfect for begginers, clear explanations, useful exercises. But in some lessons you can clearly feel how they are created by people used to teaching experienced programmers. Several concepts or tools thrown at you without further explanation, handwaving lots of steps, repeat this piece of code several times and that’s it. I know that I can go through the material, google it, see youtube tutorials and classes and advance. I’m doing it, most of you have done it before. Not am impossible task by any means. Maybe learning to code is easier than ever, but still… I find that it is way more complicated or with a steeper courve than necessary at the level I am currently. There are lots of great resources to learn, but is difficult to find them structured in a coherent logical way for the learner! Is a bit frustrating TBH.
- nesarkvechnep 5y agoI have a solution which has worked well for decades. Pick a textbook, read it from cover to cover, do the exercises. Don’t pick any textbook but a tried and true one like Structure and Interpretations of Computer Programs or How to Design Programs. I’m forgetting a lot of titles but you get the idea. Yes, these books will not teach you the coolest language on the block ATM, but you’ll be able to solve problems with any language. It has worked well for me as IMO almost nothing beats a good textbook.
- imbnwa 5y agoAs a self-taught, highly agree almost all intro material I was coming upon back in 2013/14/15 was basically just a reference throwing concepts at you without a context that was incrementally increasing in complexity to guide you. I was one for trivia, so this was fine to a certain extent, but he's dead right, the job is not writing code (as much as the JIRA Industrial Complex would like to make it out to be), the job is thinking and problem-solving. I only began to understand the thinking needed for doing my job after after mentoring by a consultant who fully grasped and could communicate this, where all the other in-house seniors were too stuck in the Complex for whatever reason to transmit this clearly (likely related to the near-unihibited freedom the consultant had relative to the in-house seniors).
- friendlydog 5y agoTeaching everyone the same way is wrong. Everyone has different learning styles, education and life experience. If there is a large enough market share for a topic grouping like learners together can be very efficient. Creating a one sized fits most solution is the default setting for many educators and yields an "okay" result. Allowing learning at your own pace, with community support and many styles of consumable content will give a excellent result for self motivated individuals. Students who are not motivated or need help with motivation can be handled differently. Edit: Learning styles has a broad meaning more than just the "I'm a visual learner."
- jhjhvhvnv 5y ago"Everyone has different learning styles" is a common misconception.
- dragonwriter 5y ago> "Everyone has different learning styles" is a common misconception The myth of different sensory orientations to learning is definitely, well, a myth; it is probably not justified to go beyond that and say everyone learns best with the same pacing and other details of approach.
- ratherbefuddled 5y agoI thought "learning styles" were largely debunked as a myth now? The linked article describes the structure of a reference book, identifies it as a structure suitable for a reference and those with significant experience, and then decries it as a tutorial for newbies. It seems rather obvious - I wouldn't try learning a new language by reading a dictionary either. It doesn't support the hyperbole in the title. There are many good tutorials for learning to code in different programming languages, sometimes it's hard to pick them out though. What works for me, and pretty much everybody I've watched try to learn anything, is a simple loop. Conceptual explanations (whether written, verbal, or visual), applying the concepts with exercises / practice / work with examples to follow, digging into the details using a reference, and then broadening to the next set of concepts. Eventually the pattern recognition kicks in and people can see the connections and predict the rest.
- japhyr 5y agoI've been thinking about this topic for a long time. I was a secondary math and science teacher for 25 years, and I taught intro programming classes whenever I could. Later I wrote Python Crash Course, which was largely informed by my experiences working with students - my direct classroom teaching, and my attempts to find resources for students who were capable of independent learning. I've looked critically at many learning resources over the years. I certainly agree with the author's main point. Giving people a series of dry lectures or chapters that focus on syntax, without any intentional narrative about what it all means or why we should learn it is not particularly effective. I'll make a brief comparison to the math materials I've reviewed for secondary education. There are many curriculum resources that are really well structured mathematically - all the math is correct, and each new topic builds on previous topics coherently, and leads somewhere specific in the end. But most of these kinds of resources are fairly dry to students who are not intrinsically motivated to learn math. Then there are many resources that present things in a fun or interesting way, but lack a coherent structure to the math that's presented. These are better at catching students' interest, but they still don't bring students to a place where they understand math well enough to use it effectively in their own lives. There are few curriculum resources that truly do a good job of hitting both of these goals - well structured mathematically, and with compelling topics. It's difficult because the people creating the resources need a really strong pedagogical background and a really strong mathematical background. People often tend to focus on one or the other of these areas. I see the same issue in how learning resources are developed for programming. There are probably thousands of books that have a table of contents similar to what the author presents here, without a coherent narrative to motivate people through all those topics. Many of these books are technically sound, but they don't carry people through all the topics because there's too little tying all the topics together. Then there are a whole bunch of resources that use a specific compelling topic to grab people's attention; the author uses the example of card games. There are a couple limitations here: if you pick an interesting context, you only appeal to the people who like that subject. Also, you then have to stretch the context to cover concepts that aren't specifically needed for that context. That is, building a card game project brings up many topics and ties them together. But what do you do with important topics that weren't needed? Do you leave them out? Do you present them separately? Do you force them into the context? One of my big frustrations with learning resources, especially k-12, is that they do a great job of grabbing kids' attention. We've kind of solved that problem - young people are plenty interested in learning to code. But to really gain the ability to build out your own ideas, you need to work through the list of topics that the author of this article presents. What's the conclusion? There's no one way to teach people to code. We need a variety of resources that address all of these issues in ways that meet the needs of a variety of learners. People who are designing these resources, whether they're developing a book, video course, online tutorial, etc, need to think through these issues and have a clear and intentional approach to how their resource is structured.
- DwnVoteHoneyPot 5y agoTutorials do exist for absolute beginners. Seems like the author is implying they rarely exist which is incorrect. "Hello world" is a tutorial/real world example. I learnt the how to code through the "Ruby on Rails Tutorial" by Michael Hartl. The tutorial market is different than the computer science 101 crowd, so you have tutorials for one, textbooks for the other. The issue with using tutorials in textbooks is that it's more effective to use 1 great example per chapter, than shoe-horn 1 monolitic project as an example for 13 chapters. And the three CS 101 books I've read do have good examples or interesting problems to solve. If I remember correctly the Harvard 101 book does use cards for objects. One problem that the Ruby on Rails tutorial has as a CS 101 book is that there is so much boiler-plate stuff needed to have a functioning monolithic example. To do "hello world", need Database -> Code -> Template... when you can do: print("hello world"), then move on to next chapter. The article is much-ado about nothing.
- Apocryphon 5y agoI was going to make a comment very similar to yours- there's been plenty of programming 101 books, though maybe more so in previous decades starting in the '90s, which has the author present a project or a series of projects and each chapter involves building out the project while introducing concepts. While those books tend to be about teaching how to use a specific framework, SDK, or language rather than programming in general, that project-based method of pedagogy is common. What's annoying about those books is that sometimes you don't care to go through the entire project, you just want to jump to a specific topic, but you're forced be part of a continuous narrative. Though in modern times where every technical book has a corresponding repository somewhere with code samples, you can at least use that code rather than starting chapter one. Whether you want to learn from how-to projects, or from abstract first principles, there's resources out there for both. Teaching how to code is not broken at all. Maybe teaching data structures and algorithms could use more work- but that's the subject for a different article.
- macrowhat 5y ago
- lanecwagner 5y agoI agree there are so many issues with coding education, (full disclosure, that's why I'm building Qvault.io) but I don't think the big problems are the ones presented here. I see the following as the biggest unsolved problems: 1. Online learning rarely teaches you what you should be learning. Resources are useless if you don't know which subject matter is right for you yet. 2. Platforms don't give you a feel for "completion", e g. when and how should I start job searching. 3. You don't get personal mentorship or cohort support like you would at school 4. Too many videos, not enough code. Almost all learning when it comes to coding should include writing code. 5. Healthy mix of guided and unguided learning. Courses are great for abstract concepts, projects need to follow so that you can apply what you learn on your own
- khaledh 5y agoExactly this! To quote myself from a couple of years ago: I wish the style of teaching complex programming topics walked me through the pain of making something work, exploring a few alternative solutions, showing the tradeoffs, and then after the pain has been experienced by the learner, a proper solution is finally introduced and recommended. IMO it's a much more powerful technique for teaching if you walk the learner through the pains first, then arrive at a solution, and tell them that "you've just [discovered how ownership works in rust]"; i.e. the concept is given a name at the _very end_, not defined at the beginning as a solution to a pain the learner never experienced. Unfortunately very few books/tutorials take this approach.
- Gigachad 5y agoI feel like the average person already knows why. They know what they want and they just want the info on how to do it. I don’t think the order of teaching presented in the article as bad actually is bad. What I think the problem I and others had is learning from a book to start with is really hard. Stuff doesn’t get retained well or make sense. Programming finally clicked for me when I did the codeacademy class for JavaScript in 2012. What helped was it wasn’t just shoving walls or text at me. It was “here is a very tiny concept, go try it. Now here is another tiny concept, try this”
- maerF0x0 5y agoInterestingly related to the author's point of teaching using cards. When I used to give coding interviews one of my favorite tasks was to implement the scoring rules of poker[1]. People would often ask "why ask them about poker?" and I'd show them that there is a ton of skill coverage 1. Decomposition of requirements into sub problems 2. pattern matching for code reuse and composition 3. seeing if they can come up with a decent algorithm to communicate to and from sub functions the results 4. seeing if they can come up with an ordering mechanism for cards 5. seeing if they can come up with a for loop that counts if there are 5 of something 6. String parsing to their own intermediate representation of cards All these skills are used basically daily (at least in my workplace) [1]: a good description of the rules, sample IOs, and myself as an oracle (ask me anything, no expectation of knowing poker itself) served to help keep "poker" from being the subject matter tested
- ramses0 5y agoIf you truly believe that "poker" isn't the subject matter being tested, run the same interview question (this weekend) with a friend, blind, on scoring hands of cribbage. I'll wait. https://bicyclecards.com/how-to-play/cribbage/ https://bicyclecards.com/how-to-play/cribbage/
- maerF0x0 5y agoA bit of a nuanced problem here. I've played a lot of crib too. I hear your point, I guess my point is that serious measures are taken to dampen the difference between someone who knows poker and someone who doesnt. I've actually found largely candidates do not know the game so the calibrated comparisons is mostly between people who don't know the game. Crib may actually be a better option -- the more esoteric the game, the less pre-knowledge plays a factor. Edit: also NB: the only part that was to be implemented was the relative rank of a hand (ie, which hand won) . So the analogous equivalent in the crib example would be just the scoring of each hand.
- shagie 5y agoThe scoring poker is indeed an interesting problem - and its Project Euler #54 ( https://projecteuler.net/problem=54 https://projecteuler.net/problem=54 ) Starting from high card on gets to some interesting increasingly complex "can I identify it rules"
- hamolton 5y agoI don't know of any of my peers that took a course that heavily relied on a textbook; it feels like most university intro CS courses spend most of the time commitment in lectures and problem sets. I think many would agree that you learn the most doing homework. It's been common for a decade now to recommend beginners on the internet looking for an intro to CS the course Harvard CS50. The course has attracted criticism for be overwhelming for a single semester, as it requires submitting assignments in Scratch, C, Python, SQL, and HTML/JS. However, I think it, like other well-acclaimed intro to CS courses do teach problem solving in via hand-held labs and problem sets. Perhaps its prevalence suggests the course is influential in the way CS is taught, but outside of Yale copying the course, I'm not sure. I think the problem sets in CS 50 are effective for teaching problem solving. Looking at examples of problem sets for the most recent semester (I did the Fall 2012, so it's changed a bit) there is... - making an animation or game in Scratch which must have have a loop, condition, and variable - printing pyramids of # characters - caesar encryption - ballot counting - implementing bitmap image filters - a spell checker - writing SQL queries against a database of movies - writing the frontend of a website - writing a basic full-stack web app I guess the main difference between the course and the post's proposal is that it doesn't follow a single narrative, so when you apply concepts in your head is only after the first introduction. Looking on other resources I encountered at Georgia Tech, I remember both the intro to CS class I saw others take and the cool, interactive intro to CS textbook Mark Guzdial showed my class How to Think Like a Computer Scientist [1]. They both start with python turtle graphics towards the beginning to teach variables and loops before venturing off into other concepts. I think the first half of Automate the Boring stuff with Python actually faces the issues the author cites before diving into common applications in the second half; I do wonder now many working professionals learned from this text which I've generally liked at a glance. I suppose the most influential intro to CS materials are for AP CS A, although I'm not familiar with the course. [1] https://runestone.academy/ns/books/published//thinkcspy/index.html https://runestone.academy/ns/books/published//thinkcspy/inde...
- hateful 5y agoThis reminds me of when I took Java in college. One of the prerequisites was Introduction to Computer Programming 1 & 2 (101 and 102). 1 was along the lines of what was on the top of this article: Chapter 1: Types Chapter 2: Variables Chapter 3: Operators/Math Chapter 4: Control structures Chapter 5: Arrays Chapter 6: Functions Chapter 7: Structs Chapter 8: Classes and Objects Chapter 9: Methods Chapter 10: Inheritance and Polymorphism And 2 was algorithms (sorts, etc) Then the Java class was: Chapter 1: Types Chapter 2: Variables Chapter 3: Operators/Math Chapter 4: Control structures Chapter 5: Arrays Chapter 6: Functions Chapter 7: Structs Chapter 8: Classes and Objects Chapter 9: Methods Chapter 10: Inheritance and Polymorphism But not much about what you can do in Java specifically. I understand going over these concepts briefly and how to do them specifically in that class, but to have the whole class focus on them was not very useful. Again, 101 was a PREREQUISITE! So there shouldn't be anyone in the class who hasn't taken it!
- PaulDavisThe1st 5y agoI still don't any see initial introduction to the art of problem decomposition. We want to do X ... what are the parts of X? How might we accomplish them? For each of them, what are their parts? How do we take a complex task and break into pieces that we know how to do and then compose them back together to meet the goal? What kinds of decomposition can we do? What kinds of decomposition work well? Until you understand this high-level sense of what you're trying to, type list container map iterate immutable functional lambda coroutines are just noise.
- deleted 5y ago[deleted]
- deleted 5y ago[deleted]
- lordnacho 5y agoIMHO it should start with some tools, so that changing the code is not too cumbersome. How git works, how the IDE works, how some basic OS commands work. Everyone starts with a different base but often it's the people who messed around with a computer a lot who know some shortcuts that to most coders are obvious. The less pain you have with changing the code, the more code you can try.
- a-dub 5y agopersonally i've always thought the best way to teach is with already working code. given a reference (the internet will do these days), some well written working code with examples of all constructs and idioms in it for a lesson, and possibly a sequence of prompts to change what it does with increasing difficulty, seems the best way. most importantly, it must do something that the learner at least has some remote interest in and for best results the activity should be creative and constructive.
- _hao 5y agoI think people are missing the main point here. It's not about problem solving. From my experience people that are good programmers are people that like to tinker with things. The logical part of programming can be learned by any intelligent person reasonably fast. It's not about variables, statements, expressions, ifs, loops etc. It's about having a conversation with the machine and trying things out. The tools, languages, frameworks are just extensions of this. Computers and the way they work are fundamentally alien to our human way of thinking about things. You need patience and dedication. One approach might work for person A, but not for person B. At the end with time just like everything else in life you forge a meaningful "relationship" where you understand each other and can work together with the machine.
- JoeAltmaier 5y agoMy approach is to employ folks with enthusiasm. If they're teachable, they'll figure out whatever pile of tools they get thrown into on the first task. Then they'll have some skills and the next task will seem less daunting. Of course some mentoring is useful. But just the stuff that's pertinent to the task at hand; concrete help that gets them moving forward. Because, somebody is paying for results. And because producing results has a very positive effect on confidence. I just offered work yesterday to a young person helping me at a big box store. I mentioned I was buying a device to test an Android build, and they got excited and started making cogent comments about the tool chain and devices available. I game them my card, and when they graduate in 3 months (from a local community college) I'll find them work on a client's contract. The first project will cost me more than I earn from subcontracting them (because it takes me away from my high-rate work I would otherwise be billing). Maybe break even by the 2nd. But it's a sort of enlightenened-self-interest thing. If young people get into the field, everybody benefits. And of course as an old guy with resources, I can afford to take some risks. Because it's everybody's job to look out for the other guy.
- financetechbro 5y agoI wish there were more people out there like you. You sound like a great mentor / boss
- moonchrome 5y agoHave you actually been through this before ? I ask because my experience wasn't the same so I'm interested in other perspectives. One experience that jumps to mind right away - a few years back I was in charge of mentoring a group of interns. The thinkering/enthusiastic guy was smart and reminded me of myself at that stage - but I was a terrible employee at that point and it took a lot of failing to get productive, and this guy had all the same faults - overcomplicated things, didn't focus at task at hand, wasn't paying attention to requirement details... all this made him unreliable and a pain to work with. There was one guy in the group who was average capability/enthusiasm but was hard working and focused. Wasn't the fastest to figure things out but if I left him with a problem I could see he put effort and tried to pay attention.
- shadowgovt 5y agoI once got to be a fly on the wall (well, a member in the audience) to a graduate project presentation where a team had put together a simple game development environment to get young people excited about programming (Alice, which is still around: https://www.alice.org/ https://www.alice.org/). They were presenting their (relatively positive) results on how much engagement they'd seen getting students involved using Alice as opposed to available alternatives for learning beginner programming. One of the professors in the School of Computer Science raised the question of why Java was chosen as the backing language for the whole project, since it's not a very strongly-typed language and for pedagogy, there are much better languages with more rigorous type safety. The student presenting began to get a bit flustered when she answered (I believe her answer was something along the lines of familiarity of potential mentors and teachers with the language) and the professor seemed to reject her answer out of hand. Finally, her advisor stepped in and just dead-panned across the room "Because elementary-school students are excited about seeing cool things on screen, not about computing the Ackermann function." General murmurs of laughter all around. I think those two professors had an ongoing debate behind the scenes that the unfortunate student had just gotten caught in the middle of. (Fiction short story related to this topic: http://thecodelesscode.com/applicant/2 http://thecodelesscode.com/applicant/2)
- akihitosan 5y agoI think it is better to learn concept for those who has a hacker mindset. Going through examples is for super users at most, imho.
- godot 5y agoIMO this was why the early web was so powerful as a way to on-ramp new developers. I learned coding a little bit before the web, from school materials like writing Pascal programs in DOS, in early 90s. Those were fun little exercises for school, but that was about it. In the late 90s I got the internet and got curious about making web pages, did View Source everywhere and taught myself HTML and basic CSS/JS (nothing more advanced than alert boxes and such at the time) while in high school, and it was what really got me to start my career in software engineering. Building a web site gives you all the "why"s. It gave you a motivation to learn different aspects of coding. Whether it's the presentation layer in HTML, or application logic in PHP and Javascript. Conditions, loops, arrays and even data structures all make sense when you have all the context of the thing you're trying to build.
- systemvoltage 5y agoYeah, I built a bunch of things in Macromedia Flash (Actionscript 4.0). It was when I realized that I can tie the animation with code. Hell, I didn't even know that it is code. It is just some structured text to automate thigns. Mind blown. I also like: https://handmadehero.org/ https://handmadehero.org/ series but it was too much of a time sink.
- paradaux 5y ago(Disclaimer: I work as an online Tutor for an Irish EduTech company which teaches children ages 8-18 to code via after-school and weekend classes.) This article has the right idea. Our style of teaching varies on the kids age. Younger kids (8-11) are treated much like school children, the teacher presents a topic, kids are given activities to do which they screenshare, then we work through them as a class. This is done in Scratch, mostly. As the kids get older we take a more hands-off approach, we have tonnes of exercises which take kids through Java via Processing. Learning variables by moving shapes, if statements by adding constraints to those moving shapes, collision detection by moving the mouse around and watching shapes change color as they collide, in the hopes to build their confidence to start building their own games. This is a highly adaptable form of teaching, although it's only really possible and practical as we have such small class sizes, allowing tutors like me to be able to spend ample time with teach student when issues arise. Younger students often have the enthusiasm, but they don't know where to guide it, this lends itself well to a lecture then activity format where there's at most a 7-8 minute period of "lecture" followed by an equal amount of activity time. The older kids often don't need the "lecture" part at all, rather we set them more and more challenging exercises and explain things individually as issues crop up, it allows them to use their own problem solving and initiative and we have seen some excellent programmers come through because of this (some of whom have began working with us as Tutors after they turned 18!)
- ModernMech 5y ago> I've found that modeling or simulating something real like a card game is very effective. I think the last paragraph of this article should have really been blown up to be the entire article. I want to know more about this experience the author had. Because one question I have is: should we even be teaching object-oriented programming to beginners? The rationale for the modified class schedule is that it answers the question "WHY!?", but I still feel myself screaming that question after reading this piece. Let me propose something entirely different: what if trying to get everyone to learn Python is too much to ask? In fact, why would we use such a niche programming language when there's one out there used by far more people: Excel. Why are we reaching toward the object-oriented model of program design, when the people have spoken as to what works for them? Far and away, the masses prefer the reactive, dataflow experience provided by Excel, so let's meet them at their level. And SQL to the list. There are people in my life who I wouldn't trust to turn change the battery on my laptop, and yet they somehow know and understand SQL for their job. They are completely mystified by Python, yet can write a SQL query like no one's business. I think it's far past time "learning to code" meant "learning Python/JS/C". Let's stop trying to force them to use a tool that we developers are comfortable with, and teach them how to code using tools they already know how to use.
- nottorp 5y agoIf you ask me easy teaching of programming died with the 8 bit machines that only did basic. You had instant feedback, the system was extremely simple and it was possible to hold it all in your head. ... and as you did more complex stuff you realized on your own that basic isn't quite enough and went to look on your own for more complex environments to manage the complexity you had created.
- codazoda 5y agoI created a series of small books that teaches code by making art. I give them a chunk of code to type and then I break it down after that. This is how I learned long ago. People tend to learn slowly as they work, understanding more and more as they go. Often, they can make minor changes after their first project. Change the color? Make it larger? Splash of Code: Learn Programming by Making Computer Art https://www.amazon.com/dp/B082FMPXW6 https://www.amazon.com/dp/B082FMPXW6
- kenjackson 5y agoI love the last chapter of "No one teaches the end so lets put concurrency here" -- is so true. I feel like I've almost never done the last chapter of any textbook I studied in school. And it does seem like concurrency shows up in a lot of comp sci textbooks at the very end.
- gumby 5y agoStructure and Interpretation of Computer Programs follows this advice: designed for people who'd never used a computer before (no kidding -- this was common in the early 80s), the first lecture introduced the idea of procedures and abstraction and went on to demonstrate root finding, prime factorization, and a little symbol differentiation IIRC. A great way to get started.
- nathias 5y ago'Typically' better known as the straw man. Teaching to code was broken in the 90s, today it is the least broken of anything you can possibly learn.
- dfdz 5y ago> Why? Because none of these chapters answer the most important question a reader has, the entire time, WHY!? Why is all this important and what problems does it solve? When should I use this thing that I learned? When I was an undergrad taking an advanced class about probability theory, I asked my professor for help understanding the bigger picture. I could solve each of the problem sets, but I couldn’t see the bigger the picture. Why the hell are we doing this? The professor told me something like “Oh don’t worry, somethings are just impossible to fully understand the first time. Once you take a second and third class that uses these ideas the bigger picture will come together” I have found this mindset to be incredibly true. Rather than philosophizing about the optimal way to learn to code (or anything) just: 1. read/take a class about the subject 2. use the ideas you learned 3. goto 1 While it seems inefficient, I think it can be a very natural way to learn and avoid all catch-22 situations
- pxtail 5y agoI observed in myself that when learning new programming language/framework/concept I usually need to force myself through first few chapters even though I may not necessarily understand why. This understanding usually happens later when multiple of basic concepts are in place, absorbed and together help to grasp bigger picture which leads to understanding smaller elements. While this seems to be working decently I'm not sure if it's only because I became accustomed to this, allegedly wrong method of teaching - not only teaching 'how to code' as this method of teaching is default one in all kinds of school books.
- Tainnor 5y agoYes, I think there are two things which are simultaneously true: - We (as a society) often teach in not necessarily the most effective way, or at least a way that might be a bit ineffective for a number of students. - Some people get obsessed with "the best way to learn something" and never actually start doing the learning. I'm learning Japanese atm, and the amount of people you find online who obsess about the best method of learning instead of spending that time just working through a textbook (or whatever), is staggering. It's good that you mention probability theory, because maths is really a field where I've felt that it's totally normal to feel like a complete idiot the first time you read something.
- TaylorAlexander 5y agoI must share the very wonderful video by Seymour Papert on teaching LOGO. He makes a similar observation: imagine if we taught people dancing by sitting them at a desk and explaining all the steps to them, making them memorize them and write them down, but they were never allowed to actually move or try the steps. We find when teaching people a language for example that immersion works very well. So Papert suggests teaching math by immersing students in "Math land", and shows off his computer language LOGO designed to do that. It is a wonderful video in many ways and a big inspiration for me as I think about hopefully teaching in the future. https://www.youtube.com/watch?v=ZG9cYhekB8A https://www.youtube.com/watch?v=ZG9cYhekB8A Youtube link for easy viewing but the entire video series he helped produce is here: https://el.media.mit.edu/logo-foundation/resources/onlogo/index.html https://el.media.mit.edu/logo-foundation/resources/onlogo/in...
- xmprt 5y agoMissing from those analysis is the fact that not everyone has it in them to learn to code like that. I've genuinely tried learning to dance before with practice and I just sucked at it so I put it down and picked up another hobby. Yet in today's world we have this obsession with getting everyone to learn how to program in python. Instead we could be teaching the actual skills like critical thinking and problem solving in a ton of other ways that might stick better with students.
- bdowling 5y agoFor someone who can think critically and solve problems, translating a solution into Python is the easy part.
- 999900000999 5y ago>Why is all this important and what problems does it solve? Couldn't of stated in better. My why was creating a few games with my friends. It's been a real gift to see it turn into a career. You can teach yourself to code for free with an old laptop ( Ubuntu with Xfce works) , it's one of the last accessible careers.
- wffurr 5y agoBest programming class I ever took did exactly that. We built a board game and continuously iterated on it throughout the semester.
- sylens 5y agoDo they still use Java to teach object oriented to newbies? I remember being absolutely puzzled about all the boilerplate in my first coding class in high school. What do public, static, void, main, String[], and args all mean? The teacher telling us “Don’t worry about it, we’ll get to it later” always felt weird to me - why are we starting here?
- scottlilly 5y agoI've generally followed the article's outline for some programming tutorials I created. The lessons are based on building a simple role-playing game. They try to quickly get to something to make the students feel, "I wrote a program!". I try to get them creating a screen, displaying a little data on it, and adding a button that makes a change they can see on the screen. However, a big problem is that this approach avoids a lot of good architectural decisions. I don't want to spend the first twenty lessons describing abstract application architecture. So, as the lessons progress, and students ask for more-advanced features, I inevitably need to do a big series of refactoring lessons - which loses a good percentage of the students. Another struggle has been with the language and tools changing over the years. I really wish people stopped using the lessons I wrote in 2014, with Windows Forms, .Net Framework 4.5, and Visual Studio 2013. Most of my support has been for version issues. Unfortunately, I don't have the time/energy to re-do all those lessons and videos.
- chaps 5y agoOne of the paradoxically oddest and best ways I've seen programming taught was from a games programming class I took in high school. We were tasked with transcripting a game (custom engine) from a booklet with its code already written. So it was more-or-less just typing what was in the book. Thing was, the code was filled with typos and broken code so that if you copied it verbatim, it wouldn't work. I'm not sure if that was intentional, but as you'd go through the book and correct typos, you'd kind of just... pick up how to code. It almost became a reflex to understand and correct the code whenever you saw any errors. Most of us in the class came out of that with basic coding skills and we didn't need to go the path of normal exercises you'd see in most programming classes.
- ducharmdev 5y agoThis sounds pretty similar to code koans, where you learn a language by making all the tests pass. The rustlings course for Rust works this way too - very effective IMO. Some examples: - F#: https://github.com/ChrisMarinos/FSharpKoans https://github.com/ChrisMarinos/FSharpKoans - Ruby: https://github.com/edgecase/ruby_koans https://github.com/edgecase/ruby_koans - Powershell: https://github.com/vexx32/PSKoans https://github.com/vexx32/PSKoans - Rust: https://github.com/rust-lang/rustlings https://github.com/rust-lang/rustlings
- laserpistus 5y agoPretty much our take at Scrimba. Except the most self-motivated students the content needs to take small steps, be relevant, be engaging and have low barriers to getting your hands on the code. So many students say they get an AHA moment with this approach.
- rileytg 5y agolet’s not forget michael hartl’s tutorial https://www.railstutorial.org/ https://www.railstutorial.org/ I personally know at least 7 devs who started their careers with this; some are at faangs now.
- bern4444 5y agoI like the idea presented here but I think a mix of approaches is needed. After the author's chapter 2, "Chapter 2: Suits (String concatenation, Int vs literal string)" I would want to extend it to say on top of strings and ints we also have booleans, floats, null, and any other primitives and why they're useful (maybe these show up in the lessons, maybe they don't). I'd do the same for chapter 3 too. After learning about arrays I'd want to include a section on other objects that are common, maps, sets, linked lists etc. Both styles need to be mixed together imv.
- LAIFscratch 5y agoThere are people working on this rigorously, try going through Prof Krishnamurthi's papers: https://cs.brown.edu/~sk/ https://cs.brown.edu/~sk/ he teaches higher-order functions because they've found it helps students understand how an API works, he designed his own learning language from scratch (Pyret) and I went through much of his older CS19 Brown course here: https://learnaifromscratch.github.io/software.html https://learnaifromscratch.github.io/software.html because the course uses a web browser IDE, they were able to take stats of all students to see when they started to write code VS when they wrote examples and tests. The tests he teaches are property-based not typical cs101 style tests just plugging in edge cases and hoping for the best. His goal is to turn the teaching of programming from absolute guesswork and wishful thinking into something proven to work which is admirable, most CS professors that I had just taught whatever they felt was best for them when they first learned, not what is provably best for everyone in a large class. Of course the answer to everything is 'just be motivated and dig deep into X then you will learn as you go' like building a program from scratch, or how some mathematician's learned by being fascinated with various topics and purely researching them on their own for hours on end. For some people this will work others will just give up when it gets too difficult, I find it's something you can do after 1/2 of a course, you have just enough education to be able to read the documentation and now you can actually teach yourself whereas before that just attempting cryptic docs about types and objects good luck. Then of course there is getting paid to program, which requires specific skills you would never get doing ad-hoc hacking around for fun. You actually have to go on Kattis or Leetcode and bang out countless tiny algorithms where each one you have to defend your architect choices with analysis of it's complexity to a room of professionals with vastly more experience than you, and this is of course what most people want when they tell you 'teach me how to code' it's really 'teach me to make money from my laptop like you do'.
- 65 5y agoIt's not about teaching people literally how to code. It's about teaching people how to learn how to code. For example, if you're trying to teach someone Javascript with "this is a variable, this is a function, this is an event listener" they're going to get no where. It should be "how to change the color of a button when I click on it." Then you guide the person to creating a good Google search query. And I think it's totally acceptable for beginners (and experienced programmers) to just copy and paste at the beginning, slowly figuring out how it all works as they try to get an idea working.
- kumarvvr 5y agoOfftopic : I am always annoyed with the use of the word "Broken" in place of more meaningful words (Flawed, Wrong, Malfunctioning, etc.) Everything is "broken" The system is "broken" (Flawed / biased / wrong / unfair / unjust) The garage door opener is "broken" (not working / not operating / faulty) What is up with that? I see it a lot in movie too. This laptop is "broken", my mobile is "broken"
- mbrodersen 5y agoI have had success teaching complete beginners how to code using the following approach: 1. Show them how to implement a super simple text adventure game in Basic using just print, input, if, and goto. 2. Ask them what cool things they want to add. Show them the minimum coding skills needed to accomplish it. Only adding new skills when the students wanted to add more advanced features to the game. 3. Repeat. I was blown away by the joy and happiness the students were displaying. They were programming and creating a fun game in the first lecture. Most of them stayed behind afterwards to expand their game, play the games created by the other students, and helping each other make more complicated features. What a joy to see.
- bdowling 5y agoThe problem started with using the word code as a verb. To code used to mean (1) translating a message into a coded form (e.g., cipher or Morse code), and (2) classifying something by attaching pre-defined codes to describe it (e.g., data entry). Programming a computer is not like either of those tasks, except to someone who doesn't understand programming.
- bear8642 5y ago> To code used to mean (1) translating a message into a coded form This is probably where the verb form originates - translating the assembly or higher level ideas into the binary required for the computational engines of the past
- tibbar 5y agoIt’s a little confusing and sad to me that people have to try to pressure themselves to go from zero to professional engineer in a short period of time. That sounds stressful and, frankly, almost impossible. Like a lot of people here, I taught myself how to code as a child in a terribly inefficient manner. I spent probably around 100 hours making games on my TI-83 - you had write a formula to figure out how to color each pixel, it was awfully slow. I spent hundreds of hours on Microsoft InfoPath making toy apps with a little scripting. Everything was very difficult, but it was insanely fun. I’m a night owl but I would wake up at 4am to start coding stuff so no one could tell me to go outside. At some point I read an introductory text that showed how to do web things, and later I got a server, and made some real-time multiplayer games by the end of high school. I didn’t know about databases so I would serialize to and from a text file. I’ve never had that much fun for such a sustained period of time since then. I couldn’t replicate it, and with the distractions of modern tech I probably couldn’t even focus that much anymore. I’m grateful that my childhood obsession turned out to be absurdly lucrative. Best wishes to everyone, young and old, diving in for the first time!
- analog31 5y ago>>>> I’m grateful that my childhood obsession turned out to be absurdly lucrative. Best wishes to everyone, young and old, diving in for the first time! There does seem to be an irony, that the people who were movitated by interest in the subject matter aside from money, turned it into a lucrative career. Meanwhile the people who were motivated by a lucrative career lost interest quickly. Maybe not general enough to be a good generalization, but I've seen it a number of times. I think market demand for certain skill sets does not contradict the principle of "find your passion," but just means that some peoples' passions lead to marketable skills. Becoming a good scientist, or professional musician, takes about 15 years, starting in middle school or earlier.
- 908B64B197 5y ago> It’s a little confusing and sad to me that people have to try to pressure themselves to go from zero to professional engineer in a short period of time. That sounds stressful and, frankly, almost impossible. ... That's what engineering school is for. At least, that's how aerospace engineers, EE and so on do it. > I’m grateful that my childhood obsession turned out to be absurdly lucrative. I find that, when there's passion there's generally money. People that are insanely passionate will make things happen naturally.
- andrewstellman 5y ago> Teaching how to code should be about problem-solving and effectively using the tools of a programming language to solve it. Say for example modeling a card game. Even better if the example is a continuous improvement starting from the very basics, hard coding stuff, and then increasing the scope as follows: How funny! This is exactly the approach Jenny Greene and I took in Head First C# (O'Reilly), right down to the way we start with cards and suits, then ordering, building up to a complete card game.
- nexuist 5y agoThis is also the exact approach Stanford's CS193p used as an introduction to iOS development! https://cs193p.sites.stanford.edu/ https://cs193p.sites.stanford.edu/ You start with a static card on the screen and slowly add more robust features until you have a fully working card game. I was able to follow this course in 2014 as a freshmen in high school and it certainly influenced my trajectory to being a professional mobile and web developer today. The greatest nugget I took away from this is that programming is not about actually knowing anything about the computer: it's about declaring "this is what I want" in a computer-friendly way and then following through with "how the hell do I get you to get out of my way?" aimed at the compiler. Although work experience has taught me that you also sometimes need to port this approach to managers and coworkers. I also think this is why generic questions like "how do I learn programming?" put you in the wrong direction. You don't care about programming, you want to build an app, or a website, or a business, or a game. The first step is admitting what you actually want and then you accidentally end up learning programming along the way.
- Ericson2314 5y agoI am surprised no one mentioned the now-classic How to Design Programs https://htdp.org/2021-11-15/Book/index.html https://htdp.org/2021-11-15/Book/index.html, which was one of the first intro textbooks to actually take in account some education research. Since then, there is https://dcic-world.org/2021-08-21/index.html https://dcic-world.org/2021-08-21/index.html by some of the same people with substantially more education underpinning it. The blog post has some good ideas, but really we can do so much better than armchair musing about sclerotic curriculums now!
- Ericson2314 5y ago*substantially more education research
- MisterBastahrd 5y agoI don't fully agree. While it's nice to have a goal to shoot for when learning to program, it's also important to be able to practice discrete topics individually so that you can fully grasp what they're about.
- devwastaken 5y agoDo both. You need the vocab - variables, types, methods, classes, etc. And then the application - deck of cards, real life inheritance, etc. It's a highway, if you teach mainly the high level mental theory, they'll get it, and won't know how to implement it. They won't be able to associate the syntax to the logic of the theory. Inversely, if you teach only the syntax and implementation, they don't understand the theory and have a very difficult time applying that code in other ways. The problem of "take this loop that does this with the data and make it do something else.". The solution to this is simple. Practice, and purpose. You just have to get the brain used to all the funny symbols and ways of doing stuff. The best way of doing that is for the learner to care and have a goal for doing it. Self taught programmers before uni will breeze through the intro classes, while new students struggle heavily. The self taught had a purpose to make things on their own.
- charlieyu1 5y agoSo the author has an idea of a book but wasn't bothered enough to write the details
- plondon514 5y ago> Teaching how to code should be about problem-solving and effectively using the tools of a programming language to solve it. This is one of the reasons I created https://codeamigo.dev https://codeamigo.dev. You can create step-by-step tutorials in multiple programming languages and view the output of your code directly in the browser. It's very similar to Codecademy, except anyone can _create_ a lesson. The idea is that we have a ton of knowledge in our community, but there is no great platform for sharing it with others. If you're interested, give it a shot, it's completely free.
- kodemager 5y agoI’m an external examiner for CS students and around 90% of the subjects we test them in is stuff they’ll never use in the real world. It’s obviously anecdotal but in several decades or real world work I’ve never heard the words composition and aggregation used, and I’ve frankly never seen them really implemented intentionally in code either. I sort of feel the same way with things like linked lists, double linked lists, trees and so on, though I see the value in those, but not enough for them to take up half a year of learning along with various sorting algorithms. I have no idea to balance the “useful to know” with too much theory though, but I do know that almost everyone who graduates is around a years worth of real world coding away from being a programmer.
- noduerme 5y agoI've been coding since I was six years old. (I'm in my forties). For the first bit of that it was BASIC on a TRS-80 Model 100 laptop, with 16k and a tape drive. Then, really, Perl and Hypercard. Answering the question of but what for??? was a huge part of my friends' and my dilemma in building simple games and projects. In my experience, there is a chasm between getting good at doing something technically and knowing what the hell you're supposed to do with that knowledge. Screensavers; that was the best idea we had and that's what we competed against each other on. We'd sit around and talk about how we could make something like SimCity plus SimEarth plus realistic physics and make a universe simulator. Or a driving game that could generate cities to drive through. But I had the same experience with 3D modeling! I could spend a hundred hours to make a dinosaur in a pirated copy of Infini-D. Okay, now what? Perhaps this is off track, but I guess to us at the time the joy was in discovering the technical aspects, and tinkering and learning how to use them. I read the BASIC manual that came with the TRS, and I remember being 7 years old and skipping the part about "Arrays" repeatedly because it seemed too complicated to light up dots on the screen. Until one day I just was like, okay, what's this "array" thing, I feel like I'm missing something. And suddenly that chapter blew my mind. Likewise, I was deep into my third or fourth PHP online store / shopping cart in the late 90s, when a kid I hung out with was like, what? You're not using a database? And I was like no, I just have text files for each product. There's a whole back end for the business to edit the text files and images. Then, because I couldn't not look at it, I had to look at mysql. Holy shit, you mean I don't have to create text files for every product? Or block one person from editing them when someone else is? The rest being history. Okay, broader scope: You can't generate use cases until you need them, and also, you can't learn tools until you have the use case for them, or else you're going to forget what they were for. Tools and the experience of working with the tools go together. You might be able to simulate that experience by building a card game, but like all skills, they will be lost quickly unless they're exercised regularly.
- r_c_a_d 5y agoI'm not sure I agree with this argument. Learning stuff by diving in and doing stuff immediately without studying the basics first may be fun and interesting, but it might lead to fundamental gaps and misunderstandings too. I learned to write code from the bottom up. It was sometimes dull and hard work, but I think in the end I got very good at it. On the other hand, I learned to play golf by just playing games. It was fun, I got ok quite fast... and then I never got any better. My nephew started playing by having proper lessons and could beat me after a few weeks.
- ChrisMarshallNY 5y agoI’ve always been a fan of “Learn by Do.” I seek out projects that “push the boundaries,” but I do so carefully. I don’t try to implement a new air traffic control system. This has the significant advantage, that almost everything I learn has an immediate practical application. I am constantly learning to ship. It has the significant disadvantage, that it may not address some theoretical elements that could lead to practical advantages, down the road. That’s a real issue. I tend to reinforce established lore; not come up with creative new ways. Since my method favors practical application, it can be conservative. It can take some time time to “get around to” new tools, techniques, theories and discoveries. I am not “surfing the bleeding edge.” It also means that I’m not so good at LeetCode, and I’m a lousy jargonaut. I do feel that my way reinforces a “ship mentality,” and that (I believe), is incredibly valuable. I write about my approach, here: https://littlegreenviper.com/miscellany/thats-not-what-ships-are-built-for/ https://littlegreenviper.com/miscellany/thats-not-what-ships...
- da39a3ee 5y agoThe best programming language book ever written is the O’Reilly Rust book Programming Rust by Jim Blandy and Jason Orendorff. (It’s for people who are already programmers.)
- oolonthegreat 5y agoI don't know about the card game approach, but the author definitely has a point. I'd even argue that this is a problem in most engineering teaching, talking about different little subjects with no picture of connection or purpose.
- stopmeifyoucan 5y agohttps://java-programming.mooc.fi/ https://java-programming.mooc.fi/ is one of the courses that really made me love programming. It has lots of exercises, good explaining and a nice interface. Its in Java but contra the opinions that "Java is a bad language to start programming" for me it wasnt hard at all considering I was young when I started it.
- yawnxyz 5y agoI don't really see how the proposed way of teaching how to code is any better... I do like the idea of use-case based teaching. Have the student choose what kind of thing they're trying to accomplish, then structure the class dynamically based on the needs of their choices, or something like that
- mzehnder 5y ago+1 to use-case driven teaching (especially growing the same use case to include more complex topics). I would have loved to learn this way :)
- travisd 5y agoI have opinions™, but mostly agree with this article. Most intro coding classes and course materials read more like a glossary than a lesson. This contributes (rather directly) to the failure to retain a diverse student base in intro CS program. We've gotten a lot better at recruiting CS students from underrepresented groups (women and BIPOC chiefly), but numbers drop off quickly[1]. Studies in math education have shown that the way material is presented/courses are run has a huge impact on reducing disparities[2]. This is especially important in CS especially when boys are encouraged from a young age to do "techy" and "geeky" things in ways that girls usually aren't. Students arrive in intro CS courses, are sat next to students who have been coding since they were 10, and are rightfully intimidated even though they could succeed in the course. While I was at the University of Michigan, I helped a professor develop "Joy of Coding," a mini-course for high school students that focuses on sparking desire ("joy") rather than teaching CS first principles[3]. By the end of the first lesson, students are manipulating images with code – a real "WOW!" moment. It's built on Pathbird, a platform that I built (in conjunction with UMich faculty) to run more engaging and accessible courses in computer science and computational subjects. (Shameless plug: if you're interested in Pathbird, or even just to chat, drop me a line at travis@pathbird.com). [1] https://cse-climate.engin.umich.edu/wp-content/uploads/sites/25/2020/07/ay2019-2020.pdf https://cse-climate.engin.umich.edu/wp-content/uploads/sites... (see page 8) [2] https://www.colorado.edu/eer/sites/default/files/attached-files/twopagerjun18_0.pdf https://www.colorado.edu/eer/sites/default/files/attached-fi... [3] https://continuum.engin.umich.edu/programs/jumpstart-coding/ https://continuum.engin.umich.edu/programs/jumpstart-coding/
- freebreakfast 5y agoDo you know of any comparative studies with other countries? Or is this a predominately US/Canada issue? For example, do BIPOC students in Botswana drop out at similar rates? Do non-BIPOC students in Taiwan experience similar drop out rates? What are the classes and course materials like in these countries in comparison to the US/Canada? What about drop out numbers from international students? For example, do Polish women studying CS at American universities drop out at the same rate as American women? For those who do drop out, do they drop out for the same reasons? If we want to get to the root of the problem we need both more breadth and more depth in our understanding. Too often we stop at the men/women (in America) or BIPOC/non-BIPOC (in America) divides, and then provide generalized solutions which have very limit impact.
- Cupertino95014 5y ago"<x> is broken" -- clickbait title. His approach is fine, I like it. Let him offer it to paying customers, and see how they like it. There are many different approaches to teaching out in the world, some free and some not. There are code boot camps, which survive only if they work -- since they only last 12-20 weeks, bad feedback would sink them pretty fast (unlike 4-year colleges, where the worthlessness of your degree doesn't become apparent until years later).
- empressplay 5y agoWhen I was in junior high school in the 90s in my computer science class we learned Pascal by programming our own Light Cycles clone. Everything we learned was in service of making our game work. And we each came up with different solutions to accomplish the same things, and learned from each other. This article seems to imply this isn't how things are done now, but surely they still are by most?
- spankalee 5y agoSimilar for me. Even though I had already been programming on my own, my first school-led programming classes were with done with Logo, then Apple Basic, then Pascal, always used to build specific and simple programs. I never had an intro class start with types.
- HPsquared 5y agoCoding is usually learnt, not taught.
- nickstinemates 5y agoI like trade schools like Holberton School
- 0xbadcafebee 5y agoYes! I find all of academia to have the same broken teaching method. Connect what you're teaching me to something tangible that I can relate to!
- bob1029 5y agoI have always struggled with how to advise my friends & family on this path of learning. It seems like everyone wants to be a WFH developer these days, but I don't know how to enable them to succeed on that path. "Go build something you want to build!" is something I keep reiterating (as does this article). But most don't seem to be interested in that for whatever reason (presumably because its fucking hard). Maybe I should just leave it at that - I am getting to a point where if someone doesn't have the willpower to go burn a whole weekend on a pile of bullshit that won't even compile (i.e. because they really want to solve some problem), then maybe they won't have the necessary pain tolerance required to truly master the skillset.
- rabuse 5y agoI've attempted to teach multiple family members/friends over the years "how to code", and they give up almost immediately. They "just don't get it", and I'd argue one needs to seriously find enjoyment in building things, and knowing how long things can take, to get started.
- andrewzah 5y agoThat's like most hobbies/careers. People want to learn the guitar|piano|violin, until they realize the amount of work it takes. People want to get fit and jacked, until they realize the amount of work it takes. People want to be a lawyer/doctor/engineer, until they realize the amount of work it takes. Or they realize that they just don't really like it. Programming isn't any different. One needs a particular mindset, and a level of patience to deal with debugging. It's not for everyone, and that's fine.
- cloverich 5y agoOnly caveat is, and this is where I feel bad, if the person hasn't learned something new in a very long time, they forget what it feels like to change, or even become convinced that they can't. It can be hard to convince someone that no, you don't need to have aptitude or be any good at it after a few days, weeks, even months. You just need to keep doing it. As long as the goal is realistic, you'll succeed. Whether you are more or less "talented" than someone else affects the timeline (a little) but you are going to the same place (again, realistic goals).
- teeceetime2 5y agoAn "Intro to Logic" (Pseudocode) class was required at my university before you could move on to any of the actual programming courses. It was a glorified linear programming course - think BASIC or BATCH with a bunch of jumps and goto's.
- qsort 5y agoThis is unironically a good idea. The main stumbling block isn't programming per se, it's breaking down a conceptual, informal idea of what you have to do in a formal language. It matters very little whether it's linear programs, ASM instructions, LISP forms or C++ classes.
- systemvoltage 5y agoOn the other hand, our University course started with half-baked explanation of what "public static void main" means (Java entry point) on the first day. It was horrible and no one understand anything until a few classes later we go to the meat of making/building stuff.
- qsort 5y agoYeah, I probably already commented on this some time ago, but I think Java is really, really bad as a teaching language. The language itself is just fine and much better than most people give it credit for, if you are a professional developer. As a teaching language is full of cerimony and it forces upon you an object model that you can't fully understand until much later. It's too much "in the weeds", if that makes sense.
- jldugger 5y agoYea, AFAICT, Java has fallen off in schools in favor of Python, which is less opinionated about things like that. It has classes if you want them, lambdas if you want them.
- __mharrison__ 5y ago(Disclosure: I do corporate training (Python and Data Science) for a living.) I generally don't teach coding to newbies, so a lot of the coding I teach is correcting poor mental models and teaching features (somewhat) unique (or different) in Python. My best Pandas courses have been when the client opts to use their data for the course (instead of my canned data). The students are already subject matter experts with the data and when they learn some of the tricks to slice and dice, summarize, and visualize, they are off to the races. They dig right in. Teaching as the article suggests is very difficult because examples that appeal to some or boring or confusing to others. I'm not saying it won't work, but there are cons as well. When I'm teaching with my "canned data", I try to mix in a few different datasets from different areas so students can see that the ideas are generally adaptable.
- lawl 5y agoI always thought the best way to learn programming is to find a program you want to create, and then figure out how to make that happen. This is still how i learn (most effectively) today. If i want to learn a new language or something, i write something that i always wanted to write in it anyways. That way it doesn't get boring. I think what you're describing might be similar in that canned-data is not interesting.
- erwincoumans 5y agoYes, learning is much easier if you have motivation. How do you motivate kids, if they rather play games rather than coding (and they even ignore in-game scripted coding such ad Minecraft or Roblox coding)?
- wobbly_bush 5y ago> How do you motivate kids, if they rather play games rather than coding (and they even ignore in-game scripted coding such ad Minecraft or Roblox coding)? Do such kids need to start with regular programming languages? Wouldn't visual languages be a simpler starting point for them to get motivated?
- 5y ago
- optymizer 5y agoI'm a huge fan of Nature of Code and I agree that it's a wonderful book, but I don't think it's a book for people who are beginners (i.e. they're learning how to code). Daniel Shiffman has a ton of resources which are better suited for people who want to learn how to code - Learning Processing, the Coding Train channel, etc. Motivation is the primary hurdle when teaching folks how to code. Having a goal to accomplish keeps them motivated, especially if there's feedback early - games, robots are good starting points.
- wodenokoto 5y agoFrom the Nature Of Code, chapter 1: > If you’ve read any of the introductory Processing textbooks or taken a class on programming with Processing (and hopefully you’ve done one of these things to help prepare you for this book) Yeah, that doesn't sound like a beginner book at all.