The Student Room Group

CIE A Level Computer Science Sucks!

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
Reply 1
Forget Python, let's just go with pure Lisp/Scheme - a superior language, as old and true as time itself :wink:
Perhaps simple lambda calculus and set theory instead... No need for such irrelevant concepts as syntax and objects!

Personally I like the systems side it, though I do AQA so the content may vary slightly.
Maybe splitting the A Level into Computer Engineering and Computer Science might work, so that people can choose specifically which area of computing they want to go into. But since it's currently only a single course, teaching both CS and CE is fairly important, to provide awareness of certain topics for those who want to work in hardware in future. Still though, it's good for hardware folk to be aware of the software sides of things, and likewise for the software people to have some knowledge of how the systems work, even if they'll never need to use it.

On the other hand, databases. We are made to learn SQL and database fundamentals, which seems mostly like some crude appendage to the main content. It's largely irrelevant and pointless to actual computer science, and is more like some skill taught purely for people who want to work as Office workers for large corporations. God I hate databases.
Reply 2
Original post by Teruko
Forget Python, let's just go with pure Lisp/Scheme - a superior language, as old and true as time itself :wink:
Perhaps simple lambda calculus and set theory instead... No need for such irrelevant concepts as syntax and objects!

Personally I like the systems side it, though I do AQA so the content may vary slightly.
Maybe splitting the A Level into Computer Engineering and Computer Science might work, so that people can choose specifically which area of computing they want to go into. But since it's currently only a single course, teaching both CS and CE is fairly important, to provide awareness of certain topics for those who want to work in hardware in future. Still though, it's good for hardware folk to be aware of the software sides of things, and likewise for the software people to have some knowledge of how the systems work, even if they'll never need to use it.

On the other hand, databases. We are made to learn SQL and database fundamentals, which seems mostly like some crude appendage to the main content. It's largely irrelevant and pointless to actual computer science, and is more like some skill taught purely for people who want to work as Office workers for large corporations. God I hate databases.




I agree with the Lisp/Scheme to be honest. I did a MOOC which used Racket (a modern scheme like language) and it was great. I love functional programming because of it!

Although I don't think going full on functional no-mutation no arrays no objects do everything by recursion is the right approach for a high school CS curriculum. Its very much more of college level thing since teaching imperative programming to teenagers is already hard, let alone a language which is rooted in lambda calculus.

I definitely agree on the database thing too though... The curriculum focuses way too much on software development and not CS (CIE for example spends a lot of time dealing with the software development lifecycle and ERD diagrams and flowcharts). In CIE, the CS course is listed under "Creative & Professional" (the same group where Textile studies is) and not the Mathematics or Sciences group.

But even in regards to the CE vs CS distinction, I don't think CE would be good at all. Pre-university computer engineering should focus on physics & math prep -- not learning the parts of a laser printer. And I'm not a big fan of teaching software development either (software development is learnt on the job, CS can be learnt in the classroom). Stuff like ACM ethics and IEEE codes of conduct shouldn't be something to memorize at a stage where someone is nowhere near in a position to be working in industry anyways.

Focusing on pure CS and decision maths is the way to go.
Reply 3
Original post by Zacky VT
I agree with the Lisp/Scheme to be honest. I did a MOOC which used Racket (a modern scheme like language) and it was great. I love functional programming because of it!

Although I don't think going full on functional no-mutation no arrays no objects do everything by recursion is the right approach for a high school CS curriculum. Its very much more of college level thing since teaching imperative programming to teenagers is already hard, let alone a language which is rooted in lambda calculus.

I definitely agree on the database thing too though... The curriculum focuses way too much on software development and not CS (CIE for example spends a lot of time dealing with the software development lifecycle and ERD diagrams and flowcharts). In CIE, the CS course is listed under "Creative & Professional" (the same group where Textile studies is) and not the Mathematics or Sciences group.

