Why Programming Still Sucks

The book

Who should read this book? This book was written first and foremost for myself. But, colleagues from the software industry might be interested as well, although I'm sure that non-programmers will like this book much better, because of the critical tone that I take towards software and software development. Also,

Why is software so shitty? In this book, I don't shy away from pointing the finger to the contingent of the guilty—those who work for … someone whose name an atheist such as myself is not supposed to utter in seriousness.

Can we do better? Software could play a positive, angelic role in society. However, such would require that we change how we build sofware. And, no, that's not the same as requiring software developers to be more skilled and senior. The solution is not that we—software developers—become perfect, little angels. It is our software that must become angelic. And this is something that cannot be achieved from the worldview that has dominated the world since the agricultural revolution ten to thirteen thousand years ago.

Won't AI safe us from shitty software? The current generation of AI is shitty software. There's no sense in persuing AI if we don't fix the underlying information model first. This book points the way.

Who should not read this book? Hardcore nerds will hate this book. Because I want to break your toys. If my mission succeeds, you will have to learn an actual skill instead of parasitizing on the fictitious, swampy state of software that requires your horseshit job.

If you're still not clear whether you should read this book, perhaps the below decision diagram can help.

decision programmer Are you, in fact, a programmer? enjoy Do you love programming? programmer->enjoy Yes dream Do you dream of being a professional programmer? programmer->dream No repetition Would you still love programming if it wasn't so repetitive? enjoy->repetition Yes well_adjusted Are you currently a well-adjusted adult? enjoy->well_adjusted I dun(no) dream->well_adjusted No, I'm not a fucking nerd shatter_dream Do you wish for your dream to be shattered? dream->shatter_dream Yes, I'd love to learn to program sustainable_care Do you care about sustainability? repetition->sustainable_care No read_connector_1 repetition->read_connector_1 Yes well_adjusted->read_connector_1 No stay_adjusted Do you wish to remain a well-adjusted cog in the machine? well_adjusted->stay_adjusted Yes sustainable_care->read_connector_1 Yes sustainable_course Do you believe that society is on a sustainable course? sustainable_care->sustainable_course Not really read_connector_2 read_connector_1->read_connector_2 shatter_dream->well_adjusted Yes shatter_dream->sustainable_care No read Read the book read_connector_2->read stay_adjusted->sustainable_care Yes, otherwise what will the neighbours think! stay_adjusted->read_connector_1 Mwoaw sustainable_course->read_connector_1 Yes, I'm deluded sustainable_realism Do you believe that a non-sustainable system can be sustained? sustainable_course->sustainable_realism Hardly sustainable_realism->read_connector_2 No, humans are part of the earth's support system energy_awareness Are you aware of the energy use of the IT industry? sustainable_realism->energy_awareness Yes, pigs can fly polution_awareness Are you aware of the polution caused by the production and deprecation ofdigital devices? energy_awareness->polution_awareness Yes energy_realism Would you care if you knew that that energy use is unsustainable? energy_awareness->energy_realism No polution_awareness->read No polution_care Do you care about polution? polution_awareness->polution_care Yes energy_realism->read Yes energy_realism->polution_awareness No. They will think of something polution_care->read Yes do_not_read Do not read the book polution_care->do_not_read No, please make me emit green light!

The author

Rowan started writing Why Programming Still Sucks in Februari of 2021, to channel his frustrations from the software development job that he was trying to reintegrate in. That job was more frustrating than what he remembered from before he got into the hospital.

Something had happened to him those few days in the hospital. And that something made it very hard to convince himself any longer that: sure, this wasn't his dream job, but at least it was flexible and allowed him time to persue other interests … in theory. This sucked! Programming sucked, and, really, he had known this for a pretty long time. Didn't he promise himself in 2007 to never get back into IT?

He had gotten back into IT temporarily after his bachelor in marine biology. Half a year had turned into a year. A year had turned into another year. Before he knew it, six years had passed—six years that he hardly noticed while running on the exhaust fumes of his stress system.

His girlfriend had grown tired of “somebody who is so stuck in his life”. It was not the first time that she broke up with him. But somehow, this never really got through to him before, and they had contintued to live together and … do couple things together. He was too busy to deal with a breakup anyway.

After almost a year of corona lockdowns, she lost her patience. While she started searching online for other guys to have sex with, something started to really cramp up inside of Rowan's belly. Stress? Probably.

Eventually, when she was about to meet with one of her online flirts in real life (planning to have sex), he tried to address his angst by screaming, staring, whining and even banging his fists on the floor. It didn't help. All it did was prompt her to leave him just as his cramps were increasing in intensity. She was sleeping at his sister's place, away from his emotional breakdown, when he was finally overwhelmed by the physical pain. Crying and muttering to himself, he dragged himself to the hospital, got his appendix removed and had to stay a couple of days until the intravenous antibiotics had calmed down the imflammation of the adjacent peritoneum.

But, that was not what really happened. Nor was the realest thing that his girlfriend of 6 years (officially 5) broke contact with him minutes before he was wheeled into the OR.

