10

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
Dynamic
  • 5,746
  • 9
  • 45
  • 73
Edward Tanguay
  • 309
  • 2
  • 8
  • 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 09: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 09: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
  • @Edward Tanguay I agree with @Syg. You should include this page so that they can see the discussion over what we consider important to others outside our field. Then apply @Martijn Verburg's suggestion. – Gary Jan 21 '11 at 13:46
  • 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
  • 1
    I thought I was a developer but I had no idea before checking wikipedia what was `pub/sub`. I got a feeling that your list have some sort of networking or web bias. – Xavier T. Jan 21 '11 at 16:27
  • With only two hours, how can you hope to describe any three of those concepts, let alone the whole list? I'm reminded of the story on slashdot, years ago, of a journalist who publicly derided the military for using Lego toys to teach their personnel about robots. She had no clue what 'Mindstorms' was. – oosterwal Jan 21 '11 at 19:19
  • I've given this talk format three times before in the last decade, everyone leaves always with a headache, including me. But it clears up so many wrong conceptions, one particpant once said, "I thought .NET compiled to Java", this time I'm going to do a lot more "info graphics" which show at a glance, e.g. "what operation systems are out there" and "what languages developers program in these days", a lot of it is subjective but it gives people enough information to at least ask more informed questions when talking about computers and software – Edward Tanguay Jan 22 '11 at 15:09
  • 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

8 Answers8

7

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.

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.

Gary
  • 24,420
  • 9
  • 63
  • 108
5

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.

Mike Samuel
  • 1,840
  • 14
  • 19
2

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
1

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.

Rory Hunter
  • 1,737
  • 9
  • 15
  • +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
1

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.

BrianH
  • 6,092
  • 1
  • 21
  • 23
1
  • YAGNI - You ain't gonna need it
  • Scrum
  • KISS
  • Ajax
  • Encapsulation
  • Inheritance
  • Web Service
  • Components
Sorantis
  • 2,720
  • 17
  • 24
0

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.

Matt Ellen
  • 3,368
  • 4
  • 30
  • 37
Syg
  • 754
  • 1
  • 4
  • 8
0

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.

JB King
  • 16,795
  • 1
  • 40
  • 76