What would HN have the modern western high school student learn with respect to "Information and Communications Technology"?
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.
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”.
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.
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....
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.)
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.
- 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.
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.
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)
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...
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.
Hopefully, that will also encourage a skeptical mindset which helps in other areas of life (religion, politics, pseudoscience, “alternative” medicine, etc).
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.
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.
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.
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.
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.
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.
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...
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.
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 :)
- 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.
- 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.
So much hype in the area, and people don't have the training to cut through it. For example, the rocket.ai experiment.
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.
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.
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
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.
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.
- 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.
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).
* 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.
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
-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!
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.
— 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)
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.
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.
https://www.csd.cs.cmu.edu/news/carnegie-mellon-launches-hig...
http://worrydream.com/refs/Papert%20-%20Mindstorms%201st%20e...
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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
I call it ... Test Driven Syllabus Development. #badumtss
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.
I would have gotten much more out of that than something more general or less technical.
I'd be more than happy to share experience and materials. Email is in my profile.
Food cloth shelter is the basic necessities. Everything else is another man's trickery to put you in trouble.
i.e. an updated version of https://imgur.com/k0t1e
- understanding other people's solutions
- optimizing for less complexity and more clarity
- differences between academic/nonprofessional and professional environments
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.
Probably the best thing you could teach any student. Of course it’s applicable to CS, but it’s also applicable to life.
I think those things are very practically useful and good starting points to introduce deeper topics.
basic datatypes in common languages and databases, document webs structures (the web, wikis, helpdesk knowledgebases, hypercard), basic macros in common desktop tools.
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.
CS + Liberal Arts is a powerful combination
Second part is Intellectal Property rights, contracts. Non compete agreements so no one signs those shitty agrrements.
Financial Security
Gun Education
Basic Cooking
Basic Electronics
Basic Wood and Metal working
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.
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.
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
Basic economics, Supply and Demand.
Comparative Mythology/Religion.
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.