I'm a hacker and a software engineer. You can be both. It's not mutually exclusive. This is how I did it.
I realized I wanted to be an engineer when my parents and I watched Apollo 13. The scene that sticks out in my mind is when there's a problem with carbon dioxide filters. The engineers at NASA are tasked with fitting a square peg into a round hole. The stakes were high, and the problem was exciting.
This scene is the epitome of hacking: innovative problem solving with constraints. The NASA missions in general were my idea of the epitome of engineering.
I learned everything I could about programming, my favorite aspect of engineering. My first programming language was C, joined a FIRST Robotics team, and took every computing class my high school offered.
I considered myself a hacker. Solved interesting problems on the robotics team, got to level 5 or 6 of pulltheplug.org, and wrote some cool Perl scripts. Installed Slackware, broke my parent's computer and then fixed. Code fast, learn fast.
Naturally, I decided to go to school for computer engineering. Why not do what I love and get paid for it?
During the first week of college, I sat in a large auditorium with other engineers-to-be and listened to a lecturer telling us about great engineering disasters.
It was a strange way to begin. He told us that we carried with us a great responsibility. If we were to be engineers, he said, we would have to act like it. Why was that important? I wondered.
He continued: every time someone turned on the wrong burner on the stove, we were to blame for the fire it caused. It should have been easier to discern which knob was correct. But wasn't it the fault of stupid users? PEBKAC?
Every time we wasted a user's time with needless dialog boxes, people would be harmed in some way. Not everyone makes medical equipment, but it's unacceptable to be lazy with your user interface. Well, I can do better.
Every time a manager pushed to release a product that wasn't ready, we were to blame if we acquiesced. Maybe Challenger wouldn't have exploded if the engineers stood up for what was right, and against go fever. Yeah, you're right.
We had a moral obligation as professional engineers, he said, to do what was in the best interest of the safety and well-being of our customers. The hacker in me was stunned; what if my hacky perl scripts or untested robotics code hurt someone? My hacker state of mind was get-shit-done and not worry about the consequences. And that's what I was doing.
When I was taking my differential equations class, the Mississippi River bridge collapsed. We had just received our midterm exam results. My professor, usually a very positive man who enjoyed juggling hammers, was very upset. He said to us that every red mark on the page was another dead body. I looked at my exam, riddled with evidence of laziness and half effort, and I was ashamed.
A few years later a professor I admired suggested that I join the Order of the Engineer. It is the American version of the Canadian Ritual of the Calling of an Engineer. The Canadian version was developed after the Quebec bridge collapsed. Their Iron Ring symbolizes the failed bridge. It is worn on the little finger of your writing hand, such that it is felt and makes a noise while you are working. The ring reminds you of your obligation.
I joined and accepted the obligation. I considered myself, upon receiving it, an engineer who moonlights as a hacker.
I graduated and began to work as a software engineer. We were a software-as-a-service shop, which was new to me, as all my previous jobs were embedded software.
It was apparent to me that what I was doing wasn't precisely what engineering school had prepared me for. We released code fast, and sometimes we tested our code. We broke stuff and fixed it as fast as we could.
We were certainly hackers and programmers, but I didn't think we were being engineers. We lacked rigor.
Maybe this is why so many people say that college isn't required for software. For how much of software is done, school is overkill.
Peter Thiel famously says that college is a waste of time. For hacking up some quick scripts or an MVP, it probably is.
Plenty of people get by without going to engineering school. Steve Corona wrote about how school wasn't for him. He went to my alma mater. In fact, we were in the same freshman class. He would probably agree with Tobi Lütke when he said, "Not that degrees matter anymore. They do not. Experience does."
I completely agree. However, I feel that engineering school is something that more hackers should experience. It is an experience in and of itself. Being an engineer is different from being a hacker, and you can be both. They are complementary.
Engineering is a mindset. One which carries the responsibility of your customers and users. Engineers work to not release dangerous software and are fanatical about quality.
Hacking is also a mindset, but it is closer to Feyerabend's methodological anarchy than engineering is. It's about making significant innovations, and less about making great products.
To make great, innovative products, you need to be a hacker and an engineer. Responsible and adventurous. Fast and analytical. Well-read and clever.
You need to hack and to engineer.