DISQUS

giraffesoft, the blog: GiraffeSoft | Welcome to smarter web app development.

  • proteus · 9 months ago
    I see people here getting awfully defensive, because *you* do things differently than "great hackers", and it works just fine for you thankyouverymuch.

    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.
  • Russ · 9 months ago
    I'm not going to get into the analogy war here because quite frankly I don't think they are hitting to the point the author was striving for. I'm going to post below the titles of each paragraph and give a brief description:

    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.
  • gaveen · 9 months ago
    Some people seem to be getting this in a different spirit than the Daniel intended. He didn't mean to define things to do in order to become a great hacker. He just said he's seen these things in common in great hackers.

    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.
  • Dan Simard · 9 months ago
    I don't want to start a war but I'd say that this list is about the differences between a Windows VS Linux developer. I can't count how many hours a week I spend on a CLI interface, it's so productive. The thing behind what you say is "get your eyes off of the nice UI and look and type code". Like it!
  • anon1 · 9 months ago
    Ok, I met the first point only, now I have to install Linux to be a great hacker by your definition. ;o)) Or rather not, thank you. ;)

    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.
  • atchoupani · 9 months ago
    "Debuggers are evil" because they put you in a position to NOT think. Instead of forcing yourself to actively create a mental model of how the code is supposed to work, a debugger will let you passively "watch what happens".

    [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.
  • Steve · 9 months ago
    "... every great hacker we know has a customized environment, and they routinely compose unix commands. Even those stuck on Windows because of corporate policy still run Linux at home or on their servers."

    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.
  • jamesgolick · 9 months ago
    I don't think Daniel is implying that the tools make the developer great. Instead, I think he's suggesting that this is the (probably partial) list of power tools that the great hacker uses to carry out his great hacking.

    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.
  • Mark · 9 months ago
    Damn: My typing could be better, I use TextMate of all things, I don't use the command line nearly as much as I should, and I always seem to hop right into documentation. Time to form some different habits. Great list.
  • John Bender · 9 months ago
    I agree with most of those, especially the IDE. This whole hand-holding thing (see Visual Studio, partial classes, event driven model) has really got to stop. If you don't know whats happening under the covers when you add a button to your webpage, that is a problem.
  • Kyle Bragger · 9 months ago
    Well said.
  • Mikal · 9 months ago
    Event driven systems are bad, you say? Frankly, I can't believe anyone of any competency of programming skill would say such a strange and untrue thing. After say, programming network sockets by hand, libevent starts to look really sweet. Callbacks exist, good programmers use them to their maximum potential.
  • Valentin Jacquemin · 9 months ago
    @John Bender
    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?
  • dko · 9 months ago
    My former boss (former hacker) was extremely good at bruteforcing. Not only in trying out the possibilities fast, but in finding good things to attempt to bruteforce.
  • Matt Brown · 9 months ago
    I'm going to go to my grave wondering why some programmers think they are special just because they have every shortcut keystroke in thieir IDE memorized versus clicking around the UI. Same goes for command line usage.

    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.
  • jfcouture · 9 months ago
    And I will go to my grave wondering why so many seemingly intelligent people get by in life without basic reading comprehension skills. :P

    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.
  • Matt Brown · 9 months ago
    Mr. Snarky, you just assume I work inefficiently? Come on now, that's a pretty lame assumption you're making there.

    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.
  • jfcouture · 9 months ago
    I said crappy analogy, and it's such a stupid point that I stopped halfway. But I did say that it was custom, which probably means the guy is gonna charge by the hour for his time. But maybe he's cheaper so it'll cost the same in the end. But if you need it quick, one guy will be better. (we could go on with the ifs, but the point is getting done efficiently, which in my example, would mean quicker and cost less for a carpenter).

    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.
  • John · 9 months ago
    People who use power tools for home remodeling should definitely be familiar with their (slower, but more precise) hand tools, but that's not a reason to avoid power tools for 80% of the work.

    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.
  • Preston · 9 months ago
    If you are talking about buying a product outright, then I would agree that it doesn't much matter how it is constructed, just that:
    * 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)
  • Jason · 9 months ago
    Absolutely agree with all of this, and I wanted to add to the note on Owning the Command Line - if you are stuck on Windows, install cygwin so that you have a bash command shell available.

    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)
  • lee doolan · 9 months ago
    i agree with everything except for the typing speed...
  • yarly · 9 months ago
    textmate lmao
  • Ronaldo Fonaldo · 9 months ago
    A bunch of Rails developers talking about core competencies of "great hackers" is a joke.

    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.
  • jmacofearth · 9 months ago
    This is good stuff. Pair programming rules. I wish I were still with a company that believed in Agile. Oh wait, I'm not with a company at all, so I can BE AS AGILE AS I WANT... Kewl. Thanks for the motivation boost on a rainy WED morning in ATX.