Hacker News new | past | comments | ask | show | jobs | submit login
Two years of teaching high school CS (charliemeyer.co)
377 points by csmeyer on June 16, 2023 | hide | past | favorite | 247 comments



I've taught CS for about 15 years now. To get the majority of kids in a class actively involved is an art. It's less about the tools, though those can help, and more about who you are, as a teacher. It takes time to develop that. The ability to read kids, adjust your lessons on the fly, and keep their attention. Sometimes it's about developing relationships and trust within the school, which can take months or even years.

For me, there is no silver bullet, and every year I adjust to suit the class I'm teaching. This year the kids were much less able than the year before, so we played more revision games, and came back again and again to the basics, just from different angles. The year prior was a solid lot, and I was able to go beyond the curriculum and have fun with them exploring things.

Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.


I was a CS teacher for 8 years and the way I was able to hook like 85% of classes was I was introducing them to Hackits [1]. They all loved it because they use the web so much and this gave them the feeling of being able to look inside the matrix

This was also how I got into CS many years ago. The old tricks still work

[1] https://blog.haschek.at/2014/why-hackits-are-the-first-thing...


These are genius. Thanks for sharing. I'll definitely be sharing w/ my kids when they get old enough. What's your take on the lower bound where kids are generally capable of figuring these out?


I was using this with the youngest kids in our school which were like 11 but for real learning benifit I'd recommend 13 and up


It's going to depend on the kid. I was doing this sort of thing at 4 or 5.


Breaking peers into groups and letting them compete on wargames is also a fun exercise. Not sure how this will be impacted by LLM-powered coding software, however.


I put the second puzzle into ChatGPT. It makes an extremely stupid mistake but gets lucky.

GPT gets JavaScript numerical semantics utterly wrong but the only non-integer operation is a red herring: "the result [of 14/3] is approximately 4.6667, but JavaScript will store it as 4 since we are not using floating-point numbers"


Is this GPT 3.5, or GPT 4?


3.5


You should try with 4 and compare. 4 is leagues better.


I've yet to be wowed by anything from gpt 3.5 I've gotten myself or 4 I've seen others post, so I'm not gonna buy it.


Doesn't this strike you as an anti-scientific, close-minded / willfully ignorant attitude?

Why not just discover for yourself? I think you would do well to have your own opinions instead of relying on others.


No. There's a limited amount of hours in a day and dollars in a month I spend on discovering things.

I spent about four hours looking into LLVMs myself. I decided it was worth it for VSCode autocompletion and not worth it for anything more complex.

I'm working through a networking textbook right now in my learning time. So far my estimate is that that's a much more useful long term.

But I peek at HN posts about LLVMs. People are always telling me if I do yet one more thing I'll be wowed, but people are never posting concrete evidence of amazing things they've done. My heretics tell me that means this* is vaporware.

*Not that LLVMs are vaporware, but LLVMs allegedly an order of magnitude more useful than Copilot are.

And the results of this specific question aren't interesting. GPT 3.5 getting the second question of the first lesson in a middle school intro to programming class wrong shows its limitations. GPT 4 getting it right merely shows it's as least as capable as your average middle schooler before they've been taught programming, doesn't tell me anything interesting about it's ability to help me.


This smells of Dunning-Kruger effect. Four hours is not adequate time to research the current state of the art of LLMs. You're adopting an authoritative tone a subject which you readily admit you've only spent four hours learning about.

Exactly what evidence are you looking for? What is your bar of excellence? I've had more "wow" moments than I can count. So much research is going into this space. It's definitely worth it to do a bit more yourself before writing it off.


I am bookmarking this website for when my kid is old enough. So please don't shut this down. Host it on cloud flare or something which has a good free plan.


I detached the hackits from socialcube so now they are on a open source repo and here -> https://www.0xf.at/


It is already broken. If you follow the link in the blog post you get a 404:

https://www.socialcube.net/hackits


https://www.0xf.at/ is the correct link, I'll change it in the blog post, thanks


Thanks!


Oh, reminds me of http://notpron.org/notpron/


These are great. Reminds me of some of the puzzles from hackthissite.org.

Do you mind me asking what you did after you left teaching?


You just unlocked a nice memory for me! I remember many years ago going to a website like that (probably the one mentioned in the blogpost) and feeling a lot of satisfaction every time I was able to “hack” the exercise. Thank you!


This is similar to my hook for friends and family - show them how to use Inspect Element to change parts of the page they didn't think you could change.

That usually is an eyeopener to how the whole thing is working.


How well did the XP system work in practice? Did it seem to work well for learning or did students just learn how to game the system?


These are fantastic!


For a totally different way of getting it to work than the others:

Back in my highschool there was an intro to programming course and no teacher, so every year one of the math teachers was recruited to take it over the summer and teach the class the next year. The best one was the geometry teacher, who kinda took the lazy route - she was the one I found out about this scheme from, and was totally willing to admit when she didn't know something.

She ended up encouraging students to help each other and was extremely lax with the rules, resulting in: two or three of us who wandered the classroom to help others, one showoff who kept people interested in what they could create (one example, in the classroom he made a chat program and gave everyone a copy, then weeks later activated a hidden feature that popped open the CD tray of everyone using it, which turned out to be about half the students), and another who joked about using the "blackboard compiler" - we somehow got one more student than computers so he volunteered to go without, and did his work in chalk on the blackboard (yes, where everyone could see it, and the teacher was in the room and knew what he was doing), only actually coding it once someone else was done and a computer freed up.

Some people did get frustrated at times, but it never lasted long because of how she encouraged us to help each other for all the work. Only during tests was she strict.


I've seen parents fall into two camps when this dynamic arises in classes with a wide(r) spectrum of ability:

First group of parents are happy that kids are helping each other out, acting as "teacher aides" for their class peers, especially the parents of kids being helped because this dynamic drops the "teacher"-to-student ratio (i.e. slightly more individualized attention per student at the expense of the student teaching assistants).

Second group of parents acknowledge that student teaching assistants develop some form of leadership skills but aren't happy that the tradeoff seems to be at the expense of learning new knowledge that the teacher should, in theory, be imparting. Also, there's probably a limit where student teaching assistants might/can become bored teaching instead of learning if the dynamic continues on too long or across multiple classes.


By far the most memorable college class I took was an advanced electronics lab where I ended up as the "unofficial TA". I was by no means an expert but I guess I got a reputation for picking the material up quickly and being able to help guide my classmates to the same understanding. It was honestly a little stressful but in retrospect being pushed to internalize what I was learning deeply enough to be able to explain it clearly to fellow students was highly beneficial to my own learning process. I was never all that interested in grad school or academia, but the meta-lesson of that course has stuck with me in guiding career choices... I tend to seek out opportunities for consulting or mentoring type roles knowing that they will help further my own learning as well.


> knowledge that the teacher should, in theory, be imparting

I get that teachers at high schools are not subject matter experts, but it blows my mind that they're expected to teach topics that they themselves do not understand.

I come from a family of teachers and I've seen the effort that some of them put in behind the scenes to learn these topics, and they do have the best of intentions, but if I was a parent and found out my kid's teacher was all "I don't know this topic so you guys just do whatever" I'd be a bit peeved as well.


> if I was a parent and found out my kid's teacher was all "I don't know this topic so you guys just do whatever" I'd be a bit peeved as well.

That's certainly a bad situation, but the teacher's attitude can make a world of difference.

I heard a very interesting response from a student in one of those classes where the teacher didn't know much. Essentially, "This class was really interesting. I never would have learned any of this stuff without (the teacher) taking the risk." The student's other choices were band or study hall, not Advanced Swift with Chris Lattner.

I assume around here people understand that real SW devs easily make twice what a teacher makes, and there's just no way a school could afford someone who "really" knew what they were doing on a technical front. (Of course there are other factors, but suppose you found one cs teacher and they do great work. Now how do you find another? It seems like panning for gold.)

From what I've seen, the vast majority of high schools still hold the belief that CS in a branch of "business", and those in charge know neither pedagogy nor content.

This is either way too cynical or an obvious consequence of the free market economy.

I think things can be done differently, but there are some hard constraints in place.


The problem is how things are taught.

Things are discovered, this is a messy, error prone process full of false leads, backwards reasoning and incorrect assumptions. Then this is compiled into a neatly ordered stream. and feed to others. the problem is that the neatly ordered stream is boring, uninteresting and hard to focus on.

There is a hidden aspect to teaching. When done well it is not to just impart knowledge on a subject. It is how to learn.

The best classes I have ever taken, the most interesting ones that have stuck with me the longest. Were with a teacher who did not know the subject well but was enthusiastic about learning it and was able to guide the class into learning it together. When you learn this way the process is more akin to discovering a thing for the first time. you first hand experience the things that don't work, you understand not only what the thing is but why it is.

The best teachers are able to recreate the experience of discovery when teaching. Most are unable. I know I have a hard time teaching in an interesting manner.


The "best" professors/teachers i saw yet, where radiating an exhuberant joy while talking about their topic. It is fun to listen. They where a russian teaching in america who recorded a series about physics for TTC, The Teaching Company. He got voted best professor in america twice.The other one was David Malan of Harvards CS50 on [0]. Beware though, it sadly spoils you for later lectures by others.

[0] https://edx.org


I don't know how they do it though - I could imagine enjoying teaching a subject once in awhile, but to be "on" for 5 or 6 identical classes a day and then repeat that until the pension kicks in seems pretty tough. Of course, professors have it better than high school teachers since teaching isn't their primary job.


Some people really like to teach others, so I can understand how teachers would find joy in this.

I think it has to be especially hard to maintain that in K-12 where all the children have to be, but most of them don't want to be.

At least college is optional, so there is a higher percentage that actually desire to learn. I think that would make it easier for a teacher to keep their passion for the job.


Interested in the first professor mentioned, but can't narrow it down and find who they are. Can you provide any more information?



> Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.

