PART I. An explanation of the roles in all those jokes

It is important to view knowledge as sort of a semantic tree — make sure you understand the fundamental principles, ie the trunk and big branches, before you get into the leaves/details or there is nothing for them to hang on to.

Elon Musk

Explanation 1. What do programmers really do

How many programmers does it take to change a light bulb?

- None, its hardware problem.

Programmers take care of creating software, while the maintenance and configuration of hardware is handled by service technicians or IT specialists.


Explanation 2. Ship the right product

Project Manager is a Person who thinks nine women can deliver a baby in One month.

Software development is a creative process in which increasing resources rarely yields linear efficiency increase and Project Manager is responsible for delivering the right project (product) on time.


Explanation 3. Don’t make me think

A user interface is like a joke. If you have to explain it, it’s not that good.

User interface is an area where human interaction with software occurs (e.g. online website form). Well-designed interface should be intuitive and understandable for its users.

Steve Krug, a recognized User Experience Specialist, says that the basic principle when designing user interfaces is „Don’t make me think!”


Explanation 4. Always online

Ubuntu is an ancient African word, meaning "I can't configure Debian"

Ubuntu and Debian are free GNU/Linux operating systems[1] developed by the open source community. Ubuntu distribution is easier to use and configure for beginners. The word Ubuntu comes from the language of southern Africa tribes and means “humanity towards others”.

Server and network configuration is usually handled by System Administrator or Network Administrator.

[1] robertmassaioli reminds us that Ubuntu is built on top of Debian.


Explanation 5. An organized collection of data

A SQL query goes into a bar, walks up to two tables and asks, "Can I join you?"

Structured Query Language (SQL) is used to create and modify databases and for placing data in them that can be retrieved in the future. SQL databases are divided into tables containing relevant data that, for example, can be joined (merged) thanks to SQL queries.


Explanation 6. If you don’t like testing your product, your customers won’t like to test it either

How many software testers does it take to change a light bulb?

- None. Software testers just noticed that the room was dark. Testers don't fix the problems, they just find them.

The role of software testers is to run the program in various environments (web browsers, operating systems) and search for errors and bugs in them.


Explanation 7. It’s good practice to choose words wisely

An SEO expert walks into a bar, bars, beer garden, hangout, lounge, night club, mini bar, bar stool, tavern, pub, beer.

SEO specialist handles optimizing websites for search engines (Google, Bing) to achieve the highest position in search results.

One of his primary tasks is to properly describe the website, in accordance with the content within it, and to determine which keywords should be used for website positioning.


Explanation 8. Who is paying for it

I’ll know what I want, when I see it

You can create software for yourself, your friends, the company you work for or your own clients (freelance).

Even if we manage to create the best specification during the software development process, the only thing we can be sure about is change.


PART II. An explanation of the jokes about the work of a programmer

Software Is Eating the World

Marc Andreessen


Explanation 1. Your first words

A beginning programmer walks into a bar, takes a look around and says „Hello World!”

It is common practice in the programming books and tutorials that the code that demonstrates the basics of the language outputs “Hello, World!” to the user.

At http://helloworldquiz.com/ you can participate in quiz, trying to guess the programming language used basing on the mini program displaying “Hello World” message.


Explanation 2. What programming language do you need

- “Knock, knock.”

- “Who’s there?”

very long pause….

- “Java.”

Programs written in the first versions of Java were slow, which among other things was related to sluggish launching of virtual machine that executes the code written in that language.

There is a very popular statement in the marketing environment saying that people don’t want to buy a quarter-inch drill, they want a quarter-inch hole. The drill is only used to accomplish their task, and the same applies to the dozens of programming languages available.

Popular programming languages depending on the project developed:

WWW: Python, PHP, Ruby, JavaScript
Mobile application for iOS (iPhone, iPad): Objective-C, Swift
Mobile application for Android: Java
Operating systems: C, C++
Games: C++


Explanation 3. Programs must be written for people to read

When I wrote this, only God and I understood what I was doing. Now, God only knows.

Programmers spend a lot of time on reading and understanding the code, so it is very important to make it easier for them.

If the solution used seems obvious, it does not mean that it will still be in the next weeks or months – especially when new people join the project.

The 3D Pinball game available on Windows XP system was not included in the new system versions because of poor code quality and lack of documentation. Microsoft programmers could not understand how the game worked, so in connection with other tasks they abandoned the idea of porting it to a newer system version[1].

[1] https://blogs.msdn.microsoft.com/oldnewthing/20121218-00/?p=5803


Explanation 4. From sorting numbers to thinking machines

algorithm

Word used by programmers when they don’t want to explain what they did.

Algorithms are precise instructions that must be followed in the right order. The result of the correctly implemented algorithm is always the same.

Popular algorithms worth familiarizing with at first are used for sorting and searching data.

Knowledge of algorithms is useful everywhere.


Explanation 5. Logic will get you from A to B

A programmer’s wife send him to the grocery store with the instructions

„Get a loaf of bread, and if they have eggs, get a dozen.”.

He comes home with a dozen loaves of bread and tells her: „They had eggs.”.

