{ datagubbe }


datagubbe.se » the fully annotated hacker test

The Fully Annotated Hacker Test

For those of us who didn't receive a case of beer with our computer.

Autumn 2024

Background

The Hacker Test is, as the name suggests, a long series of questions designed to measure how much of a hacker the test taker is.

My own first contact with the test was in the mid-1990s, in the form of an Amiga program. My score was very low, for obvious reasons: the questions I didn't find completely undecipherable were about systems and software that felt old and mysterious even back then.

Still, there was something deeply fascinating about it. All those acronyms, obscure cultural references and allusions to geeky jobs and hobbies spoke to me on a profound level. I often tried to learn more about the questions I couldn't answer, to little avail. My effeorts were hampered both by a poor understanding of the source material and limited access to an Internet that was much smaller and harder to search back then.

My score is higher now, but still well below the threshold of the Hacker level: most of the hardware, software, activities and cultural mores mentioned are now historical artefacts and curiosities. Others yet are perpetually relevant: wisdom from another era of computing that still applies today.

Both, I think, are worth preserving and documenting.

Annotations

Various attempts have been made to annotate the test, but the versions I've found have either been incomplete or - I feel - not exhaustive enough.

This version is my own attempt at fully annotating all of the questions. It's built on this plain text version. Many different variations exist, but they seem to remain basically the same.

As far as the annotations go, they're a compromise between detailed accuracy and reasonable brevity. I've tried writing them with my own teenage self as the target audience, which means some computer experience, but not a full-fledged professional geek. Many of the questions touch on subjects I'm still very far from being an expert on. Feel free to report any errors!

The following questions have incomplete or missing annotations:

Using this version

The interactive portions (scoring, hiding annotations) on this page are implemented using CSS. (As usual, datagubbe.se uses neither cookies nor JavaScript.) The annotations are enabled by default, but can be disabled by unticking the first checkbox below.

If you can't see the annotations, your browser probably has limited CSS support. Please try disabling stylesheets, and the annotations should appear. If your browser has no CSS support, the annotations should already be visible - though it won't be possible to hide them.

The Hacker Test








There was a time when racking up several consecutive hours worth of screen time was considered cool and worthwhile. This is probably somewhat linked to computer scarcity: if you only had occasional access to a huge mainframe, making the most of those hours counted. Today it's the other way around; our smartphone dependency makes it hard to be offline for 32 hours straight.


Paper tape with punched holes - just like telegraph ticker tape - was once upon a time used for program and data storage. Patching it (correcting errors) could be done using various office utensils, such as scissors, bits of new paper and sticky tape.





Anyone with a creative passion can probably relate to getting lost in a flow state.



A program can work perfectly fine even if its source code doesn't make much sense.


Writing a flight simulator requires knowledge of advanced 3D graphics programming, mathematics and - especially on the limited computers of yesteryear - advanced code optimization.


Opening a prefab computer in order to tinker with the hardware usually voids its warranty. Old home computers, UNIX workstations and mainframes were (and are) only supposed to be serviced by a authorized technician. Hence, voiding the warranty implies a certain skill level (or just stupidity).




When Fortran II introduced subroutines, all parameters to those subroutines were passed by reference (a pointer to a memory location containing the actual data). In order to allow passing an integer literal by reference, the compiler automatically stored the value of the literal in a reference pointer. Some compilers reused these pointers using a lookup table. This meant that if you passed a literal 4 to a subroutine parameter, and the subroutine modified that parameter, passing a literal 4 to another subroutine might actually result in another value being passed.


DWIM stands for "Do What I Mean", usually referring to programs with primitive functionality for autocorrecting commands and then immediately executing them. Such primitive autocorrections could, naturally, be catastrophic.

Today, most people get to name their computers in some fashion, typically by setting a network hostname. Back when computing was mostly about using either mainframes with terminals, or non-networked PC:s, this was a much less common occurrence. It typically implied you were the first person to set up an expensive mainframe and configure its operating system.

A "feature" in this case means a bug or undefined behavior that's been cleverly and/or productively utilized by a power user or programmer.

Slime-molds are a food item in the game NetHack.

Most programming languages today have convenient abstractions for working with dates, taking leap years and other intricacies into account. Most older systems didn't, and correctly calculating your age in days wasn't always trivial.

Apparently the dream of many a hungry hacker. UNIX vendor Santa Cruz Operation (SCO) collaborated with Pizza Hut in order to offer online pizza ordering as early as 1994.



In-jokes are a common way of lighthearted gatekeeping or establishing status within a group. If they're not laughing, they're not real hackers - or at least not as much of a hacker as you are.



Jabberwocky is a poem from Lewis Carroll's "Through the Looking-Glass and What Alice Found There", every bit as whimsical (or psychedelic) as the rest of the book. Puns, wordplays and other amusing nonsense is usually popular pastimes on university campuses and has naturally influenced hacker culture and humor - perhaps especially since a lot of early hacking was related to AI and natural language processing. Jabberwocky might be of specific interest here because even though it contains nonsensical words, it follows English syntax and several common rules for writing rhyming verse.

The poem features the Bandersnatch, a made-up creature which gave name to an unreleased home computer game and later a Black Mirror episode about a young home computer programmer.




These are all movies that at some point were popular among (would-be) hackers. Donald Duck in Mathemagic Land is early edutainment, Tron is about a programmer who gets uploaded into a computer and has to fight an AI. Wargames is about a young hacker who must rescue the world (after having accidentally initiated its destruction). Wargames features a lot of authentic home computer hardware from the early 1980s. Tron has very little to do with how computers actually work - what fascinated hackers about it was probably its extensive use of early computer animation, creating distinct and still highly enjoyable visuals.



ASCII (American Standard Code for Information Interchange) and EBCDIC (Extended Binary Coded Decimal Interchange Code) are two different but not completely dissimilar character encodings, debuting in the early 1960:s. EBCDIC was invented at IBM and is in use on their mainframes. ASCII was standardized by what's now called the American National Standards Institute (ANSI), and became the basis of several subsequent encodings - including Unicode.





Both ASCII and EBCDIC characters are represented by integer numbers or "codes". For example, the ASCII code for the letter Z is 90. This can of course also be written in other radices than decimal. In hexadecimal, 90 is written as 5A and in octal it's 132. Some codes aren't for letters or other glyphs, but for controlling text output on a screen or printer, such as 10 (line feed) and 13 (carriage return). Some of these codes mean the same in ASCII and EBCDIC.



Maxint here is to be understood as the maximum size of an integer that a CPU can handle natively. In the case of a 32-bit CPU, that number is 232-1, or 4,294,967,295. Hence, the size (and thus precision) of both integers and floating point numbers are dictated by the CPU architecture. This can however be circumvented by defining custom data types by for example joining two 32-bit values together in order to hold larger numbers. This of course comes at the expense of processing speed and memory consumption. Many high level languages do this transparently to the programmer.




