CHAPTER

Glossary

This glossary is intended to help you talk like a programmer, which is an important part of being a programmer.

12 factor app

abstraction -

accessibility -

agile - A theory/approach/set of processes for building software. Agile software development focuses on continually making improvements to existing processes/software and constant communication amongst end users in order to deliver better software in a faster and more consistent way. A buzzword. An alternative to agile is “waterfall”.

AJAX - Asynchronous JavaScript.

algorithm - A set of instructions for solving a problem.

API - Application Programming Interface. There are two overlapping definitions:

  1. How software exposes its functionality to other software.
  2. A backend appliation

application - Another word for a computer program.

Every web page can be considered a software application.

B2B - Business-to-Business. When the primary userbase(s) of a software are driven there by

B2C - Business-to-Consumer. When the primary users of a software are people, the software is said to be B2C.

back-end web development - Any web development which is not about building user interfaces.

bash - The most common type of command line interface software in the world. It stands for Bourne Again Shell, named after its predecessor, the Bourne shell.

brand - A brand is a name, logo, slogan, design, or other feature that distinguishes an organization or product from its rivals in the eyes of the customer.

browser - A software application that interprets and displays webpages.

In 2018, the most commonly used browsers are Firefox, Safari, and Chrome.

All browsers can understand HTML, CSS, and JavaScript.

browser developer tools -

The primary web developer tools:

  • JavaScript console
  • Network requests
  • HTML/DOM elements inspector
  • Application Storage (cookies, localStorage, etc)

bug - When software doesn’t do what you want it to do.

Usage: “I spent Friday debugging all the code I wrote Monday through Thursday.”

buzzwords - Words that have become so popular that lots of people who use them aren’t really sure what they mean. Recruiters and business people use a lot of them. When you hear one you don’t know, write it down and look it up later. It is good to be aware of software zeitgeist!

Some buzzwords, like component, still have relatively formal meanings when used by software engineers in the workplace.

It feels corny, but it’s a good idea to use buzzwords when you’re trying to get interviews. Make sure to use them in your resume and social profiles.

cache -

client-server model -

cloud computing - Buildings full of computers that you can rent by the minute.

This is handy - you can host your applications on someone else’s servers - you don’t have to worry about physically maintaining those servers yourself, which is a real pain in the ass.

The biggest cloud computing company is Amazon Web Services.

command line interface - See Terminal Emulator

component - An individual piece of system.

See, also, modularity.

composition -

configuration -

Configuration is a cause of and solution to “It runs on my machine.”

continuous integration - Frequently integrating

“Move fast and break things.”

See deployment.

CRUD - Create, Read, Update, Delete.

These are common needs in software that uses data that changes over time. You will often hear the phrases like “A standard CRUD app.”

CSS - A programming language called “Cascading Style Sheets”. Empahsis on “style” – CSS is used to describe the presentation of a document written in HTML. A CSS style sheet is made up of rules that describe how you want various content in the HTML document to look.

TL;DR This is where you tell the browser how the content should look. Fonts, colors, sizes, etc.

CSS rule -

cybersecurity -

data

data pipeline

data science - Any sort of programmatic attempt to get useful information from data. A buzzword.

data structure

data type

database - A organized collection of data that is electronically stored.

A fancy synonym for database is “storage layer”.

debugging - Figuring out what went wrong with your broken code and fixing it.

de facto standard -

demo Short for “demonstration”. A demo happens when someone gives a visual walkthrough of a software’s functionality.

dependency

deployment - Getting your webpage to show up at https://www.SuperFancyUrlLook.com when you want it to, looking how you want it to. For long-term projects, you will often want to formulate a “deployment strategy”. Every software system is unique, as are their deployments. This is where the rubber hits the road and software is delivered to end users.

designer

developer

developer tools

DevOps - Short for Developer Operations. This is the idea that Deployment (see above) is the responsibility of everyone on the software team. It is a culture – If your boss says “Why isn’t this working on the website?”, “It works on my computer” is not an acceptable response. This is a buzzword.

“In the DevOps world, we are all system administrators.”

distributed - Being in multiple locations. Putting your eggs in multiple baskets.

documentation - The manual for a technology.

Read The Fucking Manual (RTFM).

EcmaScript - The name for the “official” JavaScript standard.