The happening that made it so difficult to get back into programming was the support he got from his friends and family while he was in the hospital. Sure, he had decided to continue to live even if she no longer wanted him. But, he still felt completely unworthy. And his highest priority was to become more worthy of his previous princess again. Yet, his family and friends kept saying to him things like: “You're such a loving, sweet, caring person. You deserve somebody who really wants you and gives you the love you deserve.

Deserve? What did a worthless person like him deserve anyways? Something was wrong here. Why did they all keep pressing him on his value as a person while there was this gaping wound in his chest telling him the opposite? This festering scab had been mercilessly removed from his wound of worthless. And now all that love and support poured right into his open wound. Maybe he did have some worth, besides sacrificing himself for his object of worship and his dreadful programming job.

And thus he become aware of what he did and did not want. The life he had lived was not the life he wanted. He had lived it for her. He had lived it for his colleagues. He had lived it for his boss. He had lived it for that one fantastic customer.

Why Programming Still Sucks was started almost accidentally. He intended to finish another book first, to process the trauma that had informed (and was deepened by) his relationship with Her. But, no such luck. He now knew with full clarity that this book too needed writing. How else was he going to process the nastiness of sitting behind a screen solving problems that he didn't want to solve? Why did nobody else see that these programming problems ought not to even exist anymore? Now increasingly in touch with his likes and disliked, he could no longer ignore the pain of programming. It had to be penned down.

During the quest of persisting in programming while telling this tale from the shadows of IT, he found a new love—a goddess no less. She gifted him the confidence that was still lacking, showed him himself through her eyes. The magic fairy dust carried them together through cold streams and currents, between the ferns, into a waterfall and through the rainbow. Alive!

The vacation days he had used to live his magical adventures with his river nymph had annoyed his employer. In response, they offered him a promotion: more responsibility, more commitment to a bleak career in a bleak IT landscape. He declined and quit—sort of got fired actually.

Now free, he finished the tale. He had always intended there to be light in the tale: angels would come to the rescue. But how to write about angels and free association when you're bound by your paychecks? Still without a “home”—he had left the city apartment to Her—, he had plenty of places to stay, with people who loved him. And doing this for months had allowed him to safe some money. That, plus a severance pay¸ made it so that he could finish this tale without the immediate stressors of survival. He was free. He had found the love of his life. Now he just needed to pen down how he thought that angels were going to save the world.

An idea that he had had since he was 18 was now at last ready to be released, off of his shoulders, into your hands.

Rowan sitting on a rock in the water, all sixpacky and amazing-looking.

