In April, I'm going to be giving a talk called **English 2.0 - Understanding the Language of Developers" to a group of English teachers. The purpose is in two hours to give them a quick background in key concepts so that they can better understand developer blogs and podcasts and are able to ask better questions when talking to developers.

What do you think are the most important concepts to understand, concepts that developers take for granted but the general public is not familiar with? Here are a few ideas:

  • version control
  • abstractions
  • pub/sub
  • push vs. pull
  • debugging
  • modularity
  • three-tier architecture
  • class/object
  • "spaghetti code" vs. OOP
  • exception throwing
  • crowd sourcing
  • refactoring
  • the cloud
  • DRY - don't repeat yourself
  • client/server
  • unit testing
  • designer/developer

closed as too broad by gnat, user40980, user22815, Dan Pichelman, Bart van Ingen Schenau Mar 3 '15 at 19:36

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 2
    I wonder if it's possible taking them through several websites (open source projects etc) and then getting them to pick out words/terminology they don't understand? – Martijn Verburg Jan 21 '11 at 9:08
  • 2
    @Martijn: this page would be perfect for that ;-) – Syg Jan 21 '11 at 13:05
  • 9
    Spaghetti code vs. OOP? You can have Spaghetti OOP code and well structured, readable non-OOP code. – Jon Hopkins Jan 21 '11 at 14:16
  • 4
    Why do English teachers particularly want to talk to software developers as opposed to, say, medical doctors or physicists? – kevin cline Jan 14 '14 at 17:16
  • 2
    Can I ask why an English teacher has any need to know these terms? Most of these are implementation level information where if the English teacher was a stakeholder they would care more about some very different terms. – Rig Jan 14 '14 at 17:49

For definitions of these terms see the Network Dictionary

This will give you an almost complete list of all terms that you'll ever encounter (this covers any phrases that may be missed on this page). Obviously, you'll want to trawl through these looking for those that are relevant to you and your intended audience.

As an example, consider some of the entries under D:

Data Architect
Database Normalization

All seem quite useful. However, there are millions of entries so you may want to apply some rules (if you've heard of it, then it's in, otherwise it's out):

  1. No acronyms (e.g. TCP/IP is in, OOD is out)
  2. No specific application names (e.g. Microsoft Word is in, Kazaa-Lite is out)
  3. No specific language names (e.g. Java is in, Haskell is out)

Hope it helps

EDIT: Originally sourced from: http://www.networkdictionary.com/software/dictionary.php but the site appears to have been abandoned.

EDIT 2: It appears that the Internet Archive have a copy: https://web.archive.org/web/20120507195610/http://www.networkdictionary.com/software/d.php Thanks to @locster for the link.


A few words from mathematics:

  1. Canonical. The distinguished representative of a group of equivalent items.
  2. Hash. Not usually made from cabbage.
  3. Heuristic. An imperfect solution that may be fine given the circumstances, and that does not over-promise.
  4. Linear / exponential. How the rate of memory or processor is affected by the size of the input.

A few words that are often misinterpreted:

  1. Proxy. Something that acts on behalf of another.
  2. Client/Server. Like your browser vs a web server.
  3. Master/Slave. Nothing to do with human slavery or S&M, usually.
  4. Daemon. A process that usually runs without human interaction. Nothing diabolical.
  5. Wizard. A user-interface element that guides a human through a procedure.

A few words whose violent connotations are usually unintended:

  1. Kill. When applied to processes, not kittens.
  2. Thrash. A process that is not getting anything done due to lack of memory to expand into.
  3. Bash. A scripting language.
  4. Crash. Eminently survivable for anything capable of rebooting.
  5. Bang. Another name for the symbol '!'.
  6. etc.

And it may be worthwhile including a list of epithets since everyone wants to know when they're being talked about : pointy-haired boss, etc.


I would add those:

  • agile
  • KISS (Keep It Simple Stupid)
  • refactoring
  • application programming interface
  • They are thrown around often enough in blogs and programers.se often enough. I was raised off of KISS. (we won't talk about the band...) – Berin Loritsch Jan 21 '11 at 13:09
  • YAGNI - You ain't gonna need it
  • Scrum
  • KISS
  • Ajax
  • Encapsulation
  • Inheritance
  • Web Service
  • Components

You might want to discuss the precision of language. I sometimes joke that software development necessarily turns us into pedants, not because we enjoy it, but because when you're programming you very often need to be precise. This then leads into the large amount of jargon, because domain-specific language allows you to be both quick and precise.

  • +1 this is very true. Witness all the questions here that ask if X is 'required' or 'needed', when the asker really means 'recommended'. If one can't ask questions precisely, they are at a disadvantage because our field requires precision. – GrandmasterB Jan 14 '14 at 16:40

I'd love it if you'd address non-standard uses of punctuation typical with some programmers, like "I refuse to put the comma in a string literal quotation when the source did not use a comma", <----- said Brian.

The use of brackets, [], and mustaches (or braces, for the less hip crowd) {} could be similarly given treatment.

3- Recursion might be fun to point out. See point 3.

For a fun break, it might be enjoyable to point out some purely cultural inspirations that are common to much of the developer community, from raptors (thanks, XKCD), to Monty Python, to a pointer back to some of the early common grounds that founded the modern community: IRC, bulletin boards/forums, and Usenet.


SDLC would be my suggestion for another topic to cover.

A few other terms that may be worth covering:

  • Application
  • System
  • Program
  • Requirements

If you get outside of technical folks some of these terms can take on other meanings. Applying for a job can mean taking an application so some people may not think of software in terms of applications. Similarly, there are recreational activities and government initiatives that some people may view as programs. Thus, there may be a difference between program managers at Microsoft and program managers at the YMCA, just to give a specific example here.

I'd be tempted to see if you could solicit ideas from the participants in advance and have part of the talk be a bit more interactive. This is just an idea for the talk itself that I don't know if you already considered this or not.


I would include a reference card/cheat-sheet for everyone to take home. Remembering all that stuff will be hard if a lot of it is new.

On the subject, I would definitely add "design patterns" as a general concept.

Not the answer you're looking for? Browse other questions tagged or ask your own question.