JavaScript is the browsers actual implementations of EcmaScript standards.

EcmaScript 6, or “ES 6”, is the shorthand for the latest major version of JavaScript.

environmental variable - Variables stored on an operating system.

event loop -

feature

feedback

framework -

front-end web development - All of the work associated with creating the proper HTML, CSS, and JavaScript

Same thing as “frontend” and “front end”. Spelling is your choice.

Compare to back-end web development.

gamification - Rewarding (or penalizing) users for certain actions, as a game would.

Gamification is often pursued to make software “stickier”, i.e. more addictive.

git - A system/software library for tracking changes to your code. It’s like “saving” a document (or infinitely multiple versions thereof). Git makes it really easy to experiment with code (you can always go back) and work with other people. Branching is the most important feature in git.

git branches - Lightweight copies of a codebase. Use them for feature development, experimentation etc.

Many companies

GitHub - A company that hosts git repositories as a service.

Open-source repositories are free. GitHub hosts most of the world’s most important open-source software.

GitHub offers other secondary services, including a simple webpage hosting service called GitHub Pages.

Microsoft purchased GitHub in 2018.

Google.com - A great place to find answers to programming problems.

hack - Making something work.

hardware

HTML - A programming language called “HyperText Markup Language”. Note the “Markup Language” – HTML is not formally considered a programming language.

HTML5

TL;DR This is where you put your content. Titles, paragraphs, images, links.

HTTP HypterText Transfer Protocol. This is the primary protocol by which computers talk to each other and send data around on the Internet.

It is important to be aware of HTTP methods. The most common are GET, POST, PUT, and DELETE.

An HTTP message looks like this:

imposter syndrome - When programmers think they are not good enough at programming to be called “programmers”.

interface -

iterate

JavaScript - Unlike HTML and CSS, a full-blown programming language. You use JS to add interactivity to web pages.

TL;DR This is where all of the

EcmaScript

lean

library - A body of code that someone else has written that you can import and use within your own code.

linear algebra - The most important branch of mathematics for computational sciences.

Linux - An open-sourced operating system invented by Linus Torvalds in the early 1990s. This is the most popular operating system for servers. There are many different distributions of Linux, including Ubuntu, CentOS, Red Hat Enterprise Linux, and Debian.

local - Something that has to do with only one computer. Most commonly used in reference to your own computer.

local development environment - The computer you’re actually writing your code.

man pages - The manual pages for specific commands on the command line.

See RTFM.

mockup

See wireframe.

model -

modularity - The programming concept that you make better software when you divide pieces of code up into logical units.

This can take many different forms.

MVC Model-View-Controller.

MVP Minimum Viable Product. The absolute minimum you can do while still achieving the absolutely essential functionality your product users require.

native - Software that runs directly on some system.

A browser is a native application. A webpage is a web application. iPhone and Android mobile applications are native apps. A mobile-friendly webpage is still just a web application.

The fetch Web API is a native browser API/library. jQuery is a third-party API/library.

networking -

  1. Anything that has to do with different computer systems communicating with one another.

  2. What you should be doing at meetups.

Node.js - A JavaScript runtime environment, allowing JavaScript to be run outside of the browser.

Colloquially described as “JavaScript on the back-end/server/command line.”

npm -

object-oriented programming

open source software - Software that is available to use, essentially for free, but with wrinkles here and there, dependent on which license they use. OSS has become the predominant mode of collaborative software development – it will be an active source of discussion for decades to come.

“Think free as in freedom of speech, not free beer.”

  • Richard Stallman

operating system - The software that manages how a computer’s hardware and software work together.

Examples of operating systems: Linux, Windows, OS X, iOS, Android.

An application that runs on Linux may not run on Windows. An application that runs on OS X 9 may not run on OS X 10.

package

pair programming

post-mortem

product

Note the distinction between products and services.

programming language - A language used to make software programs.

Some programming languages are very limited, e.g. HTML and CSS (only good for making user interfaces). Some languages are Turing Complete, which means they can be solve any problem that can be solved by computation.

There are hundreds of notable programming languages. Some of the most popular Turing Complete ones are: Python, JavaScript, C, C++.

prototype - An early, trial version of some software. You build a lower-stakes version of software in order to experiment, learn, and discover potential problems before building “production-level software.”