The key phrase in the above joke is “if […]”, which is the basic control instruction practically in every programming language.

An example of tea making algorithm that uses this instruction[1]:

1. If the kettle does not contain water then fill the kettle
2. Plug the kettle into the power point and switch it on.
3. If the teapot is not empty then empty the teapot.
4. Place tea leaves in the teapot.
5. If the water in the kettle is not boiling then go to step 5
6. Switch the kettle off.
7. Pour water from the kettle into the teapot.

[1] http://users.evtek.fi/~jaanah/IntroC/DBeech/3gl_algorithm1.htm


Explanation 6. Somebody had the same problem as you

Chuck Norris always uses his own design patterns, and his favorite is the Round­house Kick.

Design patterns are proven ways of solving typical issues. These are not ready fragments of the code that can be pasted into the project, but descriptions or templates showing how the problem should be solved.

Design patterns are distinguished from algorithms by the fact that algorithm is a set of instructions to be followed, and the design pattern describes how to structure the code in order to clearly show the relationship between the components.


Explanation 7. You don’t buy two tickets to cinema when you go there alone

An optimist will tell you the glass is half-full; the pessimist, half-empty; and the engineer will tell you the glass is twice the size it needs to be.

When writing software, take into account the devices on which it will be run and their limitations (CPU capabilities, RAM available).

Nowadays, the memory available in computers is cheap, and the processors are many times more efficient than those built a few years ago, but the software is often much more complicated.

It was calculated that building an iPhone in 1991 would have cost about $3.5 million, and RAM available would cost $1.44 million![1]

[1] http://www.businessinsider.com/iphone-35-million-1991-2014-2?IR=T


Explanation 8. It’s almost always about team work

The problem with GIT jokes is that everyone has their own version.

GIT is a popular version control system. One of its features is the ability to store a local copy of the code repository and having its own version.

Using version control systems facilitates the cooperation with other team members, storing the code in an orderly manner, and allows for easy way to restore one of the previous versions.


Explanation 9. The work environment

Why programmers like UNIX?

unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep

UNIX is the operating system developed at Bell Labs in 1969. Unzip, strip, etc. is the list of commands available in this system. For example, unzip command is used for unpacking file archive.

Preferred operating system often depends on the technology you are working on. For example, if you want to create iPhone applications you should use OS X system, but when creating Windows Phone applications, the easiest way is using Windows system.

Working environment also includes Integrated Development Environment (IDE), version control system and project management tools (e.g. Jira).


Explanation 10. How to solve problems

;

Hide and seek champion.

The semicolon „;” is used as an instruction separator in many programming languages.

Nowadays, well-developed programming environments easily detect the lack of this separator, but in the earlier years, programmers used notepad. If you are starting your programming adventure you should choose an appropriate IDE for technology you want to use (for example, Xcode is the natural choice for creating iPhone applications).

There are plenty of sources on the Internet that can help you solve other programming issues. One of the most popular is http://stackoverflow.com/ website. John Carmack, the creator of games such as Doom and Quake, thinks that this website allows saving billions of dollars by increasing the productivity of developers[1].

[1] https://twitter.com/id_aa_carmack/status/380018564792455168


Explanation 11. Done is better than perfect

A Pig and a Chicken are walking down the road.

The Chicken says: "Hey Pig, I was thinking we should open a restaurant!"

Pig replies: "Hm, maybe, what would we call it?"

The Chicken responds: "How about 'ham-n-eggs'?"

The Pig thinks for a moment and says: "No thanks. I'd be committed, but you'd only be involved."

The fable was referenced to define two types of project members by the scrum agile management system: pigs, who are totally committed to the project and accountable for its outcome, and chickens, who consult on the project and are informed of its progress. This analogy is based upon the pig being able to provide bacon (a sacrificial offering, for which the pig must die in order to provide) versus a chicken which provides eggs (non-sacrificial).

For a Scrum project the Product Owner, the Scrum Master and Development Team are considered as people who are committed to the project while customers and executive management are considered as involved but not committed to the project[1].

[1] https://en.wikipedia.org/wiki/The_Chicken_and_the_Pig


Explanation 12. The Wisdom of Crowds

A blonde, a drunk and an alien walk up to a bar, but it’s a Microsoft bar, so it’s closed.

In the 1990s and early 2000s, Microsoft was a closed company and strongly guarded its secrets. In contrast to Microsoft and large corporations, projects were being developed the code of which was made available as Open Source.

Currently this is changing and Microsoft is heavily involved in open source projects as well. This gives the company unique benefits, because in addition to employees, volunteers can be involved in software development. This speeds up the processes of finding errors, adding new functionalities and releasing new versions.


Explanation 13. Of all the things I've lost, I miss my mind the most

People can be divided into two groups: those who do backups, and those who will.

Backup is a copy of data that, for example, can be used to restore software after a failure. Creating backups is a very good practice.

A serious incident in 2017 was GitLab loss of data. Despite creating backups, it turned out that they were not well-tested and some of the data could not be restored[1].

Create backups and check whether you can recover data from them as often as possible.

