HACKER Q&A
📣 NiloCK

What should be taught in high school?


I'm an educator with a CS / programming background. There's a possibility that I'll be moving into the 'Information and Communications Technology' role next year at my medium sized high school (grades 9-12, ~700 students, diverse student population). My jurisdiction's curriculum in this area is not well developed, and there are no standardized tests to prepare for. I'll have an amount of freedom in deciding course content that's unusual for high school teachers.

What would HN have the modern western high school student learn with respect to "Information and Communications Technology"?


  👤 Iv Accepted Answer ✓
Honestly at this point it is not programmers we need but more people with a solid general culture about computing:

What's the internet? where is the cloud? Where are data stored? How do they pass around?

What's a computer? A smartphone? Where is data stored? Where is computing happening?

Most of them will never be coders, and whichever platform you use to teach basic programming would probably be obsolete by the time they are out.

If you really want to do programming, I'd be doing some Arduino Through Blockly (https://ardublockly.embeddedlog.com/index.html) and hit two birds with one stone: it will give them basics of programming and also demystify some things about electronics.

Kids fascinated about blinking LEDs or running motors can then dig into electronics, students wondering what that weird C program on the right is when a blockly program is assemblend can join us in the Dark Side.


👤 elliekelly
As someone who was always interested in CS but who also always sucked at math, the basics of logic helped me immensely in finally understanding both. And, whether by nature or nurture, as a woman I was always better with words than numbers. Learning the fundamental concepts of logic without numbers bridged that gap in my brain and gave me the confidence to tackle the numbers soon after.

There’s a really good course on edX called “Logic and Computational Thinking”. It’s pretty basic and you could probably finish the whole thing in a Saturday. I would imagine much of the content is in line with the capability of the average high schooler. It was a good (and unintimidating) starting point for learning how computers “think”.


👤 gus_massa
Remember to include Excel. It's very powerful for people that can't program. I use it a lot in spite I can program. For example for the monthly family budget. Also for statistics about how many students approve in my courses.

You can add some nice color, bold letters, and other visual stuff to make an informal report.

You can make nice graphics. I like dispersion graphics. Sometime the linear approximation is useful, but perhaps it's too much for 9-12yo.


👤 ronyeh
How to file taxes, if you're in the USA. How to calculate interest, balance your books, and set budgets based on your income. You can teach spreadsheets, double entry accounting software, and fun/useful math functions.

More generally, high school students should learn how to model information in a spreadsheet. It can be anything they are interested in: prices on collector's items, tracking their friendships and contacts, graphing their caloric intake per day, tracking the tweets and mentions of your favorite celebrities....


👤 RandomBacon
I say how to think critically: problem solving, not always accepting the status quo, don't take things at face value (photoshops, or fake news), think about what motivates other people (when negotiating etc), learning self-independence.

Maybe some of those things can't be taught effectively at school, but I sure don't think most kids are learning that stuff at home. Perhaps your school might sponsor a Scouts BSA program? A lot of the character development stuff can be taught that way.

(And a lot of people on reddit say taxes.)


👤 caseymarquis
I think you could probably build an entire course out of following a button click into a browser, and dissecting all the layers along the way.

What happens when you hit the mouse button? Let's break open the mouse and find out. This leads to a pretty simple circuit, until you hit the MCU doing USB communications. What is an MCU? It's a small computer with a processor, memory and electrical inputs/outputs. USB is pretty complex, but you could emphasize that there's a power line, a return, a data in, and a data out line. I'd probably skip electrical encodings and the details of USB protocols at this point. The computer is the USB host (server), and the chip on the mouse is the client. You could then open up the PC, follow the path through the hardware to the OS. At this point you get to explain what a driver is. This leads to application code and OS APIs. This leads to the coordinate system in the OS and monitors/touchscreens, which finally gets you to the browser, html, css, javascript with ajax (browser inspection tools), http, https and certificates, tcp, ip, ethernet frames and wifi (wireshark), network cards and their management, looking at a network card, dissecting an ethernet cable (crimping one), taking apart an access point, switches, the gateway, the internet, ISPs, servers, databases...

I think the point would be to emphasize that there are no black boxes, give a good overview of how things work, and hopefully find a couple kids who really like some portion of all this and help them start some more advanced projects.


👤 kartickv
A lot of things that are not hardcore CS but very useful, and often simpler solutions to many problems than full-fledged programming:

- Becoming a power user of spreadsheets, with formulas, pulling in external data (like forex rates), basic statistical analysis, conditional formatting to present a conclusion (green is better, red is worse) etc.

- Running a VM on AWS, SSH, basic Linux administration, etc.

- Automating manual tasks like cropping 500 JPEGs and rotating them. This could use Automator on macOS or a Python script.

- Writing small throw-away programs in Python. For example, I have a noisy signal, noisy due to errors in measurement. Would averaging with a second noisy signal reduce or increase noise? I wrote a simple Python program to generate two random arrays, measure standard deviation of each, and print out whether the resulting array has lower standard deviation than neither, one or both the input arrays. I then repeated 100 times to eliminate variability caused by the random number generation.

- HTML / CSS / JS to build a simple web site.

- Exploring emerging no-code tools (Airtable?)

Hardcore techies often don't have these skills. That would be like a surgeon who can perform open-heart surgery but can't administer first aid.


👤 twblalock
For an 'Information and Communications Technology' course, I think the main goal ought to be demystifying computers and the internet, to enable students to think critically about about the role they play in society.

One outcome is that students can be active users rather than passive consumers and think critically about topics such as privacy and social media.

Other outcomes are improved computer literacy, and perhaps inspiring some students to pursue computing as a hobby or career -- but the demystification and critical thinking will benefit all of the students, not just the ones who are interested in computers.


👤 Merrill
I would approach it from a "how to use information technology" perspective. This would include how to locate, acquire, validate, transform, store, process and display information. It would also include how to find, download, install, customize, secure, and update a set of tools that can implement all these things, including a standard office suite, a programming environment, and an audio/video capture and edit environment. Python could be used for Libre Office scripting as well as the programming environment. Display should include both the graphing functions of the spreadsheet as well as using CSV files to transfer information to the programming environment for more complex processing and use of plotting tools. Financial and business data could also be used as a theme.

👤 berbec
Financial planing 101. I know when I graduated from high school I was completely unprepared to make a budget, plan for expenses or save money.

👤 jdietrich
Touch typing has a staggeringly high RoI for pretty much all white-collar workers.

👤 BLKNSLVR
This may sound flippant or pushing of stereotypes, but teach these things:

The value of planning before cutting code: What exactly, precisely, unambiguously, is the desired outcome? Ask enough questions to determine whether the requester really knows what they want or whether they're fishing for self justification of their own role. Create some brilliantly frustrating examples of ambiguous requests, get your students to create a solution, then examine all the different ways they interpreted it. Demonstrate the questions to ask to get to the brass tacks.

Don't expect non-technical people to innately understand the parameters you have to work within. It's your job to explain the boundaries of your ability to create a solution. You know the "why's" of this, but the non-technical folk don't, otherwise they'd be the technical folk...

