Many people have said "teach everyone to code!" or cheer-leaded for "learning to code!" but there hasn't been enough discussion about what a Computer Science component to a liberal arts education ought to look like.
In mathematics we have many lists and trees of what mathematicians think people ought to learn, what order it should be learned in.
Not so in computer science. We just say "learn to code" this would be like if math people said "learn to integrate functions!"
Notice that "integrating functions" is an outcome, a specific skill. A nice one that implies you know a lot of math... maybe. But not all math curriculums end there. There is a robust debate in math education about if we obsesses about The Calculus too much, everyone understands that doing some integrals isn't "knowing math."
I think most CS educators understand something similar but there is much less consensus about what it is that we are teaching if not "how to code."
For me the major topics of a CS education for the general public are:
* Computer Hardware
* Encoding and Decoding
* Logic and Control Structures
* Iterration
* Objects & Functions
* Databases
* Ethics and Applications
* User Interfaces and Design
* Computer Networks
* Computer History
This list keeps changing every time I revise my courses which is every year.
I added functions with objects, but students learn about functions almost from day one.
**File Structures need a clear home.
I always forget to add "History" and that is bad. I forget it in mathematics too, and I think this tendency causes big problems for both subjects.
@futurebird Computer History is straight-up relevant to my computer-touching job regularly, in part because we've barely advanced computers in 50 or so years, and in part because knowing the history of a system helps you make educated guesses about it's present.
@lampsofgold @futurebird I've been sharing a lot more computer history with people lately, partly because chip design is being so creative right now (well, and that my dad was big in the metrology business), and partly because I am so inspired by this recent paper: https://docs.google.com/document/d/1tgZ86ugijXPUOo_lD3kLfQBPbneecUNzZim1GOgkC1M/
@slowenough @futurebird Seeing the thesis I definitely agree with much of it, though I find the crypto sponsorship and subsequent filter unfortunate. This reminds me of the community media manual (and seems like evidence of that work's thesis also) https://communitymedia.network/
@lampsofgold @futurebird For me the main point was to make visible the patterns, and the structural changes IETF made starting in the 1990s, that have helped them to make great specs while drawing on broad input, and avoiding anyone or any one group having control over the organization.
I was one of the developers of the Group Works deck, one source of the patterns they highlighted. This is the best analysis of *anything* I've seen using it. https://groupworksdeck.org/ #patterns #ietf #governance
@futurebird What I tend to find when teaching Physics UG students about coding is that ideas of breaking up problems into pieces and the resulting/strategies of taiming of complexity are also important.
@futurebird One of the most popular lessons I taught last year was the history of debugging. I found an awesome article with a picture of the first ever "bug" taped into one of Grace Hopper's notebooks! I need to revise this to do next week with my yr 7s.
@futurebird For people who aren’t going to be practitioners in the field, the history bit is usually the most valuable part of a science course. Anything else is a snapshot of current knowledge, but understanding how that knowledge is built and the misconceptions that led people down the wrong path is far more valuable.
Even as a practitioner, often the hard part of understanding a system is not what it does, but what constraints used to exist that made people build it that way (and do they still exist?).
@david_chisnall @futurebird For people who *are* going to be practitioners, the history bit is also the most valuable part. Pity we fail so hard at teaching it or paying it any attention!
One day people will say, "Oh! This system could work so much better if we break it up into this huge number of services that all talk to each other," all because they won't know any history. :-)
@david_chisnall @futurebird I agree with this with the caveat that we have to be very intentional in how we teach it because students are weird sponges and sometimes only remember the hypothesis that was found to be wrong, without remembering the wrong part.
And this is why I don't talk about Lamarckism during intro biology anymore. Way too many of them grasped onto inheritance of acquired characteristics because we talked about it first and never learned how evolution actually works.
@hydropsyche @futurebird The best science teaching I had focussed entirely on the scientific method. Here’s a theory, what experiments would you design to falsify it? Start with some of the exciting nonsense the ancient Greeks believed, the gradually move forward. By the time you get to Lamarckian Evolution, you can immediately think of experiments. Most importantly, when someone presents a new claim, your first reaction is ‘this is how I would test it’, and if they haven’t tried that test you are skeptical. I don’t really care if students understand Darwinian va Lamarckian evolution, I want them to think, if they’re ever in a position to need to know which is less wrong, how they would test it. And then hopefully look up the experiments that were already done and see the results.
@david_chisnall @hydropsyche @futurebird It's funny because this is exactly the same skill that someone needs to have to be any good at efficiently debugging a complex system. (1) What do you know, *for* *certain*, about the system? (2) Formulate a theory as to why the system is behaving the way it is behaving. (3) Design a tractable experiment to falsify your theory, etc.
@david_chisnall @futurebird I disagree with none of what you said about the best way to learn science. I had a similar education. But my students, who are coming from a background without such an education, aren't very receptive to it currently, and because I teach as part of a larger program, I do have to care if my students understand modern evolutionary theory or not.
@hydropsyche @futurebird Indeed, this is something that has to come from a curriculum design with specific learning objectives in mind, it's not something that an individual teacher can fix.
@david_chisnall @futurebird I have a humanities BA from a liberal arts school. One of our required classes was Evolution of Science and Technology, in which we mostly watched James Burke's "Connections" and then had discussions around that. My curriculum was about as far as you can get from science, but I loved that class and still think about it, 40 years later.
@futurebird IMHO this is very much driven by the fact that CS is relatively new, and got popular too fast because you could make a good living with it and there were few skilled people. So a lot of what is taught is driven by job market demands, and that means it's tied more to techbro hypercapitalism than the words "computer" and "science".
(This is a TL;DR rant)
@futurebird I was a liberal arts major and the one required computer science class was COBOL. When my computer science friends all laughed and said it was outdated and nobody uses it anymore I got pretty mad I had to take the class.
Yo, COBOL programmers are bad ass. And in very high demand.
@futurebird My only class official was sorting and searching and that was great.
@futurebird I remember learning about "systemic thinking" in my uni as part of my first classes, which ended being an actual philosophy and history lesson on why systems are the way they are and how that transformed into CS and Systems Engineering.
I tend to think this as a very important stepping stone, along with computer hardware and logic, just plain logic as a philosophy. These all bring a solid foundation on why things are the way they are before even typing one line of code.
@futurebird Some of this examples were:
1. The Benham disk illusion (this is to prove you are fallible).
2. You have a creature that moves up and down a line. Can you create an algorithm that replicates this movement exactly?
3. Why the 80 column limit exists?
4. The history of COBOL, and what actually is structured programming and its real ethos?
5. The history from Babbage to Ada up until Turing on Turing machines.
I think these are interesting and give you a solid foundation onward.
@glitchypixel @futurebird Also non-computability (halting problem), NP hard, etc. There are things computers are bad at, so don’t trust claims that involve efficiently solving such problems.
@glitchypixel @futurebird 6. Toggle in a bootstrap program 7. Watch serial frames on an oscilloscope
@glitchypixel @futurebird one of the better programmers I know got his degree in philosophy. Understanding the concepts behind different ways of how people model behavior and systems of thought has served him well.
@glitchypixel @futurebird I remember learning about symbolic logic (aka Boolean algebra) from a book by a real philosopher: Suzanne Langer’s Introduction to Symbolic Logic. I had a copy of the Dover paperback, and I still remember the cover after over 60 years (although that memory may have been refreshed or overwritten by an Amazon search at some point).
@futurebird a university textbook teaching data analysis for humanists: https://www.humanitiesdataanalysis.org/index.html
@futurebird I interact with a lot of electrical and computer engineering degree holders (bachelors to PhD) and they do not seem to have a fundamental or even basic understanding of von Neumann model/architecture of computing
Nevermind a basic competence in Linux usage even though they use it for their work/research
I know that I have decades of living and computer experience but the way we teach, learn, and use computers today...oi
But digital natives or something
Yeah, "learn how to code"
@futurebird I think in STEM fields in general we took often forget History (and Philosophy) as elements to teach..
@futurebird history of mathematics as a component of my math courses was maybe my favorite part of my undergraduate math education. it matters soooooo much how these theories transform and develop (people thought hilbert's program was really gonna work at one point!) and it is how you can teach students to develop similar theories themselves!
@futurebird
Enough intellectual property to understand software licenses would be good too.
@mekkaokereke