There's nothing wrong with kids not enjoying CS at the end of the class. It's an elective, meaning some of them are there because they aren't sure they'll enjoy the subject and want to test the water. Your (I'm sure excellent) teaching probably saved a few from enrolling in CS and then dropping out or wasting a year switching majors.

This might be somewhat controversial, but I believe the point of early CS education should be to expose students to computational thinking and get them a sense that some problems are easy to solve with computers (if you can break it down as a series of steps) and some are incredibly hard. I think it's normal it'll click for some students and not others (intro to programming at the college level is reputed to be completely bimodal as well). [0]

[0] https://blog.codinghorror.com/separating-programming-sheep-f...


> …should be to expose students to computational thinking and get them a sense that some problems are easy to solve with computers (*if you can break it down as a series of steps*)

Emphasis mine. This bit, taught through CS or otherwise, is so incredibly useful. I’ve seen so many people throughout my life if all ages run into an issue and have no idea how to approach it because it was ‘too big’. Internalizing that can be so incredibly useful.


> Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.

I wish more teachers would understand this.


I think most teachers do understand, but most of the teachers I had, simply did not care (anymore).

(CS teachers were an excemption, though)


> Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.

I'm not a teacher but I think this is probably true of most subjects. I wish my high school math teachers had applied this idea in their teaching.


I've seen this phrase a few times and absolutely love it: "teach kids, not subjects"


I never taught kids, but I taught numerous classes and labs to university students and professionals at various levels. Programming is like a game and is fun for a lot of people. It's an easy topic to teach, but there are a few (obvious) rules

1. Exercises should be solvable, not too easy, not too hard, and self-contained.

2. Students come with extremely different abilities, so you need to have exercises of gradual difficulty to accommodate everyone. You want everyone to be able to find some solutions otherwise they'll be frustrated.

3. If you provide good material, you can relax during the class, the computer does the work for you


"The Skillful Teacher", by Saphier, Haley-Speca, and Gower, is an authoritative and comprehensive guide to the craft of teaching. Like the commenter says, there's a lot going on, and so potentially a lot to juggle.

https://www.rbteach.com/resources/skillful-teacher-7th-editi...


One thing I noticed about CS once I started out in the industry is how boring it was. When I started learning programming I often got the “what” (what is an array, what is a floating point integer, etc) but never a “why” (why do we need arrays?). To folks that code that answer is obvious, but it wasn’t obvious to me when I started. I remember on many occasions going “great, but how does this tie into an actual real world application”.

And I think that’s a big reason so many loose interest. You learn all these concepts but you have almost nothing to tie them together or to tell you why you should care about them.

This is why I think the “Python Music” exercise was so engaging, students now had a “why” behind what they were doing, they could tie it to a larger goal. And I remember back in college when I got really into programming was right around the time we started submitting full blown apps as projects (full blown in terms of a CS student)


as a middle aged veteran i still get frustrated by the lack of intermediate-level examples in lib/framework documentation. even a link to a suitable github repo showing a full usage of features would be useful. i can stare at the auto-generated API documentation or look at the source (or maybe even your test suite) for hours trying to hunt down features and flags and methods i can override and undocumented tricks i can use but why not just give people a useful example beyond hello world?

the best libs start with examples. here's a great one. it covered my entire use case in the first page of documentation.

https://tenacity.readthedocs.io/en/latest/

like, how did you actually test this lib? surely you wrote something - anything - that uses some more of these features other than a test harness?


This was a huge frustration for me as I got into embedded programming. Once I got beyond the basics, it was incredibility hard to find information to take my engineering to the next level. For example, I was doing some work with ADCs and had a deep question about how to do the conversions properly for a sensor. Google kept taking me to site for beginners using Adafruit libraries or basic tutorials how to connect a sensor to an Arduino. There is so much information on helping people start now days, but not enough helping them get to becoming an intermediate developer.


Yeah best practices / structure/ strategies beyond the basics are often a mystery.


One thing I really struggled with as a beginner was determining which parts of a tutorial were intrinsic to the language, and which parts were arbitrary text.

As an extreme example, I can remember the first programming tutorial I did at about age 15, which was not aimed at beginners at all. It started with something like “Let’s create our first Hello World”. I thought, great, what’s that? No explanation. Straight into printing “Hello World” to the console. I can remember trying to figure out whether Hello World was some sort of special code that did something within the program. And then the tutorial ended, and I had no idea what I’d just done, or why.


This resonates with me. I was always interested in "websites that did things" that was before things were called web applications. I took a couple of CS classes in college, but they were dull, challenging, and left me with uninteresting Java apps. It put me off computer science entirely.

A year later, I started tinkering with Wordpress and found it far more fulfilling than my CS coursework. In 2012I joined The Starter League—an early code bootcamp—and began my learning Rails.

For me—and probably for many others—the real excitement lies in seeing how we can apply what we learn to build cool things. It makes learning so much more interesting.


In college I wanted to learn how to code.

My first class was in C, the instructor read from the book and then we did exercises from the book. I dropped the class, moved on in life.

20+ years later I was between jobs and ready for something new. I had an awesome instructor who was energetic and explained why we do things, we built silly apps, and it all made sense. I’m enjoying my new career a great deal.


I had this problem with math in uni. All abstract concepts, zero explanations why we should care about it in the real world. So it goes in one ear and out the other. That has to be one of the least effective ways of learning about something, like my brain is not wired to retain information if it doesn't know what the use of it is.

Now I'm slowly discovering the "why do I need this" for much of it as I learn graphics programming, and it makes me wish I had known to pay more attention back then.


Same here, but with high school math. Despite my efforts it was almost impossible to pay attention because I had no practical applications at hand, and the teachers didn't really care to change that. They stopped right at teaching the abstract concepts and let the students sink or swim.

As a 30-something adult, I think I'd do much better at these classes now simply because of greatly improved self-discipline, but uptake and internalization of information I have immediate use for is still vastly faster than it is for abstract bits and bobs.


The teachers don't know how it's used either. Math teaching selects for study habits and that's about it.


Math education has the same issue.

3B1B videos draw you in with a cool visualization that makes you ask the 'why' of 'why did this happen' first. This maps onto the techniques used by the best professors I've learned from. Hell, it is exactly how competent sales-men sell their product.

Start with a cool demo -> confuse the audience -> make them ask why -> this motivates them to want to learn the what -> all the tools learned in the 'what' comes together to teach you the 'how' -> you just made the cool demo happen -> MAGIC.

My favorite subjects were ones where the 'why' was obvious to me as I learned the 'what'. I distinctly remember disliking inorganic chemistry, because none of the facts seemed to go anywhere. You learned the facts for the facts. Nothing came together to reveal a grander intuition. I disliked history for the longest time, because I viewed it as some form of culture acquisition and status signaling. Once I started reading real history from an 'early warning system' perspective, I couldn't stop searching for repeating patterns and universal casual links within it.

With AI tools gaining prominence, it will actually be possible to build these fully contained dopamine cycles. "Dangle carrot -> difficult task -> reward", all within a single self-contained assignment. But even besides that, too many teachers simply do not have an intuition for how that dopaminergic cycle works.


I took all the advanced math classes available to me in high school. This was despite me hating school and being a terrible student. But I enjoyed math as puzzles to solve. This was until I got into calculus. The teacher didn't have a strong grasp of the subject and more importantly it was just memorizing calculus formulas instead of understanding any sort of real-world application. In contrast, my AdMatics (advanced math and physics) class had us doing real-world physics based experiments. The application of the tools was immediately obvious.

If I had a calculus lesson that broke down the problem space like this (https://youtu.be/WUvTyaaNkzM) I probably wouldn't have stopped my formal education in math at that point. When I discovered that video, all the formulas they tried to make me memorize started making a LOT more sense.


I felt like that about a lot of education particularly science and maths, okay so yes your telling me it is a -insert term- but why is it called that, why do we need to know that, how does it fit in with a larger picture…


The traditional way of schooling, where it starts with small pieces and works its way up to something grander, is decidedly backwards.

In practice, one is best served with starting with something grand and then breaking it up into smaller and smaller pieces until those pieces are digestible. Learning becomes infinitely easier this way.

On the surface it may seem like the same thing: The learning takes place around a concept of of small pieces of a larger puzzle. However, the process of breaking down the puzzle is where the most important information is gleaned.


So, mathematics, for instance.....you'd start with differential equations and work your way down to......addition/subtraction?


That's a low effort interpretation.

Every kid in the world understands the concept of 3D games, Minecraft, etc. That's a perfect vehicle to begin breaking it down into relevant simple math concepts.


Or just a basic web site that has some JavaScript. Or a form/submit.


Especially at a younger age, you have to focus on some concrete "thing" with constant little minor improvements. I think most high school kids would be best served building out something like Battleship or Yahtzee (e.g.) in Javascript and the browser. Let the kids pick what part to build next. But doing it in a webpage with the ability to simple add new UI elements one at a time and new small functions, progress is obvious and immediate. At this age, we should be focused on exposure and excitement not inheritance and typing.


I had exactly this problem as a student -- it turns out I need to really grok the WHY before I am able to grok the what (and it only took me about 30 years to figure that out ;).

So my best STEM subjects were always physics and geometry (they 'why' is built-in) and my worst ones were calculus et al. The absolute worst I ever did in a class was my first linear algebra class because it was taught in a purely 'what' sort of way (this is a matrix, this is how you multiply a matrix, etc.) and nobody ever explained why you'd need a matrix or what practical applications any of it involved. So it just never clicked and the class to me was a series of memorization and mechanical calculation steps. And THEN, years later....I discovered 3D rendering....:)

The challenge is that there are often kids for whom this just doesn't matter, and often enough of them that teachers and educators in general don't feel a particularly strong need to modify the traditional way of teaching.


With most STEM you're getting the API reference with no useful sample code or applications.

Some people love the abstractions as puzzles. I was fine with calculus and matrix algebra at that level, but I was doing an EE course and the gap between abstraction and real world problems was not huge.

But I had a mental block at school about the moment of inertia, because I had no idea what it was for.

At some point the penny dropped and I worked out that it was basically the m in F=ma but for spinny things. Until that happened it was a mess of confusing diagrams with no obvious meaning or application, in an uncanny valley between pure abstraction and physical relevance.

After it happened it became much easier to do the math.


Calculus is unfortunate because I knew it had “practical uses” I just didn’t think those practical uses were for me and couldn’t describe what they were outside of vague references to “engineering”.

Fast forwards during Covid, I was doing a lot of work on the side with retro telecom projects and for the first time in my life I wished I had paid much attention to calculus or at the very least anything before it.


Yeah, I didn’t really “get” basic calculus until I started taking economics courses where there was an application.


On a similar note, I tried learning OOP every year for 10 years, never stuck. Everything always felt like functions at its core, didn't matter the language.

Then one day I had a problem where we got a lot of value out of a class. At this point I was a professional programmer, I had already made plenty of websites and apps.

When I teach people programming, I basically make this simplification so people can get programming cool stuff immediately. Of course I explain there is OOP, but we don't waste time on it. You don't need to understand it to make a text based video game.

EDIT: I started programming when I was 17, I didn't start a programming career until I was 30. I only dabbled as a hobby.


> 10 years

Wow thats usually the amount of time it would take to become an expert in a completely new field.


I was in tech for several years (although not always programming) and it took me an embarrassing long time to grok the "why" of OOP. I read the vehicle/car/truck and animal/cat/dog/makeSound kind of examples many times in school but it never clicked why this approach would be useful. It's only when you start working with other people and dealing with stuff you can't keep all in your head when you get the "why" of OOP.


Yeah, honestly, I'm finding that comment a little hard to believe or even remotely understand…


That is basically my story.

Started learning programming in high school. Went to college for engineering. Worked in (real) engineering for 8 years.

Now I automate engineering jobs.


My one liner for what oop is: Objects are groupings of data (constituting a new data type, in a typed language) with specialized functions that only work on them.

I know you know, but it even took me a long time to get the utility.


Lets see, what I would describe it as:

You would use classes if you have a category of something with similar attributes that you would want to do various manipulations on and get various outputs.

My next sentence was going to be an example about a car and calculating the number of seats. Its a shame how quickly I need to move to a real world example, but when talking to a programming noob, I feel bad for saying the word attribute/class/method.

I feel less bad about functions, they should know this stuff from 8th grade.


A long, long time ago, when the only computer I had access to was an Apple IIe in my high school's computer lab, I decided to write a basketball game. Using ASCII characters to draw a basketball court, and literal Xs and Os to represent the players. Then typing in player stats from the newspaper to determine odds of making a shot, etc. I would write BASIC code on my school notebook at night, so I could type it in at school the next day.

Not sure how this idea clicked for me, as no teachers suggested it to me. But this basketball game idea was what drove me to learn how to program. I've been programming one thing or another for decades since.


I sometimes think that software/app architecture is something that should be integrated into a students introduction to coding.

Having a high level understanding of how the apps you use on your phone actually work, some of the steps that the program is doing (database writes, etc) seems to be interesting.

Writing the same, boring functions over and over again so someone can reverse a list of strings...sorta kills the vibe, as the youth might say...


When I was a teenager first learning the basics of coding, I usually found programming books that focused on actually making things to be the best tools for learning. Books like "Beginning C++ through Game Programming" and "Teach Yourself C# in 24 Hours" were way more engaging and picking apart the code samples probably taught me more than what most of my peers did in the intro to CS class in college.

When you can actually see the changes to things and have a real interesting project to work on its way more engaging that just going over the theory of things. Obviously, one should follow up with actually learning the theory as well to get a deeper understanding, but I often just can't grok things unless I can play with them.


I started "programming" by taking a game server script (template) and building my way around:

> Let's spawn a car there! > Let's make a multidimensional array of car types & location to spawn! > Let's load the data from another file! > What is this "database" thing I just heard of?

And down the rabbit hole they go.


I think the real world application angle is a common framing but misses the mark just a little - most people really just want to understand what would motivate someone to develop or need the concept.

I only mention it because I felt similarly very frequently and learned to start diffing for that context to learn better, but I have noticed that the 'real world application' framing comes with a lot of baggage.


Intro to programing courses/classes/etc usually suck. Its hello world and building calculators. It sucks. People want to do stuff like make video games and get turned off immediately from this boring mind numbing stuff designed for beginners.


It reminds me of the math professors I had in grad school who were insulted when you asked for examples or even alternate explanations. Ugh. I love learning but I couldn't wait to get out of academia.


This blog post is not enough background for me to make a judgement about this particular teacher, but I will say as someone who spent a decade teaching high school, I have general disdain for people who spend 2 years teaching and think they have learned enough to leave the classroom forever and improve the system by becoming an instructional advisor. 2 years is about how long it goes from being completely underwater and just struggling to get through the year, to being competent enough that you stop worrying about the basic responsibilities and start thinking about how to fine tune your approach.


I don’t have much insight into the teaching environment so take this with a grain of salt, but in general, when bringing new people into an environment, one of the most useful periods of time to get feedback is during and just after the onboarding process. This is when all of the things long-timers have become blind to are most visible.

Someone who has been in a role for years has often absorbed the issues and found ways to navigate around the biggest pain points (the upside of this is a deeper understanding of the environment). But someone who just joined can often see some issues more clearly than anyone else, and someone who is just finding their stride is in a sweet spot for delivering useful feedback.

I’m not claiming to know the ins/outs of classrooms, nor do I know enough about this person to pass judgement, but disdain seems rather misplaced and counterproductive.

Neither should all decisions about improving the system fall on newcomers, but they will have extremely important and valuable feedback. This seems like unnecessary gatekeeping if not tempered by reasonable policies that seek feedback from numerous sources, especially at a time when classrooms are in crisis and improvement is critical.

Blanket disdain is always a red flag.


I have a lot of friends (including my spouse) who are teachers, and I can pretty confidently say that an office environment/culture/work sphere as we as engineers are used to is vastly different than working in a classroom. We don’t often value experience because, you’re right, often times fresh eyes do bring useful insights. But in the case of teaching (and probably many other things), consensus seems to be that experience does vastly affect one’s effectiveness.

I applaud the OP for their attempt to bring something new, but I feel like if maybe they’d waited a couple more years they may have an easier time thinking through the problem set and creating a product to fit the need. Perhaps I’m wrong! But that’s just my feeling from the many conversations I’ve had with teacher friends.


> We don’t often value experience because, you’re right, often times fresh eyes do bring useful insights.

This isn’t quite what I’m getting at. Even in an office environment, I bias towards valuing experience over naive and idealistic attempts to fix everything that’s wrong.

My point is closer to: those fresher experiences are ephemeral and also an important signal alongside deeper experience and institutional knowledge.

Office environments are also full of inexperienced people trying to fix systems they don’t understand.

My point is not that inexperienced people should be taking over, but that people in positions to institute change should be listening to newcomers along with seasoned veterans. I don’t see this as an either/or stance.


For me the disdain comes from the fact that in my time in the classroom, I was constantly given advice on how to do my job from people who either had never done my job themselves, or like the OP had done it briefly before bailing out of the classroom to become consultants or administrators. There is a whole industry of education consultants who couldn't hack it as educators. All of the other educators commenting on this post are echoing that 2 years is not enough to understand the job while the OP is happily tearing down Chesterton's Fence.


> the disdain comes from the fact that in my time in the classroom, I was constantly given advice on how to do my job from people who either had never done my job themselves

I’ve been in tech for ~20 years, and if there’s one thing that never changes, it’s that newcomers are eager to tell me how to do my job.

Fresh grads come in convinced it’s their time to shake things up.

Management brings in consultants to tell me how to do my job.

The new SVP comes in and tells me how to do my job despite not understanding the environment, etc.

Over the years I’ve found it far more useful to frame this kind of feedback as just another signal among a myriad of signals, which collectively can be quite valuable.

It seems common to any human organization, especially those that rely on specialized skills, and I’d argue that the outcome is similar: just as experience and deep understanding can be important for stability, questioning the status quo can be just as critical for navigating societal change and long term success.

I’m here to argue against the binary position, not to claim that newcomers should be running the show.


At least for the urban school district I went to - of which many school districts are similar (although less represented among the HN crowd), I think your comment is totally off base. There is no chance of learning what to do in these schools during the 'onboarding' process.


I taught physics for about 7 years and I completely agree. I had a number of students who suggested teaching as a "backup" or a "temporary" career between college and something else, and I tried my best to dissuade them. It's not enough to have people who come in for just two years, get frustrated and leave because of "bugs" in teaching software. It took me about four years to really get the hang of the job and the idiosyncrasies of HS students and how they work, and even when I left I never felt like I truly got the hang of it.


I agree. I had the benefit of going through the top curriculum and instruction program in the nation. I was considered a high performer right out of the gate; however, I don’t think that I really started to “get it” as a high school English teacher until around 4-5 years in.

Edit: I don’t mean to be dismissive of the submitter. You very well may have a unique insight into CS instruction based on your time in the classroom. I would just caution that - from a marketing point of view - two years in the classroom is not going to instill confidence in your expertise with long term educators (so avoid making it a selling point as such).


I've never seen so much bitterness. Teachers in this thread are really, really salty. Just ask for his hall pass already and demand he call you "MISTER dwater".

Imagine if we talked about people learning programming the same way?

I have a general disdain for anyone who programs for 2 years and then thinks they have learned enough to teach anyone or improve the system in any way. 2 years is how long it takes just to learn git, let alone be comfortable teaching it. You better wait awhile, chief. Programming is the most important, most hardest, most critical thing in the world. Imagine thinking you could just stroll into MY world and make a possible difference in somebody's life with your abysmal and inexperienced self. The hubris! Y'know what? Go to the principle's office. This will be on your permanent record.


I think there is an eternal battle between Cosmetologists and Teachers who are fighting over who is the most miserable, while still saying "I love my job".


> ...fighting over who is the most miserable, while still saying "I love my job".

my wife is a HS teacher of about 15 years, truer words have never been said.


The English teacher in me reminds you it's "principal's" in this case. These teachers sure can be an obnoxious lot.


It's like people who spend 2 years programming and become an engineering manager or worse director


Sounds almost expected for anyone stuck in public education for a decade or more would have disdain for anyone talented and/or ambitious enough to get out.


It's pretty clear that the guy is more of a hobby programmer than a teacher, and is trying to hobby program teacher. It's unlikely to succeed.


I think you're right: as a teacher, they clearly have much to learn, and as an instructional advisor, their authority ought to be suspect. But as an EdTech entrepreneur? Eh, let's see what they come up with. They're not instructing anymore; they're building. If they're smart and work with experienced teachers, it might be interesting.


> One thing that led me to start creating Pickcode was the number of bugs I encountered in existing tools for coding education. Fifteen minutes of lost time to a minor bug or incorrect instruction step doesn’t seem like a big issue, but when those fifteen minutes represent some of the first minutes a student is programming, they have an outsized impact in changing the student’s attitude toward the subject.

As a young CS student who had self-taught before taking a formal curriculum, this was one of the things I found the most disgusting about the state of high-schools CS ed.

When the exercises and grading code have bugs, that's a major problem. When the instructor can't recognize those bugs when you point them out, that's even worse.

I moved on to tutoring and teaching CS later in life, (on the side, as a mentor with a FIRST Robotics program,) and encountering bugs in the curriculum like these were some of the things that set my students back the most.


When I was getting my BS in CS, that drove me the most nuts when the professor just didn't understand the coding language they were teaching.

In my assembly class I still remember asking the professor for help with a code challenge, and he comes over and looks at what I've got done and starts asking me what a snippet of code was doing when it was a snippet of code he provided us with. That didn't work. And to top it all off, the assembly we were learning was heavily dependent on a custom library provided by a CD from the book publisher that included no documentation and couldn't be applied outside of class.


>that drove me the most nuts when the professor just didn't understand the coding language they were teaching.

A lot of people will have the same experience. It all clicked when I learned that often the lessons were written by consultants or by their predecessor, and the professor is just faking it until they can get back to their research.


Two years is nothing. The first year is usually an unmitigated disaster/full time panic, as you learn to teach while you are teaching. Very few programs ever train people to teach before they are let loose. The second year you are just starting to gain your footing, barely doing better all the stuff that didn't work the first year. During that year you start to learn all the skills and tricks you keep in the back pocket to make things work. You are dealing with real live things, so they change and have millions of parameters that nobody has control over. Having a good roster of things you can pull out on the fly to adjust is crucial. Maybe by the third year you have enough to become a good teacher. However if you truly care about them and work hard because you care, and they know you care it all works out in the end.


For me, things like coding is only interesting in the context of being useful as a tool to do cool stuff.

I understand that some people like coding in itself, for the intellectual stimulation, but for me it's just a means to an end. I don't like coding, but I love building cool stuff, and coding lets me do that.


>For me, things like coding is only interesting in the context of being useful as a tool to do cool stuff.

I took Fortran in my freshman year in college in 1970 (the only computer course offered). I bought a Tandy Model I in 1979 and that began a life-long love of programming as a hobbyist. I'm now 70 and still programming.

And in all that time I've never been interested in programming unless it was to do "cool stuff" (e.g. build something I wanted; or learn how to do something because it would lead to my building something I wanted).

In other words, your definition is the definition that drives most programmers who love programming (which is why I am glad I never did it for a living... I suspect I might lose interest in working on a project if the project4 itself wasn't something that interested me).


I don't teach kids how to code, I teach them how to make games -- that difference dramatically changes their interest.


When I took high school chemistry, I repeatedly failed the alebra-esque conversions between one molecule to another (I don't remember what that was called.) The teacher saw this and one day took me aside and asked why I was not progressing like the other students. I told the teacher I didn't care one bit about the topic. Instead of trying to make the subject more interesting for me, the teacher suggested I drop the class and take something I actually liked. I switched to video production, something I was really passionate about, where I did very well. I will always appreciate the chemistry teacher who helped me find my way.


The standard chemistry curriculum was strange to me. It seemed like we had to learn every incorrect model that civilization ever had about atoms, molecules, and electrons.

It seemed like the kids who were into chemistry were frustrated by the distraction, and the kids who weren't were overwhelmed by the sheer volume of concepts. They didn't seem like useful stepping stones to how things actually worked, just wasted time on things that then had to be un-learned for the next module.

I didn't need much of a "why" to crunch through stoichiometry as a kid who was into physics and algebra who liked puzzles, but I also stopped doing chem after my freshman undergrad requirement. I didn't really understand organic chem and the tie between carbon backbones and interesting organic molecules that can actually do things. I think I would have taken it farther if we hadn't exclusively focused on simple ions in solution for like 2 years, implying to a high schooler that the only career available was more efficient ways of manufacturing ammonia.


Chemistry pissed me off. We spent like 3 months learning all these arcane and arbitrary combinations, and then it turns out there are some algebra-like equations at the end that you can just compute your way through.

I’m sure I missed something important because all the memorization was super annoying and so I basically checked out, but I regret nothing and revel in my ignorance of the topic. Chemistry, ugh, may as well be alchemy as far as I’m concerned.


I’ve found channels like a NileRed to be incredibly interesting and pique my interest in chemistry years too late.

But I hated HS chemistry class. Of course we never did any sort of cool experiments, most of what I remember is tediously drawing models of different atoms.


I felt the same way about chemistry in high school. I only cared about math really. Recently, 30+ years later, I got interested in human physiology and ended up reading chemistry. Really basic stuff, since I had forgotten the little I knew. And I found it so interesting. It's not math, it's not data structures, and yet it has enough of that, plus the connection to the real world, and I found it all very satisfying.

Anyway, I don't really have a point. But I think chemistry is just hard, as in trying to make it (the theory, not the lab work) approachable and interesting at high school level is nearly impossible.



How do you know if you will like something without trying?


I think trying to present the topic in an interesting and engaging way is worthwhile.

But thinking you can get 100% students interested in it is probably unrealistic. I don't think you can get all the students interested in any given topic, so why think of this as a failure? Getting a decent number of students interested is good enough. Getting all of them? Unrealistic.

I don't even think this is a failure of the students. Coding isn't universally interesting. It's ok to find it boring, through no fault of either the teacher or the students.


Maybe I wasn't clear in the article. 100% is a nominal goal (give everyone a chance!) but obviously not everyone will like it and that's not a problem.



My chemistry teacher was passionate and seemed over qualified and I think that made him sort of come across as bitter at times. He didn't always understand why other people weren't as passionate. Anyways, I heard he had got sick and left teaching. But about a year or so later he was all over the news as he was apparently making really pure meth at a macro level for a cartel and had somehow ended up with some biker gang and was found dead. Crazy story.


Weird, my chemistry teacher was the exact opposite. He didn't even have a degree in chemistry, it was in physics. He hated teaching that class but loved us as students so we did basically nothing all year. May explain why my knowledge of chemistry is equivalent to that of a medieval peasant. Cool guy though.


Breaking Bad reference. The other two commenters missed the joke.


Tbf I imagine mass meth production pays a lot better than even the best industry jobs when it comes to chemistry.


Just my personal opinion:

I'm pretty sure that the key to getting pupils interested in programming is a typed language with lean featureset. Such language should allow low-level access to hardware and has no memory management features. And the hardware must be as simple as possible.

In my school almost everyone who tried to code was motivated to continue. We were using extremely ancient primitive soviet machines running some homebrew Pascal implementation.

Later I've seen students trying to learn programming in more complex environments and noticed success rates falling with growing system complexity.

Dynamically typed languages make things extremely bad.

I still consider Pascal running under DOS as one of the best possible learning environments.

Paradoxically, an XT clone like Monotech NuXT plus Borland Turbo Pascal may be the best platform for kids due to its relative simplicity and abundance of good documentation. Or, maybe, even something based on Z80.


I agree with this. It's counter intuitive but lower level languages without layers of abstraction are easier to understand to new programmers. It's all very literal. Abstractions are great for experienced developers because you get it. But new learners have no context and abstractions are too much of a black box.

I found learning MIPS asm and C early on were nice and learning functional languages and things like Python and JS more difficult. It was after I had gained experience that the power Python and JS and Rust and whatever became evident and the abstractions and concepts made sense and were useful.


Small languages that can be learned quickly that have a limited number of ways to perform an action (like iterative loops) make for a more straightforward learning experience than the giant languages that are popular today. I think explicit strict typing (e.g. Pascal) also helps. The more subtle and flexible the type system, the harder it is to learn the language's model of abstraction (examples: C pointers or OOP class hierarchies or polymorphism).

I agree about the value of simplicity, such as learning Pascal in a terminal-based interface. That interface is minimalist in the extreme (no GUI to complicate things), and the language's design and type system have a crystalline clarity that undercomplicate learning how to think like a computer.

It's like learning to use a hammer vs Windows.


I agree. My first language, in 1981, was the original line numbered BASIC. We all know its shortcomings as a language, but for most operations, you could at least form a concrete mental model of what the computer was doing. You could "run" your program on paper.

Helping people learn Python, I end up explaining things like variables by treating them like the old BASIC variables -- hard memory locations containing values, associated with a name. I don't mention that an integer is an object with properties and methods. On the other hand, a beginner tutorial that starts with "venv" is criminal.

Sure, the language was primitive, but none of us who learned on obsolete languages were scarred for life. The teacher explained to us the shortcomings of BASIC, and we learned the hard way what spaghetti code is. Most of us were destined to learn Pascal if we made it to college.


Why typed PL Pascal is better than typeless PL Lisp for absolutely beginners? I am a beginner mentor to some students but I can not even think about setting up the DOS. BTW I am also from post-Soviet country and my first PL I ever wrote a program was Pascal but all I can remember about it is Pascal-strings, := operator and segregation between functions and procedures.


I have an explanation why, but regardless I observe that complex environments, advanced abstractions and weakly typed or dynamically typed languages work worse than primitive systems with tiny strictly typed languages and minimal abstractions.

I haven't personally seen LISPs in action as environments and languages for programmiag beginners, but personally I think that they are way too abstract for the purpose. And it might be lot harder to explain the ideas behind the loop with substitution rules than manipulations with bytes of video memory directly represented on the screen.


> way too abstract for the purpose.

I see my teacher's mission/purpose as making my students as flexible as possible. This and my personal dedication to Lisp and the fact that my students are too young to bother about looking for job right now makes me teaching Lisp but not JavaScript/Python.

> And it might be lot harder to explain the ideas behind the loop with substitution rules than manipulations with bytes of video memory directly represented on the screen.

I have some C skills but my choice is to teach all the bit-jogging tricks on paper while real coding sessions are mostly on Lisp. This is my first group ever, but at least I proud that the teenagers are happy with my lessons and their number is not decreasing.


I guess you are using Racket? Anyway, it's good to know that your approach works.


Video memory directly represented on the screen now requires you to understand considerable abstractions: opening some framebuffer device using some operating system calls, then using some other calls to map it to memory. Then knowing the parameters of the framebuffer: what is the pixel representation. What is the stride: how many pixels per row. This could be in some record from an ioctl or whatever.

This is not 1984 where you're on some 8 bit micro or IBM PC with a video buffer at a fixed address, and hard-coded format such that POKE(12345, 15) is all you need to have something show.


Bash is honestly the perfect learner language. It's installed on a lot of computers already. It has good built in documentation. The code doesn't demand a lot of byzantine syntax, its honestly the most "legible" language I work with by far.


The point about bugs at the end echoes what I've heard from other CS teachers. I know Python well, and thought I knew what constituted a sharp edge, but talking to a CS teacher was eye opening about what actually constitutes a sharp edge (in hindsight, obvious).

I think when teaching to students who haven't explicitly selected for CS/programming, languages like Scratch are better because they have been designed to file off all these edges and have no pretence about providing a general purpose language, and bringing all the annoying practicalities that go along with that.

To start with Python, C#, JavaScript, Java, Haskell, or other popular first languages that are also general purpose programming languages, I think it's critical to first teach the process, the fact that there will be sharp edges but that there are reasons for those even if you might not understand for years to come. Some students just don't care about this, and others find it motivating, and that's why I think it comes down to selection and compatibility for the subject. Not to say that there are only some people who "get" programming, but many aren't motivated enough to manage the relatively steep learning curve.


Its a weird double-edged sword choosing to go with something like Scratch or even a stripped down framework that makes things WAY easier is you lose the interest of the people who ARE interested in Comp Sci.

In my high school, we had CS1 and CS2, both were AP classes. While 90% of the students had no interest in computer science, there were a couple of us who were, and if we weren't kept engaged by the challenge of learning a new language for most of us (Java), then none of them would have gone on to CS2 (I say them, because I didn't even know about CS1 until I was picking my Senior classes).

The failure rate of that class was around 75%, and you could chalk that up to a bad teacher, disengaging lessons, or the fact that CS is hard and not meant for the general school population, but for those of us who loved computer science, it was the first time outside of building crappy applications in VB6 or PHP that we experienced "proper" programming (handling exceptions, worrying about performance, actual logic not just click events).

I don't think high-shcool-level CS should be gate kept, but I think to sign up for it, maybe students should have to go to a lab or something ahead of time, with some hands-on experiments, and then get accepted into it because they showed some level of enthusiasm.


The way my CS teacher in high school handled this (we had the benefit of 2-hour class periods twice a week and a normal 1-hour class period on Mondays) was to let the students go to their own level. Essentially running 2-3 classes at once.

The first part of the first semester was the same for everyone more or less: An introduction to the language (BASIC, this was in the 90s) and some basics of computing. Then for the very motivated/advanced (had already learned some programming or were just more interested0 students he provided instruction on deeper topics in CS and programming and it became increasingly self-directed. For the less motivated (pretty much everyone else) it was a series of projects that kept most of them engaged enough to learn the material. So students who came in knowing some programming or who were particularly motivated got an "honors" introductory course (in university course description terms) and the rest got the typical introductory course.

That did take him being particularly motivated as a teacher and knowing the material well enough to pull it off, though). Evaluations can be challenging if students obsess over "fairness". The advanced students are getting As almost as a given, and some of them might resent that the other students can also get As for doing less work. But that's just kids being kids. The advanced students opted to go in for extra work, it wasn't forced on us and technically we could have fallen back to the regular coursework at any point.


Scratch is ECMAScript with a GUI. Snap is practically Scheme with a GUI. You do yourself a disservice discounting either of these as a CS language. You wouldn't build big general-purpose programs with them for their limited domain and programming ergonomics, true, but you aren't building big general-purpose programs in high school.


Hey I asked this elsewhere but when you say "CS" do you really mean computer science? Are you prepping students for the college exam?

I learned CS in HS 20 years ago and we used DJGPP; it was fine. Python could be fine but it almost seems too high level for the purpose of CS?

The articles and comments I see make HS CS sound like a glorified Intro to Computer Media class.


TEALS, a popular program in the US for building up CS programs in high school, offers several courses: a general introduction, a cybersecurity course, an AI course, and two courses targeting AP CS exams.

The general introduction teaches in Snap or Python. Python is plenty capable for the level this course us at. You're not going deep into algorithms or datastructures or performance.


I have been a paid software engineer for about 30 years. 10 to 15 years in I learned to love computer science, but for the first huge portion of my career what motivated me was making things. Demos, Games, etc... Maybe the key is to start building things immediately? Things the learner is interested in making.


> To them, I would need to also point to the sizable fraction of my student population who absolutely despised the project, and may have found that project as the last straw in making their decision that they hate coding.

There are many reasons why I despise the modern model of education, and this phenomenon might be at the top. Students are presented a miniscule, neutered, cherry-picked slice of a discipline that's thousands of years old, and then they form opinions about it based on their ability to stay interested and perform over the 90-200 hours they're forced to engage with it per year. They think they know what "computer science", "chemistry", "history", "creative writing" is like based on their experiences, but they're always wrong. It's not their fault.

You can't know if you're "good at" or "enjoy" "math" based on your experience in school. In school they're not measuring your ability to do math, they're measuring your ability to do math class. Every class has students of deeply mixed abilities soldiering on through a curated set of exercises and practice problems, progressing regardless whether or not they understand the fundamental mechanics of their exercises. Some people end up believing they're "good" at their subject, some people believe they're "bad" at it. They're almost certainly both incorrect.


I think you're correct - at least, you're definitely correct about me. The only things I've ever actually learned were things that I was self-motivated to seek out and study on my own timeline. OTOH, what's the alternative to modern education? I don't think I ever would have gotten around to calculus if I'd waited until I independently "discovered" it.


There are so many things that would have to change about society for a suitable alternative to modern education to be put in place that my answer would be so politically radical that most would find it either unpalatable or unpractical. However, here are a few things I think should change about the existing system:

- School should start later so the students have more time to sleep.

- Phones should be fully banned from classrooms. ("But what if my parents need to reach me?" They can call the school.)

- Teachers should be empowered to permanently remove students who cause trouble from their classes.

- Students should have the option to test out of any class at any time.

- By 11th grade, working a part-time job should count for credit toward graduating, to the point where you can work 40 hours per week and still obtain a diploma.

- The GPA on your diploma should be changeable if you come back to night school or summer school as an adult.

- The GPA on your diploma should be changeable if you retake the tests from earlier classes.

- Students whose parents are capable of homeschooling should be supported by the system to pursue all- or mixed-time homeschooling, while still participating in the community and extracurriculars at school. This is especially true for students who are the target of bullying or who perpetually need more out of the system than it can give them.

- Parents who are successfully homeschooling (as measured by high test scores and student-reported satisfaction) should consider taking on a second and even third pupil.


I think programming is literacy. People who can code can see through the fabric of our world in the same way as people that can read can see different worlds.

Teaching programming is so incredibly difficult, I am trying to teach my daughter, 343 days so far (12 yo, log here: https://github.com/jackdoe/programming-for-kids/blob/master/...) and I am not sure it is a tooling problem at all. The problem seems to be to be able to understand what the student does not understand. And to be able to keep their focus.

I also use a lot of incentives (custom tshirts, vbucks, displate posters etc) to compete with the million developers in snap/facebook/tiktok/epic/etc that are trying to steal and sell every bit of her attention.

I constantly try different methods, we even made programming card games together (like https://punkjazz.org/programming-time/), or downloading music or generating music, writing games with python/lua/c, making autoclickers or bots, pranks, hacking things (e.g. explaining and using the whatsapp url parse bug recently was very fun), playing war games etc, but every day I have to spend a lot of time thinking about what is the "right" next lesson, what does she need to learn to level up.

Learning programming is not a curve at all, it is a staircase and stairs are like walls for some people. It might take 10 years to get to the next level. You can have people programming whole complex programs without having any idea what is going on.

That being said, the future of programming pedagogy and andragogy is very open, and I am very happy for every attempt to try to make a dent in it.


OP comes from a perspective that the goal is for as many students as possible to succeed.

I don't believe in this in the context of high-school (where education is sort of mandatory). From what I've seen, in order to make content more engaging, correctness and coherence are the first to fly out of the window.

I'm not against teaching to program, but I'm against calling that "an introduction to CS", because that confuses students: they might think they've been introduced to CS, but they are usually given a practical skill vaguely related to CS + a number of superstitions about CS instead.

I think that CS can be taught as a bridge between language (especially in the sense how language grammar is taught) and geometry (in the way it's taught in high-school, where it's typically Euclidean geometry with emphasis on proofs). And it can be, and perhaps preferably should be taught w/o exposure to "practical" programming languages. Where "practical" programming languages may be an elective class, similar to how some high-schools have vocational training in say, truck driving, or plumbing etc.

If this were the case, those who find CS interesting would have a better idea of what's to come, should they continue on this path in a college, while those who found vocational training in programming more interesting would see themselves as continuing on a path to a trade school. And, eventually, this would help fix the confusion associated with naming and curriculum context. Present day situation is very confusing because industry needs programmers, but colleges know (sort of) how to make computer scientists, and trade schools teach college curriculum, just watered down. Also, college curriculum is littered with junk like "Intro to programming with Python / Java / etc. 101" that should never have existed, but exists because, in reality, those who went to college want to become programmers, not academics.


When I studied electrical engineering, we first had the usual intro to programming and a C class, for many students - that was the first time they had ever coded. There must have been a 40/40/20 split between hate/tolerate/love.

But the next semester we had a microcontroller class, which was almost universally loved. We wrote C for AVR microcontrollers, and the projects were varied. I remember when we were learning about signal modulation, some of the students hacked together a very rudimentary mono synth. Fun stuff all around, maybe my favorite class in undergrad.

On the other hand, I also had programming in HS - it was a Java class, focusing on OOP. The teacher was a retired programmer who had worked on "enterprise" style code, and so we learned Java that way.

While he was a very good teacher, the material was just...quite boring. No fun projects, lots and lots of design patterns.


I’m sorry but you can’t be serious… you have 2 years of teaching, your essentially a junior teacher and your here to promote an education startup you’ve left to make to teach kids.

While normally I would applaud work in this area, the sheer arrogance to claim in your article you have the experience to build curriculum’s or indeed that you can build a better education platform for teaching kids to code with this experience is insulting to the teaching profession as well as those building existing platforms in collaboration with teachers and schools alike.

My parents taught for decades. In the same way an experienced programmer takes decades to hone there craft to the point where others should really take note of how and what they have to say, the same can be said for teachers.

Sorry but I just can’t take this seriously and maybe it’s wrong but it just feels… disrespectful to teachers in a way as if 2 years is somehow enough to have mastered the profession and impart knowledge and wisdom to the education world or indeed students.. as if after 2 years you know better than everyone else, you’ve seen enough.


I teach university biochemistry. After eight or ten years, I began to feel that I was no longer a novice.

“Move fast and break things” is a monument to an aberrant culture of arrogance and dismissive impatience. Based on hypercompetitive greed. (That for a generation was funded by cheap money chasing itself around I search of a drain.)

It’s no coincidence that importing this culture to education produces experiences that are superficial and brittle. It’s difficult to think of a counterexample.


Glass houses, my friend. Academia demands people spend their entire lives slowly crawling up a ladder while simultaneously threatening to kick them off that ladder for a large portion of that climb. Spend your life working towards tenure only to get denied and wash out after 15-20 years seems insane.

a decade of your life to get past "novice" level for teaching something like CS to high school students is not something we should be pushing to replicate in other fields.

Education is begging to be disrupted. Maybe this guy doesn't have all the answers, but pretending like what we have is good is a joke. He's on a better track than sitting in a classroom trying to get past "novice" during the most productive time of his life.


>> “Move fast and break things” is a monument to an aberrant culture of arrogance and dismissive impatience.

> Education is begging to be disrupted.

I rest my case.

Substantively, believe me, I agree with you. Culturally, though, you're proving my point.


I think you know better than to claim that anyone who disagrees with you "culturally" proves your point.

My whole point is that the culture of academia is not something worth replicating, and indeed needs to be fundamentally... disrupted.


You're talking about different things.

You are talking about the restrictive, punitive world of academia where you constantly have to please the powers that be in order to step up. OP was talking about their own feelings about their own abilities in their job.

The parallel to software engineering feels correct to me, particularly if we're talking about working at a giant company like Google. No matter how good of a developer you are you still need to battle yearly reviews, stack ranking, peer review etc. etc in order to advance. But you can strip all that away and still recognize that after two years in the industry you're not that advanced as a developer.

The crucial difference is that in the software engineering world you can take your misplaced confidence, strike out and try something. Worst case it'll fail and you move on. As a teacher with misplaced confidence you can strike our, try something and mess up the educations of children and parents who put their trust in you.


Statistically, what are the odds that you're someone who actually understands enough about teaching and learning to be able to identify why education is 'broken' and successfully 'disrupt' it, as opposed to someone who just thinks they understand it but actually is suffering from Dunning-Kruger syndrome?

If a guy in a dirty denim jacket comes to you outside the bus station and tells you he's Jesus, he absolutely might be Jesus. However assuming that he's not is a perfectly good heuristic.


"Statistically" implies some kind of measurable "teacher skill unit" that one is

a) fully aware of or

b) could be measured, and

c) is precise enough to differentiate between "able to help improve education" and "not able to improve education", and

d) this skill unit is in any way accurate.

Of course none of these are true, and in fact teaching is an amorphous and situation-specific concept that defies all attempts to replicate or quantify success. All attempts thus far to do so have failed in glorious and spectacular ways at every level (e.g. No Child Left Behind Act of 2002).

In reality, the skillset a person who can successfully improve the state of CS education has may or may not be related to their time spent actually teaching or their skill at teaching.

Hell, even one's time spent teaching is mostly uncorrelated with one's skill at teaching. We all know teachers in our childhoods who had many years of experience and yet remained terrible at their jobs.

A good teacher may in fact be the very worst kind of person to fix teaching.


"chasing itself around in search of a drain" - beautiful metaphor!


A large part of that is that tools + procedures expand to fill the available space - if there are people willing to spend 20 years doing the same work, the work expands to fill 20 years of your life.

It's more about the social landscape than the practical requirements.


I took CS in the equivalent of a US highschool. The classes were taught by teachers ranging from 2 years experience to 15 YOE.

We enjoyed (and aced) the classes from the teacher with fewer YOE. Maybe the more experienced teacher was more jaded, maybe the younger teacher was more relatable. Who knows.

I have relatives who are educators their entire lives. One thing I've taken away from listening to them complaining about their work, is that there is an abundance of teachers with long YOE, who are totally checked out from their job, and use their long tenure to bully the younger teachers. There's an idiom they use a lot during these complaints: "Using their tenure to sell their experience."

Finally, it's "you're". Not "your". It was difficult to parse your text when you're not doing it right.


I can see you're point about newer teachers being more engaging with more energy and enthusiasm but there is a balance to be struck in education between engagement and experience/ability to teach. They are not the same thing.

I would also argue that while some of the most 'fun' teachers I had were newer, they were not the best teachers and many of the best teachers I had were older with far more experience but, like you said, had not lost their enthusiasm. When you apply that to the discussion in question I would argue that the author might indeed know how to engage with students, and has come to the frankly not so orginal conclusion that kids like to have fun, but does not have the experience/ability to do more than those that have come before.

Another user replied to my comment about Khan academys founder having no prior experience beyond tutoring relatives, well, there existed a market gap that no longer exists. What killer features are being proposed here? What are the technical solutions to the obvious technical issues that they point out? How do they plan to monetise this solution aimed at high school kids or indeed underfunded schools? How will they help teachers engage their students in the classroom itself via this platform - a poor teacher blames his tools - students need engaging in the classroom not online where you are competing with dopamine inducing auto scrollers.

I appreciate you educating my punctuation, perhaps you have the experience to start an education platform of you're own!


Strongly disagree with this take and especially the tone.

"Is two years enough experience to create a curriculum?" is a good discussion prompt but it's hardly a silver bullet for dismissing the project. A counter argument is that being new to the field gives the OP a fresh perspective.

OP never claimed to be an expert and there is nothing disrespectful in this post. It's too bad it's the top comment. Best of luck to OP on pursuing a new way of engaging students.


Why would you even need to create a curriculum in a HS setting? The tests are standardized and there are hundreds or thousands of people teaching the same subject in the same schedule state wide...


The author had two years of experience, during which he saw things that surprised him. He didn't say he was a know-it-all or that others taught badly. He wasn't very satisfied with his own results. He decided to try something different. I have not seen arrogance.


Playing devils advocate a bit:

Maybe he's starting that project because the state of the art is just so abhorrently bad that two years is plenty of time to see some really low hanging fruit.

I mean, this seems very plausible to me. There's plenty of areas where this type of things happen. All the time.


But it’s _not_ abhorrently bad. There are so, so many high quality platforms out there which exist solely to teach coding. It’s not 1990 where people learn C++ from a textbook anymore, the bar for good programming education is actually incredibly high now.

I’m of the opinion that coding just something not everyone is going to like, just as I’ve never enjoyed painting or basketball. I don’t think there’s a lack of good tools, we just started with an incorrect premise that it’s possible to design a tool that makes someone like something that they assuredly don’t.


Can you name some? I know of Scratch.. and that's mostly it.


It really isn't plausible at all. The students are teenagers so the biggest hurdle is always going to be social, not tools.

It just can't be solved by tech, unless it's a complete paradigm shift such as sentient AI teachers with emotions having productive 1on1s with students in a full-dive style VR style environment.


My wife and I taught for 7 years before we couldn't make it work anymore financially. And that was in higher education which is infinitely less challenging than k-12.

We both agreed that we learned most of what we learned about the job in the first 2-3 years.

Also we saw a lot of teachers hit burnout at around 2-3 years and become infinitely less engaged / less passionate / more toxic.

Two years is a perfect amount of time to put into teaching.


I am sorry to hear that, it is a great shame of society that education is continually neglected, underfunded and politicised.

I believe it is largely accepted by economists from accross the spectrum that a key driver and indeed one of the only gurantees of long term economic growth is investing in education and yet we routinely do not do so to the point where it is simply not financially viable for teachers to remain in the profession.

As to your argument that 2-3 years is where you learn most, I would argue that is probably the same for ever profession out there, but the experience of time is what adds that extra 10%. Just like we complete 90% of a programming task in the scheduled time, its really that last 10% where most of the difficulty lies.


> continually neglected, underfunded

In the US, we pour staggering amounts of money into education. It's certainly not underfunded in raw dollar terms.

Now, the lion's share of that money going to administrators of one kind or another, is a big problem.


> While normally I would applaud work in this area, the sheer arrogance to claim in your article you have the experience to build curriculum's or indeed that you can build a better education platform for teaching kids to code with this experience is insulting to the teaching profession as well as those building existing platforms in collaboration with teachers and schools alike.

I think you mistake conviction and ambition for arrogance. I mean, how much of a fintech wiz were Patrick and John when they started /dev/payments? How many call taxi companies did Travis and Garrett run before starting an on-demand Limo service? Experience counts for naught. Insights matter more when it comes to inducing mass change in human behaviour: https://www.youtube.com/watch?v=qnav9vgHDHs&t=350s / https://ghostarchive.org/varchive/qnav9vgHDHs


Sure but the insights the author has had are that kids like fun and that cs education platforms have bugs. I don't see any original insights here tbh they are just insights that should be obvious to anyone who has ever stepped foot in a class room or used an interactive course.

There is also the fact that your examples and indeed the likes of khan academy filled a market gap or had a niche offering. The education platform market is saturated and if your entire product is to create and deliver educational courses for high school kids I'd wager teaching experience, and more of it, is key.


How many years of teaching experience do you think is necessary before you start an educational platform?

I have 0 experience in teaching, never created a product focussed on education, and schools are paying me to use my product in their class.


I know nothing of your product, so this isn't a shot against you personally, but there are plenty of products schools are paying for that provide little value and a handful of them that are providing negative value.

You've reached the first step in the process, getting into schools. The next step is show value in outcomes rather than just another grift.


The original point I was trying to make is that you don't need to be an experienced teacher to create a useful educational product.

Like I said, my product is not really made for schools, and it's also not my main focus. But plenty of teachers and students seem to get value out of it. I just have to trust their word on that of course.

Calling someone arrogant because they want to create an educational product with only 2 years of experience is really weird for me.


You don't need any experience. You don't even need a quality competitive product. You just need a landing page and marketing to administrators. Even better if you have connections to school boards.


Maybe they're orthogonal. The trick is making the two work together.


100% agree with this.

There's so much more to teaching than the actual teaching part. Interacting with kids, controlling a classroom, etc. Those are things you start to pick up as a student teacher, but you really nail it several years in.

I feel like many base their opinions on teaching through their experience as a student or through what they hear from others.

It also highly depends on the school, students, and what type of teaching you are doing (specialist, classroom, support, etc).

A classroom teacher who has well behaved students for two years will have different opinions about teaching than a classroom teacher who has rough classes for two years. Admins do their best to spread kids out, separate kids that cause trouble together or fight, etc.

Sometimes though it's just down to the luck of the draw - you enter your third year and by the end of the day you are crying on the car ride home.


There are people who never worked as teachers who have created education startups. Salman Khan was informally tutoring relatives before starting Khan Academy.


I disagree with this interpretation.

If Bill Gates took this advice he wouldn't have dropped out of university to run Microsoft. That's fueled by ambition and initiative, not arrogance.

Arrogance is telling OP or young Bill Gates that they aren't qualified enough to do it.


This is a very dismissive reply. Some of the replies to this comment are better.


I completely agree. In any field of sufficient complexity, 2 years isn't enough time to learn enough to have an informed opinion on reforming it.

Like many others here, I work in IT and that's the kind of thinking that led to every new project being "Ruby On Rails" about 12-15 years ago and every time a new underlying library gets updated, a bunch of code breaks. Meanwhile, C/C++, COBOL and FORTRAN programs from 30-50 years ago are still running the infrastructure of the world.

Newer doesn't always mean better.


Too much of that here on NN. "The state of x is terrible... so here's my new startup." "Increasing the performance of y tenfold.... with our new product."


Presumably you are OK with this person getting in front of a class of kids and being responsible for teaching them CS on their first year of employment. Even though they are a new teacher and still have much to learn, they will learn on the job and get better.

I don't see how starting a startup is any different. Yes, today, this person probably doesn't know everything they need to know for their startup to succeed. But they will learn that over time.


On the other hand, OP probably knows the difference between "your" and "you're", so there's that...


The old adage holds true: it’s a poor craftsman who blames his tools.


in my culture this is said often; however, I'd be very careful with using this in modern day. The right tool for the job can make tremendous difference on your result. Also, some tools can abstract away some of the unnecessary detail/undifferentiated heavy lifting and help you reach your outcome faster.

Up to a certain point... the bad dancer may be wearing terrible shoes that impedes from learning and becoming great, instead focusing attention on improving unnecessary skill.


> to understand the joy of using coding to create programs they’re proud of

I'm coming up on 40 years of programming and I can only think of a few toy programs that gave me this joy. The rest of the time, I was using my computer skills to sate my curiosity on how it works and often times sooner or later translating that into service to others, either for pay or for the joy of sharing and helping.

IT is too big to know entirely, just as the Earth is too big to know entirely. All you can hope for is to enjoy exploring it, and learn to live with/on/among instead of against it.


> IT is too big to know entirely

It is now... but I kind of feel like it wasn't 40 years ago. My 19-year-old son is studying CS now and I have a lot of sympathy for how complex it's all become since I was studying it 30+ years ago. Although computers can do way more than they could back then, you have to understand a lot more than you used to before you can get them to do the things they can do now.


> It is now... but I kind of feel like it wasn't 40 years ago.

The computing world was certainly smaller then. But I remember finding Volume 1 of 'The Art of Computer Programming' in my community college library in the Spring of 1983 (so, it would've been a 70's edition) and Knuth said something to the effect of it being difficult to keep up with such a rapidly expanding field.

My notion is that even the best programmers even 40 years ago had a hard time keeping up.


40 years ago, you could know one or several microcomputers well, from BASIC down to assembly. But there was even at that time CAD happening on Unix, VAxes driving CAM, the entire IBM universe (from punched cards to RDBMS), and numerical codes like NASTRAN and LINPACK.

Generalists are more valuable than specialists. But generalists are doomed to never knowing everything, and knowing what they don't know.


Yes and no. On a computer, you can open the developer console in the web browser and be there immediately. Go to a Github project and hit . and go to codespaces and be right there. Once you're there though, what to do becomes much harder.


I think you are right on the mark. Even as an experienced programmer I can get overwhelmed with the breath of whats possible with coding. I can only imagine how overwhelming and disengaging long wrote programming can be. I spent sometime in highschool thinking I could build a programming course when i was very inexperienced and how something and did a presenation but I think i only convinced a single person that programming which was cool but also humbling. Teaching programming is exceedingly difficult


when i was a trainer for a commercial training company i had this COBOL programmer on our "Programming in C" course (which was not a bad course, though i did eventually re-write bits of it). He came up to me after the second day (when we started to introduce things like malloc) and asked "But what is this 'memory' stuff? And why should I care about it?'" just goes to show you can never assume anything. and maybe he had a point - it was quite hard to explain!


> it was quite hard to explain

Was it actually hard to explain? Or was it hard to explain in a way that didn't risk coming across as condescending? I'm "fortunate" in that I never needed to be motivated to study and learn computer programming, so I have about 40 years of computer programming knowledge now. Some of it (cryptography, networking, recursion, pointers) was hard won and took me a long time to grasp. Now I find myself frustrated by the Braeden's of the world who assume that every question has a two-word answer that if I don't know, I'm either incompetent or worse, deliberately hiding something from them.

I can explain memory to anybody, but I have to start from the basics of computation - and if somebody doesn't know what "memory" is, that's where they need to start! But if there's an art form to starting from the beginning without pissing off the person who asked to start from the beginning, I've yet to master it.


My explanation went something like this (M is me, H is him, and yes, he was male) and this was many years ago:

M: you know the COBOL MOVE statement?

H:Yup.

M: So when I say 'MOVE "hello world" INTO greet' what is happening?

H: The sequence of characters gets moved into the variable greet.

M: Nearly right. The characters get copied - MOVE should really be called COPY. And where do you think those characters get copied from?

H: I don't know.

M: Well, they are copied from one area of memory to another. When your compiled program is run, things like "hello world" are loaded along with the actual executable code, and given an address in memory.

[at this point i drew a diagram, but cannot be arsed doing so now]

H: OK so far

M: So when we do the COPY of "hello world" we need to have some memory to copy it into. Now, in COBOL the compiler takes care of generating code to do this, but (for a variety of reasons) the C compiler does not. So we have to do it ourselves using functions like malloc. Anyway, don't worry - you've been doing well on the course so far, and we can go through this again tomorrow, if you would like.


This one of the main things about cobol people don't understand; all memory is statically allocated, there is no dynamic memory allocation. Well there can be, but not generally. No call stack, no heap. In reality, cobol, the 85 standard and before was really very primitive. The new standards have changed this obviously, but no one uses those. The terminology this person would have understood is "working storage".


> Leaving teaching this soon wasn’t my original plan

Since the author is also OP (here to promote their new startup Pickcode), what was your plan to leave teaching and why did it change?


I had no particular plan, my point in that sentence was that 2 years was on the shorter end of the distribution of how long I expected to stay. I'm leaving now because I think I can make a bigger impact on student learning building a product which incorporates what I've learned these past two years.


There’s something very “Silicon Valley” about doing something approximately four times and using the acquired expertise to found a startup.


While I don't want to be mean, I'm sure OP is great.

It does remind me of the tiktok "investors" who sell classes on how to get rich, but the classes teach others how to sell classes.


I worked for a guy who loved these get rich quick schemes.

Once, for $50 he bought a zip file off some random website that was supposed to contain everything he'd need to get rich online.

The zip file contained the HTML file and assets for the page that he'd bought the zip file from, with instructions on how to integrate his own PayPal checkout info, of course.


Have you ever tried using processing or p5js as a way to engage students with code? I think the visual aspect would be a great way to engage young learners. Also are you looking for volunteers?


Forty-some years ago, my first programming experience was moving a pen wielding turtle around the screen with Logo. A visual introduction was great then and I think your suggestion is a good one for new students today.


>He completed this in 25 minutes and played web games for the other three weeks available for the project

Sounds like he's a software engineer at heart


Fifteen minutes of lost time to a minor bug or incorrect instruction step doesn’t seem like a big issue

I think this should be part of the curriculum - it’s a daily part of the job of a SWE, introduce it in the class, make it fun and explain the frustrations and rewards when figuring out bugs. It’s not a set back of the day, it becomes part of the day, another side adventure to solve.


Thanks - I was going to chime in on this.

However - I was also an instructor (not high-school, but IT professionals) - and the biggest problem with "15-minute" bugs, or basic knowledge-gaps (like... how to open a command prompt and type correctly) is when you have multiple students who encounter different bugs simultaneously... Which will delay the entire class/session and frustrate those who are not having an issue. (Hopefully those who are not having an issue can proceed independently if there is a workbook/lab instructions)


It's only fun if you know there is a light at the end of the tunnel as it were. If you're no yet convinced that programming is fun or even has any value then this "side adventure" will instantly kill any enthusiasm. Once they 'get' programming and see it as something they want to do, then learning how to deal with these "side quests" has value.


In this case, they're not teaching software engineering. They're teaching CS/programming. Having to figure out finnicky tools gets in the way of that.


Too bad we can't let people learn about things they're actually interested in.

"You take programming class because its time to take programming class"; without any concern for "is the student interested in learning how to program?" is not going to have good results for anyone, is it? And yet that's how we've decided to teach most things.


Most high schools in my area have CS as an elective class. They can choose CS out of a lot of different classes such as music theory, extra social studies (additional histories, psychology, theory of knowledge, etc), various art classes (drawing, 2D art, 3D art, art history, etc), health sciences (human body systems, medical interventions, practicum in health science, higher level biology classes, etc) AP-level language classes, other engineering classes (aerospace, digital electronics, engineering design, etc), lots of music classes, agriculture, food science, debate, theatre, automotive, etc. One can easily get an accredited diploma without ever taking a computer science class.

Many students like to take CS without having any interest in programming, as its often seen as the goof off class where you get to spend an hour every day playing videogames when the teacher isn't looking.


Most kids don't know what they're interested in. It's best to expose them to a lot of things and hopefully most of them will develop an idea what they like.


I know someone go to mathematics department because they like calculating trigonometric functions in first year.


They might not be interested until after they try it. I think an important part of education is to get exposure to a wide array of disciplines and then see what sticks.


I taught intro CS for a bit. The difference between people who are good at it and people who are not good at it is like sketch art. Some people cannot draw a straight line to save their lives, while some people are natural artists. Some people can work extremely hard to perform at an ok level, while others perform at that level without even trying.

I know it's unamerican, and everyone should master the basics, but there should be some simple aptitude tests given to tell people what kind of optional classes they are going to be good at and what kinds they are just not going to like at all.

This isn't a one dimensional axis of smart/dumb either. For example, most lawyers have extremely good memories, but are notoriously bad at math. Many talented artists and creatives are not good at traditional academic subjects. It would be optimal if the test examined as many talent areas as possible.


The article confirmed what I thought. The best way to teach students CS is to work to their interests. Almost everything any student wants to do is involved with computers. Find some way to give them a project related to their interest and introduce a CS way to do it or enhance what they would already do.


> While I failed to get 100% of students to enjoy coding

Surely that wasn’t the goal, though it echos the well-intentioned but flawed “everyone should learn to code” initiatives.

You need the right temperament for programming, and some people find it mind-numbing, in the same way I find reading legal documents mind-numbing.


"I find reading legal documents mind-numbing"

My wife is a lawyer and I find her capacity to make sense of very complex and large documents quite amazing - particularly as there is no debugger, no unit tests and the execution environment is unpredictable!


I'm not a lawyer, so I might be wrong, but I think one thing that lawyers do is they learn that in a legal sense, documents (and laws) are more about intent and how the various parties understand them. They are not computer code where there is only one correct way to interpret them and where nothing is open to debate. That's why it's hard for computer programmers to read contracts and legal documents, because we try to parse and interpret them like code and very quickly get caught up in minutia that really doesn't matter in the bigger picture that lawyers operate within.


Worth noting that sometimes the minutia do matter - cases have hinged on whether a comma was present:

https://www.theguardian.com/books/2017/mar/16/oxford-comma-h...


The fundamentals of computer science, as well as programming, is solve practical problems. To learning and master programming, one has to build something even it's simple at the beginning. Once one has built something, he will be able to build bigger things.

One issue is student are taught to program, but at that time, e.g., high school and college, he has no idea how a program or software actually works. He has very limited appetite to program.

There is no short, only practice a lot.


Seems like the author's problem is that he thinks "CS" is "programming." It isn't, and that's sometimes a harsh reality CS students realize a couple years into their studies when the difficult math starts coming at you hard and fast.


I don't think we are expecting the CS 101 class in High School to start with inductive proofs. His problem is mostly getting the kids engaged at all.


What difficult math are you talking about? In my experience, most CS math was pretty basic


computational geometry was pretty hard. algorithm theory isn’t easy for everyone. lots of people can struggle with linear algebra. cryptography classes can be hard.


How does one become a CS teacher?

I used to be an active mentor in Big Brothers Big Sisters, and I really enjoy mentoring and seeing them evolve into better more confident versions of themselves. And I learned patience and understanding from them.

I have no interest in getting a teaching degree over a couple years.

Do I just apply to a school? It would be cool to go teach CS in middle America.

Imagine if folks like us who are competent swe take leaves of 3-5 years (we make a ton of money, so it’s not a huge hit) and over a decade or two we are able to build tech centers that elevate and boost the quality of life in places like the Midwest and South. These kids will learn how to think outside the box and have a creative outlet.


There are interesting opportunities in some niches. Twenty-five years after I got an MS/CS degree and had worked as a software engineer at various places, I was looking for something different. A public charter school in Colorado had just started; they taught students K-12 and sought teachers with subject matter expertise and teaching skills. They explicitly didn't require ed school certification. I worked there for 13 years before I retired.

At this school, 2 one-semester "tech" classes were part of high school graduation requirements. One was on operating systems and office software. At times these were Windows and Office; at others Linux and OpenOffice. The other was much like the material in Brian Kernighan's "D is for Digital", on basic concepts, history, and brief experience programming. We covered a little shell scripting, a little SQL, web pages with HTML and JavaScript.

We had an elective programming class, but its enrollments were quite small. The ones I just mentioned were taken by just about everybody.


> a minor bug or incorrect instruction step doesn’t seem like a big issue, but when those fifteen minutes represent some of the first minutes a student is programming,

As an experienced programmer nothing kills me more than getting interested in a new language, setting up your environment, diving into the documentation to get your very first "Hello World!" spun up, and it doesn't fucking compile! And that is me, a patient adult. I can imagine the frustration of a green, teenager not understanding the errors the compiler is spitting when you've done everything correct.


While watching some math videos from Eddie Woo [0], I was surprised at how the students were behaving throughout his lessons. They were joking with each other, being loud etc. This was not how I experienced school. The teacher is talking and you are listening. You are to talk when the teacher asks you to, otherwise you get kicked out of the class.

Dunno why I wanted to post this but is that really how it is in USA highschool?

[0] https://www.youtube.com/@misterwootube


I skimmed through a few videos and my impression is that it was incredibly well-behaved for a USA highschool (though I believe Eddie Woo teaches in Australia). My classroom in the USA was regularly far worse than these videos, which felt (at least to me) pretty normal amongst highschoolers.


In my experience, coding is not interesting to teenagers, generally. But making games is, as is 3D printing, and robotics.

So, don't teach 'programming', teach game development, CAD, robotics etc. Start with blocks / agent (turtle) based languages. Jump right in to doing fun things! Things like turtlestitch (Logo for sewing machines) turtlespaces (3D logo with STL export for 3D printing) cospaces (block-based 3D games) etc.

Starting with Python is always going to be a slog. Leave it for later


> I did not succeed in getting 100% of my students interested in programming. (Not even close)

> By the end of my class, many were determined to never try coding again in their lives.

Replace "high school CS" with "shop class" or "biology" or "auto body" or "english composition" and you'll get the same result.

Most people are not interested in most things as a career or hobby. It's bizarre that programmers think their thing is or should be any different.


Bad teachers are not like good ones but with kind of less juice. Bad teachers are opposite to good ones, their "juice" is strictly worse than useless.


I'm surprised that educators think their goal is to get "more"/"most" students involved in the subject they are teaching.

Lower education's educational goals are to expose students to all the things. So, that they have the opportunity to find out what education (including none/little) and what life they would enjoy. Secondary goals would be to instill a joy of learning, to prep the few that should go to college for it.


I think this touches on another issue prevalent in schools (especially in the US) - the lack of vocational training. Students who aren't on the "college path" need to hit the world with a chance at income and career prospects to support themselves. The fact that you can achieve a solid middle-class life (compared to a lifetime of minimum wage/unemployment) without incurring > $100k of debt is another clear bonus. Many of their outcomes actually exceed those of their peers who took the college path.

We need to admit to ourselves that a tiny portion of us actually do anything that could reasonably be described as "Computer Science" or anything beyond 8th grade math. The vast majority of us read API docs, pull in a bunch of libraries, and often cobble things together thanks to Google/Stack Overflow/ChatGPT/etc.

Most of the employment in this industry is something more akin to being a plumber or electrician than it is to the vast majority of what is taught in many (most?) computer science curriculums. We spend the majority of our time building familiarity with tools and learning from experience which tool is the right one for the job.

Very, very few of us are nuclear physicists designing or building a reactor. We're electricians that run Romex through walls and wire up switches and outlets. If you think this is a simplistic view or poor comparison watch contractors (project managers) building a house with coordination of all of the disparate systems, integration of various architectures, coordination across teams and disciplines, etc. It looks remarkably similar to all of the startups and projects I have been involved in. Watch an electrician on a datacenter build out - what they end up doing (at various levels) is mind blowing.

That's not to say electricians aren't educated and don't understand the fundamentals and a bit of theory - look at the glossary of terms for electrician certification in California as one example[0]. You see things that demonstrate familiarity with concepts such as phase, harmonics, four-wire Delta system, etc.

The reality is that people without a college education with less formal training (time and especially cost), work in an apprenticeship (Junior Dev, anyone?), and pass licensing tests work with things that can kill them, other people, burn down buildings, explode, etc. If vocational training is good enough for that it's good enough for what most of us are doing.

[0] - https://www.dir.ca.gov/DLSE/ECU/ECGlossaryofTerms_EG.pdf


Out of curiosity do these HS CS classes uh... Teach Computer Science? I took three years of CS in high school and it was prepping us for the AP CS test. So memory layout, algorithms, data structures, logic, base conversions, and tons of self-guided study and projects.

But when I read a lot of these articles I come away with the impression the conclusion is that the best way to teach CS is to... Not teach CS at all.


> memory layout, algorithms, data structures, logic, base conversions, and tons of self-guided study and projects.

The current AP CS (A) curriculum removed most of the algorithms and data structures that used to be in the old (AB) course... which I assume is what you recall. It died in 2009.

The language is now Java so memory layout is completely ignored. Not that I would consider that an appropriate topic for beginners at any rate.


I guess I'm an outlier in that I like coding for coding's sake, but I get that many don't. I think the OP found that for _most_ people, coding is a way to get something else done. Find that something else that they actually enjoy and how coding can help, and you've got a winner.


> By the end of my class, many were determined to never try coding again in their lives.

I think that's okay. There are lots of careers I'd never want to do. School is as much learning about yourself as it is learning about content.

Several people I graduated college with were determined to never, ever use their CS degree because they hated coding so much.


Leaving teaching to run a startup seems indicative of a societal problem. This person seemed genuinely invested in getting kids interested in coding... and from their perspective the best way to do that was to start a business instead of teaching them directly. It's no wonder why the public school system seems to be falling apart.


What the author is missing(my bias, I am currently writing some app design books):

1. It's not puzzles alone, but puzzles in their subject of interest. 2. The underlying math is reachable if its presented as a puzzle in their subject of interest.

Some puzzles are more sneaky, how many know that the game monopoly is an economic game about cash flows?


A teacher should know the difference between disinterested and uninterested.


A little tacky to use a high school class as research fordder for the startup. I hope Charlie pays the students and/or the school.

What's missing from CS education the 100th new teaching language.


Programming is not for everybody. It's hard. It takes patience and humility. That's why those few who master it get paid the big bucks.


And to some extent it results in a level of ostracism from wider society, unfortunately. Even now, at worst you're painted as socially inept geek, at best you're called a tech bro.


> Programming is about identifying a goal for a program, and iterating on code to achieve it regardless of what bugs you encounter. More than that, programming is about harnessing the computer to express yourself creatively, systematizing the contents of your imagination until they come alive in the real world

I don’t think this is a useful definition of programming in general, but perhaps a good way to frame it for an intro class.

The way he described his curriculum touched on something that always bothered me (and made me a D-F student for most of high school)

It sounds like the course was a series of projects, like “learn to do X in Python”

That’s how geometry and algebra and chemistry were for me, it was just “memorize this formula” and be able to solve problems with it on this test, then make sure you can also solve it on another test at some point in the future (midterm or final.)

It was never explained what the actual purpose of these algorithms were used, why they are significant. Not just “how am I going to use this?” But “how is this used by people in the world I live in?”

And because of that, it was impossible to motivate myself to learn any of it. I just didn’t care. I think a more holistic view would have been helpful for me. But other students got through it just fine.

But I taught myself web development during the same time because I wanted to learn to make websites. Because the applications of programming are so broad, maybe it makes more sense to design a curriculum where instead of forcing students to do every project, you have a list of projects that after a certain point students can pick to pursue themselves (or if they are high performers, they can propose their own)

It sounds like he was writing custom libraries for these projects too. Why not encourage the use of open source libraries instead?

And is Python really the best language to use for this stuff? I’m not sure. I know the syntax is more simple but I think teaching JS (a simple subset obviously not every language feature) would be more realistic and give more flexibility into the types of projects that can be done?


I think which language to teach is getting into the weeds a bit, but imo python is the right language to start with because it's so straightforwards. There's no pointers like C or anonymous functions/await in JavaScript to learn. once there is some confidence, more advanced concepts can be introduced, but there needs to be a solid foundation first.

JavaScript makes for a great diving off point though. Have the class open a webpage on their laptops, then open the developer console, type in some JavaScript, and do a thing to the page they're on. Choose the right thing and the kids will be hooked on programming.


I mean how does Python handle asynchrony? Callbacks? I’m not sure if that’s really better.

I think my issue with it is where is Python widely actually used by programmers? It mostly seems popular with data science people.

So it just feels like choosing a language because the syntax is a little simpler on the surface isn’t a good enough reason, especially since when writing modern JS it’s not that much more verbose.


Fair point, python has async and callbacks too. My point though is that those are advanced topics and shouldn't be part of an intro to programming class.

It is a little simpler, but given that most students are having to learn so much all at once, imo that "little" counts for a lot!


Hi Charlie, is the Python music library something you have available somewhere? It sounds very interesting!


So where’s the music??


A general question about the benefits of teaching coding:

For at least the past ten years, there's been a big emphasis on teaching coding to as many people as possible. I think a big part of that was the general assumption that, for many people, being able to code would be a ticket to a solid middle-class life, at minimum.

With the rise of LLMs, do we still think that assumption is viable? What are going to be the number of software engineering jobs in 10 or 20 years? I worry that there will be half as many.


Coding is the solution to all problems; can't get a job, learn to code. Not making enough money working a cash register, become a web developer. Nobody wants to hire you with your comparative religions degree, don't worry just learn COBOL. It reminds me of 1998 when the road to riches was paved with an MCSE and every time you got into a cab you'd see MCSE study guides sitting on the front seat. This is not the career for everyone, it's not easy and it takes constant tooling and retooling to remain relevant -this isn't the case in a lot of occupations and people looking for easy money are in for a rude awakening.

I've been through the Dot.Bomb and the Bush I & II recessions and I've seen thousands get laid off (The first day at my current job they laid off 15,000 people and over the 20 years they've laid off another 200,000). Some of the purging is good, companies hire just to hire and end up with a lot of crap employees the unfortunate fallout is good employees get fired too. I don't know where the industry is going, it's certainly not the industry I started in, I've been expecting our downfall for years and we just keep moving along. We shall see.


> I've been expecting our downfall for years and we just keep moving along.

Yeah, with the massive layoffs over the last year, I expected salaries to cool off a bit.

Then I got laid off in January, and it took me about 6 weeks to find a new job, and I ended up getting a slight pay bump with my new position. Though FWIW, I work in Application Security, which still has considerable demand.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: