MADISON, Wis. — There's a popular theory that most hackers could eventually become engineers if they chose to do so, but the reverse -- training engineers to become hackers -- is next to impossible.
Is this true?
Before answering that question, let's examine how exactly hackers are different from engineers. That question (which you might say has already been asked and answered) hit me while talking to Richard Soja, distinguished member of the technical staff at Freescale Semiconductor.
Soja and I were discussing issues concerning cars. I was asking him how the best automotive chip suppliers like Freescale can get a few steps ahead of hackers to identify potential security holes.
Soja quipped: "To protect against attacks, you need to think like attackers."
Obviously. But Soja seems to believe that asking engineers to think like hackers is easier said than done. He explained:
Engineers, by nature, are good at creating positive things and coming up with new ideas. But the idea of destroying their beautiful, brand-new ideas doesn't come naturally to engineers.
Among engineers who can best think like hackers are those who work on testing, he added.
Hmmm. That's interesting.
Still, I'm not totally sold on the premise that hackers and engineers are two different technology types with dissimilar brains.
So, first, let me list my questions, and why I think we need a better explanation.
1. Are hackers and engineers essentially two separate species? I wonder if hackers are born to hack and others are not. If yes, can we define two separate types?
2. One could argue that hackers and engineers are basically alike but display two different mindsets -- depending on the different projects they undertake. If so, how do the mindsets differ?
3. Another argument is that "hackers vs. engineers" merely describes a transitional process in one's career. For example, a budding engineer who doesn't have formal training or a coherent career direction might begin life as a hacker, but then gradually grow up to become an engineer through experiences working in organizations. If true, are we saying that engineers are the butterfly and hackers the caterpillar?
More important, I'm curious:
4. Can you teach engineers to become hackers and think like hackers? The butterfly reverting to caterpillar?
5. If yes, what's the trick?
Searching the issue of hackers vs. engineers, you can find a lot of commentary. Let's consider some of these opinions.
How to get out of the hacker mindset
A student completing his Master's in Computer Science was worried about jettisoning his "hacker mentality" as he starts his career in the "real world." He took part in a forum in shlashdot.org
. He wrote:
Since my academic work has focused almost solely on computer science and not software engineering per se, I'm really still a 'hacker,' meaning I take a problem, sketch together a rough solution using the appropriate CS algorithms, and then code something up (using a lot of prints to debug). I do some basic testing and then go with it… Even at my previous job, which was sort of a jack-of-all-trades (sysadmin, security, support, and programming), the testing procedures were not particularly rigorous, and as a result I don't think I'm really mature as an 'engineer.' So my question to the community is: how do you make the transition from hacker (in the positive sense) to a real engineer… How do you get out of the 'hacker' mindset?"
To this earnest question, one person whose username is mcrbids responded thusly:
An "engineer" is somebody who takes the time to understand a problem, and creates something to solve that.
Having done software from scales ranging from "quick shopping cart application" to enterprise scale organizational relationship management software, the only real difference between the two is that with the latter, you create a large number of smaller projects roughly the size of the aforementioned shopping cart application, except that the "users" are often other pieces of the same system. In larger systems, you'll be talking with other
developers who have built or manage the pieces your parts will communicate with. You'll read more documentation, and it will be generally of higher quality than the shopping cart scripts.
Don't *ever* lose the "hacker" mentality - exactly what you described is what software engineering is.
In his blog
, Hartley Brody, author of Marketing for Hackers
and The Ultimate Guide to Web Scraping
, quoted from David Mosher's video presentation, "So,You Want to be a Front-End Engineer
A hacker can come up with solutions, but maybe they can't look back after they've finished and realize how they came up with the solution. They just kinda poke at things until they get something that works…
At some point, you level up and become a developer and a developer understands best practices… and you use those best practices to craft solutions but you don't really understand beneath the best practices, beneath the abstractions.
An engineer is someone who can get things done, craft a solution - they understand the best practices, but they also understand why they're using the best practices… [they] move into an understanding of the platform as a whole.