I love learning. There is nothing greater than the satisfaction of solving a problem, or learning a new technique. Recently, I have been trying to make major upgrades to my programming skills. In truth, after reading Eric S Raymond's article on How to become a Hacker, I have been trying to become one. They are not someone who breaks into computers. A hacker can make a computer do what they want. A hacker is a programmer, an engineer, a systems architect, all in one.
That is a hard ideal to achieve, so I have had difficulty. I have had an issue trying to be hands on however. Practical approaches to learning rely on good ideas that drive the action. But I wasn't having any good ideas. In contrast to the way I was thinking about philosophy - which felt like I had endless access to great interesting ideas - my thoughts about hacking were bland and uninteresting.
Over the past 4 weeks something has changed, I have begun to have better ideas, and the quality of the work I have been doing is orders of magnitude greater than it was before. This led to me realising a couple of truths about hacking, good ideas, and trying to force results, and I thought I would write about that.
I was impatient to have an impact
The first thing that I noticed upon reflection was that I was extremely impatient about finding a worthy project. I had created a desire for a supposedly life changing project that would appear, provide me with ample motivation and incentive, give me the skills of a master hacker, and make me money. Modest? Absolutely not. Delusional? Absolutely
I wanted to find the project that would solve all my problems because humans naturally seek easy answers when they are in the unknown. I desired to find a project to teach me how to be a hacker, because I was impatient to make an impact, to have great ideas, and to contribute something. I wanted the fast track to competency. The This is not real, so you make something up. A silver bullet exists, you say, and I need to find it.
A realistic approach
However, to have good ideas about a subject area you need to:
A strong understanding of the foundational ideas of a subject.
Knowledge of the current state of the art.
Good ideas improve the state of the art. Ideas might build on the current iteration of the state of the art - like how cars have developed - or might entirely replace the existing state of the art - like how the wheel replaced walking.
To push the boundaries of a subject area, you need to understand it well. You need to have foundational knowledge and understanding of the current state of the art. Einstein did not start with an alternative to physics, he understood the foundations and he saw inconsistencies in it.
What good ideas are worth?
Another problem I encountered when I started studying hacking was that I only thought about the short term value of different topics. To understand computer science you need to understand amongst other things; programming and languages; networking; operating systems; algorithms and theory; to name just a few.
At some point you need to make value judgements about the cost and gains of focusing on specific topics. I adopted the incorrect framework of only focusing on short term economic value. I asked things like - what language could help me build a product quickest? What could get me a job as soon as possible?
In doing so, I worked in an arbitrary way, not pursuing my interests, but instead on what I (stupidly) thought would create the most short term value. But, when you are not focusing on what you are interested in, you don't really learn. Therefore, I would find myself frustrated, feeling like I was regressing, and constantly re-calibrating trying to find a better project, a more valuable offering, but only within my predefined framework of short term gain. This, obviously, led to me feeling miserable and almost abandoning my studies on multiple occasions.
Follow the incentives
My belief is that the individual needs to focus on topics that interest them and that provide real incentive. This is something that can't easily be explained or described, but it is a feeling that everyone has felt. Think about the last time you were in flow. That is real interest.
Since I started focusing on lower level languages, things that seem more abstract but interest me a more, I have found my knowledge growing exponentially. I decided to study the history and philosophy behind UNIX, started learning Rust, and working with an Arch Based Operating System. All of these activities have no short term financial gain - at least that I can see - but that does not matter. I am getting quality work done, and I am starting to think like a hacker, which is the goal.
Practical takeaways
Stop looking for a single project, system, or answer as silver bullets to all your problems.
Focus on your interests not on perceived value.
I decided to write these lessons down because this is not the first time I have encountered and fought with them.
When I was coming up in BJJ, I would frequently find myself searching for new instructional to watch or systems to learn, in the vain hope of revolutionising my game over night. This had two effects:
I became more disheartened and easily discouraged because I never felt consistent.
My skills never developed appropriately because I didn't give enough time on a single element.
It was only when I realised that the path to mastery was a slow and steady one, where consistency trumped intensity, and interest defeated perceived value, that I began to make serious gains in my BJJ skills. I think I am approaching a similar point in hacking. I messed up a lot of times searching for that silver bullet, trying to find a single project to solve my problems. The reality is, however, that there is no concrete answers and no single path. It would serve me well to remember that sometimes.