I think that basic programming skills will become as important to everyday people as reading and writing skills.

 Not because I think everyone should become a professional programmer, but because it will soon be impossible to compete in the job market–for anything that pays more than minimum wage–without having a basic understanding of how things are automated, or an ability to set up rudimentary automation yourself.

Jeff Atwood thinks that the mayor of New York doesn’t need to know how to program, but Bloomberg is presently running a city who’s biggest industry is now dominated by algorithmic trading. His city also features one of the world’s most sophisticated public transportation networks, which are so complicated that the only way to plan new subway lines, roads, bus routes and traffic patterns is to use genetic algorithms or simulations that mimic the logistical networks created by slime molds.

City planning is now dominated by algorithms, and a mayor who doesn’t understand their principles will soon be in competition with candidates who do.

 A future Mayor of New York would certainly leave implementation to engineers, but politicians will soon find that they can’t get elected unless they can show they understand how these networks and trading systems are built, and more importantly can intuit what kind of resources a city or country should invest in.

 Companies of all types–not just technology companies–have been forced to automate their businesses with computers, and the ones managed by luddites are dying. Not because the CEO isn’t writing computer programs, but because they simply don’t understand what their value is and do not appreciate what their customers and employees are telling them.

 Programming-illiterate managers are also making huge mistakes even when they do embrace automation. They outsource programming to India or China and don’t understand why the results are so awful. By not even having basic programming skills, they fail to understand the intimacy between design and coding, and think that the two can be put into separate departments with the latter fulfilled by the cheapest bidder.

 Nicholas Carr loves to point out that, 100 years ago, many large companies had an executive position for “Chief Electrical Officer” who was in charge of installing and maintaining generators, electric lighting, telephones, electric factory machinery, ventilation, conveyor belts and so-on. That position disappeared a long time ago for two reasons: 1) standardization made wiring an office or factory straightforward, and all the appliances plugged into the same socket, and 2) everyone now has a basic understanding of electricity.

 Everyone knows you can’t plug a power-strip into itself. Everyone knows you need thicker cables for heavier loads, even if you don’t know Ohm’s law. Everyone knows that big appliances need grounding pins. Everyone knows you need to connect a building to ground. Everyone knows air conditioners use more electricity than box fans. Everyone knows household current is 110 volts (or 240 in Europe). Everyone knows a 100 watt bulb is brighter than a 60 watt bulb. Everyone knows you don’t plug a space heater into a lamp extension cord. Everyone knows that when the lights go out after you plug-in a toaster oven, it’s because the circuit breaker tripped. Everyone knows you don’t stick a fork in a wall socket. Everyone knows you don’t use a hair-dryer in the bathtub.

 This kind of knowledge either comes from, or engenders a basic understanding of electricity. And if you don’t know some or all of these things you are at risk of seriously hurting yourself or someone else one day. You either learn or you burn.

 Basic programming skills are not much harder to learn. If I were in charge of educating children, I’d want them to learn the following skills by the time they were 7 or 8 years old:

  1. Order of operation
  2. Variables
  3. Conditionals (if-then-else)
  4. Simple loops (for-each, do-while)
  5. Operators and function calls

 And before they graduate from High School, I’d want them to be exposed to at least one more thing: Recursion.

 This wouldn’t be the first time a government has made a major nationwide effort to teach programming to children.

I would skip pointers, objects, types, sorting and searching algorithms, memory management, “design patterns”, graph theory and so-on. We wouldn’t use K&R, certainly wouldn’t go anywhere near SICP, but might use some simple material from either. I would probably teach in Python or some other dynamically typed, memory managed language that needs very little boilerplate to get a program running. All the other stuff would be taught in elective classes.

 One day in the near future a college graduate, call him ‘Rupert’, is going to burst out of his parents basement in search of his first job. He’ll hit the Help Wanted ads, send out resumes by the dozen, and melt in despair as months go by without an offer.

 Next door, another college graduate, Rebecca, notices that Monster.com has a simple API, and that Google’s semantic text analyzer also has a simple API, and that Google’s App Engine uses a language she learned in high school. She prods around for a bit, her code is cumbersome but functional, and stitches together a program that funnels job listings through the analyzer, picks out the ones that match her skills and are located where she wants to live, and cobbles together a crude but customized resume and cover letter for each suitable job.
 She goes through the results, spends a minute or two tidying up each auto-generated cover letter, and mails them off. A week later she has her first offer.

 When Rebecca begins her new job she finds that she’s got a couple of extra words in her vocabulary and a Sapir-Whorfish perspective that comes with it. 

“I’ve brought something dangerous to your young people”

 Rebecca’s selling industrial ball bearings, but discovers that her customers all took the same basic programming class in school as well, so when they discuss shipping schedules, quality requirements, payment terms and SLAs over email they talk as if they were describing a simple computer program that defines the relationship between the companies.
 When she goes to the IT department to set up EDI with her customer, she finds that she can easily describe the terms of the agreement to the programmer setting up the 850s, 855s, 856s and so-on. She can talk like he does, and she understands what he says back to her.

 After a few weeks the IT guy teaches Rebecca how to set up new EDI profiles herself, shortening the turnaround by half.

 Her boss is thrilled, and the senior salesman–who’s eyes glazed over every time Rebecca described the “event loop” she’d set up with their newest account–is terminated after a string of lost sales. It wasn’t that he was a bad salesman, it’s that he couldn’t think or speak in the new terms and concepts that their customers were now using.

 This is what the future is going to look like. You won’t learn programming because you intend to write programs professionally, you’ll learn it so that you can function in a world that will be defined by computer programs.

Categories

Wait, does the nav block sit on the footer for this theme? That’s bold.

Software Engineering Tips

Yet another collection of rubbish mostly focused on C# and IT development

Explore the style variations available. Go to Styles > Browse styles.