Teaching programming is really, really hard. When I'm teaching a concept, my goal is to show the student that they already know what I'm teaching them - they are just seeing the same idea manifested in a different form. Correlating concepts to past experiences is shown to help tremendously, but uncovering these correlations is a difficult task.

Anyone who has filled out a Madlib knows variables. Anyone who has heard/told a college football team joke knows variables. Calling a pair of lovey-dovey friends "romeo and juliet" is using a named identifier with values being your friends' actual names.

What do these examples have in common? They show how programming concepts are directly embedded within everyday language.

Programming is unambiguous communication

One concept that most coding bootcamps don't discuss, which is a huge detriment in my opinion, is the importance of language. I'm not even talking about programming vocabulary, which is another huge concept that is commonly skipped. In order for programmers to perform their jobs, they must have the ability to express themselves unambiguously. This attribute of programmers often manifests itself outside of the workplace, sometimes leading to humorous situations. This is the inspiration behind jokes like:

A programmer is going to the grocery store and his wife tells him, "Buy a gallon of milk, and if there are eggs, buy a dozen." So the programmer goes, buys everything, and drives back to his house. Upon arrival, his wife angrily asks him, "Why did you get 13 gallons of milk?" The programmer says, "There were eggs!"

Very few people can effortlessly jump into a mindset which requires obsession over unambiguous language. Why is that? Because reading between the lines is a helpful trait 99% of the time. Being "that guy" that takes things "too literally" is generally a negative thing - until you're programming. A surprisingly large component of what we call "having good social skills" is discerning what people mean from what they say. In fact, we label people that struggle to process these ambiguities as lacking social awareness.

"She's smiling, that means she's happy!"

An experiment

Ask the following question to both a programmer friend and to a non-programmer friend:

"What is the smallest non-negative whole number?"

(We're using "whole number" in place of "integer" due to likely household familiarity with the term. You can just explain it as a "number without a decimal point")

Your programmer friend should say $0$ whereas your non-programmer friend will probably say $1$. This is because programmers understand that there is NO room for wiggle-room when it comes to interpreting specifications or programming documentation. Non-negative doesn't mean positive - it means non-negative.

We need to prepare newcomers to programming for this whole new way of thinking. People who are apt for programming understand this mindset naturally, so shoving them in front of a text editor is fine. For the rest of the population, that approach just leads to disappointment and frustration.

Addressing the current state of coding bootcamps

The status quo of bootcamps, in my opinion, is that they perform a great service to people who would be able to learn programming on their own but just need direction. I feel like very few address the core issues, such as unambiguous communication. This prevents people who may not naturally exhibit our programmer mindset from participating.

(This article is based on a reddit comment I made.)