Don't take criticism personally. If you're taking it personally then you're exposing your own sensitivities about your competence. If you can't do it, ask someone for help. If the platform or tools can't get you the best solution then work towards the nearest best possible solution or change the tools / platform.

I've seen and experienced a lot of ICT angst that is entirely caused by the wrong mental approach. Nothing to do with anything remotely technical. Get that shit sorted early, and the technical stuff becomes eas(y|ier).

"First you must fill your head with knowledge. Then you can hit ice with it"

(Obviously not for the early stages as it will probably scare / bore them away. That's where scenarios or real life examples may help though)


👤 narag
I can tell you what should not be taught: pages and pages of bullet points, classifications and definitions.

There is an ocean of operative skills that probably should be included in the rest of subjects but aren't and won't in the short term.

So I would include the basics of all those and let the students decide in which of them they want to dig deeper according to their preferences. You have music, video, animation, design, programming, word processing, spreadsheets... there are YouTube videos for everything, so it really isn't hard to come with the material.

I had to read a few textbooks at the uni, but language manuals, like the TurboPascal on-screen help that included example programs (that you could copy, paste and execute right away) for most functions were the best.

Most kids love to program even the simplest video games and it's really not that difficult to do it with just JavaScript on a browser using canvas. Or maybe they prefer to create some loops with lmms, or an animation with Blender...


👤 memset
“Philosophy of science,” or, “how do we know something to be true, and what is the difference between knowing something and believing something to be true?”

I took such a philosophy course in college and it was quite informative as a way to reason about problems. It helped me with my debugging, to move from “x is the problem” to “I believe x is the problem, and here is why I believe this causal relationship exists.”

I think this is what most of us call “critical reasoning” skills, or “how to think.” But this particular line of causality, and analyzing the strongest statement one could make based on a set of premises, is a skill that has served me well as an engineer.


👤 cgrealy
Basic cyber security. Good password practice, be wary of unknown links, use 2fa where you can, etc.

Hopefully, that will also encourage a skeptical mindset which helps in other areas of life (religion, politics, pseudoscience, “alternative” medicine, etc).


👤 pimmen
Replace most of the calculus classes with statistics.

Most people who take calculus in high school will never, ever, do a derivative or integral in their life, nor will they use their understanding of calculus to unlock more mathematical topics.

Most people who never, ever, take a statistics class will get statistical concepts and problems hurled at them from every conceivable angle in both their professional and personal lives. Since I know statistics and math, I enjoy a great deal of trust from people when it comes to the data science work I do, more so than if I were to enter a discussion around building software with non-programmers. And I know this is not because I'm a genius, it's because people don't feel like they know enough about statistics to challenge my claims, even though they will make decisions based on what I tell them. And then we have the people who don't know statistics, but think they do, and start inferring all types of causations based on some insignificant patterns they've found.

If we want more informed voters, managers, employees, politicians, consumers and decision makers in general I cannot overstate how important it is to understand that there is such a thing as different distributions, that you can estimate them, how variance actually works and what "significant" actually means. At least relative to taking the derivative of a third degree polynomial.


👤 smabie
I find a lot of people, even developers, have no idea about the history of computing. Things like where Unix came from and why our computing world looks the way it does today. Talk about mainframes, Alan Turing, ENIAC, etc. Also a discussion on the Unix way vs the Lisp way (NJ School vs MIT School) should be informative. Impress upon the students that the computing world we live in today is mostly an accident, things could have been very different: we could have all been using Lisp machines, for example.

👤 vmurthy
In addition to the great suggestions below, one of the things I would add ( this gels with the whole problem solving skills suggestion) is to introduce them to algorithms. It needn't even be in a specific language. Being able to think abstractly is one of the great powers that high schoolers should be exposed to.

👤 hysan
What vast informational resources that are available. Which can be trusted and how to verify sources.

How to use those resources to research and problem solve.

More importantly, how to problem solve (scientific method, logic, etc). Your CS background will help immensely here.

Organizational skills with an eye towards tying it to all things personal finance (the tax suggestion is at the top of my list of things I wish schools taught).

How to take the information you've researched and organized and present it well. Improve their public speaking and maybe throw in a bit about how to present oneself professionally.


👤 tropo
College professors have noticed a rapid increase in the portion of students who are clueless about filesystems. This may be because troubleshooting a PC is mostly a thing of the past; today it is common to experience computing mainly as phone apps and Google documents.

Teach about switching directories, having a current directory, using relative paths, using absolute paths, and having a home directory. Teach this via both GUI and CLI, getting students comfortable with the fact that they represent the same thing. If applicable to your OS, also teach about drive letters and the current drive. It's best to teach with multiple file managers and multiple CLI interfaces, possibly taking advantage of Windows Subsystem for Linux (WSL) on Windows 10 and/or a virtual machine. BTW, those are good to learn about too.

Teach about file archives. Many students today are left helpless if an archive isn't automatically handled. Teach about how pure archive formats (tar cpio pax), filesystem images (iso), compression formats (gz bz2), and combined archive/compression formats (zip arj) relate to each other.

Teach about saving files. With many apps doing this automatically now, people can hit disaster when they encounter one that doesn't. Teach about the different places that files can end up when saved, and about why this matters. It is now easy to be unaware that copies of a file might or might not exist in various places, both local and remote. This has implications for privacy, disk usage, network connectivity needs, and recoverability in the event of hardware failure.


👤 itsmejeff
This Freakonomics episode about what’s missing from the standard math curriculum is really good http://freakonomics.com/podcast/math-curriculum/

👤 BuckRogers
Another vote for heavy focus on SQL. It sets the stage for so much and covers bases that may not be covered very well down the road. It's a skill that won't be going away unlike so many programming trends. It'll serve all of your students well, no matter what field they choose, and empowers them. SQLLite would be great and easy for them to use.

When I was in school, we focused on touch-typing and BASIC. I think touch-typing and SQL are must-haves with large return on investment, and then moving onto some programming.

For programming, I'd personally teach what I know best, which is C#. Whatever you choose there, I'd set them up as the language is used in the real world, full tooling chain so if they want to do more on their own at home in the summer, you've fully enabled them.

Generally speaking, by high school I'd like to see schools no longer teaching subjects at all. Leaving that to elementary and junior high. High school should be reserved to hammer into kids on how to filter out unsubstantiated information, critical thinking skills and essentially the medieval trivium. In the information age, we don't really need to teach subjects as we have the internet. The challenge now and going forward is working through all of it in an effective way.


👤 1234_555_2121
Can't help myself, since I was today deeply disappointed to find out my son's expensive private school didn't reward him for developing (with my help) an electromechanical solution to an ostensibly mechanical STEM contest. A solution that was well within the rules but not thought of by anyone else.

What pre-college and high school kids should be taught:

1. School is nothing like the real world. The real world rewards innovation.

2. The conformal tyranny of the mediocre exists only in schools (and, to a degree, in large orgs) and will not impede you in the real world. Ignore it or fight it.

3. There are no grades in the real world, only degrees of success.

4. The only meaningful outside validation is your reward for your hard work. Not just money, as success can be measured otherwise, but reward.

5. There are no rewards for following the rules, being agreeable or staying with the herd. In this sense, school will be more damaging than helpful. School is something you'll have to get through and then undo.

6. The amount of money spent on school or the school's reputation doesn't alleviate these fundamental issues.

How the F can you have a STEM contest that doesn't reward the most innovative solution? What kind of lesson is that teaching.


👤 honksillet
I went to a pretty well regarded private high school in California. As a lark, in 12th grade I took a “computer course”. It ended up being a very basic CS course in pascal, which even 20 years ago was fading out. It really opened my eyes.

My recommendation is teach a remedial CS 101 course. Variables, loops, etc. there USA good chance the students won’t have been exposed to anything similar.


👤 ggm
Abstraction and Refinement. Recursion is a stretch goal but if you're going to the maths, you need to do this.

Formalisms in logic matter a lot. Early grounding helps. "or" has colloquial meaning but specific intent in an expression. So things like operator-order-precedence become important, which stem from maths/arithmetic understanding of intent in an expression.

If people learned the distinction between functional and imperative, early, its possible we could all be uplifted to the FP future we need to be in. I'm a victim of coming into this late, with inability to grok onto some key concepts.

I find most competent ICT people touch type, with some near accuracy. Its not that hunt-and-peck won't work, but if you can acquire the muscle memory to write your mind without having to look at your fingers, things get better.

ICT is like music. Learning to play the violin is tedious and painful. But the outcome is worth it.

Once you are infected by the meme of recursion, life takes on a new meaning. No Pooh, thats not honey, thats...


👤 qwerty456127
Finding videos to learn from on YouTube. Everything (including how to discover and use other kinds of resources) is taught the best way there already. Chances to find a teacher able to explain the things better than people do on YouTube are negligible.

The whole job a school is to do nowadays is to motivate, answer specific questions and connect young people.

I really don't understand why are kids supposed to waste time with mediocre teachers (provided they even manage to get into a tolerable school, many have not a chance given where they live and how much do their parents earn) when there are great educators lecturing for everybody online. The problem, however, is many don't even know they can find great educational content on YouTube so they only use it to watch the stupid stuff.


👤 zepearl
Whatever you end up teaching, try to motivate them by basing your classes on interesting usecases (for both you & and your students).

For example let them try to break server-SW (by e.g. allowing the input of a value higher than 254 when the server uses uint8), make them debug the training values of an interesting backpropagation neural network (e.g. little red riding hood inputs related to the Wolf) when a single training set does not comply to the rest, give them a garbled and/or partially conflicting and/or partially wrong (from the point of view of continuity and future stability of the business) "business requirement" and let them decide if to come to you to ask for clarifications, etc... . It could be cool :)


