Seems doubtful that the best path forward for CompSci education involves the traditional classroom model. I don't know a single good developer who chose their career because of--or had a learning breakthrough in--a high school course. The information flux is just too low, and changes to curricula lag terminally behind the state of the industry.
Learn how to push a button A on a machine to start it, how to push button B to stop it. This can be learnt (and tested) perfectly. It is the ultimate in skills-based education.
Along the way, having worked on a few machines, a worker may piece together some information about 'starting' and 'stopping'. However, this is beyond what's needed.
Should schools be about skill based education? Or about that beyond what's needed?Beyond what's needed won't get the employer a greater short term fungible labour marginal return, why pay for it? Shareholder value!
Does it matter that no one learns Flutter? Teaching Turing [1] may be a step too far in taking programming away from real life. So it's a balance. But so so much more goes into learning computer science than programming language of the day that can be learned from Udemy. From O(n log n) to O(n), how a computer works under the bonnet, what a LLM is, to legal aspects, there's a lot more to computer science as a skill. The challenge of the education system is balancing sketchy employers and pitch-fork public, and the influence they have, that want a cheap quick fix vs actually empowering and inspiring high schoolers' futures.
This is true given that modern software development is more like trades work rather than science. There is no need for formal education to be an api plumber. Just pick up a framework and go with it. The ins and outs of how languages or databases work are irrelevant for most jira solving workers. Often deep knowledge is an issue, because it causes friction with trend followers that only know what the martin fowlers of the new fashion trend tells them to follow. Question the trend and off you go arguing with pigeons.
I didn't even know what programming was until I took a class in high school on a whim. And I was really good and fascinated by it. Stuff like that is what grade school is for. I didn't get any thing out of learning to knit or learning to use Autocad, but for some of my classmates it ignited something.
You are correct that the information velocity is too low. I think that's fine for thr kind of dabbling you mostly do in grade school though
I was going to regale you with how important my high school curriculum of programming and networking courses was in inspiring me to work in this field, but then I saw you said good developer. I ended up going into offsec instead of programming, but I still love coding and without those classes, I think I probably would've joined the military instead of ending up at a big tech company.
Not sure what you mean? The basics of programming- variables, loops, logic, decomposition of problems into smaller ones, data structures, etc... has not changed in the 20 years I have been doing this. High school level should be providing a basic introduction to the concepts, not trying to train kids for a F*NG job.
Eh, while it might not have sparked my interest I would say doing High School Computer Science electives certainly solidified "I want to program".
Actually doing the thing is important and given you can do that with Computer Science in schools discarding it because "you learn faster on your own" feels suboptimal.
Also while Internet access at home seems ubiquitous we don't have full coverage of high speed internet nationally so for some students being able to take a course could make all the difference.
I did learn how to program in middle school and high school in the 90s. And I know that several of my cohort also ended up working as programmers.
On one hand, a lot of what I learned there was self-guided. On the other hand, the core concepts of programming, as it's practiced by the folks I know (mostly procedural, object, and functional concepts and knowing how to CRUD data) haven't changed that much even in the 40 years since I first wrote "Hello World" on a commodore 64. The tools have certainly changed, but the music is the same.
But then, maybe that isn't "the traditional classroom model" (though I think it probably could be) and additionally I may not be a "good" developer. :D
I don't think the end goal needs to be creating scientists. Programming at a basic level should a skill likelihood writing. No reason most of population shouldn't be able to do some basic stuff with python with jupyter or quick script.
I will say that the Apple IIc that I got exposed to in elementary school is the reason I’m into computers and got a CompSci degree. Some exposure to computers and possibly Scratch early should be seen as a good thing.
I spent many years teaching middle and high school math and science, and I really enjoyed it. I was always a hobbyist programmer, and as time went on I kept looking for ways to use the programming skills I had developed. I taught some programming classes, and it was really fun and satisfying for me and for students. But I live in a small town, and I couldn't teach CS full time because there was already a full time CS teacher who had tenure. He was "about to retire" for literally ten years.
I ended up focusing more and more of my time on programming. I eventually left the classroom because I couldn't keep teaching full time and doing the programming work on the side. One of the clear problems with CS education is that if you understand the field well enough to teach it, you can almost certainly find a more appealing employment situation somewhere else.
This. I’m far enough along in my career I’d be willing to take on teaching for even half of what I make now. I want to share what I know. I’m passionate about it.
It would literally be a 80% paycut. I can’t even begin to justify it.
I would happily teach for free if I could claim the hours I'd bill off my taxes. I could spend half my time programming and half my time teaching while making the same.
Unfortunately we're stuck in the 19th century mentality that the best workers are only worth a few times as much as the worst when today there are people worth hundreds of times more than the average.
This is why we have trouble hiring college instructors in my town. The cost is living is high and you can make 2x easy in industry. I don't see much mystery in all this.
I made the transition because I was ready for semi-retirement and got a house at a good time some years back so my mortgage is only $1200.
People and administration challenges can be brutal.
My wife is a teacher, they’re dealing with a parent who has decided to accuse other teachers of sexually abusing their children. The administration is afraid to do anything.
Idea: One of the best things you can do if you are burnt out from a job (esp in tech) is to teach. To see that spark in someone else’s eyes can reignite the spark in yours.
I wonder if large companies (looking at you FAANG) would be down to put their money where their mouth is and start a part-time teaching program for senior engineers who are near burn out.
Keep the engineers at their salary-level, the education boards can subsidize and perhaps the kids can gain a well-connected mentor for life.
"Technology Education and Learning Support (TEALS) is a Microsoft Philanthropies program that builds sustainable computer science (CS) programs in high schools. We focus on serving students excluded from learning CS because of race, gender, or geography. TEALS helps teachers learn to teach CS by pairing them with industry volunteers and proven curricula."
> One of the best things you can do if you are burnt out from a job (esp in tech) is to teach. To see that spark in someone else’s eyes can reignite the spark in yours.
Do you know this from experience or are you just guessing?
In practice, most school teachers I know are themselves perpetually on the verge of burning out from having to handle dozens of children who don't want to be there and constant complaints from their helicopter parents.
I want to want to teach, but I can't imagine transitioning from burnt-out in tech to teaching in a public school. I'm far more interested in looking into mentoring and after-school programs with voluntary participation.
> In practice, most school teachers I know are themselves perpetually on the verge of burning out from having to handle dozens of children who don't want to be there and constant complaints from their helicopter parents.
My wife moved from teaching (~12 years, IIRC) to content production in a tech startup. She doesn't write code, but she's definitely getting the full working-at-a-tech-startup experience otherwise (though, not one of the really awful ones).
A day rarely goes by that she doesn't mention how much less-stressful this is than teaching was.
[EDIT] If you ask her if teaching is good, she'll tell you that yes, teaching kids is good, but being a teacher is only barely about that, and is less so every year, and all the other parts are shitty at best and deliberately abusive at worst. Plus the pay's terrible, to add insult to injury.
First there is TEALS, this isn’t exactly what the GP describes but it is similar.
The other thing is that your attitude and satisfaction can be very different if you are “just visiting” from a relatively lucrative career vs imprisoned in that environment.
Under-resourced underpaid School teachers burning out and senior programmers mentoring students to stop burning out are sorta tangential issues.
I’m not advocating putting senior programmers into full time teacher positions with all its scarcity. I specifically said they should be left on their FAANG salaries.
If you are interested in helping solve this kind of problem I highly recommend you take a look at
https://tealsk12.org It's sponsored by Microsoft and I have been doing this for 10 years now. Teaching in schools was often the best part of my week. The program has been so successful in the NYC area that there are no longer enough local schools that desire our help and I went remote last year which is a much different beast. Those kids need help too though.
There are several classes offered at different levels. AP CS in java being the hardest.
The TEALS program looks very promising - thank you for suggesting here. I just filled out the application for a teaching assistant role (not confident to sign up for teaching right away). Looking forward to hearing from them.
> Computer science has evolved to include more than basic coding. A good class now includes lessons on artificial intelligence, media literacy, data science, ethics and biased algorithms, so “students know how to think critically to solve problems using technology,” Flapan said.
I can't imagine any students walking away from such a class retaining anything about any one of those subjects after the final exam.
Probably more than the average student retains about Chemistry or Biology, by way of it being more applied. You could probably teach those topics entirely by analyzing Black Mirror episodes.
Ehhhh. Sure, I doubt every student will walk away with all that info. But laying a foundation is super valuable. Just knowing what’s out there in the world is a big deal.
My highschool class was figuring out 4 sorting algorithms. We did that in 2 weeks and spent our timing writing machine language in C for demos. You remember how to do the things that are important.
AP Computer Science, at least as I remember it, was more of a Java programming course than a theoretical CS one.
And at my high school there was extreme variance in everyone's programming ability, which led to very little lecture time and mostly self-guided study.
Given that, there's probably some YouTube series with exercises that are more informative and enjoyable than most CS high school educators. Add in GPT-4 to answer the questions and let kids collaborate and you'd be set.
I once glanced at an assignment given my son in AP Computer Science. It was, as you say, in Java. I asked why he hadn't set up a loop for something, and was told (essentially) that loops would be covered in the next week or so, and that in the meantime one wasn't to use them.
A friend of mine is doing this in Berkeley and one of my kid's teachers here in Cupertino schools is ex-industry. Neither of them are doing it for the money but because they want to teach kids.
You ain't getting a qualified CS teacher for $70-80k a year at most after spending $100-200k getting a Bachelors and a Teacher's Credential/Masters. And especially when high schoolers have the option to attend intro programming classes at community colleges that will transfer to 4 year universities.
(From the article)
> online courses for teachers who want to gain the extra 20 units in computer science
My mom's a teacher, and those 20 extra units are a de facto requirement in CA to get to the pay grade above Bachelors alone.
In CA, there is a differing payscale for teachers w/ a Bachelors degree, a Masters degree/20 post bachelor units, and a PhD.
>In CA, there is a differing payscale for teachers w/ a Bachelors degree, a Masters degree/20 post bachelor units, and a PhD.
It's this way in other states as well. I briefly looked into teaching and the pay range was $30-45k because I only had a bachelors. My 10+ years of experience meant nothing. If someone was teaching any other subject fresh from college with a PhD it'd be closer to 60k-70k.
Years of teaching didn't mean much either. It was basically cost of living pay raises unless I went back to school and got a masters/phd.
Teaching students who are genuinely interested (or even simply put the effort in to learn) is fun. The problem is that "teaching" jobs aren't that. I believe the solution (besides higher pay, safety, reasonably admin, and the other obvious stuff you'll find e.g. at https://www.reddit.com/r/Teachers/) is this:
Use technology to alleviate the boring parts of teaching (which also happen to be parts technology is good at) while leaving the fun parts (which also happen to be the parts technology can't replace) to the teachers themselves.
By "boring parts" I mean:
- Logistics: managing large class sizes, handling routine student emails ("when's the assignment due? Why did I lose points?"), handling things like students adding and dropping, scheduling
- Routine grading: full auto-grade subjects which can be checked by a computer like math and chemistry problems and multiple-choice/short-answer, partially auto-grade and streamline (e.g. grammar checking, ML analysis) subjects which require quality like essays and presentations
- Teaching students basic concepts who don't have issues with said concepts, with tools like Khan Academy
By "fun parts" I mean:
- Teaching students who need extra help, which online tools like Khan Academy can't provide
- Teaching students who have extra questions and are genuinely interested
- Doing fun things like in-class experiments (chemistry), demonstrating math problems
- Assigning and grading fun projects like student experiments and creative things
- Handling emotional students (while ensuring the teacher's safety). This isn't really a "fun part" more in that it's something technology can't do
Most of all, teachers should be able to focus on teaching more specialized seminars and electives for smaller, more interested students. The big general classes (e.g. Algebra, English, Spanish) can be managed 95% by existing technology, where students are in large lecture halls or online (at home and/or in monitored classrooms) and use software like Khan Academy and Canvas. I doubt this is any worse than the current system, especially considering the state of public school today, because I'm sure this online software can teach much better than a bored-out-of-their-mind average teacher. Except in the 5% of cases where it can't, hence the wall of text I posted above.
"“When you’re majoring in computer science, all you hear about is becoming a software engineer. They don’t know that teaching is an option. But some of them love working with kids, love teaching, and we’re able to help them become teachers,” Yue said."
The issue is obvious. Pay.
Not many people who major in CS are going to take the massive hit to salary to become a teacher instead.
Pay and the shitshow that is teaching. Having to buy their own supplies, deal with helicopter parents, and the way teachers are evaluated now (not just in California). No wonder nobody wants the job.
I took a computer science class in high school in 2009-2010. It was a pretty bad experience all around, the pace was so slow it and using Alice [1] was tortuous. Thankfully my university intro CS courses were far more engaging.
The fact that California only offers CS in 40% of it's high schools vs. 53% nationwide is not the metric I would care about. Quality is vastly more important in my experience. I suspect that clubs and extracurricular CS programs would have more value. People progress at vastly different paces when learning coding, and the people most likely to enjoy developing software later in life are likely bored out of their minds in the typical high school CS class.
I was fortunate enough to see and hear Randy Pausch describe Alice's development in a lecture at CMU while he was still alive. I remember it being quite compelling as he discussed teaching young kids concurrency by animating a figure skater pirouetting on screen and the fact that the language made this straightforward compared to say, how this would be implemented in C++, for instance.
The problem, of course, is that the very affordance in a language like Alice that makes it approachable for novices are exactly the same constraints and limitations that drive experts insane.
The following is worth noting from the Wikipedia link you included:
"Alice is designed to appeal to specific subpopulations not normally exposed to computer programming, such as students of middle school age, by encouraging storytelling. Alice is also used at many colleges and universities in Introduction to Programming courses."
My point is simply that Alice seems like the wrong tool for the wrong age group as described by your experience but it's definitely not the right approach for someone who will major in computer science later.
As per your quote, Alice is used in middle school and university courses. So high school is square in the middle of the target audience.
The issue with Alice is that graphical, block based coding is not at all an ergonomic way to code. It drives experts and novices both insane. Sure, C++ probably isn't the best for an intro CS courses, either, but Python with some wrappers over SDL to draw sprites is not only a better teaching tool it also forms a more useful springboard to build other projects later. The only good thing Alice does is reduce the scope of things you need to know in order to achieve tangible, compelling results. But that can be done without a block based editor.
Graphical, block based coding seems to be a common attempt to make coding more approachable [2] but I don't really see any convincing arguments as to why. My take is that it a mix of 1) assumption that that students are intimidated by text, and 2) aesthetic appeal from people who don't actually have to use these tools. Yes, it's impressive to see a skater spin around in 3d with just a few blocks of code in a lecture, but it's another thing to actually use it.
Programming is such an easy field to get started in, I'm tempted to suspect that if you need a teacher to teach it to you, you aren't really interested in it.
Didn't most people here start that way? Maybe I'm just projecting, but I assume that most people in this industry got into programming on their own without any adult introducing it to them.
Anecdote: I attempted to volunteer with the Microsoft TEALs Program at a local school. I'm not sure what we did wrong but the instructor never really utilized myself or the other volunteers. For about a month, he asked us to "review the syllabus" and "consider ideas" to implement with the classroom. We pitched a few ideas ranging from writing simple sorting algorithms to building a rudimentary search engine... But the school year kinda just progressed. We never met with any of the students. E-mail response time spanned weeks. And at some point, he asked us to join some "Advisory Board". So I more or less checked out since it all seemed kinda lame.
Oh boo fucking hoo. Just a few months ago turned down a university teaching gig at the department of computer science for 45k a year (you need a PhD to even be considered). It's not surprising, and there should be a shortage of teachers and professors given what universities/schools want to pay for these jobs to highly educated people.
63 comments
[ 4.9 ms ] story [ 122 ms ] threadLearn how to push a button A on a machine to start it, how to push button B to stop it. This can be learnt (and tested) perfectly. It is the ultimate in skills-based education.
Along the way, having worked on a few machines, a worker may piece together some information about 'starting' and 'stopping'. However, this is beyond what's needed.
Should schools be about skill based education? Or about that beyond what's needed? Beyond what's needed won't get the employer a greater short term fungible labour marginal return, why pay for it? Shareholder value!
Does it matter that no one learns Flutter? Teaching Turing [1] may be a step too far in taking programming away from real life. So it's a balance. But so so much more goes into learning computer science than programming language of the day that can be learned from Udemy. From O(n log n) to O(n), how a computer works under the bonnet, what a LLM is, to legal aspects, there's a lot more to computer science as a skill. The challenge of the education system is balancing sketchy employers and pitch-fork public, and the influence they have, that want a cheap quick fix vs actually empowering and inspiring high schoolers' futures.
[1] https://en.wikipedia.org/wiki/Turing_(programming_language)
You are correct that the information velocity is too low. I think that's fine for thr kind of dabbling you mostly do in grade school though
Actually doing the thing is important and given you can do that with Computer Science in schools discarding it because "you learn faster on your own" feels suboptimal.
Also while Internet access at home seems ubiquitous we don't have full coverage of high speed internet nationally so for some students being able to take a course could make all the difference.
On one hand, a lot of what I learned there was self-guided. On the other hand, the core concepts of programming, as it's practiced by the folks I know (mostly procedural, object, and functional concepts and knowing how to CRUD data) haven't changed that much even in the 40 years since I first wrote "Hello World" on a commodore 64. The tools have certainly changed, but the music is the same.
But then, maybe that isn't "the traditional classroom model" (though I think it probably could be) and additionally I may not be a "good" developer. :D
I ended up focusing more and more of my time on programming. I eventually left the classroom because I couldn't keep teaching full time and doing the programming work on the side. One of the clear problems with CS education is that if you understand the field well enough to teach it, you can almost certainly find a more appealing employment situation somewhere else.
I studied English, and all my brilliant classmates never wanted to teach. They all went on to other things: law school, marketing, publishing etc.
It would literally be a 80% paycut. I can’t even begin to justify it.
Unfortunately we're stuck in the 19th century mentality that the best workers are only worth a few times as much as the worst when today there are people worth hundreds of times more than the average.
I made the transition because I was ready for semi-retirement and got a house at a good time some years back so my mortgage is only $1200.
My wife is a teacher, they’re dealing with a parent who has decided to accuse other teachers of sexually abusing their children. The administration is afraid to do anything.
I wonder if large companies (looking at you FAANG) would be down to put their money where their mouth is and start a part-time teaching program for senior engineers who are near burn out.
Keep the engineers at their salary-level, the education boards can subsidize and perhaps the kids can gain a well-connected mentor for life.
"Technology Education and Learning Support (TEALS) is a Microsoft Philanthropies program that builds sustainable computer science (CS) programs in high schools. We focus on serving students excluded from learning CS because of race, gender, or geography. TEALS helps teachers learn to teach CS by pairing them with industry volunteers and proven curricula."
Do you know this from experience or are you just guessing?
In practice, most school teachers I know are themselves perpetually on the verge of burning out from having to handle dozens of children who don't want to be there and constant complaints from their helicopter parents.
I want to want to teach, but I can't imagine transitioning from burnt-out in tech to teaching in a public school. I'm far more interested in looking into mentoring and after-school programs with voluntary participation.
My wife moved from teaching (~12 years, IIRC) to content production in a tech startup. She doesn't write code, but she's definitely getting the full working-at-a-tech-startup experience otherwise (though, not one of the really awful ones).
A day rarely goes by that she doesn't mention how much less-stressful this is than teaching was.
[EDIT] If you ask her if teaching is good, she'll tell you that yes, teaching kids is good, but being a teacher is only barely about that, and is less so every year, and all the other parts are shitty at best and deliberately abusive at worst. Plus the pay's terrible, to add insult to injury.
The other thing is that your attitude and satisfaction can be very different if you are “just visiting” from a relatively lucrative career vs imprisoned in that environment.
Under-resourced underpaid School teachers burning out and senior programmers mentoring students to stop burning out are sorta tangential issues.
I’m not advocating putting senior programmers into full time teacher positions with all its scarcity. I specifically said they should be left on their FAANG salaries.
[1]https://mentorloop.com/blog/how-to-recover-from-burnout
There are several classes offered at different levels. AP CS in java being the hardest.
I can't imagine any students walking away from such a class retaining anything about any one of those subjects after the final exam.
And at my high school there was extreme variance in everyone's programming ability, which led to very little lecture time and mostly self-guided study.
Given that, there's probably some YouTube series with exercises that are more informative and enjoyable than most CS high school educators. Add in GPT-4 to answer the questions and let kids collaborate and you'd be set.
I have volunteered with them for ten years now. I teach in the mornings with minimal interference with my job.
I wouldn’t do it for the amount that they’re paying now though.
(From the article)
> online courses for teachers who want to gain the extra 20 units in computer science
My mom's a teacher, and those 20 extra units are a de facto requirement in CA to get to the pay grade above Bachelors alone.
In CA, there is a differing payscale for teachers w/ a Bachelors degree, a Masters degree/20 post bachelor units, and a PhD.
It's this way in other states as well. I briefly looked into teaching and the pay range was $30-45k because I only had a bachelors. My 10+ years of experience meant nothing. If someone was teaching any other subject fresh from college with a PhD it'd be closer to 60k-70k.
Years of teaching didn't mean much either. It was basically cost of living pay raises unless I went back to school and got a masters/phd.
Use technology to alleviate the boring parts of teaching (which also happen to be parts technology is good at) while leaving the fun parts (which also happen to be the parts technology can't replace) to the teachers themselves.
By "boring parts" I mean:
- Logistics: managing large class sizes, handling routine student emails ("when's the assignment due? Why did I lose points?"), handling things like students adding and dropping, scheduling
- Routine grading: full auto-grade subjects which can be checked by a computer like math and chemistry problems and multiple-choice/short-answer, partially auto-grade and streamline (e.g. grammar checking, ML analysis) subjects which require quality like essays and presentations
- Teaching students basic concepts who don't have issues with said concepts, with tools like Khan Academy
By "fun parts" I mean:
- Teaching students who need extra help, which online tools like Khan Academy can't provide
- Teaching students who have extra questions and are genuinely interested
- Doing fun things like in-class experiments (chemistry), demonstrating math problems
- Assigning and grading fun projects like student experiments and creative things
- Handling emotional students (while ensuring the teacher's safety). This isn't really a "fun part" more in that it's something technology can't do
Most of all, teachers should be able to focus on teaching more specialized seminars and electives for smaller, more interested students. The big general classes (e.g. Algebra, English, Spanish) can be managed 95% by existing technology, where students are in large lecture halls or online (at home and/or in monitored classrooms) and use software like Khan Academy and Canvas. I doubt this is any worse than the current system, especially considering the state of public school today, because I'm sure this online software can teach much better than a bored-out-of-their-mind average teacher. Except in the 5% of cases where it can't, hence the wall of text I posted above.
The issue is obvious. Pay.
Not many people who major in CS are going to take the massive hit to salary to become a teacher instead.
The fact that California only offers CS in 40% of it's high schools vs. 53% nationwide is not the metric I would care about. Quality is vastly more important in my experience. I suspect that clubs and extracurricular CS programs would have more value. People progress at vastly different paces when learning coding, and the people most likely to enjoy developing software later in life are likely bored out of their minds in the typical high school CS class.
1. https://en.m.wikipedia.org/wiki/Alice_(software)
The problem, of course, is that the very affordance in a language like Alice that makes it approachable for novices are exactly the same constraints and limitations that drive experts insane.
The following is worth noting from the Wikipedia link you included:
"Alice is designed to appeal to specific subpopulations not normally exposed to computer programming, such as students of middle school age, by encouraging storytelling. Alice is also used at many colleges and universities in Introduction to Programming courses."
My point is simply that Alice seems like the wrong tool for the wrong age group as described by your experience but it's definitely not the right approach for someone who will major in computer science later.
The issue with Alice is that graphical, block based coding is not at all an ergonomic way to code. It drives experts and novices both insane. Sure, C++ probably isn't the best for an intro CS courses, either, but Python with some wrappers over SDL to draw sprites is not only a better teaching tool it also forms a more useful springboard to build other projects later. The only good thing Alice does is reduce the scope of things you need to know in order to achieve tangible, compelling results. But that can be done without a block based editor.
Graphical, block based coding seems to be a common attempt to make coding more approachable [2] but I don't really see any convincing arguments as to why. My take is that it a mix of 1) assumption that that students are intimidated by text, and 2) aesthetic appeal from people who don't actually have to use these tools. Yes, it's impressive to see a skater spin around in 3d with just a few blocks of code in a lecture, but it's another thing to actually use it.
2. E.g., https://developers.google.com/blockly
Computers weren't secret then.