[1] https://about.gitlab.com/2017/02/01/gitlab-dot-com-database-incident/


PART III. An explanation of the jokes about the work of a computers

Computers are useless. They can only give you answers.

Pablo Picasso


Explanation 1. How do we really talk to the computers

There are only 10 types of people in the world: those who understand binary and those who don't.

Binary number is composed of elements called bits, which can take one of two states (0 or 1). Binary number 10 is 2 in decimal and therefore, two types of people are mentioned in the above joke.

Binary numbers are converted to decimal numbers as follows:

10 is 1*(2^1) + 0*(2^0) = 2
1001 is 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 9
1101 is 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 13

The use of binary code in computers is very effective. State 0 (bit off) and 1 (on) can be represented by low and high voltage.


Explanation 2. Information representation

A guy walks into a bar and asks for 1.4 root beers. The bartender says "I'll have to charge you extra, that's a root beer float".

The guy says "In that case, better make it a double."

Computers using binary code store the stream of zeros and ones in memory. When creating software, the task of programmer is to tell the computer how to interpret this stream.

For example, the binary code 1000001 stored in the computer’s memory could mean a letter A, or an integer number 65.

Back to the joke, floats and doubles are a way to store numbers in computer's memory with a fractional component. A double has double the precision and the size as a float. Because the guy asks for 1.4 this cannot be an integer (number without a fractional component) but must be a float or double.

Double is almost always better choice for numbers with a fraction because it's more precise (although, it uses more computer's memory)[1].

[1] thanks to xRmg and evrae for their their comments.


Explanation 3. People start counting from the number one

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors[1].

Off-by-one is a programming error occurring[2] when you make a mistake such as starting from 1 when you should start from 0. In modern programming languages, the initial element of a sequence usually is assigned the index 0.

[1] As lampshadish2 pointed out, this joke plays on famous quote by Phil Karlton who orginally said "There are only two hard things in Computer Science: cache invalidation and naming things".
[2] knome noted that this error mostly occurs when a programmer incorrectly checks bounds of an array (for example, attempting to take the third item of a list of only two).


Explanation 4. Class is to knowing what to say

Whats the object-oriented way to become wealthy?

  • Inheritance

Jeff Goodell: Would you explain, in simple terms, exactly what object-oriented software is?

Steve Jobs: Objects are like people. They’re living, breathing things that have knowledge inside them about how to do things and have memory inside them so they can remember things. And rather than interacting with them at a very low level, you interact with them at a very high level of abstraction, like we’re doing right here.

Here’s an example: If I’m your laundry object, you can give me your dirty clothes and send me a message that says, “Can you get my clothes laundered, please.” I happen to know where the best laundry place in San Francisco is. And I speak English, and I have dollars in my pockets. So I go out and hail a taxicab and tell the driver to take me to this place in San Francisco. I go get your clothes laundered, I jump back in the cab, I get back here. I give you your clean clothes and say, “Here are your clean clothes.”

You have no idea how I did that. You have no knowledge of the laundry place. Maybe you speak French, and you can’t even hail a taxi. You can’t pay for one, you don’t have dollars in your pocket. Yet I knew how to do all of that. And you didn’t have to know any of it. All that complexity was hidden inside of me, and we were able to interact at a very high level of abstraction. That’s what objects are. They encapsulate complexity, and the interfaces to that complexity are high level[1].

[1] http://www.rollingstone.com/culture/news/steve-jobs-in-1994-the-rolling-stone-interview-20110117


Explanation 5. Not every boat has a lifeboat

Did you mean: recursion?

If you enter the phrase "recursion" in Google search, Google will ask you if you meant... exactly the same phrase. This is not a mistake, but a joke of Google programmers who shows the idea of recursion which defines a function that calls itself.


Explanation 6. Looking for a match

Question: What did one regular expression say to the other?

Answer: .+

Regular expressions are patterns that can identify a set of matching strings, or can specify important parts of a string.

Pattern .+ means "everything", and specifically it is „any character (.) once or more times (+)”.


Explanation 7. Keeping your data safe

Two hashes walk into a bar, one was a salted.

One of the basic security rules is not to store user passwords in unencrypted form (easy to see and copy).

Instead of passwords written in "plain" text, so-called hashes are stored in databases (text transformed to fixed length). With a hash it is very difficult to recreate the password set by the user, but having the password we are able to compare whether the generated hash is equal to that stored in the database.

Salt is an additional parameter added to the user password, which secures the generated hash.


Explanation 8. Overcoming the Language barrier

Q: According to Sigmund Freud, what comes between fear and sex?

A: Fünf.

A joke used to show linguistic differences, such as language-specific letters (e.g. „ü”).

Nowadays, when creating software, global reach is very often considered as an important aspect, therefore, software should be available in many languages. Encoding scheme is usually designed for a specific language or group of languages. For example, Windows-1250 used in Windows system is designed to represent texts in Central European languages.

One way of solving this situation is to use encoding scheme such as UTF-8, which covers a much wider range of characters, different alphabets and emoji icons, such as: 😂