👤 lovasoa
Here are a few points I think should be taught in high school :

- What a file and a file system are

- How text, image, video, sound and other kind of data is encoded and stored on computers

- What a database is, and how is real-world information modeled and structured inside a database

- What a network protocol is.

- What HTTP and HTTPS are in particular.

- What the web is.

- What a web browser is and what are the principles behind how it works.

- What encryption is and what are the broad mathematical principles behind it.

- What a computer program and an operating system are, and how they work.

- What a programming language is.

- What machine learning is, what it can and cannot do (not sure about this one...)

I having a firm grasp of these concepts would allow pupils to understand better the world they live in, give them better opportunities later, and make them more immune to modern-day hucksters.


👤 imdsm
Not entirely ICT but I wish my school taught me:

- Engineering

- Flight dynamics

- Systems theory

- Useful mathematics

- How to lift heavy items properly

- How to make a cup of tea properly

- Sword fighting

But to be more on topic, I think ICT was completely off the mark in high school 01-06 in the UK, it focused on Microsoft Office suite and, well, that was about it.


👤 Straw
How to recognize misleading information and tactics in advertising, statistics, claims of all kinds.

So much hype in the area, and people don't have the training to cut through it. For example, the rocket.ai experiment.


👤 hackermailman
There is already free course materials https://www.bootstrapworld.org and no access to a computer needed, which is usually impossible for schools to spend money on/have decent internet. Bootstrap does things like secretly teach calculus when students have to keep track of events in a game, and it's backed by statistical research so has proven results instead of just winging it and discovering your curriculum has failed half the students.

Brian Kernighan also has a book https://press.princeton.edu/books/hardcover/9780691176543/un... which covers all modern communications tech from the ground up he teaches at Princeton in a class that any highschool kid could follow but then you'd need to buy the books, unless you can work out some kind of educator's deal with Princeton to hand out copies.

Edit: this is what the course looks like https://www.cs.princeton.edu/courses/archive/fall18/cos109/ and if you want a book sample see the library genesis pdf, it's probably exactly what you're looking for just not nearly as rigorous as Bootstrap curriculum.


👤 motohagiography
Start with the question, what are we educating them to become? I'm more on the side of recognizing daily problems in terms of general information theory concepts. Sorting, Bayesian probabilities, graphs, abstraction, iteration and recursion, data visualization examples and techniques, logical reasoning (conditionals, contrapositive case, LSAT level stuff), privacy & security, and then maybe to write some basic functional programs to solve real world problems using a social network graph.

👤 clashmeifyoucan
I just finished high school this year so I do have a few opinions. Our CS course was outdated, we learnt Turbo C++ ffs and I had a hard time doing that since I personally use the standard C++ or Python for all my projects.

Logical thinking is a very underrated skill in school. Not just in CS but also in other subjects like Math. If the syllabus were structured such that the student got more autonomy as well as a need to learn how to Google stuff on their own, I feel that would make for a kickass CS class.


👤 yummypaint
Rather than suggest topics, I wanted to push project based learning as a way to teach the curriculum. Most work in the "real world" tends to be closer to projects than problem sets. Almost everything of value i got from high school was associated with getting engrossed in class projects. You dont have to define things to be hyper focused, for example i got a ton of experience with CAD modeling from an english project. This pedagogy pairs very well with teaching engineerin.

👤 probinso
I think that you have a decision to make. you can either teach computer science for computer scientists or computer science for everyone else.

If you want to teach computer science for computer scientists then do a fundamentals course that touches on technologies you find interesting. This will include algorithms, you would not be restricted on your choice of language to what is used in industry, this may include simple websites, this may include calculators and bookkeeping. I really like Ada and scheme as introductory languages for computer scientists. Text based adventure games are a very good way to teach computer science fundamentals.

The other option is designing a year-long curriculum for community impact through technology. Have students design a project that will take them through the year. this project should be sourced from their community and based on community benefit as a goal. Teach only using simple languages and conform to frameworks that will most easily leverage you towards them releasing a product by the end of the year. Don't focus on it being pretty, just focus on it being functional. This will likely be a stack of python and JavaScript and SQL oh, but there are good arguments for a lot of other types of stacks.

One of my favorite problems that overlaps these two topics is having students write a search engine. Search engines can become arbitrarily difficult, but in their simplest form or very easy.search engines usually have some data structure and text parsing and user experience sections to it that can help provide a framework for future projects that are more complicated


👤 josiahpeters
Networking fundamentals.