Powers of two pop up everywhere in computing, since basically all modern computers are binary. The smallest value stored is a bit, which is either 1 or 0. Each time storage increases by one bit, the maximum value that can be represented doubles. One bit (21) can store 0 to 1, two bits (22) can store 0 to 3, three bits (23) can store 0 to 7, 8 bits (28) can store 0 to 255, 16 bits (216) can store 0 to 65,535 - and so on.



Conceptually similar to the paper tape mentioned above, punched cards are thick paper cards used to store information denoted by holes punched in the paper. They were originally used to control looms during the early industrial revolution. Reading them by looking at (or feeling) the holes would entail not just understanding how the holes were aligned physically to represent data, but in many cases also being able to convert this information from ASCII, EBCDIC or even CPU opcodes. Surely the skill of a true hacker!



Patching binary code means replacing part of a compiled, executable program file with a smaller chunk of new executable program file: basically hand-editing (or programmatically replacing) part of an executable file, either on disk or in memory. This was a common method used by software pirates when removing copy protection schemes from computer games.


In order to conserve memory on a limited system, complex programs may have to load functionality in a modular way, depending on what task the user wants to perform. This can be done using overlays, where certain functionality already loaded into memory is replaced with new functionality loaded from disk. This means all such functionality must fit into a predetermined space in memory, so that it can be loaded without overwriting core program functions or user data.



Dennis Ritchie and Ken Thompson worked together at Bell Labs, AT&T's research facility. Thompson is credited with inventing UNIX and Ritchie with inventing the C programming language. Bill Joy participated in creating the Berkeley Systems Distribution (BSD) of UNIX, the vi text editor and went on to found Sun Microsystems, a manufacturer of (among other things) UNIX workstations.


A Cathode Ray Tube (CRT) is the old, thick version of computer screens (and TVs). They produce their image by shooting an electron beam across a glass surface coated with phosphor. The speed of the electron beam determines the screen's refresh rate, such as 60 hertz (60 screen refreshes per second.) This typically isn't discernible to the human eye (other than as a slight flicker in lower refresh rates), but taking a photo of this can produce unexpected results. The camera's shutter speed must be synced to the start and end of such a full electron beam screen refresh, otherwise the resulting picture will display various light artefacts and screen tearing.

Depending on the type of CRT, this could be as easy as connecting a VCR to a suitable input connector. On some models it involved modifying the electronics of the screen in order to fit such a connector.

A digitizer is a device that converts a picture from an analog source to an digital representation in a computer. It was commonly used to refer to video digitizers interfacing with a video camera or VCR - as opposed to scanners, which were used for photos or printed text.


A scratch is a spare item used for testing, such as a hard drive not used for important storage. According to legend, a field technician from DEC (Digital Equipment Corporation) once started running various tests on a computer used in a laboratory, without realizing it was still hooked up to a kind of life support system used to experiment on a monkey. The outcome for the monkey was as tragic as it was predictable, and the technician had of course not brought a "scratch monkey" along for testing.


An idle loop is basically what a computer finds itself in when it does nothing in particular. As such, there's supposedly not a whole lot to optimize.

Bubble sort is typically one of the slowest sorting algorithms and not one that is very susceptible to optimizations. Unless, of course, replacing it with a faster algorithm counts as optimizing it.


Once upon a time, computers and computer terminals didn't have any audio hardware at all, or at most something only capable of going "beep" every once in a while. Thus, hardware that allowed for speech synthesis - even very bad speech synthesis - was an incredibly futuristic novelty. One example of this can be seen in the movie Wargames, mentioned above.

Real world early adopters of such technology include the UNIX team at Bell Labs, who seemed to use it mostly for gags such as announcing important daily breaks; "Lunchtime, lunchtime, lunchtime. Yummy, yummy, yummy."



A modem (MODulator/DEModulator) is used for remote computer communications. They basically work by converting digital data to and from sound, which enables that data to be transferred and received across landline phone networks.

An acoustic modem sends and receives sounds through the handset of an ordinary phone. Talking into an acoustic modem and getting a response implies either a very contrived way of performing a normal phone call, or being able to make modem noises with your voice.

This is another gadget that occurs in the movie Wargames, mentioned above.




Baud is a unit that measures data transfer speeds in symbols per second - the higher the better. It was commonly used to denote the speed of a modem: A 1200 baud modem can send 1200 tone changes per second. It's most likely not humanly possible to whistle even in 300 baud, but whistling a phone number could be possible. An early phreaker (phone network hacker) was called Captain Crunch, named after a kid's toy whistle given away as a prize in cereal boxes. The whistle produced a tone at exactly 2600 hertz, which also happened to be an AT&T control code that, when whistled into a phone, enabled operator mode on a that phone line.


Mechanical hard drives are incredible feats of engineering. Much like a very fast and very small turntable, little arms with read/write heads zip rapidly across round metal platters spinning ludicrously fast. Alas, all mechanics are at risk of mechanical failure - such as the arms grinding into the platter - taking that sweet precious data with it in the process: a disk crash.

When (physically) large external hard drives were programmed to move their internal mechanics about very fast, the resulting momentum could be strong enough to make them start jiggling their way across the surface they were placed on (usually a floor). Think of a washing machine in its spin cycle.



In John Conway's cellular automaton Game of Life, a puffer train is a construct that moves across the screen while leaving little bits of "junk" behind.




Just like a hard drive could be made to "walk" due to vibrations from its internal mechanics, different computer peripherals could be programmed so that the sound of their mechanics produced actual music.



According to Real Programmers Don't Use PASCAL, a programmer's natural habitat is typically decorated with, among other things, "a line-printer Snoopy calendar for the year 1969." It was apparently popular at the time to use a computer program for generating these and printing them on a 133 column line printer.

Do you have a line printer picture of...






Line printer pictures, or ASCII art, are pictures made up of textual characters. In their simplest form, alternating whitespace with a character such as X or # creates monochrome pixels. More advanced pictures may utilize different characters for drawing shapes and simulate various shades of grey (at least when viewed from a distance).

Do you know what the following stand for?


Direct-Access Storage Device (such as a hard drive).

Emacs is a text editor with a history longer and richer than can be summarized here. Its name stands for Editor MACroS. More humorous suggestions are Escape-Meta-Alt-Ctrl-Shift, referencing the many keystrokes used to operate the program, and Eight Megs And Constantly Swapping, alluding to its (at the time) comparably high system requirements.

The Incompatible Timesharing System, an operating system developed at MIT.

Resource Sharing Time Sharing/Extended, an operating system developed by DEC.

Systems Network Architecture, a networking architecture from IBM.

Simultaneous Peripheral Operation On-Line, multitasking programs usually used to interface a comparably fast computer with a slower peripheral such as a printer.

Transport Control Protocol/Internet Protocol, the transport layer (TCP) and internet layer (IP) protocols used for sharing cute cat pictures and insulting people on the other side of the world.

Have you ever used










