Two years of teaching high school CS
blog.charliemeyer.co
blog.charliemeyer.co
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 wish more teachers would understand this.
(CS teachers were an excemption, though)
[0] https://edx.org
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.
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...
Do you mind me asking what you did after you left teaching?
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"
Why not just discover for yourself? I think you would do well to have your own opinions instead of relying on others.
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.
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.
That usually is an eyeopener to how the whole thing is working.
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.
https://www.rbteach.com/resources/skillful-teacher-7th-editi...
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...
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.
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.
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.
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.
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.
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.
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
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)
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 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.
> 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.
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.
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.
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?
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
I know you know, but it even took me a long time to get the utility.
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.
Wow thats usually the amount of time it would take to become an expert in a completely new field.
Started learning programming in high school. Went to college for engineering. Worked in (real) engineering for 8 years.
Now I automate engineering jobs.
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.
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).
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 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.
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.
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.
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.
my wife is a HS teacher of about 15 years, truer words have never been said.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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 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.
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 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.
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.
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.
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.
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.
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 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.
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.
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.
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.
- 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.
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.
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.
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.
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.
“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.
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.
> Education is begging to be disrupted.
I rest my case.
Substantively, believe me, I agree with you. Culturally, though, you're proving my point.
My whole point is that the culture of academia is not something worth replicating, and indeed needs to be fundamentally... disrupted.
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.
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.
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.
It's more about the social landscape than the practical requirements.
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.
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.
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.
"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.
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 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.
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.
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.
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 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!
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.
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.
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.
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.
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.
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.
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
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.
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.
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 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.
Generalists are more valuable than specialists. But generalists are doomed to never knowing everything, and knowing what they don't know.
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.
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.
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.
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?
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.
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.
Sounds like he's a software engineer at heart
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.
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)
"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.
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.
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.
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.
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!
https://www.theguardian.com/books/2017/mar/16/oxford-comma-h...
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.
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.
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.
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.
Dunno why I wanted to post this but is that really how it is in USA highschool?
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
> 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.
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.
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
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.
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 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.
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?
What's missing from CS education the 100th new teaching language.
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?
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 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.
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!
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.
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.
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.