I was very blessed to take a two year Cisco CCNA prep class in highschool. I learned about the seven layers of the OSI model, subnets, routing, dns, and all sorts of practical things. These networking concepts have helped me out significantly when creating distributed microservices in a self service cloud hosted SaaS startup.

Watching my peers have to play catch up, helps me understand how valuable those classes were. I wish I would have paid more attention in them.


👤 mullikine
I would love to be in your position -- must be exciting.

I think its important to communicate a high level overview of subtopics in computer science, where they came from and where they are going.

Give them a lot to think about and get them excited and they will learn on their own.

Allow them to research some area and get back to you and grade on the amount of effort in their self study.

Important topics:

- cryptography

  ciphers in ancient warfare -> blockchain
- programming

  binary -> python -> functional/query/declarative programming

  Teach advanced google search syntax, SQL maybe and a scripting language such as javascript or python and regex for advanced students.

  Lots of room for filling the course with practical stuff.
- AI

  Get the computer to think for us so we don't have to, like getting the student to learn on their own so you dont have to.

  I would put something about AI in each section.

  - Cryptography
    AI's objective is to find models and patterns (i.e. disclose secrets).
    Cryptography creates secrets, defines new structure.
  - Programming
    Ultimately NLP encapsulates formal programming since a language model's objective is to discover a language inside some data. That is where it's headed in the near future.

👤 enhdless
As a college student from a high school that had multiple classes related to Java/infotech - I think this is a case where you definitely want to cover breadth over depth. In high school everyone has different skills and interests. Some will already be set on CS while others are have the mindset like "anything related to the word tech is scary and I won't be able to do it." In general I think catering to this diversity will be the most difficult part.

- Learning to make a barebones HTML/CSS webpage would be super relevant (and in conjunction, learn about how web browsers work).

- Someone in this thread mentioned file systems, and this may seem basic to the HN crowd but I agree - right now in college I'm teaching an intro web design course and I was surprised to find that the most common hurdle is probably filepaths!

- For teaching CS/programming related things, definitely do it in a way that makes it applicable to anyone - for example, basic "data science" projects like using Python to read/process spreadsheets of data could be used in nearly any field of study in the future, no matter what the student is interested in.

- Also, if you have the budget, I would even recommend getting a few Arduino kits to show what it's like to blink an LED! It can be a very simple demo for students who have never touched electronics, and more experienced students can try other blinking patterns or electronics components.

Generally projects like these demo something cool and practical to expose basic concepts, while having many possible avenues of enrichment for students who might be more advanced.


👤 kritr
If we were talking about a course for Computer Science.

Having recently graduated from a high school and currently pursuing my undergrad degree in CS, I think I might be able to offer some degree of insight into pain points people generally faced when starting their college CS degree, and how well high school prepared them for that.

Most of my peers have taken an Intro to CS-A class, which basically went into the AP Java curriculum.

A lot of the struggles I've seen people have when entering CS is struggle in setting up their environments, understanding how the software pieces fit together, and also having the know how to explore beyond the basic coding concepts and actually being able to apply what they've learned to work on a project.

I think a lot of high school Intro to CS classes focus on high level coding concepts (loops / classes / etc) and then some very basic algorithms.

I think actually setting up an environment from scratch (beyond just a basic IDE), like introducing students to the terminal and teaching them how to get around, and then teaching them how to install the software they need to start programming would be incredibly valuable.

For a general information technology class, I think having the history of computing would be nice. Potentially it covers foundations of being able to understand what is a computer device, what sort of things can it do, (load store memory, perform operations, and interface with other items). Then also going over how the internet and other computer concepts work from a high level. And maybe towards the end provide more insight into new computing ideas that are being developed (VR/AI/etc).


👤 ilaksh
A few ideas:

* assuming they have computers with the internet, you may try to integrate some online self-paced web-based interactive training. This will leverage massive existing efforts.

* ideally there could be multiple tracks/programs in the same class for people at different levels or interests. this is much more practical if you have some way to do self-paced learning

* you might include something like Slack or Discord or some online site briefly. unless this category is something kids are already experts on

* spreadsheets and word processing seem very important and maybe are the mandatory part you try to get everyone through

* programming, AI and/or robotics would be nice to include some self-paced exercises for an advanced optional track. Again, lots of websites for this stuff.

* Many kids are interested in streaming. "How to get started on Twitch"

* "How to Google" https://www.google.com/amp/s/amp.businessinsider.com/how-to-...

* 3D modeling, basic video editing, Adobe stuff (websites/Blender)

I guess my answer is, ideally, Everything, self-paced or maybe small-group-paced. Maybe hard to do that, but I think if they are allowed to self-direct to some extent and have different options then they will get much more out of it. Maybe everyone does WP/spreadsheets or whatever basic stuff and then they have to pick a secondary track once they get through that.


👤 dlkf
It's awesome that you're doing this. The inclusion of more people with a CS background in education (and public service more generally) is a huge opportunity for our society.

I think Iv makes some dynamite points:

> we need but more people with a solid general culture about computing:

> What's the internet? where is the cloud? Where are data stored? How do they pass around?

> What's a computer? A smartphone? Where is data stored? Where is computing happening?

In addition, I would try and give your students a flavour for what logic and discrete math are about.

- Basic boolean logic and applications to natural language problems

- For students that are inspired by this, maybe some first order logic, or a classic puzzle or two (Hilbert's Hotel or Russell's paradox)

Finally, I would try and incorporate some applied statistics. There are so many critical statistical concepts that are introduced via calculus (and therefore lost on 90% of the class) that could be introduced in a more concrete manner and have more impact. Examples that come to mind are:

- How bell curves arise in nature

- How power-law distributions arise in language data

- How pareto distributions arise in time-to-event scenarios


👤 WhompingWindows
Some fun/gripping ideas for single-class activities:

-Google-fu: everyone needs to know how to find what they need, maybe you can challenge them to go on a google scavenger hunt and find a ton of random answers in a limited time-frame?

-Wikipedia golf: how quickly can you go from page A to page B? Least clicks wins. you can pick a topic they know about, maybe minecraft or star wars or something popular, and then pick an interesting article you might want them to check out, like the Dot Com bubble or Y2K or the google AI bots vs. video games?

-Data analysis: pick your data, could be sports or YT views or retweets, or even from surveys in the class; then teach them R or Python to make some charts/visualizations of their favorite data.

-Video games: no beating around the bush here, kids love games, mobile and desktop and console. How can you harness that passion and transfer it into Info and Comm tech? -Online posting/trolling: there should be a class period where you look at online bullying, what are the repercussions, this could hit home for many kids.

Good luck, sounds fun!


👤 taintur
In that grade level I would've liked a course which would dissolve the "magic" behind computers and other technology, akin to the nand2tetris course (https://www.nand2tetris.org/). The topic could be anything, though, such as websites, wireless communications or online advertising.

Scripting or macros would also be immensely useful for anybody nowadays. Computers should be making everyone's lives easier. A nice example of this would be the Automate the Boring Stuff with Python (https://automatetheboringstuff.com/). It would also be a more meaningful introduction to programming than learning how to program the hangman game.

