Summary of The Coming Software Apocalypse Article

A small group of programmers wants to change how people code—before catastrophe strikes. — from the Atlantic Magazine

  • Basic Premise: Code is getting too complicated–how to make it work better for humans?
  • Example: Problem with 911 calls going out due to simple counter bug
  • Software is “eating the world” but unexpected complications create havoc
  • Engineering is 1950s state of thinking: simple failures.
  • Problem with code is that the complexity is invisible.
  • Example of hackers remotely taking over a self-driving car.
  • John Resig, creator of javascript, tech lead at Khan Academy, wondered why learning programming is so tough. He watched a talk by Bret Victor in Montreal in 2012, (Inventing on Principle), about how programming is broken, and how to fix it.
  • Khan Academy has become perhaps the largest computer-programming class in the world, with a million students, on average, actively using the program each month.
  • Bret wants to work with images instead of abstract text.
  • Programming should be visual like WYSIWYG programs.

Example Pic:

Demo of WYSIWYG program
Demo of WYSIWYG program: slider on right controls animation on left.
  • Airplane engineering has dealt with complexity by writing SCADE product family (for safety-critical application development environment)
  • Think: MDE (model driven engineering), so you write logical templates, not hand-written code.
  • Documentation is another area where what people want can differ from the code that gets created.
  • “Architects draw detailed plans before a brick is laid or a nail is hammered,” he wrote in an article. “But few programmers write even a rough sketch of what their programs will do before they start coding.”
  • Programmers tend to be pragmatic and distrust the theoretical, ivory-tower stuff, which also works against programming improvements.

Rough Overview of Programming Languages

Java is mainly large enterprise back end systems, and some android, and quite a lot of embedded stuff (nominally what it was invented for), and, worryingly, quite a lot of client side GUI stuff.
C++ is used for legacy systems and where you need speed.

C is used where you need speed, have simple programs and memory constraints, and old fashioned unix software.

C# is for windows programming and .net

Javascript is for browser programming and Node, and some general scripting, where someone has used it as their system’s internal scripting language (see also lua)

PHP is used for relatively simple web stuff, because it’s easy and works and has wide library support

Python is used for what PHP is by better developers, and has brilliant maths libraries so is increasingly used for anything maths related where esoteric things like matlab and R and F# are unhelpfully niche.

Haskell is used for academic curiosity, and some maths stuff.

Perl is dying out, but is still used for unix automation a fair bit.


Basic Web Development

Tai Chi
Learning to code can be like learning Tai Chi.

Q: Web development—with the wide range of backend and frontend languages, frameworks, and all of the tools and dependencies developers deal with on a day-to-day basis building apps and sites—is inherently complex. What advice do you give folks who are just starting out in web development?

 1) When someone is getting started in web development, I usually focus on three things. First, you have to learn your foundations. Get good at HTML, responsive CSS3, and vanilla JavaScript. This will be of use to you no matter where you’re working.

2) Second, pick something and get good at it. Pick a single frontend framework and a single backend framework and get to know them well. Try a variety of projects in them; find the places they annoy you; get to know the communities; dig in deep; give back.

–by Matt Stauffer

The Smartphone is “Digitizing” More and More of the World

Quotes from a talk by Twilio CEO Jeff Lawson: A Lesson From Amazon’s Bezos:

I remember one of these all-hands meetings, somebody asked a question, and I don’t even remember what the question was,” said Lawson. “But I remember what Jeff’s response was. Jeff said, ‘We are a software company, just as much as that other company down in Redmond,’” a reference to Microsoft (MSFT).

What a great definition of what it is to be a software person: people who solve business problems with magnetic particles; not just developers, but people throughout a company who are able to see business problems who are trying to solve them through this lens. Software people fundamentally believe any problem can be solved once you pull that problem into the realm of software.”

And, “It’s a great time to be a software developer,” said Lawson. That’s because the smartphone is “digitizing” more and more of the world, bringing into into the domain of software.