All of these are different types of text editors. Derivatives of Emacs and vi are still widely used among programmers - the rest, less so.
  • For a long time, ed was the standard editor shipped with all UNIX systems. Today, many modern Linux distributions don't even include it in their default installation.
  • Wordstar was a word processor popular on 8-bit home computers and MS-DOS.
  • TECO was an editor from DEC, and Emacs was originally implemented in this as a set of Editor Macros - hence its name.


CLIST (Command List) was a scripting language originally released for IBM's mainframe operating system OS/360.

Have you ever programmed in


The X Window System (or just X for short) is still the base for the graphical user interface on many UNIX and Linux flavors in use today. It's predecessor was called W (window), and since X alphabetically follows W, it seemed like a reasonable name. Many programmers have, over the years, suggested that programming for X isn't an exclusively pleasant experience.

Customer Information Control System, various services for transaction processing on IBM mainframes.


When a support technician asked for a copy of a disk with buggy software, sending a photocopy of it might have been the misguided action of someone less computer literate.



In the heydays of terminals and text-based interfaces, the phrase "Press any key to continue" occurred frequently. Not finding the "any key" on the keyboard even became a joke in the animated satire show The Simpsons.

Have you ever attended






All of these are various computer-related user groups and conferences. SHARE is an IBM mainframe user group started in 1955. USENIX started in 1975 as the Unix Users Group. SIGGRAPH was founded in 1974 and is devoted to computer graphics. These three are still active. DECUS was Digital Equipment Computer Users' Society (now dissolved). NetCon was (or is?) most likely a Networking Conference.


Being invited to participate in a standards group implies you're a bit of a big deal among hackers.


When computers were smaller and less complex, keeping a map of their internals in your head - along with the workings of a short program - was cumbersome, but not impossible.



Voice mail can of course be visualized in a number of ways, but this allegedly refers to debugging early digital voice mail systems.


Everyone's online all the time these days, but this was of course not always the case. There was even a time when a sufficiently comprehensive dictionary file could be considered "big data".



A Turing test, named for English computer pioneer Alan Turing, is a double blind test in which a person is asked to determine which one of two chat partners is a human and which one is an AI.




Stacks of punched cards making up a single program - a deck - were of course organized in a specific order for being read into a computer. Manually putting a dropped deck back in order was an arduous task - even if the cards had been properly numbered.


There's an ipcs command in UNIX, but what's referenced here is more likely to be the Interactive Problem Control System, a tool for IBM's OS/360.


Supercomputers from Cray were once among the coolest and most expensive hardware imaginable. They shipped with a case of beer as a "freebie". Due to their size, they also doubled as couches, which of course meant you had somewhere to sit while drinking the beer.

For a long time, most office-type computers were nondescript beige boxes. Many home computers from the 8-bit era were very inventive and varied in the looks department, but this question probably refers to the fanciful design of Cray's supercomputers or, perhaps, high end graphics workstations from Silicon Graphics.


A UPS is an Uninterruptible Power Supply, basically a battery pack that sits between a server and its primary power source. It offers surge protection and allows orderly system shutdown or seamless transfer to backup generators in the case of prolonged power outages. "Interrupting" one implies draining or disabling the battery in such a situation, which might lead to data corruption and even destroyed hardware.

An interrupt is a signal to the computer's processor to pause its current processing and deal with whatever the interrupt is asking it for. Masking an interrupt means stopping the processor from listening to that particular interrupt, thus prioritizing a performance-sensitive task. A Non-Maskable Interrupt is a signal that theoretically can't be masked away - usually indicating a hardware error - but on some architectures, even non-maskable interrupts can actually be masked.




Halon systems are used to extinguish fires in server halls, usually by releasing Halon 1301. Triggering such a system if there's not a fire is generally considered bad form: It can be harmful to humans, and in any case it's a great way to interrupt the normal operations of a data center.

Halon system are currently being phased out due to environmental concerns.



As with setting off a Halon system, cutting the power to a data center can lead to certain complications.



When documentation came printed on paper, it wasn't unusual for it to accumulate over time. Reading old computer and software manuals can be quite interesting (depending on personal inclinations).



Reverse engineering software to figure out how it works can be done in different ways. One is "clean-room design", a way of reproducing the exact functionality of a program without having direct access to its source code. This was supposedly used by Compaq and other computer manufacturers when they created their own versions of IBM's PC BIOS.

Decompiling or disassembling - translating an executable binary back to (usually assembly) code - is another approach.

When computer programs were smaller and less complex than they are today, these were actually viable methods for recreating software or fixing bugs when the source code had been lost or was otherwise unavailable.


This was probably more common when point of sale machines were the exact same type of serial terminals or PC computers used by hackers.

Racks are standardized metal frames for stacking and mounting server computers. Rack mounting a phone suggests not only working close to (or owning) such a rack, but also desire for space efficiency. This supposedly entails bolting the phone to a suitable sheet of metal or wood and fitting that into the rack.

Even hackers get frustrated with their computers sometimes.

Before the days of open source software and rapid cloud deployment of bug fixes, it could have been cheaper for a vendor to deal with the effects of a minor bug instead of redistributing new physical install media to all their customers.



These practices are probably more prevalent today than ever before. For example, it's common to "fix" poor software performance by simply buying more cloud hardware resources. Wear levelling on SSDs is typically managed by the drive's firmware.


Some user groups have already been discussed earlier, such as USENIX and SHARE. Others were (and are) smaller gatherings of hobbyists and enthusiasts.

Computer Recreations was a column about computing published in Scientific American.



This could hint at participating in illicit hacking activities, but perhaps more likely making a programming mistake big enough to cause serious financial and/or societal impact, such as the 2024 CrowdStrike incident.


Drum Memory is a form of RAM that uses a spinning, magnetized metal cylinder. The speed of the drum was thus directly correlated with memory access speed. Stopping it in mid-operation was of course a bad idea.

Most programmers who don't have English as a native language probably do this every day. In any case, it's a measure of having learned a foreign language well enough to express complex, abstract concepts in it.

This was much easier to do in the days of mechanical hard drives, floppy drives, CRT monitors and other hardware without busybody firmware trying to stop the programmer from making mistakes.

(This space intentionally left blank.)



A listing is just another name for source code, usually when printed on paper. Today it's probably more common for devoted programmers to do this using a laptop or some other portable device. The list command in Basic shows the source code of the currently loaded program.



Microcode is the hardware-level program code in a CPU, used to implement its instruction set. Patching a microcode bug thus means updating the microcode in the CPU; patching around it means writing software that replicates the functionality of the broken microcode by using other instructions.


A Turing machine is a model of computation described by the same Alan Turing mentioned in the Turing test question above. Programming one would be quite different from programming an actual computer, but it's possible to implement any computational algorithm on a Turing machine. This Computerphile video is a decent introduction to the subject.