For better and generally worse, “prototypes” often morph into the production software.

Python - The most popular programming language in the world (Arguably - a lot of web folk will tell you JavaScript is the most popular, but people like Python more). Used for everything you can think of, including back-end web frameworks and data science.

quality assurance - Making sure a piece of software does what it is supposed to do - when, where, and how it is supposed to do it.

“Did this pass QA?”

quickstart

recruiter

refactoring - Cleaning up your code.

repository -

request-response cycle -

REST - Representational State Transfer. A set of coding guidelines that describes how the API endpoints that front-end applications use to query back-end applications should be structured.

retrospective - When software engineers who work together get together and talk about how their work over some immediately preceding amount of time has gone. They talk about what went right, what went wrong, and what they can do to increase output during the next time period.

root user - The God Mode of the operating system. You can do all sorts of things with this. AKA superuser, AKA root. Prepend sudo to a command to run it as the root user. Be careful if you’re removing or moving files!

RTFM - Read The Fucking Manual.

Often used when help is requested by someone who did not RTFM first.

rubber duck debugging - Explaining a problem to a rubber duck instead of another human. A problem-solving technique to help you think through the problem.

security - Keeping people out of your special places.

semantics -

separation of concerns - User interfaces, data, and programming logic are three different things.

services -

Services are necessarily constrained by their human-dependent element.

single-page applications

software -

software development -

software development life cycle, software development process -

source code - The collection of code that makes up a program. Usually written in plain text.

spaghetti code - Code that looks like spaghetti when it should be lego blocks.

sprint - The unit of time that an agile software team divides up it’s work by. The most common length of

stack –The set of technologies you are using in a project. This indispensable front-end web tech stack is HTML/CSS/JavaScript (though there are now many other tools web developers now use to make everyone’s lives better).

stack overflow

StackOverflow.com - A question-and-answer site for programmers. It is an indispensable resource in a programmer’s toolkit.

standards body - Any organization that sets standards for a technology (e.g. “The

W3C and WHATWG are the two most relevant standards bodies in web development.

story points - The agile software methodology term for how much effort it will take a software engineering team to complete a user story.

strategy - An overarching plan for achieving a goal.

Do not confuse with tactics, which are the specific actions taken in pursuit of the strategy.

syntax

system administration - Keeping the servers running.

systems engineering

systems thinker - Someone who consciously considers the entire system before building one piece of it.

terminal emulator A text display that gives you a window into the guts of your operating system. It lets you make your computer do things at a more granular and system-wide level than graphical displays. When you type in commands like ls or sudo chown 755 file.txt, you are using a terminal emulator.

When programmers use any of the following terms, they’re often referring to using the Terminal Emulator: shell, command line interface (CLI), command line, terminal, kernel. This book typically uses “command line”.

If you’re using a Mac or Linux, this is the “Terminal” program. If you’re on Windows, this is the PuTTY application - TTY comes from the word “teletypewriter”.

testing - Making sure your code works.

text editor - The program you use to write your code in.

TL;DR - Too long; didn’t read.

Another way to say this is, “This is the main point I’m trying to make.”

tool

toolkit

Turing complete programming language

Unix

Unix-like

URL - Uniform Resource Locator. This is what you use to find resources on the world wide web. This tells you the location of a resource and the protocol you should use to get it. For instance, in https://google.com – HTTPS is the protocol; google.com is the address.

users - The people who actually use something, e.g. software.

user experience -

user interface - The graphics users look at when using software.

user story - A unit of functionality in a software application. It is what a software user needs to be able to do/experience

venture capital - The money that rich people give in exchange for stock in an early-stage company. Many technology companies take venture capital.

In America today, the majority of money is concentrated in the hands o

version

Semantic versioning is the most popular.

version control - Tracking changes to code, such that you can rewind, make copies, and experiment with it. Git is the dominant version control system at present.

waterfall - Where agile software development is about iteration, waterfall is about incrementalism. This theory of development has fallen out of favor and will likely not be making a comeback.

WebAssembly

web application - An application created to run inside of a browser.

web development - The practice of making webpages for the World Wide Web.

wireframe

workflow - A set of steps for solving problems or creating things.

World Wide Web - A place where things can be found using URL addresses.

World Wide Web Consortium (W3C) - the main international standards organization for the World Wide Web