TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

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

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Teaching how to code is broken

244 pointsby neilpanchalover 3 years ago

69 comments

JoeAltmaierover 3 years ago
My approach is to employ folks with enthusiasm. If they&#x27;re teachable, they&#x27;ll figure out whatever pile of tools they get thrown into on the first task. Then they&#x27;ll have some skills and the next task will seem less daunting.<p>Of course some mentoring is useful. But just the stuff that&#x27;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.<p>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&#x27;ll find them work on a client&#x27;s contract.<p>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&#x27;s a sort of enlightenened-self-interest thing. If young people get into the field, everybody benefits.<p>And of course as an old guy with resources, I can afford to take some risks. Because it&#x27;s everybody&#x27;s job to look out for the other guy.
评论 #29942151 未加载
评论 #29944345 未加载
评论 #29941646 未加载
评论 #29945963 未加载
__mharrison__over 3 years ago
(Disclosure: I do corporate training (Python and Data Science) for a living.)<p>I generally don&#x27;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.<p>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.<p>Teaching as the article suggests is very difficult because examples that appeal to some or boring or confusing to others. I&#x27;m not saying it won&#x27;t work, but there are cons as well. When I&#x27;m teaching with my &quot;canned data&quot;, I try to mix in a few different datasets from different areas so students can see that the ideas are generally adaptable.
评论 #29938998 未加载
评论 #29939139 未加载
评论 #29939194 未加载
bob1029over 3 years ago
I have always struggled with how to advise my friends &amp; family on this path of learning. It seems like <i>everyone</i> wants to be a WFH developer these days, but I don&#x27;t know how to enable them to succeed on that path. &quot;Go build something you want to build!&quot; is something I keep reiterating (as does this article). But most don&#x27;t seem to be interested in that for whatever reason (presumably because its fucking hard).<p>Maybe I should just leave it at that - I am getting to a point where if someone doesn&#x27;t have the willpower to go burn a whole weekend on a pile of bullshit that won&#x27;t even compile (i.e. because they <i>really</i> want to solve some problem), then maybe they won&#x27;t have the necessary pain tolerance required to truly master the skillset.
评论 #29939283 未加载
评论 #29938846 未加载
评论 #29941895 未加载
评论 #29940709 未加载
评论 #29941917 未加载
评论 #29942860 未加载
评论 #29938668 未加载
评论 #29939661 未加载
travisdover 3 years ago
I 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&#x27;ve gotten a lot better at recruiting CS students from underrepresented groups (women and BIPOC chiefly), but numbers drop off quickly[1].<p>Studies in math education have shown that the way material is presented&#x2F;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 &quot;techy&quot; and &quot;geeky&quot; things in ways that girls usually aren&#x27;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.<p>While I was at the University of Michigan, I helped a professor develop &quot;Joy of Coding,&quot; a mini-course for high school students that focuses on sparking desire (&quot;joy&quot;) rather than teaching CS first principles[3]. By the end of the first lesson, students are manipulating images with code – a real &quot;WOW!&quot; moment. It&#x27;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&#x27;re interested in Pathbird, or even just to chat, drop me a line at travis@pathbird.com).<p>[1] <a href="https:&#x2F;&#x2F;cse-climate.engin.umich.edu&#x2F;wp-content&#x2F;uploads&#x2F;sites&#x2F;25&#x2F;2020&#x2F;07&#x2F;ay2019-2020.pdf" rel="nofollow">https:&#x2F;&#x2F;cse-climate.engin.umich.edu&#x2F;wp-content&#x2F;uploads&#x2F;sites...</a> (see page 8) [2] <a href="https:&#x2F;&#x2F;www.colorado.edu&#x2F;eer&#x2F;sites&#x2F;default&#x2F;files&#x2F;attached-files&#x2F;twopagerjun18_0.pdf" rel="nofollow">https:&#x2F;&#x2F;www.colorado.edu&#x2F;eer&#x2F;sites&#x2F;default&#x2F;files&#x2F;attached-fi...</a> [3] <a href="https:&#x2F;&#x2F;continuum.engin.umich.edu&#x2F;programs&#x2F;jumpstart-coding&#x2F;" rel="nofollow">https:&#x2F;&#x2F;continuum.engin.umich.edu&#x2F;programs&#x2F;jumpstart-coding&#x2F;</a>
评论 #29939463 未加载
评论 #29938271 未加载
评论 #29938350 未加载
评论 #29940439 未加载
评论 #29938785 未加载
评论 #29944496 未加载
评论 #29939870 未加载
评论 #29938205 未加载
TaylorAlexanderover 3 years ago
I 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 &quot;Math land&quot;, 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.<p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZG9cYhekB8A" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZG9cYhekB8A</a><p>Youtube link for easy viewing but the entire video series he helped produce is here:<p><a href="https:&#x2F;&#x2F;el.media.mit.edu&#x2F;logo-foundation&#x2F;resources&#x2F;onlogo&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;el.media.mit.edu&#x2F;logo-foundation&#x2F;resources&#x2F;onlogo&#x2F;in...</a>
评论 #29941982 未加载
tibbarover 3 years 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.<p>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 <i>hundreds</i> 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.<p>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!
评论 #29943134 未加载
评论 #29943412 未加载
dfdzover 3 years ago
&gt; 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?<p>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”<p>I have found this mindset to be incredibly true. Rather than philosophizing about the optimal way to learn to code (or anything) just:<p>1. read&#x2F;take a class about the subject<p>2. use the ideas you learned<p>3. goto 1<p>While it seems inefficient, I think it can be a very natural way to learn and avoid all catch-22 situations
评论 #29942775 未加载
评论 #29942673 未加载
评论 #29943208 未加载
Cupertino95014over 3 years ago
&quot;&lt;x&gt; is broken&quot; -- clickbait title. His approach is fine, I like it. Let him offer it to paying customers, and see how <i>they</i> like it.<p>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&#x27;t become apparent until years later).
Ericson2314over 3 years ago
I am surprised no one mentioned the now-classic How to Design Programs <a href="https:&#x2F;&#x2F;htdp.org&#x2F;2021-11-15&#x2F;Book&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;htdp.org&#x2F;2021-11-15&#x2F;Book&#x2F;index.html</a>, which was one of the first intro textbooks to actually take in account some education research.<p>Since then, there is <a href="https:&#x2F;&#x2F;dcic-world.org&#x2F;2021-08-21&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;dcic-world.org&#x2F;2021-08-21&#x2F;index.html</a> by some of the same people with substantially more education underpinning it.<p>The blog post has some good ideas, but really we can do so much better than armchair musing about sclerotic curriculums now!
评论 #29943888 未加载
gumbyover 3 years ago
Structure and Interpretation of Computer Programs follows this advice: designed for people who&#x27;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.
PaulDavisThe1stover 3 years ago
I still don&#x27;t any see initial introduction to the art of problem decomposition.<p>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?<p>Until you understand this high-level sense of what you&#x27;re trying to, type list container map iterate immutable functional lambda coroutines are just noise.
khaledhover 3 years ago
Exactly this! To quote myself from a couple of years ago:<p>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&#x27;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 &quot;you&#x27;ve just [discovered how ownership works in rust]&quot;; 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&#x2F;tutorials take this approach.
enchiridionover 3 years ago
IMO 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.
评论 #29938285 未加载
andrewstellmanover 3 years ago
&gt; 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:<p>How funny! This is exactly the approach Jenny Greene and I took in Head First C# (O&#x27;Reilly), right down to the way we start with cards and suits, then ordering, building up to a complete card game.
评论 #29943120 未加载
imbnwaover 3 years ago
As a self-taught, highly agree almost all intro material I was coming upon back in 2013&#x2F;14&#x2F;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&#x27;s dead right, the <i>job</i> is not writing code (as much as the JIRA Industrial Complex would like to make it out to be), the <i>job</i> is thinking and problem-solving.<p>I only began to understand the <i>thinking</i> 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).
empressplayover 3 years ago
When 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.<p>This article seems to imply this isn&#x27;t how things are done now, but surely they still are by most?
评论 #29938613 未加载
mbrodersenover 3 years ago
I have had success teaching complete beginners how to code using the following approach:<p>1. Show them how to implement a super simple text adventure game in Basic using just print, input, if, and goto.<p>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.<p>3. Repeat.<p>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.
friendlydogover 3 years ago
Teaching everyone the same way is wrong. Everyone has different learning styles, education and life experience.<p>If there is a large enough market share for a topic grouping like learners together can be very efficient.<p>Creating a one sized fits most solution is the default setting for many educators and yields an &quot;okay&quot; result.<p>Allowing learning at your own pace, with community support and many styles of consumable content will give a excellent result for self motivated individuals.<p>Students who are not motivated or need help with motivation can be handled differently.<p>Edit:<p>Learning styles has a broad meaning more than just the &quot;I&#x27;m a visual learner.&quot;
评论 #29939248 未加载
评论 #29939150 未加载
shadowgovtover 3 years ago
I 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: <a href="https:&#x2F;&#x2F;www.alice.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.alice.org&#x2F;</a>). They were presenting their (relatively positive) results on how much engagement they&#x27;d seen getting students involved using Alice as opposed to available alternatives for learning beginner programming.<p>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&#x27;s not a very strongly-typed language and for pedagogy, there are much better languages with more rigorous type safety.<p>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 &quot;Because elementary-school students are excited about seeing cool things on screen, not about computing the Ackermann function.&quot; General murmurs of laughter all around.<p>I think those two professors had an ongoing debate behind the scenes that the unfortunate student had just gotten caught in the middle of.<p>(Fiction short story related to this topic: <a href="http:&#x2F;&#x2F;thecodelesscode.com&#x2F;applicant&#x2F;2" rel="nofollow">http:&#x2F;&#x2F;thecodelesscode.com&#x2F;applicant&#x2F;2</a>)
teeceetime2over 3 years ago
An &quot;Intro to Logic&quot; (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&#x27;s.
评论 #29938749 未加载
ChrisMarshallNYover 3 years ago
I’ve always been a fan of “Learn by Do.”<p>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.<p>This has the significant advantage, that almost everything I learn has an immediate practical application. I am constantly learning to <i>ship</i>.<p>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.”<p>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 <i>incredibly</i> valuable.<p>I write about my approach, here: <a href="https:&#x2F;&#x2F;littlegreenviper.com&#x2F;miscellany&#x2F;thats-not-what-ships-are-built-for&#x2F;" rel="nofollow">https:&#x2F;&#x2F;littlegreenviper.com&#x2F;miscellany&#x2F;thats-not-what-ships...</a>
DwnVoteHoneyPotover 3 years ago
Tutorials do exist for absolute beginners. Seems like the author is implying they rarely exist which is incorrect. &quot;Hello world&quot; is a tutorial&#x2F;real world example. I learnt the how to code through the &quot;Ruby on Rails Tutorial&quot; by Michael Hartl.<p>The tutorial market is different than the computer science 101 crowd, so you have tutorials for one, textbooks for the other.<p>The issue with using tutorials in textbooks is that it&#x27;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&#x27;ve read do have good examples or interesting problems to solve. If I remember correctly the Harvard 101 book does use cards for objects.<p>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 &quot;hello world&quot;, need Database -&gt; Code -&gt; Template... when you can do: print(&quot;hello world&quot;), then move on to next chapter.<p>The article is much-ado about nothing.
评论 #29939582 未加载
_haoover 3 years ago
I think people are missing the main point here. It&#x27;s not about problem solving.<p>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&#x27;s not about variables, statements, expressions, ifs, loops etc. It&#x27;s about having a conversation with the machine and trying things out. The tools, languages, frameworks are just extensions of this.<p>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 &quot;relationship&quot; where you understand each other and can work together with the machine.
chapsover 3 years ago
One of the paradoxically oddest and best ways I&#x27;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&#x27;t work.<p>I&#x27;m not sure if that was intentional, but as you&#x27;d go through the book and correct typos, you&#x27;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&#x27;t need to go the path of normal exercises you&#x27;d see in most programming classes.
评论 #29942251 未加载
yawnxyzover 3 years ago
I don&#x27;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.<p>Have the student choose what kind of thing they&#x27;re trying to accomplish, then structure the class dynamically based on the needs of their choices, or something like that
plondon514over 3 years ago
&gt; Teaching how to code should be about problem-solving and effectively using the tools of a programming language to solve it.<p>This is one of the reasons I created <a href="https:&#x2F;&#x2F;codeamigo.dev" rel="nofollow">https:&#x2F;&#x2F;codeamigo.dev</a>. You can create step-by-step tutorials in multiple programming languages and view the output of your code directly in the browser. It&#x27;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.<p>If you&#x27;re interested, give it a shot, it&#x27;s completely free.
65over 3 years ago
It&#x27;s not about teaching people literally how to code. It&#x27;s about teaching people how to learn how to code.<p>For example, if you&#x27;re trying to teach someone Javascript with &quot;this is a variable, this is a function, this is an event listener&quot; they&#x27;re going to get no where. It should be &quot;how to change the color of a button when I click on it.&quot;<p>Then you guide the person to creating a good Google search query. And I think it&#x27;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.
optymizerover 3 years ago
I&#x27;m a huge fan of Nature of Code and I agree that it&#x27;s a wonderful book, but I don&#x27;t think it&#x27;s a book for people who are beginners (i.e. they&#x27;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.<p>Motivation is the primary hurdle when teaching folks how to code. Having a goal to accomplish keeps them motivated, especially if there&#x27;s feedback early - games, robots are good starting points.
评论 #29938819 未加载
ModernMechover 3 years ago
&gt; I&#x27;ve found that modeling or simulating something real like a card game is very effective.<p>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.<p>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 &quot;WHY!?&quot;, but I still feel myself screaming that question after reading this piece.<p>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&#x27;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&#x27;s meet them at their level. And SQL to the list. There are people in my life who I wouldn&#x27;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&#x27;s business.<p>I think it&#x27;s far past time &quot;learning to code&quot; meant &quot;learning Python&#x2F;JS&#x2F;C&quot;. Let&#x27;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.
评论 #29945357 未加载
paradauxover 3 years 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.)<p>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.<p>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.<p>This is a highly adaptable form of teaching, although it&#x27;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.<p>Younger students often have the enthusiasm, but they don&#x27;t know where to guide it, this lends itself well to a lecture then activity format where there&#x27;s at most a 7-8 minute period of &quot;lecture&quot; followed by an equal amount of activity time.<p>The older kids often don&#x27;t need the &quot;lecture&quot; 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!)
kumarvvrover 3 years ago
Offtopic : I am always annoyed with the use of the word &quot;Broken&quot; in place of more meaningful words (Flawed, Wrong, Malfunctioning, etc.)<p>Everything is &quot;broken&quot;<p>The system is &quot;broken&quot; (Flawed &#x2F; biased &#x2F; wrong &#x2F; unfair &#x2F; unjust)<p>The garage door opener is &quot;broken&quot; (not working &#x2F; not operating &#x2F; faulty)<p>What is up with that? I see it a lot in movie too. This laptop is &quot;broken&quot;, my mobile is &quot;broken&quot;
scottlillyover 3 years ago
I&#x27;ve generally followed the article&#x27;s outline for some programming tutorials I created.<p>The lessons are based on building a simple role-playing game. They try to quickly get to something to make the students feel, &quot;I wrote a program!&quot;. 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.<p>However, a big problem is that this approach avoids a lot of good architectural decisions. I don&#x27;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.<p>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&#x27;t have the time&#x2F;energy to re-do all those lessons and videos.
devwastakenover 3 years ago
Do both. You need the vocab - variables, types, methods, classes, etc. And then the application - deck of cards, real life inheritance, etc.<p>It&#x27;s a highway, if you teach mainly the high level mental theory, they&#x27;ll get it, and won&#x27;t know how to implement it. They won&#x27;t be able to associate the syntax to the logic of the theory. Inversely, if you teach only the syntax and implementation, they don&#x27;t understand the theory and have a very difficult time applying that code in other ways. The problem of &quot;take this loop that does this with the data and make it do something else.&quot;.<p>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.
hatefulover 3 years ago
This reminds me of when I took Java in college. One of the prerequisites was Introduction to Computer Programming 1 &amp; 2 (101 and 102).<p>1 was along the lines of what was on the top of this article: Chapter 1: Types Chapter 2: Variables Chapter 3: Operators&#x2F;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<p>And 2 was algorithms (sorts, etc)<p>Then the Java class was: Chapter 1: Types Chapter 2: Variables Chapter 3: Operators&#x2F;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<p>But not much about what you can do in Java specifically.<p>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&#x27;t be anyone in the class who hasn&#x27;t taken it!
godotover 3 years ago
IMO 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&#x2F;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.<p>Building a web site gives you all the &quot;why&quot;s. It gave you a motivation to learn different aspects of coding. Whether it&#x27;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&#x27;re trying to build.
评论 #29940794 未加载
maerF0x0over 3 years ago
Interestingly related to the author&#x27;s point of teaching using cards.<p>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 &quot;why ask them about poker?&quot; and I&#x27;d show them that there is a ton of skill coverage<p>1. Decomposition of requirements into sub problems<p>2. pattern matching for code reuse and composition<p>3. seeing if they can come up with a decent algorithm to communicate to and from sub functions the results<p>4. seeing if they can come up with an ordering mechanism for cards<p>5. seeing if they can come up with a for loop that counts if there are 5 of something<p>6. String parsing to their own intermediate representation of cards<p>All these skills are used basically daily (at least in my workplace)<p>[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 &quot;poker&quot; from being the subject matter tested
评论 #29940590 未加载
评论 #29940791 未加载
lanecwagnerover 3 years ago
I agree there are so many issues with coding education, (full disclosure, that&#x27;s why I&#x27;m building Qvault.io) but I don&#x27;t think the big problems are the ones presented here.<p>I see the following as the biggest unsolved problems:<p>1. Online learning rarely teaches you what you should be learning. Resources are useless if you don&#x27;t know which subject matter is right for you yet. 2. Platforms don&#x27;t give you a feel for &quot;completion&quot;, e g. when and how should I start job searching. 3. You don&#x27;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
kenjacksonover 3 years ago
I love the last chapter of &quot;No one teaches the end so lets put concurrency here&quot; -- is so true. I feel like I&#x27;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.
kodemagerover 3 years ago
I’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.<p>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.<p>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.<p>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.
999900000999over 3 years ago
&gt;Why is all this important and what problems does it solve?<p>Couldn&#x27;t of stated in better.<p>My why was creating a few games with my friends.<p>It&#x27;s been a real gift to see it turn into a career.<p>You can teach yourself to code for free with an old laptop ( Ubuntu with Xfce works) , it&#x27;s one of the last accessible careers.
r_c_a_dover 3 years ago
I&#x27;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.<p>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.<p>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.
LAIFscratchover 3 years ago
There are people working on this rigorously, try going through Prof Krishnamurthi&#x27;s papers: <a href="https:&#x2F;&#x2F;cs.brown.edu&#x2F;~sk&#x2F;" rel="nofollow">https:&#x2F;&#x2F;cs.brown.edu&#x2F;~sk&#x2F;</a> he teaches higher-order functions because they&#x27;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: <a href="https:&#x2F;&#x2F;learnaifromscratch.github.io&#x2F;software.html" rel="nofollow">https:&#x2F;&#x2F;learnaifromscratch.github.io&#x2F;software.html</a> 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.<p>Of course the answer to everything is &#x27;just be motivated and dig deep into X then you will learn as you go&#x27; like building a program from scratch, or how some mathematician&#x27;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&#x27;s something you can do after 1&#x2F;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.<p>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&#x27;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 &#x27;teach me how to code&#x27; it&#x27;s really &#x27;teach me to make money from my laptop like you do&#x27;.
bern4444over 3 years ago
I like the idea presented here but I think a mix of approaches is needed.<p>After the author&#x27;s chapter 2, &quot;Chapter 2: Suits (String concatenation, Int vs literal string)&quot; 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&#x27;re useful (maybe these show up in the lessons, maybe they don&#x27;t).<p>I&#x27;d do the same for chapter 3 too. After learning about arrays I&#x27;d want to include a section on other objects that are common, maps, sets, linked lists etc.<p>Both styles need to be mixed together imv.
Gigachadover 3 years ago
I feel like the average person already knows why. They know what they want and they just want the info on how to do it.<p>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.<p>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”
codazodaover 3 years ago
I 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.<p>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?<p>Splash of Code: Learn Programming by Making Computer Art <a href="https:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B082FMPXW6" rel="nofollow">https:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B082FMPXW6</a>
noduermeover 3 years ago
I&#x27;ve been coding since I was six years old. (I&#x27;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 <i>but what for???</i> was a huge part of my friends&#x27; 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&#x27;re supposed to do <i>with</i> that knowledge. Screensavers; that was the best idea we had and that&#x27;s what we competed against each other on. We&#x27;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, <i>now what?</i><p>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 &quot;Arrays&quot; repeatedly because it seemed too complicated to light up dots on the screen. Until one day I just was like, okay, what&#x27;s this &quot;array&quot; thing, I feel like I&#x27;m missing something. And suddenly that chapter blew my mind. Likewise, I was deep into my third or fourth PHP online store &#x2F; shopping cart in the late 90s, when a kid I hung out with was like, what? You&#x27;re not using a <i>database</i>? And I was like no, I just have text files for each product. There&#x27;s a whole back end for the business to edit the text files and images. Then, because I couldn&#x27;t <i>not</i> look at it, I had to look at mysql. Holy shit, you mean I don&#x27;t have to create text files for every product? Or block one person from editing them when someone else is? The rest being history.<p>Okay, broader scope: <i>You can&#x27;t generate use cases until you need them</i>, and also, you can&#x27;t learn tools until you have the use case for them, or else you&#x27;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&#x27;re exercised regularly.
stopmeifyoucanover 3 years ago
<a href="https:&#x2F;&#x2F;java-programming.mooc.fi&#x2F;" rel="nofollow">https:&#x2F;&#x2F;java-programming.mooc.fi&#x2F;</a><p>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 &quot;Java is a bad language to start programming&quot; for me it wasnt hard at all considering I was young when I started it.
lordnachoover 3 years ago
IMHO 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&#x27;s the people who messed around with a computer a lot who know some shortcuts that to most coders are obvious.<p>The less pain you have with changing the code, the more code you can try.
bdowlingover 3 years ago
The 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&#x27;t understand programming.
评论 #29943675 未加载
sylensover 3 years ago
Do 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?
hamoltonover 3 years ago
I don&#x27;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.<p>It&#x27;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&#x2F;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&#x27;m not sure.<p>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&#x27;s changed a bit) there is...<p>- 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<p>I guess the main difference between the course and the post&#x27;s proposal is that it doesn&#x27;t follow a single narrative, so when you apply concepts in your head is only after the first introduction.<p>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&#x27;ve generally liked at a glance. I suppose the most influential intro to CS materials are for AP CS A, although I&#x27;m not familiar with the course.<p>[1] <a href="https:&#x2F;&#x2F;runestone.academy&#x2F;ns&#x2F;books&#x2F;published&#x2F;&#x2F;thinkcspy&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;runestone.academy&#x2F;ns&#x2F;books&#x2F;published&#x2F;&#x2F;thinkcspy&#x2F;inde...</a>
HPsquaredover 3 years ago
Coding is usually learnt, not taught.
laserpistusover 3 years ago
Pretty 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.
oolonthegreatover 3 years ago
I don&#x27;t know about the card game approach, but the author definitely has a point. I&#x27;d even argue that this is a problem in most engineering teaching, talking about different little subjects with no picture of connection or purpose.
omegantover 3 years ago
As someone learning right now this reflects perfectly my frustration with the teaching systems I’ve found.<p>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.<p>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.<p>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.<p>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.<p>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.<p>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.<p>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.<p>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.<p>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.<p>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.
评论 #29945471 未加载
评论 #29945459 未加载
MisterBastahrdover 3 years ago
I don&#x27;t fully agree.<p>While it&#x27;s nice to have a goal to shoot for when learning to program, it&#x27;s also important to be able to practice discrete topics individually so that you can fully grasp what they&#x27;re about.
da39a3eeover 3 years ago
The 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.)
a-dubover 3 years ago
personally i&#x27;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.<p>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.
nathiasover 3 years ago
&#x27;Typically&#x27; 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.
0xbadcafebeeover 3 years ago
Yes! I find all of academia to have the same broken teaching method. Connect what you&#x27;re teaching me to something tangible that I can relate to!
mzehnderover 3 years 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 :)
wffurrover 3 years ago
Best programming class I ever took did exactly that. We built a board game and continuously iterated on it throughout the semester.
akihitosanover 3 years ago
I think it is better to learn concept for those who has a hacker mindset. Going through examples is for super users at most, imho.
japhyrover 3 years ago
I&#x27;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&#x27;ve looked critically at many learning resources over the years.<p>I certainly agree with the author&#x27;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.<p>I&#x27;ll make a brief comparison to the math materials I&#x27;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&#x27;s presented. These are better at catching students&#x27; interest, but they still don&#x27;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&#x27;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.<p>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&#x27;t carry people through all the topics because there&#x27;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&#x27;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&#x27;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&#x27;t needed? Do you leave them out? Do you present them separately? Do you force them into the context?<p>One of my big frustrations with learning resources, especially k-12, is that they do a great job of grabbing kids&#x27; attention. We&#x27;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.<p>What&#x27;s the conclusion? There&#x27;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&#x27;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.
pixel_tracingover 3 years ago
I seriously hate the card game example as I rarely play card games, maybe something more modern as an example?
评论 #29943659 未加载
charlieyu1over 3 years ago
So the author has an idea of a book but wasn&#x27;t bothered enough to write the details
rileytgover 3 years ago
let’s not forget michael hartl’s tutorial <a href="https:&#x2F;&#x2F;www.railstutorial.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.railstutorial.org&#x2F;</a><p>I personally know at least 7 devs who started their careers with this; some are at faangs now.
dborehamover 3 years ago
Article seems to be complaining about the typical chapter layout for a reference book on a given programming language. Such books aren&#x27;t intended to teach coding. The intended audience is those who already understand how to code, in a different language.
评论 #29938505 未加载
评论 #29938751 未加载
nickstinematesover 3 years ago
I like trade schools like Holberton School