I'm doing CIE's A Level Computer Science now. And a lot of the content just feels unnecessary and outright backwards sometimes. Does anyone else feel this way?
PS: I'm mostly referring to the second edition of "Computer Science for Cambridge International AS & A Level" by Sylvia Langfield & Dave Duddell.
Here are a few examples of what I mean:
1. Heavy emphasis on computer systems:
I don't quite understand the heavy emphasis on computer systems, considering the first few CS courses in uni are purely theoretical/programming related. Covering how BCD arithmetic works or how a LAN works won't really help students in their introductory programming & discrete math courses. Not to mention most of these details are forgotten since they aren't fundamental to CS, they just happen to be details of various IEEE standards.
2. The pseudocode programming is crazy outdated.
PROCEDURES?? GLOBALS?? DYNAMIC SCOPING?? Ridiculous. Procedures over pure functions is also very backwards. Teaching people to code this way is going to make it really hard for them to write proper code once they go into undergrad.
3. ASSEMBLY PROGRAMMING!!
This ties in to the two previous issues. The ridiculous emphasis on computer systems coupled with the nonsensical programming style of the book: brings you assembly programming. First off, assembly programming isn't even a core requirement of most CS programs, let alone something you teach in high school. So I completely don't understand the point here.
4. Too much memorization & too little critical thinking
I think ultimately, one of the reasons A Level Computer Science isn't a more common requirement in university prerequisites is because its an inherently memorization dominated course. If they focused more on programming and discrete math and algorithms (sort of a more extreme version of the Decisions module in A Level maths/further maths), I think this course will serve much better as a pre-university CS prerequisite.
FEEL FREE TO ADD MORE!
My suggestions:
1. Cut out all the computer systems
2. Stick to one programming language, perhaps Python
3. Write code in python in the "functional" style: i.e. use recursion, pure functions only, etc.
4. Add more discrete math: i.e. expand on the boolean algebra/logic, add more automata theory, more algorithms & data structure