Coding for all or coding for some?

Coding_graphic

In 2012, then NYC Mayor Michael Bloomberg announced on Twitter that his new year resolution was to learn to code. His public announcement led to a programmer telling everyone to “please don’t learn to code“. I don’t know what coding knowledge Bloomberg actually acquired or how he has used it since, but whatever programming class he signed up for led him to the conclusion that coal miners can’t be taught to code.

In the 2016 State of the Union address President Obama proclaimed,

In the coming years, we should build on that progress, by … offering every student the hands-on computer science and math classes that make them job-ready on day one.

This was followed by the announcement of Computer Science for All Initiative by the White House, with a push to integrate computer science literacy into K-12 curriculum. Another programmer saw this as a misguided attempt by politicians who don’t know what they were talking about, and he reminded us again to “please don’t learn to code“.

The first of these articles was published on a blog Coding Horror and was written by a web developer. The more recent one from 2016 was published on TechCrunch and was written by an iOS app developer. It is no surprise that they view computer programming so narrowly, as means to developing web applications or mobile apps. The assertions in these “please don’t learn to code” articles boil down to these following arguments, and here’s why I disagree with many of them.

  • Programming is not an applicable skill to every job.

“Can you explain to me how Michael Bloomberg would be better at his day to day job… if he woke up one morning as a crack Java coder …understanding variables and functions, pointers and recursion? I can’t see it.” —CodingHorror

This point is short-sighted and most reflective of the narrow vision of programming by someone whose background is web development. Instead of looking at city mayors or coal miners and asking what good variables and functions do them, it makes more sense to look across a wider cross-section of jobs in multiple sectors. McKinsey published this excellent graphic that summarizes the automation potential of jobs in the US. Robots are coming for all our jobs! Well, not today, but eventually. And if that is the case, then programming is the one ring to rule them all. Programming is the language to communicate with the machines that are already ubiquitous, and going forward, those machines are only going to be performing more of the tasks done by humans today.

  • Coding is not a basic literacy skill like reading or math. Both the CodingHorror and TechCrunch article equate programming to plumbing and state it almost identically (were these both written by the same guy under different names?)

“I would no more urge everyone to learn programming than I would urge everyone to learn plumbing.” —CodingHorror

“I would no more urge everyone to learn to program than I would urge everyone to learn to plumb” —TechCrunch

Anyone who has been through a K-12 education learned more than just the 3 Rs – Reading, wRiting and aRithmetic. At lease I hope so! So for that matter why teach anyone history, geography, government, literature, biology, chemistry, physics? There is a basic fund of knowledge that our society has deemed important enough to function as informed citizens that this knowledge is integrated into the K-12 curriculum. Programming is absolutely a basic literacy skill that should be taught in K-12. It is as important for a writer to know some programming as for programmers to be acquainted with some classic literature.

  • Emphasis on coding detracts from actual problem solving.

“Before we start working on a solution to a coding problem we must decide what the problem is — and if it’s truly a problem… If we let ourselves become fixated on how to solve a problem via code… and lose sight of why, we gain nothing.” —TechCrunch

This is a bogus argument. To become a surgeon, one learns the technical skills to operate. But an equally, and some surgeons will say more important part of becoming a surgeon, is learning when to operate. And learning when to operate and when not to operate is a skill that is learned during the training process to become a surgeon. Likewise for programming. Programming education done right, shouldn’t just be teaching someone the syntax of a programming language. That can be read in a book. Or searched on a website. Programming education done right teaches a student problem solving skills and how and when to employ code to solve problems.

  • Programming as career is full of uncertainties. According to the TechCruch article, programming is a rapidly changing field and current developers are not doing too well, so it doesn’t make sense to steer more people into this field.

“Just a few years ago I was using Objective-C; now I code almost entirely in Swift.. Developers are expected to learn fast, with little guidance.. if current developers are frustrated or falling behind… why encourage individuals to enter such an uncertain realm” —TechCrunch

