Yesterday, I spent two hours with my daughter – a junior in high school – trying to help her process string input in a reasonably complex Java program. Mind you, this is only week two in her computer science studies and while she eventually got the program to execute, I suspect that she understands maybe 25% of the subtle syntactic and semantic issues involved. The truth is that her class should be going much more slowly through the basics.
This rush to complex coding is concerning because it trains young programmers to partially understand what is going on – and to be delighted when the program seems to execute – sort of. One previous program I watched my daughter write, for example, involves the familiar decimal to binary – and it worked just fine. But the reverse program converting binary to decimal had a fatal (unnoticed) bug: It did not check whether the input was binary. This trains insecure coding.
I had a similar experience a few years ago when my son was in the same course – and the result was a book he and I wrote called “From Gates to Apps: An Introduction to Computer Science.” My daughter’s present experience has prompted me to revise that book into eBook form – and I hope you will consider buying one for your own child. You can easily download it for $9.99 on Amazon.com and it can make a substantive difference.
The philosophy in that book, which was developed over a lifetime of teaching computer science, is this: Computing is based on the power of abstraction. By building a solid foundation embedded in logic gates and hardware design, it becomes easy to explain simple coding and how translators then create the possibility for high level languages. Only then should you start programming. If you skip the early steps, you cripple young minds forever.
By the way, I fully recognize that advanced high school courses in computer science are designed to prepare students for the AP exam. It's been my experience that slowing down up front and focusing on the basics is the best way to do this. At minimum, teachers and parents should ensure that students are developing a more concrete understanding in parallel with all this crazy coding preparation for the exam.
One more thing: Parents love to say that their Liam or Ava (it was Mary or Billy when I was in school) is a super advanced programmer and needs to be challenged. Well to them, I would offer the following: Forward their last complex homework assignment to a truly professional programmer for analysis: Prepare for a response that shows dozens of errors in the code.
I wish I could say that this does not matter, but the reality is that studies in computer science at the high school and undergraduate level are as critical to the United States as perhaps any issue I can imagine. We seem to only address what’s urgent, at the risk of ignoring what’s important. My favorite cartoon is the one showing a man sitting on a rocking chair reading to his child under the caption: “The real seat of power.”
Please consider having your child download the eBook onto their mobile, and perhaps you might read it together. Go through one chapter a day, and you'll be done in thirty days. This might be the most important thing you can do today for your child - and for your country! And as a favor to all of us, please forward this short note to the computer science teacher in your school.