These two examples might be a bit difficult for all of the students of that age, but I'm sure that at least some inspiration could be drawn from them.


👤 gigatexal
The basics: math, history, English, Writing, another language as well as an elective (there’s a whole world out there outside of the USA and knowing another language and learning about other cultures makes for more well rounded empathetic people), music also as an elective. In addition to the previous topics high school students should be taught how to budget their money, basic investments, what goes into buying a home, and what options exist for higher education. So if they choose to go to college explain how it works (I was a first generation college graduate and spent a lot of time and wasted a lot of money just taking random courses I liked instead of focusing on my major and graduating), or if they choose, after being told it’s an option, about trade schools and professions like becoming an expert electrician or a plumber or carpenter etc they can then weigh the costs of both avenues and decide for themselves.

👤 kd5bjo
I’d lean towards practically-useful skills that computers can help with:

— Collaboration tools: how to effectively use shared spreadsheets, documents, and online communication to organize a large project

— Spaced repetition to aid memory

— Organizing / cataloguing personal collections

— Learning how to do something new from online resources (finding and applying video or written tutorials)


👤 q-base
It is probably a stretch to keep it within "Information and Communications Technology" but when I think about what should be taught and is not, then I cannot help but think "tools"/mindsets on how to be and act in the fast paced world we have today.

Tying it somewhat to your subject I would probably teach students that if something is free, then you are the product. Teach them about dark patterns to counter and be aware when someone is trying to manipulate them. Teach them about the "attention-/click- economy". Things they can use outside of the classroom or professional career. Things that help them in all facets of life.

I would also be a strong proponent of "practical philosophy" for lack of better name. Learn how to think, how to spot when others are trying to manipulate you, learn that nothing is free, etc. etc. etc.


👤 davismwfl
My son graduated a couple years ago from a larger high school but they had a IT & Robotics program he attended that was really good. While you probably won't have as much freedom as they did when developing that specific program you might be able to get some ideas from them. The teachers and admins involved are really good people and I am sure if you reached out they would gladly send you some details. You can find some info for them here: http://www.creekaitr.com/ There is contact (email etc) on that page which would get you directly to the right people.

Good luck, I think this is awesome. I would also echo teaching a real spreadsheet class would be an awesome idea as there is so many issues you can solve using spreadsheets.


👤 jimhefferon
I'm a college professor who teaches the courses in the border between math and computing. Lots of good suggestions here about subjects. I have a methodology suggestion. Try to do active learning as much as you can. (You can look at the MAA's recent book for a good state of the art summary.)

👤 reilly3000
SQL is surprisingly easy to teach to young people. Give them a simple table with info that's relevant to them, and help them discover how to filter and aggregate. I think that is more valuable for people to understand and have in hand than statistics; its a gateway drug to analytical thinking.

👤 inate77
When I was in high school 92-96 I had taken 4 yrs of CAD/CAM/CNC. At that time we were already more advance than the community college next door. In 96 after graduating high school I had decided to go to DeVry Institute of Technology. I was shocked to see that they were still using windows 3.0. Testing out was not an option at that time, but I couldn't see waisting money on something that I was already far beyond in regards in to current OS at the time. I think it's very important that if schools are gonna teach tech that it be with what is current as times are quickly changing. I would like to see more stuff being doing with 3D printing and lasers, app creation, website building, and possibly game developing.

👤 uberman
This looks like a good resource to start with:

https://www.csd.cs.cmu.edu/news/carnegie-mellon-launches-hig...


👤 fg6hr
Distributed systems and ML, I would say. This is if you want to land a solid job, assuming you have the right mindset. Some mentioned here video games, but that industry is far from lucrative. There are a lot of interesting things to learn in CS, but very few of them will make you money. P.S. Math proofs. Learning what it takes to prove a moderately complex theorem makes a far bigger impact than learning how to program a video game engine. Math teaches how to build highly complex, but reliable, imaginary structures from nothing, by introducing axioms and building up on them using logic - a skill that distinguishes good software engineers from mediocre ones.

👤 throwaway6734
Checkout Mindstorms by Seymour Papert for some inspiration

http://worrydream.com/refs/Papert%20-%20Mindstorms%201st%20e...


👤 JaDogg
How to use a search engine. Looking for file types, searching stuff in single site, ...

👤 peterwwillis
How computer programs work in operating systems. What is I/O, virtual memory, how does a filesystem work, what are software libraries, system calls, IPC, TCP/IP, authentication and authorization, how do kernel drivers work, how do programs and operating systems store settings, etc. Later, how web applications, smartphone apps, databases, encryption work.

The purpose is to be able to reason about how computers work in general. It's similar to teaching people how cars or plumbing works; they may not be able to build it, but they could conceivably troubleshoot and attempt to repair it, and it makes tech jobs easier.


👤 madhadron
This might seem a strange recommendation, but...

Excel and then VBA macros for Excel, or the equivalent in LibreOffice. Use it to do some useful things. Make a budget, calculate the three basic financial statements, simulate some basic processes like exponential growth and predator/prey. Then VBA to do some basic iterating over strings and other similar things. Write a little text mode adventure game. You could even use Word for that and have it print the transcript as you go along.

Then the basics of networking. Set up a little LAN, difference between router and switch, get Bonjour/ZeroConf working across some number of hops.



👤 zoom6628
Meditation should be mandatory class. Benficial to health, education, sports and state of mind in all endeavours. It's almost the universal 'tool' that every child should have to apply to any situation.

👤 ch47a
Propaganda Analysis! This was very important in my debate years in school. It continues to be important! See: https://psychologydictionary.org/propaganda-analysis/ https://web.stanford.edu/class/e297c/war_peace/media/hpropag...

👤 stjohnswarts
I suggest looking at what is expected on the AP Computer Science test. I personally feel that something like programming python in a jupyter notebook is a good free open source place to start for programming. Teach students how to properly use search in google and duckduckgo. Introduce them to linux on a virtual machine. Have a section on how important security and privacy are to get them thinking about it. You also didn't mention how many credits this would be 1 class or 3 classes makes a big difference.

👤 namelosw
High-level interpreted languages that are not strongly coupled with the computer itself, eg: Scheme. Python is also very good but the control flow and statements leak something under the abstraction layer.

The goal is to teach how to thinking in computation (not computer) and be able to finish common tasks as excel and SQL can do. And also be able to write a small website if the students want to take a quick look at the documentation.

Anything associated more with current 'Von Neumann' computers (eg: C) should be taught to CS students.


👤 tmaly
Scratch is a great way to start teaching computational thought.

The visual nature of sprites on a stage with code blocks helps to bridge the abstraction beginners face.

The ability to open up many well made clone games and explore the code is one of my favorite features of the platform.

Since version 3 launched last year, there have been a whole host of extensions like Lego, micro:bit, google translate, aws text to speech, and a few more.

I have been working on a course for younger elementary kids, but there is plenty there for older kids in high school.


👤 balabaster
Computer security... I don't know how feasible this is, but it sure would've inspired me a lot more at high school than the curriculum we had. As a student, I want inspiration, I want magic. I want to feel excitement and to feel alive. I want something that draws me in and lights me up.

