I read blogs and newsletters about technology. I vaguely noticed most of what I was reading was about software more than hardware. I honestly didn’t think much about it.
Then I started wondering why there is so much more focus on software.
A few things happened.
I talked to a younger friend who had just changed careers. Her earlier career had been very computer- and software-intensive. I encouraged her to find something she was interested in and start reading about it. I told her “I’m glad we have spreadsheet programs instead of the old hand-cranked adding machines my grandmother let me play with as a kid. But the digital world is not the real world. It’s an abstraction of an abstraction of an abstraction of a specific use case of a finicky and non-intuitive way of manipulating natural forces.(1)” I also told her that anything in the real world she chooses to read about will reference other areas. Sociology, anthropology, psychology, history, chemistry, metallurgy, mineralogy, history are all areas I’ve wandered into by reading about something in the real world which interested me.
Earlier this year I read The Pragmatic Programmer – your journey to mastery, 20th Anniversary Edition by Thomas and Hunt. It’s a very good book. I highly recommend it. It is about creating code that one day will have to change. That means making it as easy to change as possible, and as easy to change without breaking everything else. I’m going to explicitly point out this was addressed in the real world long ago. There are very few books about how to build a house so taking out a cupboard in the kitchen doesn’t cause the basement window to no longer open. There are very few books about how sew a shirt so hemming the bottom doesn’t mess up the collar. And there are very few books about designing a car so changing a flat tire doesn’t create a hole in the radiator.
In July I read two articles in The Register about a lack of hardware engineers.
My own opinions:
I know from experience that electrical engineers who design the hardware have to take higher level math classes than the computer scientists who program the software.
That was the case 25 years ago. I’m not sure if it’s still true now, but I expect it is. I’m also not sure about other fields such as computer engineer or software engineer.
I also know from experience that it’s a lot easier to try out new ideas in software than hardware.
A new program can be written, tried out, and erased with the only loss being a little bit of electricity and some time on the part of the programmer. A hardware circuit, no matter how well it works or doesn’t work, still leaves the hardware after the project is done. The hardware has to be either disassembled so it can be used in something else, or completely scrapped. A component soldered to a circuit is not reclaimed with the push of a button the way computer memory is when a file is deleted.
And I know from experience that the real world is far more humbling than the digital world.
I can try to write while tired, mess it all up, have autocorrect fix numerous mistakes and delete a whole bunch of stuff that makes no sense on rereading, and then forget about my mistakes and think I did great job all along. A physical project such as drawing, crocheting, sewing, folding clothes, ironing shirts, or whatever else, is much more obvious when it’s messed up. It takes a lot longer to fix something in the real world. I might have done something unfixable. Even if I redo what I can undo and fix what mistakes I can fix, I’ll remember all that the next few times I look at what I made.
Technology is both software and hardware.
When I say I like technology, or that this blog is about making technology work for the user instead of making the user work for the technology, that is hardware too. It’s not just software.
Why I came up with the long “abstraction of an abstraction . . .” description
“It’s an abstraction of an abstraction of an abstraction of a specific use case of a finicky and non-intuitive way of manipulating natural forces.”
(1) “It’s an abstraction . . .”: Most programmers do not program at a level where they are telling the computer which specific memory cells to use and what specific processor logic commands to use. Most programmers write at a more human-readable and human-understandable level. A compiler turns their code into something the computer can understand.
“. . .of an abstraction . . .”: No matter how amazing it looks or sounds or what it does, all human-readable computer programs are converted to a language or code that tells the processor what to do in language the processor understands. For the processor, there’s inputs; there’s outputs; there’s memory; and there’s commands to the processor to read an input, read memory, do something with what it read from the input or memory, write information to an output, or write information to memory. To the processor it’s all high or low electrical states, called 1s and 0s by humans.
“. . .of an abstraction . . .”: Multiple transistors can be connected, along with some other components, to switch signals, have some logic about whether an output is high or low based on multiple inputs, and hold that high or low state for a time. That’s a very basic description of a processor with memory.
“. . . of a specific use case . . .”: Transistors can be configured to operate as an amplifier, or they can be configured to operate as a switch. For digital circuits, they are configured to operate as a switch.
“. . .of a finicky and non-intuitive way of manipulating natural forces.”: Transistors are made from semiconductor materials. For electricity, most materials either conduct electricity and are called conductors, or they do not conduct electricity and are called insulators. Semiconductors conduct electricity under certain circumstances. Semiconductors are made out of very specialized materials which themselves are not easy or intuitive to make.
The digital world is not the real world.