Book contents

  1. Chapter 1.The problem: IT doesn’t work for us
    1. Section 1.1.“Don’t you agree that running is great for your health, then?”
    2. Section 1.2.What do you mean, innovation?
      1. Section 1.2.1.How work sucks your soul out (while you are innocuously sipping your coffee)
      2. Section 1.2.2.Chatting, innovated
      3. Section 1.2.3.What is being innovated upon is tedium
    3. Section 1.3.How stupid software is (and stupider than that)
      1. Section 1.3.1.Learning JavaScript
      2. Section 1.3.2.Looping
      3. Section 1.3.3.HTML
      4. Section 1.3.4.Functions
      5. Section 1.3.5.DRY & the single source of truth
      6. Section 1.3.6.Conditional branching
      7. Section 1.3.7.Technical debt
      8. Section 1.3.8.Naming conventions and other nitpickery
      9. Section 1.3.9.Rehashing the stupid simplicity of programs
    4. Section 1.4.How we had to make the world a more stupid place to suit stupid software
      1. Section 1.4.1.The mark of the beast
      2. Section 1.4.2.Where the beast dwelleth
    5. Section 1.5.The very specific, nasty, little (and big) ways in which software makes us miserable
      1. Section 1.5.1.Clippy and co.: the tyranny of smiling office utensils
      2. Section 1.5.2.Gamification: turning you into a caricature
    6. Section 1.6.How social media amplifies the uniquely unoriginal
    7. Section 1.7.Privacy and security are the same thing, and they are political
      1. .Salary negotation: when it’s not you that’s being protected by your privacy
      2. .Anonimity: if governments hate it, you should have more of it
      3. .Digital privacy depends 100% on digital security which depends 100% on transparency
  2. Chapter 2.The costs: IT works for the devil
    1. Section 2.1.Monkeys (can) have souls
    2. Section 2.2.IT doesn’t have a soul
    3. Section 2.3.Nerd culture: soul artifacts
    4. Section 2.4.Open access artifacts
    5. Section 2.5.The coal clouds above Mordor
      1. Section 2.5.1.Fossil fuels vs “fresh” fuels
      2. Section 2.5.2.How the feudal lords of tech suck up all the “green” power
  3. Chapter 3.Patches, hacks, hubris and batches of seniority
    1. Section 3.1.Agile: thine work shall perish before your eyes
    2. Section 3.2.Version management: changing history
      1. Section 3.2.1.Ruin lies ahead with informal change tracking (or behind, or besides, or was it that other place?)
      2. Section 3.2.2.Source control to the rescue
      3. Section 3.2.3.Tracking changes in your Burnout Symptoms Tracker
      4. Section 3.2.4.A brief history of software history tracking
      5. Section 3.2.5.Rewriting history
      6. Section 3.2.6.Keeping it real: traceability of your Git history
      7. Section 3.2.7.Alternatives to Git
    3. Section 3.3.Monitoring: in paranoia thou shalt live
      1. Section 3.3.1.Introducing Icinga 2
    4. Section 3.4.Testing: thou shalt repeat thyself
      1. .Functional testing
    5. Section 3.5.Integration: thou shalt feast on the excrement of the other (shit fest)
      1. Section 3.5.1.CI (continuous integration)
      2. Section 3.5.2.Semi or fully automatic deployment
      3. Section 3.5.3.Integration testing
    6. Section 3.6.Documentation
    7. Section 3.7.Innovation
    8. Section 3.8.Intellectual property: stop the stealing and withholding
    9. Section 3.9.Software protocols and standards
    10. Section 3.10.Reuse
    11. Section 3.11.Optimization
      1. Section 3.11.1.HTTP caching
      2. Section 3.11.2.Scaling
    12. Section 3.12.Configurability
    13. Section 3.13.The keyboard is mightier than the mouse
    14. Section 3.14.Typing: If it quacks like a duck, kill it
    15. Section 3.15.Object-orientatation: an illusory game
      1. Section 3.15.1.Singletons: what does a class even mean?
    16. Section 3.16.Loose coupling: A pipedream that ended with a BEM!
    17. Section 3.17.HTTP non-semantics: The RESTlessness of the web
    18. Section 3.18.Stay in the database, silly!
      1. Section 3.18.1.Say “No” to NoSQL
      2. Section 3.18.2.Nope, no ORMs
      3. Section 3.18.3.No, don’t use MySQL!
      4. Section 3.18.4.Let your database be your API
      5. Section 3.18.5.Use SQLite to store your application data
    19. Section 3.19.XML sucks. Embrace the suck
  4. Chapter 4.The solution: angels and daemons
    1. Section 4.1.Art, from the abyss
    2. Section 4.2.Angels don’t exist
    3. Section 4.3.BULLshit, the language
    4. Section 4.4.Angels are related to other angels (through angels)
    5. Section 4.5.Stepping, left and right
    6. Section 4.6.Piling up angels (sets)
    7. Section 4.7.Angels don’t exist, but they can be defined
      1. Section 4.7.1.It’s all about the relationships
    8. Section 4.8.Angels have names
    9. Section 4.9.Because angels can’t be created, they also can’t be destroyed
    10. Section 4.10.Querying angels
    11. Section 4.11.Multiple steps can be organized into paths
      1. Section 4.11.1.Heavy steps
      2. Section 4.11.2.Heavy paths
      3. Section 4.11.3.Recursion and the superpath
    12. Section 4.12.Angels sit down after their jog
      1. Section 4.12.1.Angels have an ass
    13. Section 4.13.BULL is linear, but Angel is not
    14. Section 4.14.Querying relationships
    15. Section 4.15.What a relationship is, in Angel terms
    16. Section 4.16.Defining relationships
    17. Section 4.17.Dynamic paths and command arguments
    18. Section 4.18.Lengths
    19. Section 4.19.Strings and string lengths
    20. Section 4.20.Angels have parents and can have children
    21. Section 4.21.Angels inherit their parents' relationships
    22. Section 4.22.Angels can enter into a union, which allows for multiple inheritance
    23. Section 4.23.A path can be triggered by an event
    24. Section 4.24.BULL indicator summary
    25. Section 4.25.BULL indicator combinations and their meanings
    26. Section 4.26.Angel builtins
    27. Section 4.27.OxOS types
    28. Section 4.28.Algorithms in Angel
  5. Chapter 5.No, the solution is not AI
    1. Section 5.1.Heuristics vs intelligence
    2. Section 5.2.The control problem
    3. Section 5.3.Or are computers already in charge?
    4. Section 5.4.The irrelevancy of AI: computers already think
  6. Chapter 6.Other non-solutions
    1. Section 6.1.Low-code, no-code, and non-sense
    2. Section 6.2.ORMs: proof that SQL sucks, but OOP suck even more
      1. Section 6.2.1.NULL
      2. Section 6.2.2.Django, chained
  7. Appendix F.Colophon
    1. Section F.1.Knuth and co.
      1. Section F.1.1.HTML: alpha or omega?
        1. Section F.1.1.CSS print support sucks
        2. Section F.1.1.HTML is not a serious source/canonical document format
      2. Section F.1.2.Nutt and co.
      3. Section F.1.3.A bet lost
  8. Appendix F.Further reading
    1. Section F.1.About the peculiarity of work
    2. Section F.2.Escaping the rat race
  9. Appendix F.Installing Telnet
    1. .Installing Telnet in Microsoft Windows 10
    2. .Installing Telnet in MacOS
    3. .Installing Telnet in *BSD and other non-Linux Unices
  10. Appendix F.Counting in binary
    1. Section F.1.Hexidecimal


Raving. They will be raving.