Set up two sets of computers in your computer lab as separate networks. Divide your class into two teams. One team are the security administrators for one network. The other for the other network.

Teach your class about hacking techniques to bypass the security of each other's networks. Teach them also the techniques used to lock down their networks and analyze intrusions/attempts to prevent further hacks.

Give them access to resources to learn about defense and offense in a safe closed environment.

End of year assignment - capture the flag. Teach them about information security warfare. Make it a game, a competition and pit them against each other.

In today's technology environment, information warfare is prevalent and it will only become more so as time goes on. These skills will become more and more important across all aspects of ICT, from systems and network administration to DevOps to back end systems and public web development. There is no aspect of today's I.T. environment where security is not of critical importance.

The biggest thing you can do to inspire the developers of tomorrow is find a way to inspire fascination with computers. Kids, teenagers, hell, most adults want some magic in their lives.

Find a way to make it magic. Teach them about some of the greatest hacks of all time, what inspired them, how they were achieved, what happened to the perpetrator, whether history showed them to be on the right or wrong side of both the law and morality. Teach them about hacker mentality, black hat and white hat. From Mitnick to McKinnon, Schwartz and Snowden, their motivations, the results and the repercussions of their actions.

My feeling is that the greatest role (and admittedly this is only my opinion and it doesn't mean a lot given my one semester of teaching 25 years ago) you can provide as a high school teacher isn't necessarily the technical detail you provide, but the magic that will inspire the student to take their learning at their own initiative and thrive on their own.


👤 sunw
Learning techniques (the popular “Learning How To Learn” online course is a great general curriculum for this) and understanding/recognizing logical fallacies.

👤 abecedarius
https://programbydesign.org/ seems like a good place to start looking.

👤 neysofu
How to pay taxes! I recently graduated and I have no idea whatsoever of what I'm doing. I'm starting to suspect most people don't.

👤 sifar
Some of these overlap with what others have suggested.

0a) Build a simple video game.

0b) Implement a simple encryption scheme (eg. ROT) to exchange messages.

1) History of computing. Not just the superficial but how it was, how we got here. Turing's ACE & Neumanns EDVAC report.

2) Interest rate computation. Modeling loans.

3) Forth programming language.

4) Data privacy. How user data is tracked, manipulated and financialized.

5) How computing systems are insecure and not to trust them blindly.


👤 mtreis86
What is actually going on in the world. I am very grateful my tech teacher in high school always started class with ten minutes of discussion about current events. Some of the time he would bring in a newspaper and for a headline, other times he had some other idea in mind. Much of the discussion was about our thoughts on the subject though, not just a recounting of the events.

👤 crawfordcomeaux
Applied Category Theory and how to apply it in daily life. Science of Spirituality. Advanced Mediation Techniques. Advanced Meditation Techniques. Well-being. Mindfulness. Learning how to learn. Science of Culture Hacking. Defense against the dark arts of cultural programming. Uncertainty logics. Comedic improvisation. Problem-solving improvisation. Musical improvisation.

👤 kexx
-how to be an educated consumer -how to buy/sell house/car, other basic contracts and understanding them (nda, work contract, t&c) -sexual education without any moral bs, just facts -how to recognizing symptoms of common diseases -basic civics and legal training -read a book, see a painting, tell me your opinion about it, instead learn what scolars think

👤 Jemm
Teach your students the relevance of things, rather than making them memorize.

For instance, so many technical courses start with a history of the people who shaped the field and whose name is on the laws and principle. This is boring beyond words and loses most students right away. Instead teach in a way that allows the students to discover the rules and principle through example.


👤 nestorherre
Give or Take some stuff mentioned in here: https://notes-txt.com/curriculum.html

To sum it up: soft skills, social skills, leadership skills, meta-skills and abilities to help you deal with life.

While these aren't related to IT, they help you in any knowledge area (including and not limited to IT).


👤 i_am_viet
Philosophy. Specifically logic. Have to build a strong foundation in the basics before considering going into the more modern materials.

👤 tempguy9999
I don't know if this is what you're asking but I'll reply from a different perspective, as many here are giving excellent technical responses.

Tech of any sort is a tool, just like a hammer or screwdriver, but more complex. It is only a tool.

A tool's value is in it's use, not its existence. Having the very latest high-end computer or flattest laptop is worthless unless you use it (then watch 95% of them ignore it, because Teh Shiny!).

The collection/distribution of data is power. That power may be benign but usually isn't... Teach them to understand how it can be misused (in fact tell them to imagine they were head of FB and ask them to abuse user's data) so they have some idea of when that misuse involves them. They can then maybe evaluate the worth of social media a bit better (not to put any of them off social media, just give them better understanding so they can suss the cost/benefit).

Tech as a tool has consequences. There are ethical implications in developing software/hardware for eg. use by oppressive governments. You can't make their moral decisions, nor should you, but you can tell them they must consider the consequences before accepting work[0]

Tech's sophistication, both in use (browsing the web) or its creation (programming is a wonderfully constructive activity) can be addictive. Don't let it destroy your social life. Also if you're having a less-than-delightful childhood/life, it can become an escape (but not a good one. Experience talking here).

The creation of an internally beautiful program gives no indication of its worth to the world. Therefore teach them to make business decisions before starting to do the technical stuff - is it intended to be of worth just to them? OK, it's a bit of fun. Is it intended to be open source and "blow people away"? Make sure there's a need for it or they're wasting their time[1]

Basically, teach them the wider context.

IMO, YMMV, etc.

[0] as someone will inevitably challenge me on this, yes I do before accepting work.

[1] I nearly got involved in some open source, then saw it being worked and reworked at one person's whim. It was never going to succeed. I wasted a lot of my time doing something that I later realised was not of use to anyone. That was months utterly lost and nothing to show for it.


👤 ianai
There are lots of free tutorials, documentation, and even full courses out there. I’d probably take some of the ideas here and research the resources available to learn them.

It’s been pointed out to me that touch typing isn’t as broadly known as I thought it was. If your kids haven’t by grade 9, I’d set up a touch typing course. Complete with unlabeled keyboards and all.


👤 mrburton
Software Development - Especially in the inner city.

I really wish there was a way for engineers to help public schools educate students in software development. Years ago, I offered to teach a class at my old high school, and even _tried_ to donate $5,000 to help fund it. Not only was it rejected, but the people working there seem not to care.

This was a school in North Philadelphia.


👤 bostik
Critical thinking and media literacy.

It's become painfully clear that information and communications technology, is used - to a disturbing degree - to facilitate propaganda. If the issue matters at all, there are well funded parties[ß] doing everything they can to astroturf, sockpuppet and drown out all viewpoints other than their own.

ß: some even outright political ones


👤 k_sze
How about giving the students a quiz first, one that doesn't count towards the students' grades, just to see where they stand in terms of CS/IT knowledge? You don't want to be developing a syllabus, only to realize that it's either much too hard or much too easy.

I call it ... Test Driven Syllabus Development. #badumtss


👤 nyxtom
Mix Khan Academy, Project based learning, teams, UX (about face), agile, and marketable skills (python, java, html, css, JavaScript for example), and include a competitive program like AP.

