Core competencies of great hackers
giraffesoft.ca
giraffesoft.ca
If a person can't type, I simply assume they're a noob and don't want them on my team. I don't expect them to have a very different ration of thinking vs. coding though :)
But - I guess I've seen a few counter-examples in coding - e.g. I used to know a mainframe guy who had arthritic pain. He coded very slowly indeed, but it flowed out of him flawlessly.... So I tend not to have that bias.
If I met someone who wanted to get into programming, I certainly wouldn't say "practice your typing" - I'd say, "read these books".
Anyways, there are probably a subset of slow typists that are good programmers. But I'd be surprised if they weren't the exception.
I view a non-touch-typing hacker/coder much like a carpenter who drives nails using a hammer's handle. (The inevitable reaction from both camps: Hey, what's your problem? I'm using my tools to get the job done!)
If the carpenter who used the hammer handle only had to drive one nail instead of the regular fifty, then that might be totally worthwhile (Naturally, this would never be the case for carpentry, but it certainly is for coding).
How could that be excused?
You could argue that a carpenters output is limited by their use of tools. If they can't nail or saw fast enough then no amount of carpentry imagination is going to help.
What I'm saying is that I don't think this is the case for typing and coding. A coder could type quickly and produce reams and reams of really bad code - this is happening every day. Another coder could type 1 wpm and still produce something of immense value every day.
Huh, ok. Now, if you take the 1 wpm programmer that produces great code and teach him to type 50 wpm, what happens?
I claim there is no programmer in this world who wouldn't end up more productive (be it by a small or huge margin) if he learned to type faster. And given the ridiculously small ratio of effort to rewards at the lower stages (say, below 50wpm), saying it's not worth the effort is like saying buying more RAM or disk-space or bandwidth is not cost-effective today.
Though, this topic got me thinking. Unless you are using speech to text, I think that how you interface with the computer is fundamental to the act of programming. I do not think that abstraction is essential to programming. Much to the chagrin of my abstraction-loving nature, consistent procedural code can be easy to read and follow. For higher-order OOP, an understanding of abstraction and encapsulation is very necessary.
It's not so that you can type code quickly. The bottleneck in coding is always the thinking time, or you're using an overly verbose language.
Typing is important because hackers communicate with one another using a keyboard. I've worked with programmers who couldn't type quickly enough to have a comfortable conversation over IM. It's torture.
If you can't type, it's probably because you're not communicating enough. Hacking is not a solitary activity, and it's mostly not coding.
Of course you probably also do other stuff than typing on a keyboard. It's just that the keyboard often is the most efficient interface between you and your main tool, your computer.
I think typing speed is a good competency to improve to be more efficient in the next few decades.
The other didn't grow up around computers/type writers (growing up in the 1940s/1950s in Soviet Union), didn't really heavily program until after graduate school and for the first decade mostly programmed by writing code on paper and having it punched onto cards.
I would be thrilled to do it now, 15 years after graduating.
I can't claim he was a great hacker, but he managed to hold his own on the team and even outperformed some. If he can be competent with that level of impairment, I think it's got to be incorrect to claim all great hackers are great typists.
I personally touch-type maybe 50 wpm but that's for documentation, not code. If you are attempting to create code at the speed that you type, you are insane ... or you will be soon, when you try to debug it.
If someone was lucky enough to think faster than they could type, they'd be able to think twice before they added more code to a program - a good thing!
Just think. Is wpm a measure of a great writer? How could it be a measure of a great programmer.
I'm not sure what a "great hacker" is. Are they something like sysadmin or maybe someone who does security?
It's nice to think that code types itself, but it doesn't. If you have no ideas, then it doesn't matter how fast you can express them as code. If you have a lot of ideas, though, you don't want to wait for your fingers to slowly tell them to the computer. You want the computer to know quickly, so you can move on to the next task. That's why typing is important. There is no brain/computer interface yet, so you have to do it with your hands and the keyboard. Suboptimal, but them's the breaks.
Anyway, a few months ago, I decided I would learn to properly touch-type (and increase my typing speed). It was very difficult at first -- I couldn't type at all, and even simple programming made me really mad. A few months later, I can type significantly faster, and I make many fewer errors. (As an aside, I don't think touch-typing was really designed for programmers. All the important symbols end up under your pinkys, which is not very comfortable. So I compromise and type some symbols like ()- with my ring-finger. This probably reduces speed, but it doesn't hurt my hand.)
The common response to typing is "programming is not about typing, it's about thinking". Sure, that's mostly true. Nobody expects you to sustain 120 wpm typing for eight hours a day. But, it's very helpful to type quickly in bursts, to get your ideas in to code form as quickly as possible. Sketching out that idea in 2 minutes instead of 3 means that your brain has more time to think about the problem, and has to waste less of its time babysitting your fingers. I know I get mad when my typing speed is delaying me from trying an idea as quickly as possible. That's why I decided to do something about it.
I'm glad I spent the time to practice typing. It has made programming and writing more enjoyable, and didn't take much time or effort at all. The dismissive attitude of "programming doesn't require typing skills" is extremely naive.
Shrug... Well I say that because that's my experience. I've never really been concerned with micro-interruptions. I guess I'm surprised this bothers people so much (It's the macro interruptions that hurt me more). I've been in situations where I've been unable to type (or type quickly). I learnt and grew as a coder more in those times that any other - so a different experience really.
So, yeah, typing is great. It's a very handy skill to have. It probably helps a coder a lot, and it's a good thing to know. However, I don't think it makes you a better coder.
If you don't know how to type, then you're wasting brain cycles looking for keys when you have to type, cycles that would otherwise be spent thinking up good identifiers and nice function names. Not knowing how to type also means you'll choose terse identifiers rather than clear ones because it's too much work typing longer names.
Typing well is a critical skill for a programmer and the only programmers who don't think so are the ones who can't type.
I don't choose terse identifiers, I choose long ones that I know emacs will be able to find completions for easily.
I don't see how typing faster would help me.
This very conversation is easier to have if you can type your thoughts as you have them whilst not being distracted by hunting and pecking.
I don't hunt and peck, or look at the keyboard very much, but I definitely don't touch-type (I taught myself, and use all the "wrong" fingers).
however, as a programmer who does have to type a lot, using the correct fingers would help you in the long run because at some point you will have repetitive stress problems, so bit the bullet and do it. The cost is tiny and certainly nothing to fear or put off.
And the cost of learning it is laughable. You just have to practice a bit for 3 days to learn to get the right fingers on the right keys from memory. The key to learning quickly is that you try to reproduce some text on the screen while NOT LOOKING at the keyboard, and you go as slowly as you need to avoid looking up (well, down), it doesn't matter if it takes 15 seconds for one keystroke at first. The important thing is to try a recall from memory at all costs before you finally know you've really completely forgotten and then look it up. And you do like this for each letter. You'll reduce your latency and learn the whole layout quite fast. After that it's just a matter of practicing for a few weeks and you'll be up at a reasonable 30wpm in no time.
Learning to use the right fingers will make me that much slower? No thanks.
If you know someone who types 70wpm with 2 fingers or 120wpm without a proper technique I'd like to meet him.
Obviously there's a lower bound, if you have to look at the keyboard then you probably need to improve, but the importance of being able to touch type perfectly is overplayed.
Do all authors need to learn short-hand?
I'm in the "typing speed makes no difference" category. However, I already typed 80+ WPM when I started programming (thank you, AIM and MUDs), so I really have no comparison for what it's like to type slowly, except for the couple weeks I spent learning Dvorak. It's really odd for me to look at this thread and see people talking about bringing their typing speed up to 60 WPM.
I could imagine that typing speed would be a problem if you're stuck at 20 WPM or something. I just assume that anyone who does anything significant with computers is at 60 WPM+ already, and at that speed, it really doesn't make a huge difference.
Obviously you've never worked for my boss! :)
I've tried to learn touch-typing a few times, but it makes my hands sore in a worrying way.
Another resolution is typing more slowly, and not caring so much about typos, since it doesn't really matter.
How efficiently you can communicate with the machine is critical in programming because of the above, not because you're somehow faster at typing code - your brain cannot generate code at 60wpm anyway. Typing quickly, though, certainly takes away barriers to trying new things and prototyping really quickly.
Generalize this to the experience of using the Internet. Since great entrepreneurs are relentlessly resourceful, they can make great things come to pass using a 56k dialup connection, but I'm sure you wouldn't want a connection as slow as that. Why? If you want to think of it in terms of the argument you made above, then it's obvious that the bandwidth is unimportant because your connection is idle for the bulk of the time you spend using the Web.
The important thing is not thinking of this as a comparison between how much time you spend typing versus thinking. It's more about maximizing the responsiveness between you and your computer. The less friction there is during these small bursts of interaction, the better.
I've had this experience, while traveling I had a really slow internet connection and had to do some work via ssh to fix a server, it was hell...
You go through that experience one time and you learn that being able to automate as much as possible with tools like capistrano and sprinkle for server setup is crucial (it also started me on the path to keep my /etc configuration files on git...)
The argument for touch typing to avoid distractions I agree with, but not raw typing speed.
In higher level languages I'd say it's much less as issue.
I guess I wouldn't arbitrarily set the cut off at some fixed value like 60wpm, but if you are slow at typing and need to look at the keyboard, you probably don't have enough experience.
http://steve-yegge.blogspot.com/2008/09/programmings-dirties...
I think that if you don't have to think about typing at all you don't have to schedule time-slices for thinking and editing. It's just a side-effect that your fingers work really fast for almost anything when they're autonomous: this is the thing referred to in the article.
For example, I often observe that I have two parallel processes going on: thinking and editing. I keep editing the file, correcting formatting, keeping lines beautifully cut and moving stuff around _autonomously_ while I'm still thinking about the _actual_ problem. It's like biting your nails when thinking over something: it just happens, you don't _do_ it. Doing stuff that you don't need to think about at all actually helps me in the thinking part.
To be able to do that you have to master the keyboard, both for writing text, writing code and moving around (and you need emacs to move around quickly enough, imho hehe:)). I wouldn't want to imagine synchronising my trains of thought over a mental mutex in order to switch between editing and thinking.
This means that there's minimal latency over your thinking and what gets into the program. If it's low enough, programming becomes fluid as you couple thinking and changing the source code in nearly real-time. I could guess that many poor souls who have spent way too much time over the keyboard have realised this.
Before I arrived he had made a network monitoring system more than 100x faster when the team responsible for it was on vacation. (The CEO reported that the events now flew by, whereas before you could easily observe the event stream crawling.) He later single-handedly implemented and maintained the router configuration system for an ISP that spanned the US and there was never a single (non-cosmetic) bug reported against it in the 10 years I was there, even in the face of changing requirements, new hardware, and the company constantly coming out with new connectivity services.
He had learned to program in the days of punched cards, and he would do all his thinking on paper before he started coding. He would then dictate the code, top to bottom, without any bugs.
I'm willing to concede that he's an outlier.
http://news.ycombinator.com/item?id=499880
Of course, knowing these things (or really, knowing anything) doesn't make you a hacker quite yet, it's a title one earns within a community by contributing to it. As cliche as it is, "how to become a hacker" covers this part:
People who believe the tools make the hacker are naive at best and would probably think the person with the best shoes wins the race. Not true when it comes down to it, the person driving those tools, whether they can type 60 wpm or use Emacs, is the one who is responsible for the creativity and output.
I think the author needs to step back and see if his priorities are in the right spot.
The implication here is completely in the negative.
Further, it's like saying "If you want to be a hacker, use English measuring units because we've never any met any great hackers who use the metric system."
Just because a bunch of rails hackers don't use an IDE doesn't imply the contrapositive.
Instead of arguing about what might have been implied in what I wrote, I'd rather you introduced me to people you consider great hackers that use an IDE. Know any?
Slightly more prominent individuals could include Ted Neward (http://blogs.tedneward.com), Joe Duffy (http://www.bluebytesoftware.com/blog/default.aspx), James Devlin(http://www.codingthewheel.com/archives/how-i-built-a-working...), and Dustin Campbell (http://diditwith.net)
Here is a great IDE hacker:
John Carmack, ID Software, uses Visual Studio
I work at a game startup making their first PS3 title. The C++ engine team does development in Visual Studio and the tools guys do python outside of an IDE.
Do you really think that is evidence that all the tools guys are superior to the engine guys?
It doesn't, both can be great and both can be mediocre.
I think his lengthy career as a journalist, designer, photographer, M$ engineer, Apple engineer and Google Engineer have proven him correct.
The analogy with understanding/familiarity with your tools is weak. The only important tool for an engineer is his brain.
(PS I abhor the term hacker)
But, an engineer with a great brain and no tools, is weaker. One must communicate thoughts and ideas in order to be great.
Are you saying an increase in typing speed brings a proportionate decrease in thought quality? Otherwise you obviously end up more productive if you increase typing speed.
People who compare poor coders who type fast with great coders who type slowly are utterly missing the point. Typing faster is about self-improvement. It's about having more fun at coding while being more productive. If it also makes you better than the next programmer, then great, but it's not the point.
Apparently, these four things are not enough to be a great hacker. What I seem to lack is the mental capacity to clearly see problem out of the box as my friends (great hackers) do so I have to use all the tools I can to keep up.
it's the kind of sober, relaxed look at a problem that I think separates great from mediocre. The relaxedness and calmness with which hackers attack problems -- most people I know and myself would be anxious and pissed off about a problem. Hackers on the other hand are comfortable and relaxed with problems, seeing them as something, that is fun to solve. They are like cats who play with the mice before they catch the prey; they are confident in their ability to solve the problem, and completely free of tension or stress.
I have that some of the time but very very rarely and I can say, no editor can even come to the performance-enhancive qualities of Zen-like centering.
Sounds like "Core competencies of ruby on rails hackers"
Most of the great Windows hackers I know use Visual Studio. Most of the great Java hackers use IntelliJ. Of course, people in the UNIX/web tradition would probably not admit that great hackers exist in those cultures, but they've put out some pretty impressive software...
Also - I suspect that great UNIX/web hackers don't use IDEs because the IDEs for those languages suck. I work on a C++ web team. If you glance around our monitors, everyone has the same setup: 4-6 terminals, 3-5 emacs/vim windows open, and Firefox. The funny thing is, many of us are ex-Java programmers, and we all used either IntelliJ or Eclipse in our Java programming days. And would love to use something like IntelliJ for C++, but we took one look at the C++ support in Eclipse and ran back to vim.
Sounds like GiraffeSoft folks don't use languages with type info and a graphical debugger. I certainly wish TextMate could handle static info and had a JVM debugger. I would love to code scala in TextMate.
The IDEs are too heavy. I don't like them. But if you want/need a debugger and type info for refactoring and exploration, you don't have much choice.
The other three items they list seem on target. The one about great coders don't use IDEs is highly dependent on what language and kind of code your writing.
The static analysis done by heavy IDEs isn't the only way to have large amounts of information about code available in the editor. Using Emacs with Slime, the editor has a huge amount of information about your code because it's communicating with the Lisp runtime that's evaluating it.
I am a good hacker, and yes I use an IDE (eclipse to be exact). I have to code java for living (mobile), and I think I am one of the earliest developers in java, and i used to use Textpad, and Vim at my early days. I guess, in your eyes that makes me a "better developer", but the truth is that some IDEs really make your life easier. Much easier.
In mobile you have to re-invent the wheel over and over again. From UI, to basic things as a string tokenizer, and it is impossible to memorize everything (some of your team memebers implement different functionalities). IDE's auto completions are very very useful. Also the refactoring facilities and debuging tools are really useful.
I do use Vim for programming in LUA (does it make me cool?), and I really miss a lot of these tools. Simple things like variable highlighting, jump to definition are missing, and it makes the code a pain to read (especially if it s not yours). If you decide to change a variable name, good luck, you have to do string search/replace, and the potential for errors is huge.
While a good programmer HAS to be comfortable and good in command line, just because they use an IDE doesn't make them less of a people.
And the best programmers I have had the chance to work with used IDEs. These guys implemented a LUA VM in J2ME from scratch, in a couple of months.
I have noticed that this really shallow and douchebag-y attitude comes from people that use mostly Ruby. It seems that in their eyes, if you don't use Ruby and textmate, you suck.
But really, fcuk you.
Also, I think the main point of what you quoted is that the additional level of abstraction does more harm that it does good when it comes to hacking, not everyday 9-5 in the office type programming.
As I mentioned a bit earlier in this thread, people are confusing programmer and hacker. The two terms are not synonymous.
And if typing speed is more relevant than thinking depth then I probably made the right decision in that Gladwell blink moment.
In another recent HN post, several people had a similar reaction to "shop" as in 'work for a great ruby shop'...
Heres a partial list of non-sequiturs - six sigma isoN000{0} skillset core competencies coder java [ contentious, I know, C++ is borderline ] loc - lines of code metrics / kpis candidate coordinate role leadership deliverables
Competency is particularly insidious - being merely competent rules out any kind of real craftsmanship, or "Xen and the art of Motorcycle maintenance" connection to the thing your doing. If your competent, you've checked a box, and thats the wrong reason to do anything.
Am I overreacting?
Doesn't use windows.
Uses the tools listed in the article on windows. (well, windows equivalents anyhow)
I think the message was more of "Know your tools, know them well. Know them, and what they are capable of so that you may wield them to their fullest potential". For software, this involves reading the source when it's available.
I know some folks on the Google Toolbar team. I don't use Toolbar, and neither do any of my friends. It's desktop software, and desktop software for Windows, so I mostly ignore it.
But their installed base is huge. I'd wager that if you added up the combined user base of every Web2.0 startup mentioned on this site, you still wouldn't equal the number of Google Toolbar users worldwide. Are they still hackers?
FWIW, they use Visual Studio.
AND they used Visual Studio.
Userbase != great hackers
It was a genuinely better browser than the competition. The problem isn't that IE6 wasn't a good browser - it's that IE6 was a great browser in 2001. But in 2009 - it's not really up to scratch.
Other metrics like "A great hacker is someone who writes lots of code" are equally ludicrous, because then only Java and Cobol programmers end up as great hackers since those languages are so much more verbose than everything else. ;-)
No, it couldn't. The person out of the group of people that I know personally that I consider "hackers" uses Windows primarily, and knows a bunch of crazy APIs inside and out. He does whip out VS for some stuff, but the vast majority of his code is written in emacs.
I'm not saying the article is right all the time, but I think it's a pretty good rule-of-thumb.
My experience coinciding with the article is more of a function of "I really don't know very many people" than "I don't think there can be such a thing as a hacker that uses windows, or microsoft tools".
For instance, I'm in a very, very large company (anyone in law, science, or journalism has used our products). I recently saw three separate requests for ~80 hours and $7000 of contractor time each to manually add serialVersionUIDs to serializable Java classes.
Eclipse, which we're paying* IBM to use, has a nice code refactoring tool that makes the entire process three clicks and about 30 minutes of twiddling your thumbs. I saved one and a half months of FTE time, and $20,000 by simply knowing what the tools we were already paying for could do.
*Yes, I'm aware that Eclipse is Free Software; we're using IBM's rebranded Rational Application Developer. Yes, I'd rather use Eclipse and Tomcat instead of RAD and WAS. No, I'm not bitter.
Hmmm. I'm currently working a project targeting handheld devices written on the .NET Framework, meaning I'm using Visual Studio. Currently, my IDE looks a whole lot like an instance of Vim or TextMate--no widgets outside of the top level menu displayed, and I typically use keyboard shortcuts for builds, navigating, etc, etc.
I've known great hackers who used Eclipse, sam, acme, Brief, UltraEdit and everything under the sun.
Working with someone who doesn't know their chosen tools (people who use menus to work their editor, hand edit things instead of using sed/awk/perl, etc) is extremely painful, and seeing someone profess to use a tool but not operate it well is a huge warning sign to me. Same with slow typists: pair programming with such sucks.
The author's list of core competencies (fast typing, command line, vim, Linux) sounds more like a list of cultural traits.
To be fair to the author though, the phrase was "rely on an IDE", not "use an IDE" which is a little different.
I think a more valid way to look at it is that great hackers tend to use highly advanced editors and they totally own them from top to bottom - whether they are in an IDE or not. That might just mean that they have a completely customized eclipse setup and know every hotkey extension innately or (like myself) use powerful editor plugins like viPlugin to ratchet up the productivity.
Great hackers don't use IDEs: they write them.
I think this is rather ignorant... eclipse >> vim or emacs. What's a hacker anyway? Presumably, they are talking about someone who writes code and IDEs make writing code easier.
Diving into a large codebase can be important for certain hackers, but honestly this sounds like a skill moreso needed for corporate programmers ...
"Core Competencies of Coders"
I expected something that would include, at the very least, Algorithms and Data Structures.
Software Construction is not the sole realm of the Hacker.
coder!=hacker
Coding is not the sole realm of Software Construction.
It is too bad that so many people totally mix concepts up like that, playing fast and loose with synonyms in that manner is like wearing a sign saying "I am an ignorant two bit tech person in a hurry"
Say, what about Cray, when he toggled an entire OS (that he designed) into a machine (that he designed) through the front panel switches, in Octal? AND IT WORKED.
Crappy programmer, can't type x number of wpm.
ROFLMAO
EDIT (now that I paused for breath)
Worse programmer even, for not USING A KEYBOARD
ROFLMAO