Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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
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
1  
Yes, one part of the presentation will be lifting sentences directly from developer blogs and podcasts and explaining them, thereby touching on all the background concepts needed to understand them and put them in perspective, for instance, this one: "what your SQL statement returns is IEnumerable dynamic, which means that it's typed on the fly - duck frickin typing!!!" In order to understand it (it's from a podcast on Webmatrix) and to understand why something like "duck typing" would be so exciting, you have to understand a network of concepts. –  Edward Tanguay Jan 21 '11 at 9:32
2  
@Martijn: this page would be perfect for that ;-) –  Syg Jan 21 '11 at 13:05
1  
And I would change from version control to source control, it's a wider concept (branching merging etc) –  Syg Jan 21 '11 at 13:09
6  
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

8 Answers 8

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:

Daemon
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.

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

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 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

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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