To this day I had a high school computer science teacher that did these things (minus khan academy) about 15 years ago and it had a tremendous impact on me.


👤 atmosx
Can you teach how to approach, breakdown and learn a subject? Can you teach them to take available data into consideration instead of accepting whatever the “source of truth” will spoon feed them? Can you teach them to appreciate truth instead of “being right”? Can you teach the to make a point without making an enemy?

👤 pabs3
There was another thread today about how the UK is making computing a foundational part of their education system, like math or biology, it might be interesting for you.

https://news.ycombinator.com/item?id=21657681


👤 drngdds
Basic CS/programming. I would have loved to have the opportunity to take something in high school comparable your average CS 101 class (and stretched out over two semesters for sanity purposes.)

I would have gotten much more out of that than something more general or less technical.


👤 threatofrain
As a unit, students should learn the lay of the land (market niches, institutional pathways, career expectations) and what kinds of technical skills are expected of the pathway, especially in terms of future course requirements.

👤 thelittleone
The one thing missing from all curriculums is how operate in political environments without losing yourself. Whilst not a technical skill, knowing how to navigate this aspect of work allows for more sustainable productivity.

👤 cjg
Shoot and edit a video and upload it to YouTube could bring in a number of skills.

👤 adrianN
How to self evaluate whether you live in a filter bubble, and what shape your bubble has. How to consume information from outside your filter bubble. How to find primary sources for claims and critically evaluate them.

👤 vladmk
How to do your own projects that you enjoy. This is how people fall in love with software and make huge progress. I fee textbooks when not used properly scare kids away making them think they're unintelligent.

👤 kilroy_jones
I've been a CS and ICT teacher at the high school level for over a decade now. It really depends if this is an elective course or not.

I'd be more than happy to share experience and materials. Email is in my profile.


👤 andreskytt
How to find and evaluate information (which will help with things like filing taxes). Systems thinking along the lines of clexchange.com that will help integrate things and comes in very handy in software dev

👤 imvetri
Schools/colleges are bad. They are just a cattle that rears young brain for business growth.

Food cloth shelter is the basic necessities. Everything else is another man's trickery to put you in trouble.


👤 sn9

👤 scythe
Many people mentioned spreadsheets, but usually Excel -- consider Google Sheets or some other free app since most people don't need to pay for Excel for what they'll be doing.

👤 Tepix
Perhaps latency of different types of computer storage

i.e. an updated version of https://imgur.com/k0t1e


👤 NiloCK
Blanket thanks to everyone who responded. It'll be May or June before I have any certainty on this, and September before I get to work. I'll post an update :)

👤 andydavieswork
How to build a very simple web app, using Spring Boot, React, a Redis Cluster, with a scalable microservices AWS Lambda-based back-end architecture. And kubernetes.

👤 thefabs
I would just say, keep it practical. Explain how real life stuff works that the students are already using, such as apps on an iPhone or streaming on Netflix.

👤 lazyjones
- seeking help from other people

- understanding other people's solutions

- optimizing for less complexity and more clarity

- differences between academic/nonprofessional and professional environments


👤 Madmallard
100% social skills and assertiveness. Everyone should be helped to a level playing field there as much as possible and as soon as possible.

👤 sesuximo
you might just offer to help with/review student projects. I think some young would-be engineers have ideas but don't know how to make them happen. you won't have as big an audience as a class, but you'll get motivated people.

I think teaching basic CS topics in a classroom is very tough since the students are rarely on the same level no matter how early you start.


👤 watertom
Formal logic and reasoning.

Probably the best thing you could teach any student. Of course it’s applicable to CS, but it’s also applicable to life.


👤 werber
I would listen to what they want to build and cater the curriculum to that. Make it democratic and cutting edge and personalized.

👤 fredgrott
How to research, mainly how do we use logic and reasoning to decipher information into buckets of facts, opinions and garbage?

👤 Yhippa
If you have to teach programming I would consider focusing on a 3GL (like BASIC) instead of a 4GL (like Java).

👤 Tycho
Regex SQL Excel HTML

I think those things are very practically useful and good starting points to introduce deeper topics.


👤 ssss11
Basic finances to manage your life.

👤 madiathomas
- Basic IT Security - How to research online - PC Assembling - Installing Operating Systems

👤 badrabbit
Critical thinking as well as private and secure usage of the internet and smart devices.

👤 allard
How to write a good help desk ticket. (preferably a few grades before high school)

👤 silverreads
how to store info, how to document info, how to use info.

basic datatypes in common languages and databases, document webs structures (the web, wikis, helpdesk knowledgebases, hypercard), basic macros in common desktop tools.


👤 RickJWagner
Financial skills!

Without a doubt, schools should teach how to avoid debt and how to accumulate and invest wealth.

This information is so vital. If people use money wisely, their lives can be so much better and they can be so much more productive. I'm mystified it's not part of the educational core.


👤 jriley
Some of Mike Myers A+ videos would have helped me in high school.

👤 stevefan1999
Lambda calculus. This is the precursor to functional programming.

👤 wly_cdgr
Math. Anything math that you can frame as being relevant.

👤 antipaul
History of AI, for perspective.

CS + Liberal Arts is a powerful combination


👤 algaeontoast
Statistics and solid math / logic fundamentals.

👤 cvaidya1986
Deep Learning. iOS and or Android app development. Design principles. Finance and risk analysis. Ideation to launching an app and iterating on user feedback.

👤 arminiusreturns
Please teach about the origins of computing as we know it today, with special emphasis on the free software movement and the four freedoms of computing.

👤 ozim
I was from more of a "heavy programming" and "get into the maths" guy in my 20's. Now in my 30's I am more get to know philosophy, get to know humans or humanistic stuff. Software devs, should really get to know Platonism and how it is not applicable to real life to stop searching for those perfect abstractions in code....

Second part is Intellectal Property rights, contracts. Non compete agreements so no one signs those shitty agrrements.


👤 caiobegotti
Ethics.

👤 iyw
Drivers Education

Financial Security

Gun Education

Basic Cooking

Basic Electronics

Basic Wood and Metal working


👤 n8henry
How innovation occurs

👤 bananamerica
Philosophical logic.

👤 julienreszka
Teach them TDD.

👤 japhyr
Are you free to create an entire program, or just a course? The way I'm reading it, I think you're able to create an entire program. If you have decent technical support, that's an amazing opportunity.

I was looking at starting a CS program in my local high school, but I never got the chance because someone else had tenure and just lingered for years. But I spent a fair bit of time thinking this through. I'd consider two main audiences: students who already know they want to go into a tech-focused field, and everyone else. I'd make a pipeline for the first audience that brings them to a relatively high degree of competency in programming, without trying to replicate what they're going to see in college. Offer a foundation course that gives them the basics of programming, just like they'd get from reading a good intro book. Include a large number of mini-projects so they're using things as they're learning, and a bigger capstone project. Then offer classes focused on intermediate concepts. Then some project-focused classes - game development, data viz, web apps, etc. Offer some non-programming classes, such as a database class.