When writing mathematical statements, infix notation is commonly used. For example, 4 + 2 is written in infix: the addition operator (plus sign) is placed between the operands (the numbers being added). In postfix notation, the operator comes after the operands: 4 2 +. Prefix notation is when the operator comes before the operands: + 4 2. In more complex statements, operator precedence must be taken into account when converting between notations.

Base 10 (decimal) is normally used to write numbers, using symbols ranging from 0 to 9. All common computers work internally with base 2 (binary), represented by 0 and 1. As discussed in the ASCII and EBCDIC questions above, hex (hexadecimal) and octal are different radices (bases) for writing integers. Hex uses 16 symbols: 0 to 9 and A to F (A = decimal 10, F = decimal 15). Octal uses 0 to 7. Since 16 and 8 are both powers of 2 (see above), it's sometimes convenient to use these radices in computer programming.

A Kleene star is an operator that's often used in regular expressions for matching any number and combination of strings or characters in a given set.

The "dining philosophers problem" is an example problem in concurrent programming. It stipulates a set of rules for when each individual in a group of philosophers seated around a dinner table are allowed to eat, or must perform some other action. When trying to implement a solution, it's not uncommon to end up in deadlock - a state where no new actions are possible, thus starving some imaginary philosopher to death.



Alan Turing pops up again: A halting state is when a Turing machine (see above) has run a program to completion and thus stops. Depending on the program and/or its input, it might never reach a halting state, instead getting stuck in an infinite loop. The halting problem concerns whether a Turing machine program can examine another, arbitrary program and its input and determine if it will reach a halting state or not. Turing proved this to be impossible.


This is basically the same dining philosophers question as above.

This most likely refers to a quine. A quine is a program that prints its own source code - without reading said source code from disk or some other input.
Spoiler: A quine written in JavaScript (click to expand) (function q() { console.log("(" + q.toString() + ")()") })()

A swapper swaps an entire (idle) process from RAM onto disk and back again as needed, in order to conserve memory. Swapping out the swapper effectively eliminates the possibility of swapping anything - including the swapper - back into memory again.



State diagrams are a way of illustrating finite state machines, including computer programs. The basic idea is to create a visual representation of program behavior.



A program that can't be stopped (killed) without rebooting can be created in various ways, depending on the computer and operating system. One example are fork bombs. Such a program rapidly clogs a system by spawning new processes of itself, which spawns new processes of itself, which spawns...


A "cookie program" was effectively a type of early (and fairly harmless) computer virus. It locked people out from their terminals and (like the Cookie Monster in Sesame Street) asked the user for a cookie. This continued until the user responded by typing in "cookie", upon which the machine resumed normal operations.

Jumpers were once prevalent on motherboards and expansion cards. They allowed users to set various hardware configurations, including CPU and bus speeds. Deliberately setting an incorrect config in is a daring gambit: in a worst case scenario it could ruin the computer.

Do you know...



Rogue is a computer game in which the player explores a system of dungeons. It was originally written by Michael Toy and Glenn Wichman, and became so popular and influential a whole genre - Roguelike games - are named after it. Rog-O-Matic is a computer program that automatically plays Rogue, written by Andrew Appel, Leonard Hamey, Guy Jacobson and Michael Loren Mauldin.


Gray code, named after Frank Gray, is a way to represent binary so that incrementing an integer to its next successive value (E.G. incrementing 3 to 4) requires changing only one bit.




HCF stands for Halt and Catch Fire, a name for a fictitious (and humorous) assembly instruction that would supposedly make a CPU to do just that. It was typically used to describe illegal opcodes (undocumented instructions) that caused a CPU to hang. A TV series dramatizing the PC boom was later named after this.



A lace card is a punched card on which a hole is punched in every possible position. They'd typically get stuck inside the card reading machinery, and were purposely made as pranks.




The UNIX reference epoch starts on 00:00:00 UTC, January 1st, 1970. Time is counted as the number of seconds elapsed since this date, and because of the data type (see maxint above) this value is stored in, it will overflow after 03:14:07 January 19th, 2038 - the end of the UNIX epoch.

The millennium bug was related to the end of an epoch in the sense that many computer programs counted years as a two-digit number starting on 1900, meaning that when the year shifted from 1999 to 2000, they wouldn't be able to differentiate between 1900 and 2000. During the last few years of the 1990s, many computer programs were rewritten to mitigate this.


DTE is Data Terminal Equipment, which converts information to and from user-readable data (such as a computer terminal). DCE is Data Circuit-terminating Equipment, in turn converting this data to and from something that can be transmitted across a network (such as a modem).



RS-232 is a standard for serial communication connectors. It was used on a wide variety of computers and terminals for many decades and many technicians probably did know the pinout more or less by heart.

Do you have...


DEC Wars is a Star Wars parody full of computer and hacking references, posted a long, long time ago on a Usenet far, far away.

"How many programmers does it take to change a light bulb?"
"None. That's a hardware problem."



The Hacker's Dictionary started its life as The Jargon File at MIT, explaining programmer slang and idioms used in US academia.



The basic idea of a flowchart is to create a visual representation of program logic. Flowcharts were typically drawn on paper, sometimes using a template to get uniform symbol shapes and sizes.


Fortune is a small program for selecting and printing a random string of text from a properly formatted file. It can be used to display a random fortune, quote or message when a user logs in.



The Anarchist Cookbook is a 1971 book containing instructions for making bombs, hacking the telephone system (phreaking) and synthesizing drugs. It may not have inspired too many people to actually follow its instructions, but it did inspire numerous text files with similar content, circulating on BBS:es and other online fora.













"Hypercube" most likely refers to a Connection Machine, a supercomputer manufactured by Thinking Machines Corporation. These were designed for parallel computing using a hypercube network to link processing nodes together. Next to the Cray machines mentioned above, this was about the coolest thing in computer hardware for a while: big, black machines with hundreds of red LED:s blinking across the front panel.



A programmable calculator is just that: programmable. This was a bigger deal when they first came out than it is now; basically a portable little computer. RPN stands for Reverse Polish Notation, another term for the postfix notation described above.




Computers used to be very expensive. These days you can just go out and buy sixteen Raspberry Pi Picos in order to improve your Hacker Test score.



SLIP is Serial Line Internet Protocol, probably referencing a dial-up (modem) connection. A T1 line was a much faster connection, offering a data transfer rate of 1.5 megabits per second.



Since modem communication was nothing more than a phone call, the phone line used was busy for the duration of this call and no incoming calls could be connected. Thus, some hackers opted for installing a second phone line just for their computer. Sometimes (rarely) this meant wiring their own connection to an empty spot in a nearby switch, without telling the phone company. Phreaking (phone hacking) tactics were then used in order to place calls.




Core memory consists of several small ferrite rings stringed up on a weave of copper wires. By passing current through the wires, the ferrite ring will become magnetized and the direction of the magnetic field represents the value of a single bit.

On some computer systems, a program crash might lead to a file called "core" being written in a designated directory on disk. Such a "core dump" is exactly that: A memory dump that can hopefully be useful when troubleshooting the program crash.

