An effort to bring computer science to all US high schools
blog.aboutamazon.com
blog.aboutamazon.com
I was fortunate enough to go to a high school that had an amazing computer science curriculum (8 semesters worth of classes). One really intelligent decision the department made was to not just mimic a college curriculum. After all, why teach something kids will learn a few years later? Instead, they mixed in some offbeat courses. They had a software development course that taught Python and basic web dev. They had a graphics course where you built a graphics engine. They even had an intro course with Racket. It's unlikely other schools will be able to replicate this exactly, but I like the concept of fun over "usefulness".
>One really intelligent decision the department made was to not just mimic a college curriculum.
It would have been GREAT if my high school even mimicked a college curriculum. We barely had any AP courses & I think it would haven't been a surprised if you didn't go onto college from my high school. You re definitely speaking from a place of immense privilege and it's amazing your school offered that.
My high school has exactly one CS course (AP Computer Science) that teaches more mathematics than computer science. This is something I would love if it existed at my school.
I've been currently self-teaching CS for the portions that seem relevant and interesting, such as ML/DL, algorithms, and data structures.
My high school registered its domain name in 1990 (mbhs.edu) to give you an idea of how on top of the ball they were.
At the time at home I was also writing Basic, C programs - if I had a CS course it would helped bootstrap my learning a lot better.
My dad kept saying at the time that there probably wouldn't be any programming jobs when I was older because AI was on its way to replace humans. And that was kinda wildly spread knowledge (remember this is basically quasi-pre-internet days).
Every CS course I took in college was an easy A at that point. I didn't go beyond my BS because as many of us know, the industry was calling. And I already had 2 jobs (one self-owned web development company) and worked for another company.
Zooming forward to today, I absolutely believe we won't have AI replacing humans yet - so absolutely think every HS should have a curriculum like yours if not even more aggressive. Then push a BS in CS to be more like an MS in CS. We really do need to make such advancements because, well, all other jobs are being eaten by software.
Out of curiosity, how old were you then?
And if you were advising a school on a progression, how young would you start teaching various topics? Like touch typing at age 5; sequences of commands, functions, conditionals and simple looping at age 6, used for solving puzzles in about 10-20 lines of code; expand for solving puzzles in about 20-30 lines of code at age 7, and so on.
I wouldn't know what age to put kids through that - I don't have kids, but I know they are already exposed to computers much much earlier than I was. But 6,7,8 still feels slightly too young for me for that kind of comprehension.
And just to edit: The only requirement to this stuff is focus and the curiosity to learn. So younger aged kids may very well be adept so long as home life, etc.. are stable in that regard.
Everyone thinks that their field should be better emphasized at highschools. I think kids should get some background in law (not laws, law) given they will have to go on and obey laws for the rest of their lives. But I know that isn't going to happen. I used to teach 2/3rd year university kids. Highschools need to spend more time teaching kids how to read because, atm, they aren't. I was facing people in their 20s who had trouble reading more than a page or two at a time, who couldn't string together sentences into coherent paragraphs. (Also, basic numeracy.)
But yes, definitely agree with you, and it can start with basic contracts, implied and written.
For my 2 cents, if there's one thing we need to teach in schools, it's being nice. No one is "nice" anymore, except for innately nice people. Everyone seems to be out of niceness. I LOVE meeting people that are 50+ because, well, they are nice.
It used to be something inherited from parents, but it just keeps slipping generation to generation.
I worked with a non-profit that attempted to pitch exactly this to state governments, using game development as the framing. We ran summer programs to gather data while pursuing funding, and it was fantastic. Kids who had no interest in programming, logic, or physics bought into it in the context of building a level. Kids who wanted to code but had no interest in art, music, or writing bought into it in the context of creating a story.
Funding for an in-school pilot passed the state legislature, but the governor line-item vetoed it. Good old Bobby Jindal.
I would worry more we're just creating students trained to work for Amazon.
A true computer science education involves a study in multiple areas, from discrete math, to computer architecture, to operating systems, to algorithms, to finally, both as the pinnacle and the essence of the subject, theory of computing.
Any university would be expected to have these classes as part of their core curriculum for a CS degree, otherwise people begin questioning the rigor of the program.
Obviously, if we are talking about HS rather than University, the subjects are scaled back for necessity. But the content still needs to be there. So are they talking multiple classes, or a long series of classes that will eventually address all of the aforementioned areas?
I'm all for everyone learning Computer Science. I just want to make sure that we are talking about the same thing!
Similar arguments could be made for physics, chemistry, and biology. But we still say that we teach those subjects in high school, even though the depth and breadth of material is hardly what you'd expect from a university or college. The only broad and deep courses in K-12 education (US-centric descriptor) are math, social science (history, geography), language arts (English-language literature, writing). And none of those really go that deep, or that broad.
We can identify the initial elements of CS that everyone takes before going deeper: Introduction to algorithms and data structures, and some logic/discrete math courses.
Logic is technically covered (or used to be) in geometry courses (in the US). Discrete math presently has no place, so this could be improved. The introduction to algorithms and data structures part is barely separated from programming 101. The difference is that a programming language course (Python 101) is going to go too deep into the weeds of Python and not cover topics that are portable across more languages. An algorithms course should be more portable (at least across a class of languages, like across imperative languages or OO languages).
High school classes in the other sciences manage to convey some of the breadth of the subject while laying the absolute foundations for further study.
The only non-incidental part of computer science are the theory of computation, the hierarchy of languages and translators/compilers between various languages. Not one pre-university program teaches these, and in recent years many university courses don't teach these either.
Practically speaking, the latter (algorithms and data structures) are the most accessible, and allow you to explore the former. Even if we think people should be taught how to express these concepts with a pseudocode, they're still learning to program (in a vague sense). But they can't explore the ideas of CS, outside of a formal approach if they don't program (pseudocode or actual code).
And the formal approach is not understandable (or as easily understandable) without a practical experience with the topic. Do you honestly believe that we should teach students category theory and abstract algebra before we teach them high school algebra? Or perhaps high school algebra before arithmetic? If they have no number sense, they won't be very effective in high school algebra. If they have no sense of the structure of algebra, they'll have a hard time developing an intuition for the more abstract algebra and math concepts.
The same is true for CS. I can sit down and teach someone the hierarchy of computational mechanisms (finite state machines, pushdown automata, Turing machines). But what good is that if they don't understand what those machines actually express? Understanding that regular expressions (not regex) are used to tokenize text, and that PDAs are used to parse text is a great practical introduction to those concepts and provides them with an intuition that they can then use to generalize those machine models to other structures.
So pick a point to start, and work up. Don't start at the formal level and expect it to be effective (unless the students already have a sufficiently advanced background, like a senior university math major could probably start with those machine models and work towards their applications, rather than the reverse).
Personally, with two school-aged kids, I'd be satisfied to see a basic programming course in the K-12 curriculum. This could serve a number of purposes, even short of launching kids on a CS career path:
1. Find out if you really like programming before you spend 4 years studying CS.
2. Find out how people actually do things like science and math. A school STEM curriculum that is devoid of computation misrepresents the topics that are being taught.
3. Introduce kids to a rip-roaring hobby. After all, we teach music for pretty much this reason.
Office suite automation is actually important for business, particularly involving spreadsheets.
I give the next priority to octave (Matlab), bash shell scripting, and possibly a statistics-oriented language like R or Julia.
Most schools seem to start with java, python, or javascript. I'm not loving these choices. The stuff mentioned above is probably more useful for people who won't become professional programmers. For those few who will, rust and plain old C make some sense, but there are unlikely to be enough suitable students to make this a reasonable thing to teach.
I'd go with Python. I'm seeing it displace Matlab in the scientific world, and it has "something for everybody," making it potentially attractive to students who have odd interests such as music and art.
Much of the business world runs on spreadsheets, so scripting those is actually useful for students who will mostly not become professional programmers. It so happens that spreadsheets still use basic.
My feeling is that you can be somewhat relaxed about language choice at the K-12 level. People are too concerned about "useful" and "career" skills, but a college bound 8th grader is almost a decade out from the start of their career. That's enough time to go through several languages, computing platforms, and career plans. In that time period, I went from wanting to be a professional musician, to starting grad school in physics. ;-)
If you are really adamant about high school kids learning programming, I might suggest some type of combination statistics and python/R class. Society suffers a lot more from the general populace's ignorance about statistics than computer science, programming, trigonometry, calculus, etc.
"Computer programming" is where children are made to glue existing pieces of software together; plumbing with data so to speak. It's what computer programmers do 99% of their time.
I'd say call it "sequential algorithms", so children can learn about the essence of the matter. It could be part of a math class.
I think Charlie Munger once said we learn the really important stuff by middle school. I think it would be nice if kids had more control over the direction they are interested in & the subjects they want to really excel at. This of course requires them to try different things. But once they find one they're really passionate about, I believe we should let them go deep into it without requiring as much of other content.
I believe a well rounded education is great but without being able to focus in one area we can't become an expert in anything. Bill Gates & Warren Buffet have both argued that focus is the key to success at anything.
Once we learn to write, we don’t take writing classes, we take grammar classes. Meanwhile, we write to participate in the rest of our classes.
Similarly, computer science should become the medium of participation for STEM classes.
For example, math and physics, would be easy classes to transition to only be taught with Python.
Instead of using a graphing calculator to solve word problems, what if the class was about building a graphing calculator?
You would still learn how mathematical functions translate to graphs, but you would also learn to write software that accurately simulates math, and later physics.
It can lead to slowing down your learning of the main skill. For example, I might try to include TDD in any coding tutorial. While that's great, it slows down how fast the student can learn the new concept.
Being forced to write essays that are X words long for your History report, turns most people into terrible writers who are unable to explain a concept in a fewer amount of words and are typically full of very long run-on sentences.
How to enjoy and be a lifelong learner.
It seems to me that many people actually stop learning (some actively - as in they do anything not to learn new stuff) after the finish high school or college.
The don't read, they don't explore, they don't wonder, they don't invent - in short, they stop learning.
More horrifyingly, this is somewhat celebrated in our culture (at least here in the United States)!
I believe this needs to change, and soon, if we are ever to get out of the societal mess we find ourselves wallowing in currently.
I'm pessimistic, though, that this will change.
I was worried about teaching at first, I haven't had a lot of experience (none as a matter of fact) but, TEALs had some training classes over the Summer that I attended and they taught me how to be a pretty decent (at least in my opinion haha) teacher.
The school I got placed at was an inner-city school and it was honestly awesome to give these kids a chance to learn about and explore a career path they previously thought well above their ability to reach. I went one day a week for one class in the mornings, I worked with other volunteers each with their own day, so it didn't interfere with my work life at all either.
I didn't learn about programming myself until I hit college so just the fact that these kids are even made aware that this is an actual viable career path is a win in my book.
If you're interested at all in "CS in every high school" mentality and you want to put in some volunteer hours then I think TEALs would be an awesome resource to look into
TEALS is great because it realises that unfamiliar teachers being thrown into teaching CS probably won't turn out well for anyone. But having 'real' engineers from industry in the classroom to help teach and explain things is an invaluable resource. Plus, I've been able to get to know some of the students really well and talk to them about their college plans and beyond. I was a little nervous when I first started but it's been one of the best experiences of my life.
Bottom line, putting pressure on schools to find time and money for a discrete CS offering is challenging. I tend to think of programming as a tool; don't teach programming for the sake of programming, but as a tool to enhance other subjects.
My school decided to have random (STEM, mostly math) teachers teach computer science classes. It did not go well–not because the teachers were bad at teaching, per se, but because they had not had enough training. It turns out that you can't really learn to teach Java over the summer.
I would be very afraid that teaching CS in high school just creates more people that can whiteboard algorithms without any deeper understanding or creativity. Good for Amazon though to get more workers for cheap they can then lay off after a few years to get "fresh" people.
I’m in the process of building my own keyboard at the moment, but once I’m done with that I know I’ll be hungry for more electronics related projects. If only I could come up with some good ideas.
Plus this isn't particularly useful advice. Without a large amount of capital, luck, or a compelling concept it isn't trivial for people to become financially independent and or a business owner.
https://www.washingtonpost.com/wp-srv/style/longterm/books/c...
So I personally am not worried.
Source?
LOL, programmers aren't that special. I would stake my life that 90% of people have whatever genetic potential necessary to become at least an average programmer.
Right. See, kids that don't care or don't understand the material have to be able to get Cs as a fundamental requirement of high school. A degree for everyone, regardless of ability or passion.
Oh and also all my computer classes in high school were video game free time. So that's a thing.
What a waste of taxpayer money. Just link kids to a BASIC interpreter online and they'll figure it out if they care and have the aptitude.
Suggested curriculum points:
- Plug the related high school extracurricular clubs
- Computing on a tight budget
- Two types of free: gratis or libre
- Resources to further your own computing knowledge
- Brief history of computing
- Careers in computing, networking, and robotics
- Basic hardware security
- Basic network security
- Basic encryption, incl. protocols and certificates
- Trust, skepticism, and mistrust online
- Basic system architectures
- Popular choices in operating systems
- Microcontrollers, FPGAs, SoCs, sensors, buses, motors
- Taking control of your own computers
- Protecting yourself from malware, spyware, and spam
- Backing up your data
- How to evade the law online
- How to catch online scofflaws
- Open vs. closed source
- Types and uses of various licenses
- Technical standards, FUD, and embrace-extend-extinguish
Most people won't need to learn full-blown computer science in high school, just as most people won't need to take a second year of calculus. People will need to know why it's a bad idea to glue a tablet computer to a refrigerator and allow it unrestricted access to your Wi-Fi.Everyone in the class could leave it with their own Raspberry Pi (or competitor system) and a custom-made peripheral for it.
Actually, it did!
https://en.wikipedia.org/wiki/Reformation#Literacy
Literacy was a major factor in the reformation, and the subsequent decline in the status of clergy. Look even further, and it becomes a crucial factor in modern atheism and the further deterioration of clergy of all denomination.
> Or unlocking a massive engine of productivity to raise standard of living across the economy.
Sounds great! Just remember the rules of supply and demand. As the supply of programmers increases, since demand won't change (at least not immediately), their price will decline.
That means programmers like you will have to settle for a fraction of their current compensation.
Couple that with tech employers' known fondness for employing the young, and you'll lucky to have a job at all.
US needs to train STEM candidates, or else newly generated jobs will keep getting sent to China and India where the quality of candidates if getting better by the day.
I say this as an Indian in the US pursuing CS. There is a demand for CS candidates. If the US won't match that with supply, then some other country will.
It was an excellent set of courses that taught some basics of programming and hardware architecture and we learned. There was a computer club where we interfaced with a laser disc player. Some really cool time back then. I was lucky to have my C=64/128 and Amiga 500 to extend my learning experience, with C.
Peace.
Compare this to what the elite private coastal schools have, nothing would have been better. Those schools good CS students out of top master's programs with a penchant for teaching. It's no surprise that IOI champions come from these places.
Whatever you teach anyone in September, by June, it may not work. It's a bottomless pit of futility that sucks the life out of you, and even if you find a way to derive some pleasure from it, the rug will be pulled out from under you, and the forces of access denial with lack you out of the things you master only a month ago, for little more reason than bumping a version number.
Go ahead and learn something. Your learning will be so dependent on gigabytes of irrelevent libraries with highly specific build numbers, such that when support is dropped, and those builds are no longer available for download, your acquired skills will be struck down and renderd unusable.
However, I really wish this sort of effort could be de-coupled from the "CODE" idea and filtered by interest on a per-kid basis, as with other subjects, even algebra. As things stand, people will eventually self-select anyway, so the inevitable change in or out of STEM is simply delayed until it's later, and even more awkward and difficult. For example, during one's sophomore year of university, after a tremendously walled-off personal identity has been constructed on the back of the STEM vision. A school-age child robbed of interests-based focus now easily becomes a societal liability later.
I have three school-age children. If one of them likes STEM, wonderful. Or maybe they will become an animal trainer, or a pawn shop owner or drive a garbage truck. That's fine. Or maybe they will become a counselor for people who are looking to get out of STEM (I am coaching a couple of those people right now).
I'd also like to see the over-emphasized CODE replaced with TECHNOLOGIZE or some broader-minded term that allows talented people to get out of the coding mindset and yet realize they can still be beneficial within STEM, and maybe even realize that technology can be developed by folding pieces of paper together, or by working in the forest. In other words, you can CODE without CODING and people are being tricked and boot-camping their way into dead-ends because they don't know that.
As an example of someone who could STEM in their sleep and never write code, take Richard Feynman. Or Einstein. Could Albert Einstein "code" on an IBM Mark I? Who cares?
Not that coding is bad, just that it's not the only thing by a long shot. And it's emphasized by a lot of people who absolutely will not ever write any code. The "code parents" I know who are falling over themselves to get coding into schools for their kids are the same people who ask their nephews to code things for them, not because they "can't do it but wish they could", but because they are interested in higher-level pursuits. They want their kids to have a tiny bit of exposure to CODE so these kids can run in CODE-type circles, yet still not actually CODE. But some of those kids will not get it and will have nervous breakdowns because they think they are supposed to learn to write CODE.
Further down the STEM path, we get these IT interviews in which the interviewer projects knowledge and experience they themselves didn't have at the interviewee's level onto the interviewee. Even when it's just to get into somebody's head and see how they think, it fails to pass muster at the Psychology 101 level and it's a huge problem that prevents healthy teams from forming. I personally interviewed for one of these jobs, got the job, and then walked into a room full of people who were laughing at how it was possible (luck) that I could have known the answers. Then I went on to learn by experience that the most desirable candidate for the position would have been a politician with some small amount of IT knowledge, someone who could elevate the department in the eyes of the other departments, which were intelligently run at a political level. The STEM-driven department needed the opposite of STEM in order to really become what it could become. Stanford Teamology project results showed something similar--psychological diversity is a huge key to problem solving, and becoming aware of its existence and benefits is the mechanism that turns the key.
In order to create a ramp from CODE to this broader look at tech, it would probably be beneficial to build a more realistic yet still basic model for STEM that completely stomps all over the CODE notion by adding enough nuance that candidates for STEM careers are given additional leverage in non-CODE yet very-much-still-STEM areas. [I am writing CODE in upper case because in the world I'm observing, it's some kind of uberword].
Computer science isn't software engineering.
Computer science isn't coding.
TFA isn't talking about that anyway.
Realistically, people have to start somewhere, and trying to teach applied mathematics without the application is foolishness.