Doing My Part

Since 1996, most of my jobs was about computers and technology, in one form or another. I was building, selling, and fixing computers (Amigas and PCs). After that I was working in photo-lab, producing photos from both analog, and digital sources.

In 2008 I lost my job, and it turned out, that I was great at technology, but terrible at job finding. In 2016, after many failed job attempts, I decided to turn my life around, and learn programming. I started with Python, but I was hungry for power, so I took CS50 from Harvard, and learned good old C. Using this language was like having a superpower, but I wasn't sure what to do with it, yet. Soon after, I have found 'Handmade Hero' and my life changed forever.

Watching Casey at work showed me that:
  • you don't have to be a super-human to create a piece of software that is worth using,
  • it's OK to struggle with your code, and to fail again and again is quite normal,
  • every compiler warning, and error message is an opportunity to learn something new,
  • real programmers don't have to know everything by hearth, and looking-up stuff in the Internet is fine.


After 50+ episodes of HMH, I was sure, that there's a place in the industry even for a guy like me. Finally - I thought - I know how computers work under the hood, and equipped with that knowledge, I can make a big bucks too. But, no matter how much I knew, I always felt, it's not enough. I was looking at the amount of software, that was created each day: frameworks, libraries, game engines, programming languages, operating systems etc., and thinking: how in the world could I contribute anything worthwhile, to this pile?

To make matters worse, I was learning more about the state of the software industry - video games part of it in particular. I was reading a horror stories about people working 60-80 hour weeks, just to meet impossible deadlines, set by irresponsible, or just plain stupid managers. People, who's passion was used against them in the worst manner possible. At some level I would understand, if all this methods was used to create a superior product, but we all know that software quality is steadily declining. Lately I was playing - made in Unity - 2D Sudoku game, that was using 25% CPU time, while doing nothing, but displaying the board. What a time to live in.

So what are my options? I'm 45, no-one knows who the fuck I am as a programmer, and, at this point, I'm pretty sure I would be miserable in corporate environment. I guess I could thrive in a small company (like RAD), but - as I mentioned before - I'm just some guy, that claims to know something, but have no idea how to sell it, so why would any company care? Over the last 4 years I wrote huge amounts of code, but I shared almost none of it. My GitHub profile has 3 small 'original' projects, and some Open Source forks; that's it. I refuse to push the code from every damn tutorial I'm currently learning from; there's enough of this shit on the web already.

In the moments of total honesty, I think I wouldn't hire myself. I'm stubborn, opinionated, blunt, and most of the times, I like to be left alone. Yet I could easily imagine spending all night with people like Casey Muratori, Jeff Roberts, or Jonathan Blow, just talking about the code, and sharing our twisted sense of humor. In the world where stupid people are put on the pedestal by the many, I want to honor my mentors, and give back to the few.

Rant mode off; let's talk business. I'm not here to play victim, but to be the change I want to see in the world. I'd like to be a mentor to people, who - like me - are curious how things work behind the scenes, asks questions, and don't want just consume, but to shape their own reality. That's why I'm currently working on a video course, in which I will dive deep into the digital technology stack, and tackle the following topics:
  • numeral systems (binary, octal, hexadecimal),
  • digital logic at the transistors, and gates level,
  • CPU inner-workings (ALU, registers, cache etc.),
  • memory hierarchy,
  • machine code, assembly and compilers,
  • operating systems (processes, virtual memory, multi-tasking, multi-threading etc.),
  • and many more


I'm not gonna lie, I'm hardly an expert in any of those areas, but I'm willing to recognize the holes in my knowledge, and fill them with a bunch of facts. I want to do a proper research, and make sure the information is solid, before I hit the 'Upload' button. To do so, I need some good books, and lots of them. More so, I would prefer paperback versions of those books, so I could sit away from the computer screen, and make handwritten notes, on a piece of paper. I know all that information is already online, but as I said, I would rather restrict my time in front of the screen: reading for a few hours a day on a 12" Thinkpad is not ideal.

There is one small problem: at this moment in time, I'm pretty much broke. That's why I'm asking you for help. I compiled the list of books, I would like to use in my research, and I'm looking for generous people, that are able and willing to donate an used copy, or make a gift of a new book, by using my Amazon wish-list. There's no local Amazon store here in Poland, but the German branch is shipping most of these titles cost free.

As for the video series, the plan is to upload to YouTube, and BitChute simultaneously. I'm pretty good at reading, and writing in English, but I'm quite terrible as a speaker, that's why, initially, the series will be in Polish only. Hopefuly, with time, people will start to contribute subtitles, and maybe their voices. The whole thing will have pretty low production value, so no fancy intros, animations, and other noise; just me talking, and using my tablet to draw/write stuff on the screen. 2-3 uploads per week, with minimal amount, or no ads. I want it to be tight, so every episode will be as short as possible, with one topic per episode, or multi-episode topics if necessary.

The overall goal is to show people, that computers are not made from magical dust, and you don't have to be autistic, to do a low-level stuff. I hope this will open some eyes, and inspire people to go deeper. I don't want to end-up in the world, where everything is written in JavaScript, but no-one knows how to write a web-browser. This will be my effort to postpone the apocalypse.


Here's my books wish-list (high-priority titles first):
  1. Computer Architecture: A Quantitative Approach
    by John L. Hennessy, David A. Patterson
  2. Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture
    by Jon Stokes


Feel free to suggest other titles, that you think would be beneficial in creating the course. I'm especially interrested with books that covers universal, platform-agnostic, low- or mid-level topics.


Cheers!

Edited by Tomasz Różański on Reason: Removed a few book titles from the list.
I would suggest going straight to the source and reading the thousand page reference manuals for the compilers and CPUs you're using. After a month's studies with no other sources, I went from not knowing what SIMD was to beating dedicated SoC hardware using bitwise register hacks. The reference manuals just have all the information you need.
I want to thank Trevor Dickinson from A-EON Technology for his financial support. Using his donation, I was able to cross out three books my wish-list, and buy new toner cartridge for my printer. Now I can print out the all the documentation in the world, and read it on a comfy couch. Good times.

Trevor, you are a real angel.

P.S. If you love Amiga, you'll love Trevor's blog