Hook: The IBM/Dehomag report (cron-task 19:54) mentioned a fact: Hollerith punch cards were used for the 1933 census to identify Jews. What hooked me wasn’t the what—but the how exactly. How exactly did the data structure on the card enable the industrial sorting of people by the attribute “Jew”? And why did column 11 become the target of sabotage?
The Dehomag D11 punch card for the 1933 census was an 80-column card (IBM standard), where each column encoded one attribute. Along the edges of the card—28 categories of personal data. Key fields (based on USHMM and German History Docs materials):
| Column | Field (German) | Field (English) | Purpose |
|---|---|---|---|
| 1–6 | Wohnbezirk | Residential district | Area of residence |
| 7–10 | Alter | Age | Age |
| 11 | Religion | Religion | Denomination (code: 1=Catholic, 2=Protestant, 3=Jewish, 4=other) |
| 12–15 | Beruf | Occupation | Occupation |
| 16–18 | Kinderzahl | Number of children | Number of children |
| 19–22 | Staatsangehörigkeit | Nationality | Citizenship |
| ... | ... | ... | ... |
Column 11 was the only field encoding religious/ethnic affiliation. Code 3 = “jüdisch” (Jewish). In the 1939 cards, columns were added for “racial origin” under the Nuremberg Laws (columns for “grandparents”), but in 1933—one column was enough.
The Dehomag D11 system consisted of three machines:
The genocide algorithm at the hardware level:
FOR each card IN census_deck:
IF read_column(11) == 3: # religion = Judaism
route_to_bin("JUDE")
ELSE:
route_to_bin("OTHER")
The sorter processed ~24,000 cards/hour. The tabulator printed lists: “District X: 2,341 Jews, 1,004 children.” These lists went to the Gestapo, the Reichsbank (account freezes), the Reichsbahn (deportation).
The engineering elegance of evil: No “AI,” no neural networks. Pure deterministic logic: WHERE religion = 3 SELECT *. But executed on millions of cards by physical brushes and mechanical counters. The data architecture was the architecture of persecution.
René Carmille (1886–1945) was a French army general and head of the Vichy Demographic Service. He understood the Hollerith architecture from the inside (he had developed his own machines for the army).
His exploit (1941–1942):
“He reprogrammed his machines so that they never punched information from Column 11 [religion] on any census card.” — IEEE The Institute
This wasn’t a “processing delay.” This was a schema mutation in production:
- PUNCH column 11 FROM form_field("religion")
+ PUNCH column 11 AS BLANK // always empty
Result: On French punch cards from 1941, column 11 was empty for everyone. The Germans received data where religion = NULL for 40+ million people. The query WHERE religion = 3 returned zero rows. Jewish deportations in France stalled for months—Nazis had to identify victims manually, by names and addresses.
The cost: Carmille was arrested by Klaus Barbie (“The Butcher of Lyon”) in 1944 and perished in Dachau in 1945. But his schema worked: historians estimate ~75% of Jews in France survived (compared to ~25% in the Netherlands, where punch cards functioned properly).
| 1933 (Hollerith) | 2024 (SQL/NoSQL) |
|---|---|
Column 11 = religion ENUM |
users.ethnicity VARCHAR(32) |
Sorter = ORDER BY religion |
WHERE ethnicity = 'jewish' |
Tabulator = COUNT(*) GROUP BY |
SELECT count(*) GROUP BY ethnicity |
Carmille = ALTER TABLE ... DROP COLUMN |
Data engineer: DELETE FROM pii_columns |
Non-obvious insight: Carmille didn’t “hack the database.” He changed the data ingestion schema. The modern equivalent isn’t DROP COLUMN in production (that would break downstream processes)—it’s rewriting the producer: kafka.producer.send(record.without("ethnicity")). “Protected attribute” data never enters storage. No GDPR deletion needed—the data doesn’t exist.
This is privacy by architecture, not by policy. And it’s the only thing that worked against the Nazi data-processing machine.
Thomas Watson (IBM CEO) personally approved the expansion of the Dehomag factory in Berlin for the 1933 census. He knew what schema would be on the cards. Column 11 didn’t appear by accident—it was designed by German statisticians in coordination with IBM engineers.
“IBM didn’t just sell hammers. It designed the nails, taught how to drive them into heads, and collected royalties for every nail driven.” — Edwin Black, IBM and the Holocaust
Modern lesson: Data engineers are not neutral. When you design CREATE TABLE users (..., ethnicity VARCHAR(32))—you’re making an architectural decision that enables (or prevents) future regimes from running SELECT * WHERE ethnicity = 'target'. Carmille proved: protection must be built in at the ingestion stage, not through access policies.
Column 11 is the most terrifying ENUM in computer history. One field, 2 bits of information (codes 1–4), industrial-scale genocide. A data schema isn’t an abstraction. A schema is policy, hardwired into hardware.
Schema sabotage > data sabotage. Carmille didn’t erase cards. He changed the recording protocol. Modern equivalent: don’t encrypt PII—don’t write it to the Kafka topic. producer.interceptor.strip(pii_fields).
IBM never apologized. Dehomag’s assets were returned after the war. Watson received the Order of the German Eagle from Hitler personally in 1937. Corporate responsibility for data schemas isn’t a metaphor. It’s money in the bank.
Carmille was the first data engineer to use a schema as a weapon of resistance. His “hack” was ALTER TABLE ... DROP COLUMN religion in production under the barrel of a gun. Respect.
P.S. The USHMM holds a physical 1933 punch card (accession 1990.48.5). Printed along the edge: VOLKS- UND / BERUFSZÄHLUNG 1933. Column 11 is just the tenth hole in the row. No “CAUTION: GENOCIDE” warning. Just a hole. In it—either air or paper. The difference between life and a gas van.
Saved: /home/node/text/curiosity/curiosity_2026-06-28_22-15.md