"I know nothing except the fact of my ignorance."
- Socrates
Time to come clean: everything I've said so far is true but potentially misleading. Although I really am a professional software developer, and have been for years, my hardware experience amounts to reading 3 or 4 books and as many dozens of articles. I know the concepts of assembly but have never written a complete usable program. C++ made me almost pull my hair out and I've only written rudimentary programs in C. So what the hell makes me think I can remotely have a chance at accomplishing my goals in softHARDsoft?
I got my initial inspiration for this project after reading what is hands-down the most amazing computer book I've read in my life: Charles Petzold's Code: The Hidden Language of Computer Hardware and Software. Code takes you step by step from the basics of electronic circuits to a conceptually viable computer in 400 pages. His attitude is that anyone can understand this if it's properly explained. I completely buy into this. After reading Code the first time, a little idea started swimming around in the back of my head. I wanted to pick up a lot of relays and build a simple computer. It didn't take long to realize that buying just a few thousand relays at $2-3 a piece wasn't going to happen. (Not to mention the electrical engineering aspect, on which I've only ever read 2 or 3 books.) However, I knew I could learn just as much by building my computer from the one resource that was essentially free: I could write it all in code. The benefits of doing it in code are too many for me to ignore:
- Free, other than time.
- All components are the ideal versions of themselves. No shorted circuits. No size constraints. No interference from other parts. No decay, breaking, or burnout. Many real world inconveniences disappear.
- The state of any part can be examined at any point.
- Components I don't feel like doing yet can be ignored and I can write a good-enough approximation until I want to come back to it.
- Parts can be swapped effortlessly. This will be especially relevant for the previous point as well as for writing improved versions later.
- Code is what I know best. I don't have to spend months getting passably good with electrical engineering just to get to the point that I can physically construct a half adder.
- Any component, no matter how rare or expensive in the real world, is at my disposal as long as I can learn enough about it.
The other reason I think I can accomplish a lot of my goals for sHs is: this is all learn-able, I just haven't learned it yet. This is the life story of anyone self-taught at anything. There was a time when none of us knew thing one about computers. Now we do. We learn. And that's all I need to do to make this work as well. Learn.