Drum storage has been described above: a spinning, magnetized metal cylinder. Bubble memory is also a form of magnetic memory. All of these have since been superseded by integrated circuits.







RAM memory and disk space used to be ludicrously expensive. Of course, on simpler computers, programs and files were often smaller as well: even if you had a gigabyte of disk space, you'd probably have a hard time filling it with your personal files.


This question is once again describing a rarity: CD-ROM drives are no longer in fashion.



Magnetic tape of various kinds were once a common storage media for computer programs, and software vendors delivered commercial programs on tape.





Floppy disks were a popular and cheap storage media and many home computer users actually owned hundreds of disks.


Yes, these are the famous giant floppy disks that were used in the US nuclear control and command system until c:a 2019.

A call stack tracks the active subroutines of a running program. An internal stack means this information is stored in the CPU proper. Most modern CPU:s instead have a stack pointer which lets them store the call stack in RAM.

As described above, an interrupt is a signal to the CPU that it should stop its current processing and deal with something else, such as I/O. A clock interrupt fires on a regular interval, based on a timer. Most modern systems have this.





The Art of Computer Programming is a series of thick books written by computer scientist Donald Knuth. At the time when the Hacker Test was written, three volumes had apparently been published. Since then, volumes 4A and 4B have been added. Several more volumes are planned.

MIX is the assembly language used for code examples in the books. It's targeted at a fictional computer, the instruction set of which can of course be implemented as a virtual machine. The "MIX simulator" mentioned above would be such a virtual machine.



The Mythical Man-month is a book on programming and project management written by Frederick P. Brooks. It consists of a number of essays presenting lessons learned during his management of the OS/360 development project at IBM.


TTL is Transistor-transistor logic, once widely used in integrated circuits.


Perhaps one of those old printouts is a listing, as discussed above?

Career




Computer-related jobs were much rarer in the past - but then again, so were the skills required to land one.



Many systems administrators still have on call duty and night shifts.

Having more bytes of storage space than dollars in the bank have probably never been easier than right now!

This implies running private, resource-demanding software on company hardware.



Job security here is to be understood as the act of intentionally writing obfuscated code in the hope that nobody else can understand it, thus ensuring continued employment.


A lot of early research in computing and networking was performed within the US Defense Advanced Research Projects Agency (DARPA). This included ARPANET, the precursor to the Internet. And, of course, governmental agencies were early adopters of automated data processing on mainframe computers.

Games


Pong is a primitive tennis simulation game, one of the first arcade computer games and later released as a game console. Numerous ports and clones exist.

Have you ever played






Unsurprisingly, these are all early computer games.

Have you ever beaten







These are all variations of dungeon exploration games (roguelikes).


As discussed above, Rog-O-Matic is a program that automatically plays Rogue. Beating it implies being a rather skilled Rogue player.



These are early text adventure games.


Redcode is the programming language used in the computer game Core War, where the objective is to write a program that will terminate enemy programs.





A "real-time game" is probably what we'd call an arcade game today.


Eliza was an early AI program for natural language processing, written in the 1960s. It was fairly primitive and although a conversation with it usually started out somewhat convincingly, it was very easy to make it fall apart. Emacs users can invoke a version of Eliza using the command m-x doctor.

Hardware



A light pen is an input device used together with a CRT monitor, pointed directly at the screen.

Have you ever used


A teletype is a big, bulky mechanical typewriter that can type automatically, and thus both send and receive text over some kind of network connection (often a serial line). Before terminals with CRT screens, this was the user-facing I/O device commonly used with mainframe computers. Since both the input and output was printed on paper, programs (including text editors) were limited to primitive, line-based interfaces.

The word teletype was often shortened to TTY, which is still the name used for textmode consoles on UNIX and Linux systems.

As mentioned above, a paper tape is storage in the form of, well, a long but not very wide roll of paper with holes punched in it to represent data.

A DECwriter was basically a teletype based on a dot matrix printer instead of typewriter mechanics.

This was of course used to write and read punched cards.

Possibly a Sol-20 computer, but this is a presently unconfirmed working hypothesis.

Have you ever built



These are both early microcomputers delivered as kits to be built by the user. Microsoft famously released their first product - a BASIC interpreter - for the Altair.

Do you know how to use








This is all equipment commonly used when building or repairing electronics, including computers.



LSI stands for Large Scale Integration, the process of combining large amounts of transistors on a single chip.


Chemical etching is the process used for creating the conducive copper traces on a circuit board. The process is somewhat similar to developing photos: A printed trace pattern is transferred onto a copper coated board. Etching then dissolves the residual copper, leaving only the desired traces left.

Historical



Old PDP computers from DEC required manual entry of bootstrapping code. This was done by toggling switches on the front panel of the computer.


ENIAC was the first programmable, electronic, digital general-purpose computer. Programming it was a tedious process of first figuring out how to write the program (which, allegedly, could take weeks), and then using plugboards and switches to, slowly but surely, input the program.

IBM owned the patent for 80 column punched cards with square holes. 90 column punched cards were used as a way to circumvent this.

IBM



IBM part number 7320154 is a wedge used for packing a 62EH hard drive delivered with IBM's System/34. Thanks to mlechu for finding this information!

The IBM 3270 was a series of computer terminals for interfacing with mainframes. They were block-based (transferring blocks of several characters in one go, instead of one character at a time) and use proprietary connectors.

These are user privilege classes, such as "Primary system operator", "System programmer" and "IBM service representative".



IPL is "Initial Program Load", the boot procedure than can load the operating system. If it was possible to boot off a punched card reader, it probably wasn't very pleasant.


