-
Website
http://giraffesoft.ca/blog -
Original page
http://giraffesoft.ca/blog/2009/03/10/4-core-competencies-of-great-hackers.html -
Subscribe
All Comments -
Community
-
Top Commenters
-
bryanl
1 comment · 3 points
-
proteus
1 comment · 4 points
-
gaveen
1 comment · 2 points
-
NewMonarch
1 comment · 2 points
-
jmacofearth
1 comment · 1 points
-
-
Popular Threads
To me, this post is about *mastery*. You can build a house with a cheap-o circular saw and a hand-powered screwdriver and a 9-oz hammer. But a master builder wouldn't - she'd have long ago gotten irritated by the limitations imposed by those inferior tools, and long ago found better tools (and often built some of their own).
Buying the professional's tools won't make you a better builder. But learning something about why they choose those tools, understanding why they built their own jigs instead of buying something pre-made, and so on, will help you understand what you need to be learning.
Likewise, you can build software that works -- even works well -- using the pretty VisualStudio or Eclipse IDE. The thing is, the great hackers have tried those tools and been frustrated by how much they get in the way. So they use vi, or emacs. In part, they do that because they want to build their own tools -- stuff that gets the frustrating, repetitive tasks off into the hands of the tools, so they can focus on their craft.
Switching to vi, installing Linux at home (or Cygwin on your win machine at work), and so on won't make you a great hacker. But understanding why great hackers choose these tools will help you be a better developer.
Typing over 60 wpm - The less time you spend thinking or even hesitating with keystrokes, the more time you can concentrate on what you want to do next - improving work flow.
Owning the command-line - The command line is what you should learn before you ever use an IDE. The command line are the baby steps. The IDE will wrap up the CLI into a GUI. I think the author is just trying to state that if you want to learn to dance (use pretty GUI) you better learn to walk and parse funky beats (two things that dancing uses).
Knowing your editor - No matter what you use, customize to your needs. No two people are the same - make it work for you.
Reading code: owning your tools - The author is just simply stating that parsing code is a skill that most hackers have. If I didn't need to resort to reading comments ever and I could quickly parse and understand code what does that mean? It means I've spent enough time that I don't need to waste time reading documentation. I can quickly breeze over the code and see what it is doing (and also see how well it was written, giving you insight into how much you can trust the supplier's code). Again this is striving towards work flow. The more you can stay on task, the better.
If you thought this comment was good - thank the author. It's precisely what he/she said.
It's not about running Linux, trashing Windows and Visual Studio or the MacMania. It's about making your wokflow more efficient so that you can work better. With the time that usually end up at Linux (or Unix type OSs), bash (or other shell), vim/emacs, etc.
I've personally had the first hand experience in this scenario. I started coding Visual Basic in a Windows 9x system and now I'm using Linux and Vim. It's not that I tried to follow a guide to become a hacker (or have become one). I just found that it makes me work better.
Deny and defend what you like. Linux/Unix along with the CLI and vim/emacs didn't survive decades and still continue to thrive just because their cool and geeky. It's because they help us work better. When better things come, they'll get their way.
I tend to use debugger less and less, but I wouldn't say that it doesn't help understand code...why not? It actually does.
[edit] I checked back in to see how the conversation was going and noticed my comment was a little out of context. I was replying to @anon1 :)
I definitely +1 jamesgolick's comment about the spirit of this post and what to take away from it.
This seems to suppose that it's the tools that make the developer great. I think that the 'great hackers' you speak of would even argue that.
Whether or not they're ultimately for you, these tools are probably worth having a look at if you want to become a faster and more effective programmer.
That's the inverse to me: I agree with most of those, partially the IDE.
Well I do agree with the fact that a great hacker will know what's happening behind the scenes even when using an IDE. But IDEs provide one functionality that IMHO definitely worth playing with: refactoring.
In my little experience editors like vi/emacs don't provide a mean that powerful to refactor so quickly than a mouse-click-and-little-wizard-to-fill-and-ok. Am I wrong?
I tend to still adopt many of the programming traits that my favorite college professor taught while in college - which I would think is natural. I continued GETTING THINGS DONE this way after college and for the last 9 years; I wouldn't have it any other way.
Instead of judging a programmer by how he holds the hammer and saw, judge him by the finished application he produces.
Nobody is saying to learn every shortcut of your text editor.
And getting things done is nice and all. However, maybe you will one day realize that there is a step after getting things done: getting things done efficiently.
And since you want to bring the hammer into play, I'm going to go along with a crappy analogy: let's say you want a custom piece of furniture. You visit two carpenters. Both have great things on display. However, you get a glance at how they work. One nails each nail in one hit. The other has shaky hands, needs to slowly hit not to hit beside the nail, and needs 2 mins for each nail.
And I want to sincerely apologize for being so snarky in this post. I just hate it when people dismiss something by mischaracterizing it.
You definitely "hit the nail on the head" with your analogy. I place an order at a furniture shop to be picked up on a certain date.... I DON'T CARE if one guy's hand shakes or if the other guy is using the Super Delux Nail Gun 5000. If they both can get it done by the due date and the quality is there, I'm happy.
But your reply sheds some light. You take things too personally. I did not assume you are inefficient. I said that you missed the point. This article is not about getting things done. It's kinda pointless to type 60 wpm and write a novel when you should be writing a program. The 4 points kinda assume that you are delivering working software. They're about moving from good to great. Also, another subtlety you have missed, if you reread the last paragraph, is that they did not say that you absolutely have to do these 4 things, or that they are the only 4, to be great.
This is the blog of a consulting company. They care about being as efficient as possible.
Likewise, I agree that people should know their CLI and vim enough to get by, but a decent IDE or GUI interface can automate away so much tedium that it's ridiculous to actively avoid using one.
And if you have no idea what adding a button to a webpage in your IDE does under the covers, that's not the IDE's fault, that's yours for not being more curious. Same with not understanding what the -> operator means in C++ when you type it into emacs.
* the product has less or comparable defects as its competitors
* it looks and functions as expected or promised
Now, if you are talking about 2 developers that you will be sitting next to and working with for, more or less, 40 hours per week. Then it definitely matters if:
* one sits there fuddling with his Debugger and Power User Enterprise IDE
* the other rarely has to glance at the API reference, churning out test-driven code in his pimped out editor ("sup dawg, i heard u like editors so i put an editor in your editor so you can edit while you edit")
I think 100% pair programming is twice as effective at decreasing productivity (and painful to sit through), but I did learn a ton on a recent engagement with pairs. The team included a merb-core member, a jr. developer, an awesome team lead / program manager, a light-hearted / good for morale "burner", a near-idiosavant reminiscent of rainman (but also a great hacker), and a borderline sociopath, who was more than deserving of several neck punches (sadly, none were delivered).
It's a great way to learn the secrets of skilled hackers you respect. (and also to see first-hand, less effective hacking styles)
Being able to do pipes and redirects in CMD is about as good as it get on Windows, being able to process a filestream on the command line, while loops, for loops, if's etc... that's where it's really at.
Also even if you don't make them your no.1 IDE / Text editor... DO LEARN Vim and Emacs (or just one) - you won't regret it and it is easy after a while, I'd recommend fully getting down with the BASH command line (and READLINE) before you jump into VIM and Emacs. (about the time you discover how to do an UNDO in BASH is a good time, if it's an organic discovery)
I use:
- vi (and sometimes textmate) when I'm writing C, assembly, Python, Tcl, and similar.
- NetBeans, IntelliJ, or Eclipse when writing Java & Scala.
- Emacs when writing Lisp
- Xcode when writing Objective-C
I'm sure I'd even use Visual Studio if I found myself working on C# or F# code.
If you don't know any great hackers using an IDE, then you don't know any great hackers. A "great hacker" uses the best tools at your disposal for the problem at hand, and accordingly, a great hacker is certainly polylingual.