[HN Gopher] Teaching how to code is broken
       ___________________________________________________________________
        
       Teaching how to code is broken
        
       Author : neilpanchal
       Score  : 99 points
       Date   : 2022-01-12 06:53 UTC (2 days ago)
        
 (HTM) web link (neil.computer)
 (TXT) w3m dump (neil.computer)
        
       | hamolton wrote:
       | I 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/inde...
        
       | imbnwa wrote:
       | As 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).
        
       | DwnVoteHoneyPot wrote:
       | Tutorials 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 wrote:
         | I 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.
        
       | hateful wrote:
       | This 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!
        
       | TaylorAlexander wrote:
       | 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 "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
       | 
       | Youtube link for easy viewing but the entire video series he
       | helped produce is here:
       | 
       | https://el.media.mit.edu/logo-foundation/resources/onlogo/in...
        
       | a-dub wrote:
       | personally 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.
        
       | JoeAltmaier wrote:
       | My 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 wrote:
         | I wish there were more people out there like you. You sound
         | like a great mentor / boss
        
       | PaulDavisThe1st wrote:
       | I 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.
        
       | 999900000999 wrote:
       | >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.
        
       | friendlydog wrote:
       | Teaching 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."
        
         | ratherbefuddled wrote:
         | I 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.
        
         | jhjhvhvnv wrote:
         | "Everyone has different learning styles" is a common
         | misconception.
        
           | dragonwriter wrote:
           | > "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.
        
       | bob1029 wrote:
       | I 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.
        
         | dj_mc_merlin wrote:
         | I have never met a programmer I respected skill-wise that
         | wouldn't randomly spend a weekend locked in a room solving an
         | esoteric problem they felt they had to solve (for no reason).
         | Over the Christmas holidays everyone at my company writes PoCs
         | or hobby projects, being glad to have some free time away from
         | paid programming in order to enjoy recreational programming.
         | 
         | What I'm trying to get at is software engineering is an easy
         | career if you're literally obsessed with it, and most software
         | engineers are, or at least were at some point (it goes in
         | cycles).
         | 
         | If you're not gonna do that, you simply can't assimilate the
         | huge amount of knowledge needed to truly excel in even one
         | facet of programming.
        
           | rjbwork wrote:
           | >or at least were at some point (it goes in cycles)
           | 
           | Indeed. And the periods in which I can be obsessed seem to be
           | increasingly less common as I get older, but every now and
           | then I get bitten and just have to bang it out.
        
           | [deleted]
        
           | khendron wrote:
           | When non-tech folks ask me how to learn programming because
           | they want "jump on the money train", I ask them if they ever
           | take the initiative to solve a problem with programming. You
           | don't have to work in tech to do this. For example:
           | 
           | Work in an office writing documents and making spreadsheets?
           | Have you ever simplified your job by writing a Word or Excel
           | Macro?
           | 
           | Own a smart TV? Have you dug into its features until you know
           | them backwards and forwards and can program it to
           | (metaphorically) sing and dance on command?
           | 
           | Have you connected multiple things in your house together so
           | you can control them from your phone, just because you could?
           | 
           | These are all examples of taking the initiative AND having
           | the curiosity to dig into technical problems, and implement
           | solutions. If you are like this, you will likely do well in
           | tech and really enjoy it. If you DON'T have the tendency to
           | do these sorts of things, you are probably going to have a
           | bad time.
        
         | cloverich wrote:
         | You can show people the door, but they have to walk through it.
         | I learned programming, and a bunch of other stuff later in life
         | (now 39). They all have the same process - you decide you want
         | to do it, and you start doing it. You will absolutely fail hard
         | and regularly at it. You'll pick the wrong course or book or
         | language or whatever, but that's all part of the process. If
         | people see you doing the work and are able, they'll help you
         | out (ideally, not IME).
         | 
         | In a way its kind of nice to get started with something new,
         | because you don't need a plan at first. You just start kind of
         | doing it, and then when you take breaks, you figure out the
         | plan. Its amazing how quickly you can pick things up once you
         | get into the habit of doing it very regularly. That initial
         | hump is always, ALWAYS a huge pain, but there's no escaping it.
         | Failing and flailing for that initial period is how you learn,
         | not how you fail.
        
         | 908B64B197 wrote:
         | > I 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.
         | 
         | The best advice is to get a proper CS or Engineering degree
         | honnestly.
        
         | shagie wrote:
         | That pain tolerance bit...
         | 
         | There's a blog post that I really like titled "Find The Hard
         | Work You're Willing To Do" -
         | http://www.cs.uni.edu/%7Ewallingf/blog/archives/monthly/2018...
         | (HN post w/ 76 comments
         | https://news.ycombinator.com/item?id=26209541 )
         | 
         | The article concludes with...
         | 
         | > But I had enjoyed working on the hard projects I'd
         | encountered in my programing class back in high school. They
         | were challenges I wanted to overcome. I changed my major and
         | dove into college CS courses, which were full of hard problems
         | -- but hard problems that I wanted to solve. I didn't mind
         | being frustrated for an entire semester one year, working in
         | assembly language and JCL, because I wanted to solve the
         | puzzles.
         | 
         | > Maybe this is what people mean when they tell us to "find our
         | passion", but that phrase seems pretty abstract to me. Maybe
         | instead we should encourage people to find the hard problems
         | they like to work on. Which problems do you want to keep
         | working on, even when they turn out to be harder than you
         | expected? Which kinds of frustration do you enjoy, or at least
         | are willing to endure while you figure things out? Answers to
         | these very practical questions might help you find a place
         | where you can build an interesting and rewarding life.
         | 
         | > I realize that "Find your passion" makes for a more
         | compelling motivational poster than "What hard problems do you
         | enjoy working on?" (and even that's a lot better than "What
         | kind of pain are you willing to endure?"), but it might give
         | some people a more realistic way to approach finding their
         | life's work.
         | 
         | ---
         | 
         | A lot of people don't have the pain tolerance for the "this
         | isn't fun" part of software development that is necessary to
         | get past certain plateaus of skill.
        
         | rabuse wrote:
         | I'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.
        
           | riversflow wrote:
           | I'm not trying to level this against your friends and family,
           | just an observation that I've been meaning to share, spurred
           | by "just don't get it":
           | 
           | When I was in community college I had to take "Critical
           | Thinking" as a pre-req for Symbolic Logic.
           | 
           | We spent the first 1/3 of the class, 8 weeks, analyzing truth
           | statements, basically and, or and not. I was bored to tears,
           | but attendance was mandatory, so I got to see how people
           | absolutely struggled with this, and "just didn't get it". The
           | average score on the mid-term covering that was a low D after
           | 8 weeks of (excruciating for me) examples. I finished in <15
           | minutes and got 100%.
           | 
           | When you are in a bubble of people who work in engineering
           | fields, especially in tech where logic is fundamental, I
           | think it's easy to think that logic comes naturally to
           | everybody, but it's far from ubiquitous and reading on here
           | it sometimes feels like some people just don't realize this,
           | especially those deep in tech.
        
           | andrewzah wrote:
           | That'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.
        
             | jholman wrote:
             | E'ybody wants to be a bodybuilder, but don't nobody want to
             | lift no heavy-ass weights.
             | 
             | https://youtu.be/4UlgXIL0-3g?t=10
        
               | closeparen wrote:
               | I know it's a pithy saying, but is it true? People tend
               | to report the actual lifting of the weights as pretty
               | pleasurable. It's the whole supporting lifestyle grind of
               | consistently making it to the gym, only and always eating
               | food whose ingredients you have weighed, etc. where you
               | lose most people.
        
               | andrewzah wrote:
               | It's a pithy saying. It's basically shorthand for:
               | "nobody wants to put in the work and adjust their
               | lifestyle to achieve that goal of being ripped". But I
               | wouldn't say doing 3x or 5x sets of lifting heavy weights
               | ever is "fun"- you just get used to it.
        
             | tmountain wrote:
             | Applies to learning foreign languages too. I've spoken to
             | many people that want to "learn Spanish" without having a
             | clue that it's a huge grind to get to basic competency.
        
             | cloverich wrote:
             | Only 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).
        
           | nomel wrote:
           | > one needs to seriously find enjoyment in building things
           | 
           | I would say you have to also be happy with/enjoy confusion
           | and frustration.
        
       | [deleted]
        
       | ModernMech wrote:
       | > 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.
        
       | macrowhat wrote:
        
       | kenjackson wrote:
       | I 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.
        
       | [deleted]
        
       | yawnxyz wrote:
       | I 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
        
       | dboreham wrote:
       | Article 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 wrote:
         | From my experience, many beginner books are structured in a
         | similar way.
        
         | systemvoltage wrote:
         | Basically, 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 wrote:
           | The 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.
        
       | HPsquared wrote:
       | Coding is usually learnt, not taught.
        
       | teeceetime2 wrote:
       | An "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 wrote:
         | This 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 wrote:
           | On 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 wrote:
             | Yeah, 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.
        
       | __mharrison__ wrote:
       | (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 wrote:
         | I 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.
        
           | chmod600 wrote:
           | But you need some concept of what kinds of problems are
           | solvable with a computer before you could really be inspired
           | to program one.
           | 
           | And more than that, you need to have a concept of the
           | difficulty of a given problem for a beginner or expert.
           | Obviously a beginner will be wildly off, but probably needs
           | some concept of the level of difficulty.
           | 
           | For example, lots of people have motivation to write a game.
           | But few have the level of obsession to follow through with
           | it. Maybe they should do a basic iPhone convenience app or
           | something first instead.
        
             | paulryanrogers wrote:
             | It's a matter of scope and expectations. Leave your epic
             | space opera in your dreams and take baby steps using easier
             | tools and concepts. Once you find some fun try product-
             | izing it.
        
           | erwincoumans wrote:
           | Yes, 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 wrote:
             | > 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?
        
             | xmprt wrote:
             | Try a game like Factorio or Satisfactory. Even just
             | Minecraft can be good enough to train their problem solving
             | and critical thinking skills.
             | 
             | They don't need to start with redstone to learn to code.
             | They should play the game and naturally realize that
             | redstone is a way to solve their problem (like making an
             | automatic sliding 2x2 door) and then solve it.
             | 
             | I feel like those skills will take you much further in life
             | because now you have an extra tool to solve problem no
             | matter what field you end up going into. And since
             | programming is so powerful, it's often one of the best
             | tools for the job so kids will naturally pick it up.
        
         | asleepawake wrote:
         | Having a good mental model of a language seems like one of the
         | fastest ways to be more productive in that language. Do you
         | have any recommended resources for developing a strong mental
         | model of python? For reference, Dan Abramov's course
         | JustJavascript [1] provides an amazing mental model of
         | JavaScript, and Josh Comeau's css for js developers [2] course
         | provides an amazing model for understanding css. I have 5+
         | years programming in python but admittedly do not know much
         | about the internals so my mental model is pretty weak!
         | 
         | [1]: https://justjavascript.com/ [2]: https://css-for-js.dev/
        
           | hexane360 wrote:
           | One way I've found is to dig into C/C++ extensions to Python.
           | The Python C API reference is very helpful:
           | https://docs.python.org/3/c-api/index.html
           | 
           | It can be quite fun to implement a simple data structure
           | (tree, queue, etc.). in C and bind it to Python.
           | 
           | Otherwise, you can get a lot of dirty details by reading the
           | source to complicated/magical libraries (e.g. pickle).
        
           | touchngthevodka wrote:
           | Have you tried Fluent Python? It really helped to level up my
           | knowledge of the language.
        
         | raincom wrote:
         | Any teaching, training, has to hook with the experience of
         | students. Otherwise, it will lead to cramming, etc; that's what
         | we see in grade-driven teaching. You are doing a great service
         | by using the client data to solve "mini-problems" of your
         | students.
        
       | gumby wrote:
       | Structure 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.
        
       | lanecwagner wrote:
       | I 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
        
       | mzehnder wrote:
       | +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 :)
        
       | enchiridion wrote:
       | 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.
        
         | dboreham wrote:
         | It isn't taught that way?
        
           | habeebtc wrote:
           | When 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 wrote:
             | I 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 wrote:
               | My 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 wrote:
             | In 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?
        
       | lordnacho wrote:
       | 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'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.
        
       | travisd wrote:
       | I have opinions(tm), 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... (see page 8) [2]
       | https://www.colorado.edu/eer/sites/default/files/attached-fi...
       | [3] https://continuum.engin.umich.edu/programs/jumpstart-coding/
        
         | skinkestek wrote:
         | > 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.
         | 
         | Just be aware that this is not everyones experience.
         | 
         | Many places boys are held back and girls are pushed forward.
         | 
         | And then afterwards boys gets told they are somehow
         | "privileged" and would never be were they are if it wasn't for
         | "male privilege".
         | 
         | Obviously this goes both ways, but there is at least some focus
         | on it when it hurts girls.
         | 
         | If you try to mention the problems young innocent boys have, be
         | prepared to get laughed out.
         | 
         | (I'm halfway expecting that even on HN too.)
        
           | JoeAltmaier wrote:
           | This seems entirely created out of thin air.
        
             | skinkestek wrote:
             | I think that was neither nice nor fair from you.
             | 
             | This is experience.
             | 
             | If you had a cushy life, good for you. But don't tell
             | others their experiences aren't real.
        
         | [deleted]
        
         | foxfluff wrote:
         | Meanwhile my sister's first programming course at university
         | involved making a game using an existing bespoke framework. It
         | mostly involved adding graphics and a few methods & some
         | properties to objects (which already had physics etc.
         | implemented) in an otherwise more or less done project base. I
         | don't know about retaining or intimidation but I feel like it
         | was way too much "just fill in the gaps, look you have a
         | character on the screen now" and that they really failed to
         | _teach the basics of programming_ and I got the vibe that
         | students finished the course not really having any clue how the
         | whole thing works at all. The next course was object oriented
         | programming at the deep end.
         | 
         | I feel like she's still struggling with the basics and doesn't
         | have much self confidence at all. And she's not dumb.
        
           | stingraycharles wrote:
           | > Meanwhile my sister's first programming course at
           | university involved making a game using an existing bespoke
           | framework.
           | 
           | I had exactly the same exercise on my first day on uni, we
           | had to take some robot maze pathfinder game and adjust the
           | algorithm a bit.
           | 
           | As someone who had been writing code for over a decade at
           | that point (but who was unfamiliar with Java), I still
           | remember it was intimidating.
           | 
           | I cannot imagine how it must have felt for people without
           | prior coding experience.
        
         | freebreakfast wrote:
         | Do 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.
        
         | tonguez wrote:
         | Yes, I remember back in the day the girls would always try to
         | come into the computer lab to play video games. My friends and
         | I were always like, "GET OUT! WE HATE WOMEN!" Then they left.
         | The girls wanted to learn how to code so badly, but we wouldn't
         | let them. My friends and I were getting lots of sexual
         | attention from women, but we thought that was boring, and
         | preferred to spend our time alone on computers. The girls were
         | having sex, but they thought it was boring, and wanted to learn
         | to code instead, but my friends and I physically prevented them
         | from entering the computer lab, using our strong muscles. My
         | friends and I all had zero sex drive, and if we had any
         | attention from the opposite sex we would have rejected it and
         | continued to spend all our time on computers.
        
           | Der_Einzige wrote:
           | Is this GPT-3? It looks like it is.
        
         | imglorp wrote:
         | This comment covered several hot topics.
         | 
         | 1. Girls in STEM: society needs to quit telling people "math is
         | hard, tee hee" and quit shopping in the Pink Aisle at the toy
         | store and reinforcing that culture. Buy your kids Lego and
         | Raspberry Pi circuit kits and see what happens.
         | 
         | 2. CS is part coding, part science of algorithms, and part
         | software engineering. We have to quit intertwingling all terms
         | into the catchall "CS" bucket because sometimes "how to run
         | excel" gets thrown in there too. Maybe best to drop the term
         | altogether and use more descriptive names for each study.
        
           | travisd wrote:
           | RE: 2: I think I agree. There are lots of "CS" programs
           | targeted towards high-school students which I have mixed
           | feelings about. The goal shouldn't be to turn every student
           | that walks through the door into a SWE (there's somewhat of a
           | conflict of interest here considering most programs are
           | sponsored by big tech companies who are desperate for talent
           | - Microsoft does a lot in this space). Instead, I think it
           | should serve a few roles: expose students to new
           | opportunities (learn if you _do_ want to be a SWE); give
           | students the skills to understand that computers and
           | algorithms are not magic (important from a public awareness
           | perspective); and also to teach enough  "deep" technical
           | skills to prepare them for a world dominated by software
           | (e.g., learning how to query databases, write small
           | automations, etc.).
           | 
           | But I think most important is that intro courses need to
           | serve as jumping off points (i.e., they should be _INTRO_
           | courses). Give students a taste and let them decide if they
           | like it and want to take another bite.
        
           | throw_m239339 wrote:
           | > 1. Girls in STEM: society needs to quit telling people
           | "math is hard, tee hee" and quit shopping in the Pink Aisle
           | at the toy store and reinforcing that culture. Buy your kids
           | Lego and Raspberry Pi circuit kits and see what happens.
           | 
           | Girls in STEM =/= Girls becoming professional programmers.
           | 
           | There are plenty of girls in STEM fields such as medicine,
           | biology, geology, physics, Math, civil engineering...
           | 
           | The fact that not a lot of them want to be forced to sit
           | before a computer 10 hours a day for the rest of their lives
           | certainly isn't an issue if you asks me...
        
             | 908B64B197 wrote:
             | > Girls in STEM: society needs to quit telling people "math
             | is hard, tee hee"
             | 
             | To me, the very existence of "Girls in STEM" groups is
             | sending a weird message to girls (and I'm apparently not
             | the only one to think that). Something along the lines of
             | "sure you can do STEM, you're just not good enough to do it
             | the regular way so we created a group just for you".
             | 
             | Honestly that's the message a lot of diversity initiatives
             | end up sending.
        
               | ejb999 wrote:
               | couldn't agree more - have STEM groups and encourage
               | everyone that wants in, to join, but don't make them sit
               | in the 'special class' separate from everyone else.
        
               | another_story wrote:
               | True to some degree, but I think it does help girls get
               | involved in areas where boys are dominant. In high school
               | the comments from boys towards girls interested in such
               | pursuits can deter them. Having a space free of that, at
               | least until they've developed the motivation to continue,
               | is important.
               | 
               | As a high school CS teacher, I've seen how boys can be
               | towards girls interested in coding.
               | 
               | All of this swings both ways, of course, and men are
               | deterred from positions like elementary school teacher,
               | nursing, and secretary roles. Gender being attached to
               | jobs is just dumb in general, and keeps a lot of capable
               | people from doing what they'd love.
        
             | andrewzah wrote:
             | Sitting at a computer for 10 hours a day isn't a gendered
             | thing.
             | 
             | There is nothing about computer science or programming that
             | is gender specific. It, ideally, should sit around 50-50,
             | +-5%. So yes, it is a problem that it so heavily skews
             | male.
             | 
             | As to why, it's multi-faceted cultural issue, with how our
             | society treats boys and girls starting from birth. In other
             | words, a pipeline issue.
        
               | throw_m239339 wrote:
               | I never said or implied that programming was sexed, I
               | told the parent that just because they are fewer female
               | developers doesn't mean the sex imbalance is the same or
               | even skewed heavily toward males in every STEM
               | discipline.
        
               | hackinthebochs wrote:
               | It is not clear that interest in extended computer use
               | isn't gendered. For example: https://www.ncbi.nlm.nih.gov
               | /labs/pmc/articles/PMC3166361/
        
         | 908B64B197 wrote:
         | > We've gotten a lot better at recruiting CS students from
         | underrepresented groups (women and BIPOC chiefly), but numbers
         | drop off quickly
         | 
         | Are you really better at it if you can't retain them in the
         | long run? The stats you shared are interesting, but to me it
         | seems to highlight that students are getting "weeded out" at
         | the beginning of the course. I would be curious to attempt a
         | correlation with High school GPA and SAT scores. Because, if
         | lower performing students leave, regardless of gender or race,
         | that's to be expected. But if overachieving students of color
         | leave and their (white or asian) peers with lower grades don't,
         | now that's an interesting issue.
         | 
         | > 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.
         | 
         | I would argue the solution here is to have different "levels"
         | of intro courses. Because the converse is also true; students
         | that are coming in with a decade of coding and who already had
         | an introduction to programming might assume they will be able
         | to "coast out" courses and then suddenly realize they are
         | falling behind their peers. And then drop out.
        
       | khaledh wrote:
       | Exactly 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 wrote:
       | 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.
       | 
       | 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"
        
       | nathias wrote:
       | '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.
        
       | optymizer wrote:
       | I'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 wrote:
         | From 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.
        
       | japhyr wrote:
       | I'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.
        
       | codazoda wrote:
       | 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.
       | 
       | 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
        
       | nickstinemates wrote:
       | I like trade schools like Holberton School
        
       | maerF0x0 wrote:
       | Interestingly 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
        
         | shagie wrote:
         | The scoring poker is indeed an interesting problem - and its
         | Project Euler #54 ( https://projecteuler.net/problem=54 )
         | 
         | Starting from high card on gets to some interesting
         | increasingly complex "can I identify it rules"
        
         | ramses0 wrote:
         | If 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/
        
       | Cupertino95014 wrote:
       | "<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 wrote:
       | 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.
       | 
       | This article seems to imply this isn't how things are done now,
       | but surely they still are by most?
        
         | spankalee wrote:
         | Similar 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.
        
       | shadowgovt wrote:
       | 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:
       | 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)
        
       | dfdz wrote:
       | > 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 efficient, I think it can be a very natural way to
       | learn and avoid all catch-22 situations
        
       | akihitosan wrote:
       | 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.
        
       | godot wrote:
       | 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/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 wrote:
         | Yeah, 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/ series but it was too
         | much of a time sink.
        
       | paradaux wrote:
       | (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!)
        
       | 0xbadcafebee wrote:
       | Yes! 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!
        
       | _hao wrote:
       | I 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.
        
       ___________________________________________________________________
       (page generated 2022-01-14 23:00 UTC)