The IBM songbook is a peculiar artefact of a seemingly even more peculiar company culture. The 1937 edition, for example, starts off fairly normal with some patriotic American songs ('tis of thee), but soon deteriorates into a number of sycophantic panegyrics about various IBM vice presidents.

Languages





Thanks to fast computers, the Internet, open source software and emulators, there are few barriers to learning almost any programming language today. This wasn't always the case. Many languages were tied to certain hardware platforms and operating systems unavailable to the general public, or simply not suitable for use on home computers.


Considering how many programming languages there are, this activity is more common than one might think.


Beginners' All-purpose Symbolic Instruction Code.

The Pascal programming language is named after Blaise Pascal.



After the home computer boom, most hackers probably wrote their first program code in Basic. Basic remains a fairly popular language even today, but in those days it was much more primitive and relied on line numbers for loops and other program flow control. It was, however, hacker-friendly in the sense that you could use it to freely poke about in the computer's memory.

Computer science professor Edsger W. Dijkstra disliked Basic: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." Time seems to have proven him wrong.



Cobol is a language fairly uncommon outside the world of mainframes. It was designed to look like written English (it doesn't) and is mostly used for administrative or financial data processing: payroll, banking etc. It's not a very hacker-ish language.

Edsger W. Dijkstra disliked Cobol even more than he did Basic: "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense."






Nicklaus Wirth was a Swiss computer scientist who designed several programming languages. Pascal was by far the most popular one, and lives on today in the form of Delphi. He used to joke that "Europeans call me by name, and Americans by value", because the latter often pronounced his name as "Nickel's Worth".






Algol (ALGOrithmic Language) is a programming language that's no longer widely used. It has, however, influenced languages such as C and Pascal, which in turn have influenced Java, JavaScript, Python and scores of other popular contemporary languages.




Assembler, unlike high level languages (including C) differs substantially depending on the CPU architecture. Learning any type of assembler has never been cheaper or more accessible than today, thanks to numerous emulators. There was a time when knowing Assembler for many different architectures meant you had access to several very big and very expensive computers, implying you worked professionally with low level mainframe programming.

Do you know


APL, "A Programming Language", was based around manipulating multi-dimensional arrays. It more or less required you to use a specialised keyboard, since many of its instructions are written as symbols or greek letters. Ivy is a modern, APL-like language for people with normal keyboards.

Ada is named after countess Ada Lovelace, who wrote one of the first computer programs (for Charles Babbage's never fully realized Analytical Engine). It's not widely used today.

BCPL is another language not seeing much use today. It's probably most famous for having influenced C.

C++ is "C, incremented": an object-oriented superset of C, still widely used for performance-critical programming.

C is perhaps one of the most influential languages in modern programming. It was invented by Dennis M. Ritchie at Bell Labs and rose to popularity alongside UNIX. Since then, it has dominated systems programming and is still popular for performance-critical software. The Linux kernel, for example, is mostly written in C.

Comal - Common Algorithmic Language - is an extended variant of Basic that offers better program control flow. It's not widely used today.

Eiffel is an object-oriented language that's influenced more commonly used languages such as Java and C#.

Forth is an interpreted, stack-based language. It remains popular in certain hacker circles because it's relatively easy to implement an interpreter even with very limited hardware resources.

Fortran is a language mostly used for scientific computing, and popular high-level packages such as SciPy for Python contain modules written in Fortran.

HyperTalk was the programming language used in the once popular Macintosh program HyperCard, a popular and accessible "low code" development environment.

Icon is another language that's fallen out of fashion, but has influenced the now widely popular Python language.

Lisp has been a hugely influential language and retains a vocal and devoted fan base. It still sees popular use, not least in the form of Emacs Lisp, used for extending the GNU Emacs editor. Lisp, like Fortran, also remains a popular language to write small interpreters for.

Logo is a language that was once fairly common on home computers and in schools. It's probably most famous for its implementation of Turtle Graphics.

MIIS is a language influenced by MUMPS (see below).

MUMPS is a language that's mostly seen use in various hospital management systems. The name is probably not a coincidence.

PL/I or Programming Language One was once a popular language on IBM mainframes.

A little used high level language with single letter keywords.

This probably references TUTOR (or the PLATO Author Language) which was used on the influential PLATO computer system, on which many early computer games originated.

Prolog is a language intended for use in AI research, theorem proving and language processing, and saw early use in the field of constraint programming.

Report Program Generator, a language for business applications on IBM mainframes.

A scripting language geared at interprocess communication. It originated on IBM mainframes, but saw widespread use on OS/2 and (as ARexx) on Amiga home computers.

A high level language based on set theory. It's been (indirectly) influential on the Python programming language.

Smalltalk is an early object oriented language developed at Xeroc PARC. It's perhaps most famous for its graphical development environment which has been hugely influential on all modern graphical user interfaces, and served as the conceptual basis for Apple's Lisa and Macintosh computers.

Snobol is yet another language that's fallen out of fashion, but was once popular in AI research involving language processing and machine translation.

VHDL is a hardware description language that's still in use for this specific purpose.

Assembly, as discussed above, is a low level language that differs between CPU architectures.


DEC's VT-100 was one of the first terminals to support standardized ANSI escape codes for cursor positioning and text formatting. This is still used in MacOS, Linux, UNIX and Windows terminals. Hence, "Talking VT-100" remains a marketable skill in the programming business.

Postscript is a language still widely used for describing page layouts in printing. PDF (the Portable Document Format) is based on Postscript.

SMTP is the Simple Mail Transfer Protocol, a once popular protocol for e-mail transfer.

UUCP is the Unix to Unix Copy Program, an early protocol for transferring arbitrary data (including binaries) between computers.

Being able to properly communicate and reason about complex, abstract concepts is important when working with programming.

Micros


To mitigate software piracy, many home computer games came on floppy disks using proprietary storage formats designed to make disk copying harder. This copy protection was often removed by a cracker in a software piracy group, but some disk duplication software was written to circumvent primitive copy protection schemes.

This implies having worked professionally with game development in some capacity. Some programmers worked full time with creating copy protection schemes.

Some 5.25" floppy drives and disks were single sided, meaning the drive could only read and write on one side of the magnetic surface of a floppy at a time. Single sided disks only had one writable side. A double-sided floppy could be modified (by cutting in its protective plastic enclosure) so that a single sided drive could operate it on both sides. This meant the user had to flip the disk manually and reinsert it into the drive. Some home computers had single-sided drives - such as the 1541 drive for the Commodore 64 - that could use double sided disks without modification, but still required the user to manually flip them over.

Home computers were prone to crashing, a calamity that might damage the data on a floppy disk if it was being written to when the crash occurred. Other damage to floppy disks could occur from mechanical wear or having been stored too close to something magnetic. One way of recovering data was to simply retry reading a sector multiple times, which could sometimes be successful. Other programs, such as DiskSalv for the Amiga, could even try to reconstruct a broken file system.

A naked floppy is a floppy without its protective plastic enclosure - that is to say, it's just the bare magnetic disk. The enclosure provided guides and structure for the drive mechanism, but it was possible to use naked floppies in certain drives by manually helping the mechanism along.

Networking


This is commonplace today, but once upon a time this was an activity reserved for a select few in academia or corporate mainframe management and programming. (Or illicit hackers.)



A UUCP (see above) map could be used to find the best (fastest) routes for data transfer, not unlike how many modern Linux distributions encourage users to pick a package site mirror geographically close to themselves.



Sendmail is a once popular e-mail server software. Early versions suffered from a number of security issues that have since been corrected.



HOSTS.TXT was the original hosts file, mapping the hostnames of ARPANET-connected computers to IP addresses. This was later replaced by DNS (the Domain Name System), which is still in use. The question hints that very few machines were originally connected to ARPANET (which was the precursor to the Internet).


There was a point in time when the top-level Internet domains were .com, .edu, .org, .mil, .gov, .net and a small handful of countries.



An RFC (Request For Comments) is a standards memorandum issued by IETF (the Internet Engineering Task Force). They typically describe various communication protocols, such as HTTP. The now obsolete RFC 822 describes how e-mail messages should be formatted and parsed.




Sendmail is famous for its notoriously cryptic configuration file format.


The TTL (Time To Live) for an IP packet is measured in hops between route points. The maximum number of hops is 255.

Operating systems

Can you use




UNIX originated at Bell Labs, AT&T's research facility. It then quickly spread to various universities, including University of California, Berkeley. People at UC Berkeley added extra bells, whistles and sofware to AT&T's official UNIX distribution, creating the Berkeley Software Distribution, or BSD. This heritage lives on today in OpenBSD, FreeBSD, NetBSD and MacOS. Other BSD-based UNIX systems were NextStep and SunOS.

A non-BSD UNIX is derived directly from AT&T's UNIX. This includes a great number of now defunct systems from various vendors, but some UNIXes that started this way still exist: AIX (from IBM), HP/UX (from Hewlett Packard Enterprise), Solaris (originally from Sun, now from Oracle) and Illumos (open source; based on OpenSolaris from Sun). Most of these are rarely seen in the wild today.

"Use" is a rather fuzzy term when it comes to operating systems. It can mean logging on and performing common user activities: file management, data processing, reading mail, using various software packages. It can also mean programming and/or administering the system. Various UNIX systems from various vendors or organizations differ - sometimes a little, sometimes a lot - depending on what's being done.

In both cases, the distinction between BSD and non-BSD systems has for a long time been somewhat blurry. Most UNIX systems have been subject to lengthy periods of cross-pollination, and then further augmented with open source programs as well as vendor specific features and software. AIX, mentioned separately, is a good example of this. Released in 1986, it mixed "pure" AT&T and BSD lineages with IBM's own additions. AT&T UNIX System V Release 4 combined several existing lineages and, in turn, served as base for newer versions of the existing systems. It's all a great big mess.

These days, UNIX systems also have to take some level of Linux compatibility into account. Linux shares no official heritage with AT&T's UNIX, but is - from an end user standpoint - very similar.

A virtual machine operating system for IBM mainframes.

Virtual Memory System, developed by DEC for their VAX-based computers. Lives on as OpenVMS, which has recently been ported to x86-64.

An operating system for IBM mainframes.

An operating system for IBM mainframes.

Resource Sharing Time Sharing/Extended, an operating system developed by DEC for their PDP-11 computers.

Control Program/Monitor from Digital Research, a popular operating system released for a multitude of 8-bit machines. The precursor to MS-DOS.

This could be either the Cray Operating System for the Cray-1 supercomputer, the Chippewa Operating System by Control Data Corporation which it was based on, or the unrelated Commercial Operating System from DEC.

An operating system for Control Data Corporation mainframes.

A hypervisor for IBM mainframes.

A single user real time OS for DEC's PDP-11.

Microsoft's incredibly popular Disk Operating System launched together with the IBM PC in 1981. MS-DOS was heavily influenced by CP/M: IBM initially contacted Digital Research about porting CP/M to the new 16-bit machine, but the deal fell through. Microsoft ended up getting the contract and delivered a renamed version of 86-DOS, which was basically an unlicensed CP/M clone for 8086 CPUs.

Finder is the MacOS desktop.

An OS for the popular 8-bit Apple II computer.

The TRS-80 was a popular 8-bit computer from Tandy. The first version of the official TRSDOS operating system was buggy, and third party options such as NewDOS and LDOS soon appeared.


TOPS, Timesharing/Total Operating System for various DEC mainframes.

A real-time OS ported to a multitude of platforms.

In an attempt to regain control over the PC clone market, IBM launched a new architecture called PS/2 (Personal System/2) in 1987. Along with this they also launched Operating System/2, or simply OS/2. Both PS/2 and OS/2 were much more advanced than the old PC architecture and MS-DOS, but never gained the same market traction and were eventually abandoned. OS/2 was for a time used on Thinkpads serving as management consoles for IBM mainframes.

An operating system for Data General minicomputers.

Multics ("MULTiplexed Information and Computing Service") is a mainframe OS jointly developed by MIT, General Electric, Honeywell and Bell Labs for the GE 645 computer. Many ideas, such as a hierarchical file system and user-selectable shell, originated in Multics. These were later reimplemented in AT&T's UNIX by Ken Thompson, who had previously worked on the Multics project.

The Incompatible Timesharing System from MIT, used on various PDP models from DEC.

An operating system for minicomputers from Harris Computer Systems Division.





Virtual memory (paging to a hard drive) is fairly common even today, but these suggestions are of course all comically slow. Some of them also imply constant human supervision.





Ignoring a minor OS bug and dealing with complaints/workarounds might have been cheaper for the vendor than sending out new install media and/or field technicians to install it.



Many old computers were extremely crash-prone due to their lack of memory protection. Making a machine crash intentionally is often done as a prank, perhaps using a HCF instruction as discussed above.

People




There are versions of this test where the above questions are reversed in meaning, thus rewarding having no friends at all. Tongue-in-cheek or not, isn't this a nicer sentiment?

Personal

The below questions basically describe some stereotypical hacker mannerisms.


There are versions of this test where the question is phrased as interfacing poorly with strangers.


Today, even many non-hackers probably log in before breakfast to check their social media and read the news.

LD-50 is the median lethal dose of a substance, which means the amount that will kill half of the test subjects. In rats, LD-50 of caffeine is 192 mg per kg of body weight. It's generally considered bad form to measure LD-50 on actual humans, but assuming the same basic pharmacodynamics, an adult human would have to drink somewhere around 100-150 cups of coffee to reach LD-50.

Treating everyday multiple choice situations as a boolean evaluation in programming:
- Do you want chocolate or vanilla flavor?
- Yes.



Printed paper manuals had a tendency to accumulate both in homes and offices. Many printed manuals for old operating systems were both delightfully pedagogical and technically detailed.


Regardless of whether it's a text-based system, a GUI, or both, hackers have a tendency to tinker with configurations for both the OS and individual applications in order to streamline their workflow.



In some hacker circles, even today, using GUIs is a low status activity.

The Caps Lock key is generally considered to serve very little practical purpose and some hackers rebind it to work as a key shortcut qualifier instead.

More GUI avoidance. Desktop GUIs were fairly new when this test was originally authored.

Still a popular fractal!


Hard drive platters actually look kind of neat.



The stereotypical hacker is of course up all night, hacking. The notion that hackers stay up late comes, in part, from when corporate and university mainframes were busy during the day: If you wanted to tinker with private stuff on such machines, you had to wait until after office hours.


"Foobar" comes from "FUBAR", a military slang acronym meaning "Fucked Up Beyond All Recognition". Foo, bar, barfoo and foobar are commonly used as example variable names and/or values.

An interjection indicating disgust.


Adding P to the end of a word to indicate it's a question, a practice hailing from LISP programming. See The Hacker's Dictionary.



Read The Fucking Manual, an interjection indicating an attitude that's (at least ostensibly) mostly fallen out of fashion among IT professionals.


Garbage collection - automatic memory management - is commonly used in high level languages.

Keyboards, monitors and other hardware still take up a fair bit of space. Not that long ago it also had to compete with stacks of documentation, programming literature, computer magazines and media such as floppy disks and magnetic tapes.



A purity test is a series of questions about various risqué activities, mostly pertaining to sex and drinking. They were widely circulated in the early days of computer communication.


This is probably one of the most common forms of dating nowadays.

As a token of professional respect among programmers, this is useful if you want to interact with someone except if they're busy - in which case they'll ignore your chat request until they've got time.

Programming



Fortran, as discussed above, is a programming language mostly used in scientific settings. TECO was a text editor from DEC. The possible link between the two is not presently apparent, but a Fortran compiler is reportedly hard to write, even as compilers go - perhaps TECO is a hard-to-use editor, making matters even worse.



A machine dump is a raw memory dump, possibly also along with the contents of the CPU registers. Disassembling a program means reverse-engineering its executable form back into assembly code. Both activities described here indicate hardcore hacker skills.

Have you ever written


A compiler turns source code for a given programming language into an executable program.

This is probably a more accessible activity now than ever before. Open source examples, emulators and cheap virtualization are especially helpful here.

Most peripherals come with a driver of their own, at least nowadays. But if you've made your own peripheral, you'd of course have to construct a driver for it!

This could refer to text processing in the sense of parsing a set of files - for example with UNIX tools such as sed, tr and grep - or in the sense of a full screen word processor.

Display hacks are programs designed to amuse and/or amaze or confuse the user, usually with algorithmically generated (moving) graphics. In Europe, these visual effects were combined with music and traditional bitmap graphics into what's called a demo.


An expert system was once the hottest thing in AI research, attempting to emulate the decisionmaking process of a human expert on a given subject matter.

An edge detector is an image processing program for, well, detecting edges of objects in a photo.



Viruses are so called because they (often) replicate themselves by inserting their own code into other, legitimate, executable files.

A prophylactic is more commonly called a virus killer or antivirus software.




Biorhythm is the pseudoscientific claim that humans are governed by various variable-length temporal cycles dictating physical, emotional and intellectual performance. A biorhythm program can be used to calculate the present state of these cycles and find synchronized peaks.




Algorithms for this are often taught as part of a computer science curriculum. Rosetta Code contains a large number of algorithm implementations in many various languages.



Self-modifying code was fairly common on older computers with small amounts of memory, even in some high level languages: it overwrites already loaded program instructions with new ones, depending on the state of the program itself. Writing it takes a fair bit of thought, but debugging it can be nigh impossible and it's commonly considered bad practice.






Programming, even for experienced developers, is often an iterative process of trial and error.


The Towers of Hanoi is a game in which a number of differently-sized disks must be moved across three pillars according to a set of rules, ending up neatly stacked in order. It's a common example used when teaching recursive programming. Recursion is when a function repeatedly calls itself to perform piecemeal repetitions of a task until (hopefully) an exit condition is met.

Not using recursion implies using flow control constructs such as while or for loops.

Troff is a typesetting program that is, among other things, used to format UNIX man pages. Using its macro language, it's possible to write a (recursive) solution for the Towers of Hanoi.




The Obfuscated C code contest is exactly what it sounds like: the idea is to submit working C source code that is designed to be unreadable, often utilizing unexpected language features in clever ways to achieve its goals.


Duff's device is a form of loop unrolling (speed optimization) in C, using the switch statement.

Jensen's device uses call by name evaluation for generalizing certain types of functions, for example a compact summing function that can operate on both arrays, scalars and expressions.






Most professional programmers will recognize themselves in this.

Unix



See the discussion on BSD v.s non-BSD systems above.


The UNIX online documentation, invoked with the man command, is divided into sections. On BSD systems and Linux, sections 4 and 5 concern "Special files" and "File formats" respectively. On some AT&T derivatives (see above), they cover "File formats" and "Miscellaneous", reflecting the section numbering in AT&T's official printed manual.

It's possible, but presently unconfirmed, that TERMIO is documented in the UNIX Administrator's Manual. Whether or not this was part of the official release documentation or sold separately is also presently unknown.

This requires a block device, and tapes are typically considered to be character devices. Some vendor-specific versions of UNIX could treat tapes as block devices.

Minix is a UNIX-like operating system developed by Andrew S. Tanenbaum for educational purposes. It was relatively cheap and, just like with AT&T's early UNIX distributions, universities could acquire its source code and build (compile) it. There were also several binary distributions for a multitude of platforms.

Minix was eventually released under a free software license. Active development seems to have stopped some time around 2017.



Quiz is a UNIX program for, well, quizzes. The first invocation asks questions about how to perform actions in the ed line editor mentioned above, and the user must answer with a correctly formatted command. The second invocation reverses that: it presents a command, and the user must enter the related question. The quiz program and the ed-command questions are still available on most modern Linux systems through the "BSD Games" package.

Usenet





Usenet is made up of hierarchically categorized Newsgroups - public discussion groups - for various topics. Due to its plaintext nature, it was platform agnostic and easy to spread outside the Internet via gateways to BBS networks such as FidoNet. This all contributed to its once immense popularity. Today, the vast majority of Usenet traffic consists of (pirated) binaries.








Flaming is heated discussion, often with insulting rhetoric. Cross-posting means posting the same message to several different newsgroups at once.


Having one of your creations "go viral" was a source of pride even in the olden days.




At the time this test was authored, forming a new group meant getting it past the Backbone Cabal - an informal gathering of admins who controlled the servers needed for propagating Usenet news across the globe. The Cabal allegedly cultivated a certain mystique and used phrases like "Usenet works by the golden rule: whoever has the gold, makes the rules." - but they also, evidently, approved a lot of newsgroup creations.

Do you remember


mod.ber was created by Brian E. Redman, and was used to post summaries of other Usenet and online discussions.

This was a newsgroup in the rec.humor category.

The meaning of this is presently unknown.

Phreaking


In phreaking (phone network hacking), a black box was used to adjust the voltage of a phone enough to let the callee answer it, but not send a signal to start billing the caller.



There were several different "boxes" for phreaking: beige boxes (an illicit lineman's handset), blue boxes (tone generators, mentioned above), green and red boxes (tone generators for faking coin insertion in pay phones), and many more. White Boxes were tone generating computer programs.


Asterisk, hash and 0-9 makes for 12 buttons. The (uncommon) extra four are A, B, C and D.

AT&T's phone monopoly was effectively broken up in 1984 and several smaller phone companies were formed. These operators verified long distance phone calls using "calling cards"; 6 or 7 digit numbers that had to be entered by the caller. With a computer and modem, it was fairly easy to brute-force this system by simply trying different calling card numbers until finding one that worked.

Your score: 0x ()

Score Level
0x000 - 0x010Computer Illiterate
0x011 - 0x040User
0x041 - 0x080Operator
0x081 - 0x0C0Nerd
0x0C1 - 0x100Hacker
0x101 - 0x180Guru
0x181 - 0x200Wizard