Revisiting Why Johnny Can't Code: Have We "Made the Print Too Small"?
theodp writes: In What is Computer Science?, the kickoff video for Facebook's new TechPrep diversity initiative, FB product manager Adriel Frederick explains how he was hooked-on-coding after seeing the magic of a BASIC PRINT statement. His simple BASIC example is a nice contrast to the more complicated JavaScript and Ruby examples that were chosen to illustrate Mark Zuckerberg's what-is-coding video for schoolkids. In How to Teach Your Baby to Read, the authors explain, "It is safe to say that in particular very young children can read, provided that, in the beginning, you make the print very big." So, is introducing coding to schoolkids with modern programming languages instead of something like BASIC (2006) or even (gasp!) spreadsheets (2002) the coding equivalent of "making the print too small" for a child to see and understand?
Please stop shilling for Facebook. You do it endlessly. No one likes Facebook or its douchebag in chief.
"Dijkstra's a dick"
-- 91degrees
Influential and important to CompSci, certainly but that doesn't mean he wasn't a bit up himself at times. Not everything he says is gospel.
Maybe Johnny wants to choose his own fucking interests, instead of having them imposed by a corporate oligarchy only interested in cheap labor.
SJW's don't eliminate discrimination. They just expropriate it for themselves.
The need to solve a problem, being presented with a tool simple enough to understand and some help to get started seems to me to be the true trigger that can start someone off down the programming track.
Of course we have made the print too small. I recall attempting to 'grok' Fortran and Algol as a teenager and having difficulty understanding the difference between reserved words and variables and so forth.
BASIC is a brilliantly-designed language for the beginner because the concepts you need to understand are so simple. Even the much-maligned line numbers are important in the learning curve. When you start, a variable, a reserved word and a label are all concepts you have real difficulty separating. BASIC line numbers, though, you can immediately map to the idea of a sequence of control. Once you have mastered this you can then absorb the more advanced concepts gradually.
For those who take a snobbish attitude to BASIC I still feel that Kemeny and Kurtz understood absolutely how to create a language that simplified programming to its essence. As such, it really should be the starting point - it's easy to teach students better techniques once they have written some simple BASIC programs and hit issues like running out of places to insert a line, etc, because they can SEE why better techniques make their lives easier.
When I was a kid getting into programming, I constantly ran into a wall. The basics, like hello world, and command line input->output programs that can do an enormous variety of calculations, background work, execute even big and fun commands were always easy, instructions prevalent, how to's everywhere and easy to understand.
Then you want to actually move from moderately complicated programs that are useless to real ones that do something, and I hit a wall. How to make a GUI work, how to make graphics appear, how to do anything useful at all in any kind of app, desktop program, etc, and the tutorials jumped from 5 easy to understand lines to 50 page books on how to get a single line to appear, much less do anything else.
Excessively complicated syntax, and extremely difficult, complicated programming required for even simple programs in a useable context make it opaque, that is the small print. The resources are plentiful for the most basic coding, plentiful on algorithms and how they work, but the second you get to a moderately complex topic of actually making applications you can double click and use, I might as well be trying to learn how to do complex multivariable calculus in a non-euclidean geometry based on a few comments on a thread on a help page that was posted and died 8 years ago.
Johnny can't cook a souffle, Johnny can't make a dove joint, Johnny, can't fix a car, Johnny can't set a broken arm, Johnny can't balance and income statement, etc.
But there is at least SOME people that can do it. These are all disciplines/careers that people elect to pursue. Not everyone needs to know how to code. That's stupid. Does everyone need to know how to design, cut, and sew together a pair of pants?
Does knowing how to code make it any better when Windows or Windows apps go toe up? Really? Are you going to debug Windows or Mathematica because you took a coding class?
When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
Johnny (and Jane) can code. They just don't want to. Back in the 80s and 90s, computers were new and cool and if you could code, you could even make the computer do what you wanted it to do. Back then coding was freedom. It's like hot rods in the 50s. If you could soup up a car and make it run fast, others looked up to you. Now, fast cars, like computers, are common place and the "skill" isn't needed or valued like it was.
In the future, today's hot fields will be asking the same question. Once the newness and prestige wear off, the Johnny's and Jane's of the world move on to something else.
I have seen a lot of programmers who are totally dependent on the IDE to develop the code. They have no idea how it works or where it runs from once it deploys.
But is it part of what they need to know? A brick-layer needs to know how to use his tools to build a wall, he doesn't necessarily need to know how to make a brick or brick-laying tools from assembler. Nor is he the architect or the structural engineer who says what the wall is for or if it's thick enough to be a load bearing structure. But he does need to know enough to make a structurally sound wall. Sure, it wouldn't hurt him to know all these other things. But it might be more important for a GUI developer to understand the difference between a modal and non-modal dialog than learning all the plumbing to display a dialog. I'd say the most important part is being good enough at what you're good at, not necessarily what you're bad at. As long as you don't deploy straight to production, or rather if you do then you won't have that permission for very long.
Live today, because you never know what tomorrow brings
"Dijkstra's a dick"
Yup. But the particular polarity of his dickishness helps to balance out its opposite--that is, all the millions of shitty programmers who hate rigor just because it's rigorous, and proselytize against it at every opportunity. He's a lot like Richard Stallman in this way--an impractical dick, to be sure, but a useful dick nontheless.
Plus, Dijkstra had a sense of humor, which makes him more fun to quote.
The reason Johnny (and Jenny) can't code is simple: coding is not easy. Most kids hate math word problems. Yet, that's what coding is. You're given a math word problem with all these variables and facts and rules, and you have to come up with a solution, that is translated into a foreign language of simple instructions for a very dumb machine that is fussy about how you talk to it. If you can't stand problems that start out, "A train leaves Chicago traveling 42 miles per hour...", then you are not ever going to like coding, and you most likely will never be very good at it.
Proverbs 21:19
That is indeed the point that is often forgotten.
I've long been an advocate of using BASIC (or a more forgiving variant) for the first two weeks of a programming curriculum... ...and no more.
To use the analogy of TFS, BASIC has big text, and is useful for illustrating the alphabet of programming. Students should understand a few key concepts from the exercise, the misunderstanding of which often leads to difficulty following later classes.
I've seen countless students who missed the core concepts that statements run in order (some language exceptions apply), variables change, and that every step of the process has to be listed.
Frankly, I think those concepts are more important than learning how to build a class or compile a binary. BASIC was a good place to start.
You do not have a moral or legal right to do absolutely anything you want.
It's like QQ or Wiebo, only the spying is worse.
const int one = 65536; (Silvermoon, Texture.cs)
SJW, n: "Someone I don't like, and by the way I'm a fuckwit" - AC