For students who don't already know they want to go into technical fields but are curious, offer a softer intro to programming. The goal with this class is to understand how code works, but not to become a programmer. Pull the veil back from how things like Twitter and FB and Instagram are built and maintained. Use some variables, use some lists/ arrays, use some dicts/mappings. Students who like this and want to do more would switch over to the more tech-focused track; students who don't want to go further should be able to do well in this class without demonstrating programming profiency. They need to be able to explain core concepts, but not necessarily implement solutions in code. They would leave the class better able to collaborate with technical co-workers in future jobs, and better able to critically assess the impact of tech products on their lives.

Overall, it would be really good to set up some kind of structure that lets students who love this work be able to work as fast as they want to learn. For students who learn independently, letting them progress faster than you're teaching a class is something most of us here at HN have appreciated when teachers offer, and have wished for when they didn't.

I can imagine some really fun project showcase events, and projects set up around the school. You could support students in applying their programming skills to other academic areas: bringing scientific analysis and visualization into science and math classes; building learning tools for foreign language classes; mapping work for social studies classes; data analysis for global issues in social studies classes; algorithmically-generated art...

My email is in my profile; if any of this is interesting, feel free to reach out.


👤 mettamage
As a teacher I've noticed 3 things that deterred me from learning programming as a teenager. I already was doing it for 2 years as a hobby, but the next point of frustration just made me quit.

1. Social isolation

2. Setting up the right environment (a WAMP stack back in my day) could take me days (I had no help).

3. Understanding that if a program crashes that you're not stupid as a computer expects a 100% perfection in order to run. If you do it right 9 times but screw it up the 10th time, your program won't run if you need to type in 10 things. Teach them how to fix these mistakes and that making these mistakes is fine. When I taught at a coding school, I'd make these mistakes in front of them all the time and then fix them. Most of the time, I didn't do it on purpose.

-----

It also depends on the level you were teaching. I actually got CS in high school and it was an elective.

If you're in this scenario then teach something practical. Preferably something they will use in their personal lives. This is why I think web development is a good candidate to teach them (1) web development and (2) programming. Don't let Java or PHP be a first programming language, please. Let it be JavaScript when combined with web development (it's visual and practical, students will go the extra mile for practical).

I even think Python is a bit meh as a starter language as it is too computational, to number-y, not visual enough. JS is in principle the same, but you basically have a GUI DSL with HTML/CSS, which is why JS is a good starting place. Moreover, you have Chrome Dev Tools right built-in to it. If you let them debug early on with the Chrome debugger, they learn much faster (I did anyway, I'm shocked that my programming teachers never taught me but a fellow student did!).

Also, if you think about doing VBA, do Google AppScript from Google Sheets instead. It has a better debugger, not great though.

-----

So yea it depends on the level of the class. In all cases, I think a 50% focus on CS history/context and 50% CS would be good. That history should be split up as follows:

1) 50% Programming history

..1A) 50% Programming language ideas -- note: 50% of 1)

..1B) 50% People like Alan Turing

2) 50% What world do we live in today?

..2A) 50% See Iv his comment.

..2B) 50% Hacker Culture (Atari, Steve Jobs, a recent submission on Warez culture was on HN)

-----

Note: these are simply ideas and a rough sketch of my first thoughts. I'm not married to them, so if -- on the off chance -- you're completely aligned with my thoughts, know that I'm not fully as I'd need a week to think about stuff like this at least.


👤 dmitriid
Budgeting

👤 leowoo91
how to cook

👤 sunnyg9494
taxes

👤 donw
Both of my parents were educators, so this question is right up my alley. I will attempt to provide suggestions that are topical to "Information and Communications Technology".

You haven't specified the length of the curriculum, so I'm going to spitball a bit.

I'd strongly recommend interleaving content, as to provide multiple touchpoints on the same concept over the quarter, as opposed to the discrete "module" approach. E.g., not a "statistics module", a "logic module", a "bias module", but connecting them together to answer real-world questions on a weekly-or-so cadence.

Also, I am making a big assumption here: that the goal is to prepare students to live and work in the information age, not to teach them algorithms.

- Essentials of statistics, focusing on what these things mean in the real world, including examples of deception using statistics[1]. Don't dive into the complex math -- nothing more advanced than a square root should be necessary at this stage.

- Recognizing bias and frame (the context provided around curated information). Pretty much any news from a major news source is flagrantly biased these days, and you can look to literature and history for more subtle examples.

Would recommend looking at information from multiple sources and angles, although take care to keep discussions civil and focused on "what are the biases here?" rather than "which side do you agree with".

- An overview of what programming is and how it works. I'd recommend Python or Ruby, and focus on students building simple CLI tools to help them complete their coursework. No IDEs -- they should understand how the code works on its own. Cribbing from skeletons is fine, you are teaching to get value from automation, not to pass a Google interview. A bit of code readability would go a long way here.

- Fundamentals of formal logic, taught though number theory and some very basic algebra. Start from simple proofs involving only addition, subtraction, and sets.

- Some time spent on the scientific method and how experiments work. Replication, falsification, and p-hacking[2].

- While doing the above, sneak in a bunch of micro-writing assignments and small presentations, to help them build outward communication skills.

- Lots of opportunities to tie in economics and personal finance as well.

You can tie each week together with a theme to explore the above concepts. Maybe roll through history, and walk the path of development from "no math" to our present complex world? Also gives a good opportunity to investigate biases in historical sources, and to showcase parallel development of concepts.

Honestly, I'd be keen to help. Email in profile.

[1] https://medium.com/@hollymathnerd/how-to-defend-yourself-fro...

[2] https://www.explainxkcd.com/wiki/index.php/882:_Significant


👤 philip142au
How to deal with shitty people

👤 Nydhal
The difference between Linear vs Exponential (or non-linear more broadly).

Basic economics, Supply and Demand.

Comparative Mythology/Religion.


👤 XPKBandMaidCzun
Advise against school loans. That should go toward your first home.

Enshrine attachment and family systems as basic learning, just like speech class. Give a lay of the land in that love matters to people and family structure / relational decisions have generational implications.

Teach how it's dysfunctional to spurn and shame the concept of love and break the cycle we have in schadenfreude when courtship fails.

I wonder how not discussing this in our curriculum (some how) is already detrimental to our generation (millenium, gen z?). People spend decades of their life locked up in offices afraid to form the most valuable and meaningful connection.

In their offices, they often even mime relationships. It's amazing how we pride ourselves in intellect on the one hand, yet silently observe these obvious and eerie pseudo-relations play out, against the grain of their true intentions.

If deep down, you're secretly yearning for love, even if you pretend to be this stoic, that's not happiness. That's going against the intuition you feel but dare not say. I worry very deeply that it may lead to despair in later stages of life when there is less options, cascading internalized conflicts from the loneliness of those decades of bottled up feelings, and I want to make sure people don't suffer because of it while they could have done something about it.

How many of us (men and women) have given up on finding a partner to resolve solely to being in a career, where we have a perception of control. Well, is that someone caring for you? Is that feeling the maternal / paternal bond that you long to have?

Career by itself isn't enough to meet our needs. I wish we did something to emphasize finding a partner and valuing sincerity and dignifying the courtship process and relationship life cycle.