Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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
share|improve this question

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

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

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
@Martijn: this page would be perfect for that ;-) – Syg Jan 21 '11 at 13:05
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
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
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
up vote 7 down vote accepted

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: but the site appears to have been abandoned.

EDIT 2: It appears that the Internet Archive have a copy: Thanks to @locster for the link.

share|improve this answer
Daemon nice one! +1 – user2567 Jan 21 '11 at 16:14
The link does not seem to work anymore. – Jan Hudec Jan 14 '14 at 15:10
@JanHudec Edited to reflect that it's gone. Shame - it was a good source of material. – Gary Rowe Jan 14 '14 at 17:29

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.

share|improve this answer

I would add those:

  • agile
  • KISS (Keep It Simple Stupid)
  • refactoring
  • application programming interface
share|improve this answer
They are thrown around often enough in blogs and 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
share|improve this answer

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.

share|improve this answer
+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.

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer

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