High School Computer Science: Look Ma, No Textbooks!
theodp writes: Computer Science Teacher Alfred Thompson wonders how other high school CS teachers use textbooks. "It's not a conversation I hear much about," he writes. Indeed, many teachers apparently don't rely on CS textbooks much at all. In fact, the highly-touted new AP Computer Science Principles (AP CSP) course does not require a CS textbook for students (sample College Board AP CSP syllabus), albeit to the chagrin of some. Some of the bigger providers of AP CSP curriculum -- e.g., BJC and Code.org, both of whom partner with Microsoft TEALS -- don't require a traditional CS textbook. But with teachers being recruited to teach Computer Science even if they don't have a CS background, should students learning CS have a textbook? Or is the high AP exam pass rate enjoyed by AP CSP students proof that no-more-books works?
If they want to teach computer science (and not software development or programming) a text on abstract algebra or discrete mathematics is likely going to help more than anything with "computer" in the title.
I took AP CS in 2000-2001 back when it was C++ based and we didn't use a textbook then either so I'm not so sure this is a new phenomena. We relied on lectures and a lot of hands-on exercises which seemed to work out pretty well. I suspect at that time the AP CS market was quite a bit smaller so there probably were a pretty limited set of textbook options, especially geared at high school students. Now, with the advantage of substantially more online resources there are probably even fewer reasons to be using a textbook. The teacher does need to put some effort into pre-selecting some good online resources to share with students as well as some effort into being a reasonably proficient programmer themselves though. There are many ways to do that too though and my AP CS teacher taught one or two sections of AP CS and the rest of the time was a math teacher which was pretty standard I think.
I believe that proves the test is well correlated to the class content (or vice-versa). Does the class content help the students find meaningful, relevant employment?
The Russians have won. They have made the world a cesspool of distrust, greed, fear and hate.
CS, much more than most other STEM fields, already has absolute loads of reference information and tutorials and explanations available online. A textbook is supposed to be one-size-fits-all volume with all you need to know to get to a certain level in a certain topic -- a really useful thing to have with no internet, or on a topic where the internet doesn't already have all that information in easily-accessible form, but with the tradeoff that everyone using that textbook gets taught in roughly the same way, which won't work well for all of them. For CS, especially high-school-level CS where you aren't dealing with the more complicated aspects of algorithm performance or CS theory, easily available resources outside textbooks can easily cover everything necessary while also allowing the versatility to more easily suit different teaching and learning styles.
What value does a textbook really bring to a classroom beyond being expensive? I love reading but I stopped buying physical books years ago. Maybe the library at the school can have physical books for students who like a physical book. Most would be better off using a more interactive medium; especially for subjects that change often or are difficult to master/understand, like math or computer science. Oh, did you hate history? There are some great YouTube channels that make it fun.
Everyone's a coder, if you lower your standards enough. Welcome to the new white slavery.
"Prediction: within 10 years, Windows will be a Linux distribution." Me, 7-6-2016
it's not a real CS class! I'm kidding of course. Many of those books weren't textbooks by any stretch, any more than a dictionary or the DSM is a text book: good reference, but not with "lessons" and such. My best CS classes were when the prof used a reference book and wrote their own curricula, rather than a "textbook" and just following the built in lesson plan.
In Soviet Russia jokes are formulaic and decidedly non-humorous.
Textbooks are for student loans in HS the gov is paying most of the costs so they can say no to textbook BS.
Unfortunately, kids these days just aren't motivated to learn the way we were by a unattended Apple II and a floppy of Strip Poker.
the preceding comment is my own and in no way reflects the opinion of the Joint Chiefs of Staff
I imagine that the content of computer science changes too fast to be worth publishing a book. By the time the authors have finished the book, and it gets published, there is some new topic that needs to be covered, and other methods get disused. How about Math teachers, or History teachers? Do they still use textbooks?
Are you kidding me? You chose the worst examples. Try the historic assumption of the public schools that the vast majority of their students would be working blue-collar factory jobs--slaves being taught skilled trades, especially the trades you picked, got the core competencies and theory of their trade. I'm not sure how a carpenter that lacked those would count as a carpenter (vs a random with a box of woodworking tools) and I sincerely doubt anybody would have any use for a cobbler without those skills. Skilled labor is called skilled for a reason.
That said, most of the people they're teaching probably would never gain particularly in-depth programming skills. You may also have distinctly better results by treating the 'core competency and theory' of programming as something you do after you've learned basic coding--more people learning them better. (And, personally, I do agree with the school that the best way to learn programming is to read code; that and the documentation for the language have taught me more than any textbook on programming has...)
If you never expand on your knowledge after school is out you deserve the crappy coder job you get.
I'm a good cook. I'm a fantastic eater. - Steven Brust
Hands on experience beats textbooks pretty much every time. If your school has a computer lab (AKA you are in a first world country) then there isn't much point studying from the book instead of just doing it yourself and learning how it works. Later on when you start talking about making inductive proofs and the like then the books become necessary again, but for high school CS there is basically nothing that isn't best done directly on the computer.
I read the internet for the articles.
I'd highly suggest some kind of book.
When I did programming classes in high school the teacher used a book specific to each language we were taught. We didn't take them home; they stayed in the classroom. The books were most useful for assignments, but the reading material was good too. The teacher's background was Mathematics and teaching; and he did fairly well. But what he brought most to the table was outside the book - discipline as we were also graded on comments, explaining what it did, and more than just the basics of the assignments; even if the program didn't work or failed, you could still do okay if you could explain what you were doing and had it all commented.
So yes - a book and non-book materials go hand-in-hand.
And at that level you basically cannot be doing the language du jour - you have to stick with time honored languages to keep year-to-year work easy. The teacher does not have the time to rewrite the curriculum every 6 months for whatever new hotness is out there. So sticking with C++, Python, and a couple others that have been around for a very long time is much more preferable than trying to keep up with all the different JS frameworks (Node, React, etc) or whatever else is the latest fancy of the CS departments.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
Computer science is not "programing skills". This is the mistake I think these people keep making. If they want programmers, then it's not computer science and is instead jobs training. We don't learn algebra in high school because we're going to be professional mathematicians, and we don't learn physics because we're going to be a scientist, and we don't learn civics because we're going to be a politician.
The point of high school is to get a well rounded education in preparation to becoming a full ledged participant in civil life. Part of that is getting a trade,and much of having a trade involves these extra life skills (reading, writing, communicating effectively). And there is much more to life than having a trade. That's why we learn literature and history. Maybe you don't need that when being an auto mechanic on the job, but you need that when at home, when interacting with the community, when voting, and so forth. You need the arithmetic so you can maintain a proper budget, plan for retirement, do your taxes, and so forth. A public high school is an investment that the public makes in order to provide a large payoff in the future when you have better educated public.
So computer science in high school should fit that mold also. Everyone should know something about how computers work, whether or not they end up going into a computing field. And by how they work, this is so much more than programming; it's math, electronics, digital logic, algorithms, a dab of theory, and so forth. And this teaches logical thinking; even simplistic modern programming style at least teaches you how to divide a complex task in smaller parts, divide and conquer, it's an important life skill.
This is so much bullshit I don't even.
To drive down the cost of sourcing and employing programmers specific to the construction of code for major multinational corporations.
Yeah possibly, on the other hand, it's better to be educatig people to be card designers than buggy whip makers.
in much the same way slavery worked in 18th century america, these programmers are never intended to understand or learn the fundamentals of their trade.
WTF?
No, seriously, WTF?
The point is to get people started. Very very few people are suited to starting computing by learning about fundamental theorems of computability or semiconductor design, depending on what you personally consider to be "fundamental".
A course that doesn't give you everything at once is not somehoq equivalent to slavery. there have never been more resources for learning the fundamentals
Instead, like the slaveholders cobbler or slaveholders carpenter, theyre instructed only as much as they need to know for the task at hand.
Except the difference is they were you know, slaves. The completelty not slaves are free to (a) learn more and (b) leave and get another job.
SJW n. One who posts facts.
There are so many crappy coders now that they are influencing everyone around them into thinking that crappy coders are a good thing, and that we need more tools to help out crappy coders, and that we should fight off outsourcing to countries that specialize in crappy coding.
The lack of a textbook is intentional, to instill a general hatred for documenting any code. All the explanation they will need is in the comments.
Nullius in verba
Comment removed based on user account deletion
There are now two AP courses for Computer Science. The first is Computer Science A, which is essentially CS 1 taught in Java. I've had students go directly from that course into Data Structures/Algorithms at a university and they do fine.
The other course is a few years old, and it is called AP Computer Science Principles. I haven't taught that course, but I have been to professional development workshops preparing teachers to teach it. Those of you who work in universities may be aware of "general education" courses in computer science that are designed for liberal arts majors. This is basically that course (and at least one liberal arts college in my city offers an equivalent). It's all the rage right now, because there's not a lot of programming (probably less than 25% of the course) so more people are comfortable teaching it. It also lets schools claim that more students are learning CS (which, to an extent, they are).
As to whether books are necessary in AP Computer Science, I think they help. A well-written introductory textbook explains things in a thorough, logical way, with plenty of examples and exercises. They are not essential, but many students who are interested in the material but have little or no background in programming find a thorough treatment helpful. You can also learn some things you might not have known otherwise by reading a newer text in a common programming language. I recently learned about default methods in interfaces in Java 8, which is something I didn't know before; I learned it because I was reading a newer text on Java for AP Computer Science. I also believe that students interested in engineering or computer science should have the opportunity to learn how to read technical literature which can be somewhat dense.
That's not to say that they are an expensive waste of money for some students thanks to predatory pricing from textbook publishers.
One issue with textbooks is that if you use a common one, solutions to every single exercise are available online. You can detect this with some clever things like MOSS (and just eyeballing the code yourself), but it really disrupts a lot of learning. I did my first computer science courses in Pascal/C++ before the internet really took off (mid-90s) and you really had to figure everything out on your own. I think a lot of us teachers write our own exercises to get around this, and the AP examination is a great equalizer to know who has really been learning the material.
Most of your list is things you either ought to be obtaining elsewhere and/or earlier, or it is something a student most likely/easily going to attain after learning some programming--and, not sure how to break this to you, but most public school systems in the US do a damn lousy job of teaching anything. (They certainly don't teach history. It's social studies, which means you can skip parts of history that don't fit with the story you want to tell or which are embarrassing.)
The thing with starting with coding is because a lot of later classes on CS are going to assume you've got at least a generic understanding of code under your belt and if you like it, you'll actually be interested in learning more and developing greater skills in it--which means you'll pick up the theory and other elements and often be able to see how they work relatively soon, or at least not be subjected to bad explanations from people who probably understand the material worse than you do. Current thinking is that all a teacher for K12 students needs to actually know is how to teach--not the subject, never mind that a person who knows, understands, and enjoys the subject is hands down the best possible teacher you can get.
Incidentally, some of your list can be taught at elementary school or earlier. You can find many examples online of how to model logic gates with marbles (such as this) which means you can render a basic mechanical computer as a child's toy, and breaking tasks down into smaller, more manageable parts is a skill you can definitely teach a child long before they are much good at reading and writing.
I certainly learned history in high school. American history, California history, world history, ancient history. They don't teach these things anymore?