But even in regards to the CE vs CS distinction, I don't think CE would be good at all. Pre-university computer engineering should focus on physics & math prep -- not learning the parts of a laser printer. And I'm not a big fan of teaching software development either (software development is learnt on the job, CS can be learnt in the classroom). Stuff like ACM ethics and IEEE codes of conduct shouldn't be something to memorize at a stage where someone is nowhere near in a position to be working in industry anyways.

Focusing on pure CS and decision maths is the way to go.


I used Racket a bit for Advent of Code last year (though I quit after a while to focus on revision for mocks). Love the language a lot

Honestly I think teaching Scheme would be a lot easier. The syntax is simple enough to teach in a day, and then it's just a load of functions. If the student has no knowledge of either imperative or functional paradigms, there's no reason why functional should be any harder than imperative. And then once they have a strong grasp on the fundamentals, you could introduce mutables and why they should be avoided. Iirc Racket does have an objects/class system, so shouldn't be too much of a problem there

There's definitely some pointless sections for the stuff like the laser printers and cameras and stuff. I'm not sure why those are in there at all really. Should be a lot more maths and physics for CE instead, I agree.
Certainly feels like the CIE is geared more for industry workers rather than computer scientists, from what I've heard so far. The AQA spec doesn't feel as bad, though it still has a few quirks here and there I suppose.
Looking at the CIE spec, it even says
"[...]encourages learners to meet the needs of higher education courses in computer science as well as twenty-first century digital employers"
so it looks like industry is one of the main focuses of the course sadly.
Thankfully it seems that a lot of the pointless stuff is just legacy content from the old specifications that they couldn't find anything better to replace it with, so I think we can expect it to disappear in a few spec revisions
Reply 4
Original post by Teruko
I used Racket a bit for Advent of Code last year (though I quit after a while to focus on revision for mocks). Love the language a lot

Honestly I think teaching Scheme would be a lot easier. The syntax is simple enough to teach in a day, and then it's just a load of functions. If the student has no knowledge of either imperative or functional paradigms, there's no reason why functional should be any harder than imperative. And then once they have a strong grasp on the fundamentals, you could introduce mutables and why they should be avoided. Iirc Racket does have an objects/class system, so shouldn't be too much of a problem there

There's definitely some pointless sections for the stuff like the laser printers and cameras and stuff. I'm not sure why those are in there at all really. Should be a lot more maths and physics for CE instead, I agree.
Certainly feels like the CIE is geared more for industry workers rather than computer scientists, from what I've heard so far. The AQA spec doesn't feel as bad, though it still has a few quirks here and there I suppose.
Looking at the CIE spec, it even says
"[...]encourages learners to meet the needs of higher education courses in computer science as well as twenty-first century digital employers"
so it looks like industry is one of the main focuses of the course sadly.
Thankfully it seems that a lot of the pointless stuff is just legacy content from the old specifications that they couldn't find anything better to replace it with, so I think we can expect it to disappear in a few spec revisions

Yup now that I think about it, doing a Lisp-like language from the get-go might end up being easier than teaching imperative pseudocode & languages.

I propose a syllabus like this:

1. Programming Abstractions:
The first programming module of the course, has content like:
- Functions (the notion of a pure function, how to call them and write your own functions)
- Data types (integers, strings, boolean, etc)
- Record types (creating custom data types which contains atomic fields)
- Recursive types (e.g. linked lists, trees, etc)
- Function recursion (functions on recursive types & recursive operations)
- Modules & the standard library

2. Theory Fundamentals:
A discrete math introduction:
- Propositional logic
- Boolean algebra
- Set theory
- Proof by induction (link to recursion)
- Data Structures
- Algorithms

3. Further Programming Abstractions
More advanced functional programming ideas:
- Nested functions
- Accumulators & worklists
- Higher order functions
- Streams
- Thunking
- Mutation

4. Advanced Theory
- Type theory & a conceptual introduction to category theory
- Lambda calculus & Haskell
- Algorithmic complexity theory
- Theory of computation
- (other ideas in discrete mathematics & theoretical CS)
Reply 5
Original post by Zacky VT
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


Assembly language is what annoys me the most. I find that so complicated and don't understand why I need to learn that. But I'll see.

Quick Reply

Latest