What career today isn’t full of uncertainties or rapidly changing? Again, see the first point about job automation potential. The beauty of learning programming is that the knowledge you acquire is highly transferable. You may have first learned to program in C++, but for another job you may need to learn Java. It is not the same as learning Cantonese if you are a native English speaker. The fundamentals of how you communicate with a a machine remain the same. You just have to learn different grammar rules, or what programmers call syntax. And the grammar of one programming language to another is not as different as English and Cantonese.

  • It is hard to make money as a programmer and dishonest people are overselling coding knowledge as “ticket to economic salvation”.

“It implies that there’s a thin, easily permeable membrane between learning to program and getting paid to program professionally” —CodingHorror

“Since the mainstream learned of the success of Silicon Valley software engineers, everyone wants to own a startup or become an engineer…many coding bootcamps are… run by modern snake-oil salespeople tapping into the average American’s desperation” —TechCrunch

This is one argument that I will partially agree with. If there are “bootcamps” selling people on an idea that a 1-month course in Javascript will lead to guaranteed employment as a software engineer at Google or Facebook, then that claim is just as worthwhile as a diploma from Trump University. I support the White House Computer Science for All initiative. But the statement from 2016 SOTU about “computer science and math classes that make them [students] job-ready on day one” maybe overselling it a bit. Programming is a basic literacy skill. I am not sure how that will make someone “job-ready on day one”. Different jobs have varying amounts of learning curves. But having the basic literacy does lay a solid groundwork to overcome that learning curve.

Still not convinced? Here is another excellent response to those “please don’t learn to code” articles titled, “please do learn to code“.

This article is a 2-part series, the second article in the series will explain why programming is a basic literacy skill and it will be published on Medium. I will link here after publishing the second article.

UPDATE: Here is the link to the second article titled “Programming is a basic literacy skill“.

