Hacking began with phreaking – a portmanteau word for “phone” and “freaking.”
Starting in the late 1950s, quite a few people became rather curious about how the phone system routed calls. They did a lot of experimentation, dug through telephone company trash bins to find secrets, reverse-engineered, and read rather obscure journals. They struck gold when Bell Laboratories accidentally released information on how the phone system works and, crucially, which frequencies it used. At that point, some folks figured out how to make free phone calls and built some interesting devices – those infamous blue (and black and red) boxes.
Those early hackers/phreaks were a special breed.
Steve Wozniak assembled the necessary electronics into a blue box which Steve Jobs monetized. The proceedings were used eventually to found Apple Inc.
But as computers became more common, so did hacking.
It is no coincidence that all this “phreaking” unfolded in the late Sixties and early Seventies: You need a computer for this kind of behavior to work. Behavior? Yes, there is a specific behavior here which can be summarized as “experience freely.”
Why does this behavior only work with computers? Imagine that the telephone network still employed switchboard operators and you asked her (yes, all switchboard operators back then were “her”): What happens if I dial Keypulse (“KP”) here? End of that conversation!
Let’s jump to something we currently fill our days with: the web.
Sometimes I feel like I don’t know – or can’t remember – anything any more.
But hey, no worry: Instead of retaining a whole brain-load of information, I just need to remember what to search for. Having a healthy amount of self-confidence is recommended before you outsource memory like this, otherwise you will get severe imposter syndrome – I still do occasionally, because it feels like anyone could just take these searches and put them into a few patches.
Although outsourcing a chunk of your brain to the Internet actually raises your productivity and allows you to know more, it’s kind of weird.
apply take a list or an array of arguments? Whether callback or array is the first argument in the PHP
Unless you write code in the given language daily, there’s no point memorizing this kind of information. It is enough to remember that there is a function in PHP (actually, more than one) to run a function over every element of an array.
Now, if you know that you can type the words, “PHP to run a function over every element of an array” (without quotes) into Google, then pop goes the weasel: four out of the first five results are relevant, two being php.net and two being StackOverflow (the fifth is w3schools, which I advise avoiding like the plague).
As we know, you can throw just about anything and everything into Google (or, for privacy and to avoid the filter bubble, DuckDuckGo). There is no cost and practically no time lost. The easiest searches are for error messages. Remove timestamps and just throw the whole message into the search engine. The chances of your error message being the very first among the vast number of Internet users is very small. Of course, this supposes you have good error messages, and not the kind that PHP and Drupal occasionally trip you with. (Note to fellow developers:
array_flip() can only flip STRING and INTEGER values!”; write unique error messages, so your users can actually search for them.)
As much as I urge outsourcing memorization to a search engine, we can’t avoid remembering certain notions when we want to search for anything less straightforward than error messages.
While Juliet said, “A rose by any other name would smell as sweet,” we can’t (yet?) search by smell, so if you want to find information, you have to know what to look for. The search engine tries to guess what you want, but IMO, it makes doggie-poop out of it.
Of course, you can put quotes around your query to narrow the search, or if using Google, in Search Tools, select Verbatim, or use Boolean terms.
You know the joke: An SEO copywriter walks into a bar, grill, pub, public house, Irish, bartender, drinks, beer, wine, liquor...
You can find information in forums and similar sites – which you probably should read anyway if you need information on a topic. A keyword will lead you to a forum, where you’ll see more keywords and you can then search for more. Hopefully, then you’ll have the information you searched for retained in your short term memory, along with the keywords, which you should also memorize – they might be necessary down the road.
But no matter how well you search, you’ll occasionally hit a dead end.
Create Good Karma
In that case, let’s hope you paid it forward and can now draw on the good karma you’ve created.
Over a few months, I took the time to answer a couple hundred questions on Drupal StackOverflow and StackExchange. While this is now harder to do on StackOverflow, as it’s become so large and people are practically sniping for the easiest questions to answer, but on smaller sites – like the Drupal StackExchange – it’s still doable.
You immediately gain two benefits: by answering questions, your own understanding will increase – and you’ll find a steady stream of real problems to work on, which is essential when you’re learning a new programming language.
Once you’ve accumulated a healthy amount of karma, then when you need to ask a question, you have a much higher chance of grabbing the attention of someone with the experience to answer it.
In other circumstances, expert advice would come with a hefty consultant bill; here, it’s free. Or rather, you already paid for it by investing your time in advance.
Another plus: By answering a lot of bad questions, you will learn the art of asking good questions. A good question describes the problem in an easily understandable way, clearly stating the circumstances. For example, on the Travel StackExchange site many people ask about visas – without including their citizenship. Unless you are an immigrant (like myself), it’s likely you’ll neglect to mention your country of origin. But how can visa questions be answered without knowing what passport you’re traveling on?
To receive a good answer, you also need to explain the goal.
If you only ask about a single step in a lengthy, ongoing, or complex process, you may have already made a misstep and any answer you receive based on that misstep will only lead you further down the wrong path, in a direction you should not be taking.
The Hacker Ethic
Surprisingly, StackExchange embraces the hacker ethic as originally expressed in 1984 by Steven Levy in his book, Hackers: Heroes of the Computer Revolution.
The key tenets expressed in Hackers remain the basis of what we’ve been talking about: sharing, openness, decentralization, and world improvement.
Free access to computers and software are also a part of Levy’s ethics list. Though not relevant to StackExchange, I am astounded that most people today don’t mind that their computers/tablets/smart-phones chiefly run only programs sanctioned by the manufacturer.
For anyone editing any sort of text files – technical documentation or, for that matter, even cooking recipes or top ten guitar tablature – and encountering meaningless gibberish (like PHP or, even worse, CSS or XML) just toss it into git. It takes no time and is even better than Google; the process can be automated with gitwatch which, as the name suggests, “watches” a directory and automatically throws all changes into git.
Jef Raskin, who conceived and started the Macintosh project, argued for universal undo in his excellent book The Human Interface. Being able to undo is important: it removes the anxiety from tinkering, because no matter what you do, you can always start over. Git provides this universal undo.
That anxiety is something I find puzzling. Often, people ask questions they could answer for themselves by simply trying various solutions. Of course, if the effort requires a huge amount of setup, then yes, it’s understandable. But otherwise, it’s just an irrational fear of experimenting with a program.
Yes, there was a time when you could break hardware by writing bad software, but those days are long gone. Even the Motorola 6800 “halt and catch fire” mode didn’t actually burn up the CPU address lines, and finding the kind of monitor that could be literally burned out by setting an invalid mode would probably require an archeological dig.
I mentioned tinkering; tinkering is what I do.
Apparently, for some people, starting from an empty editor window represents endless possibilities; for me, it represents analysis paralysis. What should I start with? I find it so much easier to first generate a skeleton or start from an earlier work, even if I am aware that at the end nothing will remain of the original.
It is so much easier to just tinker. In many ways, it’s the essence of hacking: try making changes and see what happens.
Certain types of music may put you in a creative groove, focus your mind, and blot out noisy distractions. An excellent – if unlikely – choice are video-game soundtracks; they were created for that precise purpose. Personally, I also like trailer music, ambient, and classical crossover. I often listen to a group called God Is An Astronaut.
Hack and Flow
All right, you’re ready to hack!
So what will you hack on?
I suggest Drupal. (Surprise-surprise!)
No matter what your experience is or where your talents lie, in Drupal there is something for everyone to hack on. There are marketing materials, handbook pages, and code; there are people to help; and, best of all, you can start small.
While investing time in StackExchange brings you knowledge and skills, investing time in Drupal may very well bring you a career – and a community to belong to. You may also find yourself bitten by the travel bug. It’s no exaggeration to say that it may change your life.
I have also found it an activity that brings on the flow experience.
Flow is a mental state studied by Mhaly Csikszentmihalyi. It is described as complete absorption in the task at hand, also known as being “in the zone.” It is characterized by an energized focus and a feeling of spontaneous joy, even rapture.
When I code Drupal, I enter the flow state. It’s important that I choose a good issue summary; a well-sized issue usually means that progress will be made. Where there were once error messages, now there are none. Clear and immediate feedback is given in the browser. Unit tests will give immediate feedback. And, since this is an open source project, I am free to pick an issue that feels like a challenge. What matters is finding the balance between the challenge and my skills. Every issue pushes me further.
Remember: first, learn to ask the machine – fearlessly hack and tinker – and then, if you get stuck, learn to ask the right questions.