Advertisements
Comments
4 Responses to “Coding for all or coding for some?”
  1. matt says:

    For the most part, I agree that Jeff Atwood’s (I never read the TechCrunch article) opinion isn’t the greatest position to take. I do not think our current education system is equipped to handle teaching people to code in any useful way: teaching code to a standardized test is essentially the epitome of useless. A system such as common core shouldn’t be teaching students… well, anything.. but definitely not anything related to numbers or problem solving.

    I don’t get a sense of your literacy with coding through this article. But I disagreed with a few of your points:

    1: “The fundamentals of how you communicate with a a machine remain the same. You just have to learn different grammar rules, or what programmers call syntax. And the grammar of one programming language to another is not as different as English and Cantonese.”

    I get it: Java and C++ source superficially appear similar. But in reality, they’re only alike in that they’re both “code”. The ‘how you communicate with machine’ varies rather a lot from one programming language to another. C, C++, and C# all have similar syntactical constructs; but how you access and use those constructs is different for each language. A seemingly trivial example: strings in C# are immutable but are mutable in C++.

    Understanding a languages’s ‘how you communicate with a machine’ in that language is the difference between writing code that works and writing code that works well. And it may not seem like a big deal to someone on the outside looking in, but it makes a huge difference in development and maintenance costs, which ultimately get passed to the consumer, whoever that is.

    2. “Emphasis on coding detracts from actual problem solving.”

    This is more relevant than you seem to give it credit. You say “Programming education done right, shouldn’t just be teaching someone the syntax of a programming language… Programming education done right teaches a student problem solving skills and how and when to employ code to solve problems.” And you’d be right.

    But our system is not designed to teach problem solving. Observing the world around me, there seems to be a marked lack of “can-do”; no one wants to step out of line. Perhaps this is a trivial example, but the other day at Starbucks I had to order the biggest tea because they were out of the size I wanted and he couldn’t figure out that he could have put the tea I wanted in the bigger cup. No, it’s not an epidemic, and it’s not a conclusive example. But inability to fix simple issues like this are becoming more frequent.

    Perhaps the last thing you want to read is another post by Jeff Atwood, but there are some good links in this one: https://blog.codinghorror.com/why-cant-programmers-program/ . (And if you figure his links will just support his arguments, fine; I’m not paid to shill for Atwood).

    But I’ve seen it myself. I’ve worked at a place that hired a few interns who’d been a part of coding bootcamps. To my knowledge, one of them is still there, having been hired on as full-time junior developer: she understood it, at least well enough to know how to ask the right questions. The others.. One struggled to understand the concepts; but once he had it, he was good. The other thought he knew far more than he did and was useless as a programmer.

    Your point about programming education done right is technically true; I won’t argue that. But we aren’t in a culture that values the effort needed to do something right.


    As I said, I don’t fully agree with Jeff Atwood’s position. I’m a self-taught software developer who initially started doing this “because I could do a better job at this if I only knew how”. The “this” in question isn’t relevant: there have been many in the 10+ years I’ve been doing software development.

    I think it’s true that anyone can learn to write the code. But it’s another matter entirely that anyone can become a software developer.

    • Mrs MD PhD says:

      Thanks for leaving such a thoughtful, detailed comment.

      I don’t get a sense of your literacy with coding through this article.

      In terms of my personal coding literacy, I don’t have a degree in computer science. My background is engineering and I have written a fair amount of code for various projects.

      I do not think our current education system is equipped to handle teaching people to code in any useful way: teaching code to a standardized test is essentially the epitome of useless.

      I first started coding in middle school, computer science classes were integrated into our curriculum and mandatory for everyone. This curriculum covered everything from history of computers, understanding hardware and yes, programming. I didn’t do my K-12 education in the US though, so I can’t speak from personal experience with whether the US educational system is equipped to teach people to code. But I didn’t complete my K-12 education in a Scandinavian country either. I grew up somewhere where daily reliable availability of electricity and running water were issues. It continues to astound me that a school located in a semi-rural part of the world was teaching students programming decades ago! And in 2016 we are just now launching initiatives in the US to give everyone access to computer science education. It just doesn’t compute, pardon my bad pun. But I agree with you, teaching material to standardized tests is not productive at all.

      The ‘how you communicate with machine’ varies rather a lot from one programming language to another

      Understanding a languages’s ‘how you communicate with a machine’ in that language is the difference between writing code that works and writing code that works well.

      We are speaking from different perspectives. I am not a computer scientist or a software developer, I don’t build commercial software. I write code to solve specific problems, engineering problems or problems in medical research. I have had to use different programming languages over the years/decades. I agree with you that there is a learning curve associated with each programming language. You need a good foundation in at least one programming language, but after that that learning curve is much easier for any subsequent language. Here is where our different perspectives come in. As a software developer the difference between code that works, and code that works well is large. But if you are writing code to solve specific problems, then having elegant and well written code is sometimes important, but a lot of times something that I write up that serves my specific purpose is just as good.

      But our system is not designed to teach problem solving.

      I agree with that, our education system in the US needs reform. What specific aspects need reformed and what are the solutions to the problems? Too lengthy for even a book, let alone blog posts or comments. But having been through a system where programming education was done right and done in a world with lot scarcer resources, I do believe it possible that programming education can be done right and made accessible to all.

      I think it’s true that anyone can learn to write the code. But it’s another matter entirely that anyone can become a software developer.

      Absolutely agreed. I don’t think the point of programming education should be to make everyone into a software developer. Just like math education won’t make everyone a mathematician. I believe that programming is a basic literacy skill, and everyone will benefit from some understanding of it.

      PS: I checked out your photography blog, love the train pictures!

  2. matt says:

    Thanks for the clarifications on your perspectives, and background. It occurred to me as I was writing my comments that you may not have been a US-educated student. Perhaps your arguments were too well thought out

    Ultimately, it would seem our overall outlook on the subject of learning to code isn’t too far off from each others; merely matters of implementation.

    Thanks for checking out the photos; I appreciate that!

  3. Coding often involves learning crucial critical thinking skills, problem solving, and learning to learn. I think it would be helpful to students to learn some basic coding!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

  • Legalese

    The purpose of this blog is to share interesting bits from around the web and beyond. All opinions expressed on this site are my own, unless credited to someone else. The images and artwork have also been created by me, unless credited to the sources. Oh! And please don't hold me liable for your actions resulting from any information on this site. As with everything else on the internet, read with the requisite amount of skepticism.
%d bloggers like this: