views:

973

answers:

16

What are the skills that distinguish a programmer from a hack?

+2  A: 

People skills are one thing that differentiate a programmer from a hack.

GregD
I wouldn't neccesarily agree with this. I've seen people who aren't very good programmers at all (i.e. they rely mostly on others to do even the most basic of tasks that they should know given whatever domain they're programmers for) but they have great people skills enough to fool others.
Dalin Seivewright
A small example of this: A "script kiddy."
Dalin Seivewright
I didn't say this was the only skill...
GregD
This is true, but I don't think it should be included at all.
Dalin Seivewright
Then, by all means, vote me down. I happen to believe that having people skills makes the much more professional title of "programmer" have meaning as opposed to "hack". I would let a programmer talk to customers and not let a "hack" talk to them...for instance.
GregD
You could argue that Linus Torvalds was a hack if that were true.
Rimian
+6  A: 

The willingness and ability to learn new things from other developers.

Terrapin
+17  A: 

The ability to analyze a problem and design an appropriate solution instead of just throwing code at it. In addition, a commitment to quality as demonstrated by well-tested code.

tvanfosson
+8  A: 

The ability to recognize that everyone generates bugs, and therefore every code path needs to be tested (preferably with automated tests!) before code can be said to be "working". A lot of "hacks" that I've worked with over the years seem to think that they have the magic ability to write bug-free code. I thought that early on, too!

MattK
+1  A: 

Your intentions differentiate between hacking and programming. Generally speaking, when you're programming, you're making something nice (or perhaps reusing components that already exist and putting them together). To use a word that I find vastly overused, but yet really fits the difference between the two, a programmer spends time "innovating". Someone that is "hacking" is testing the code in some way, or "renovating" the code in some way. At least that is the way that I use the two different terms, and seems to be fairly widespread around where I work. YMMV.

I think he means 'hack' as a simile for a 'fake'.
Dalin Seivewright
Ah, misunderstanding then. I think the others have answered this question sufficiently to not bother with an edit, though! Hope it helped in some way!
+3  A: 

At least in a web-shop, I find a hacker is someone (maybe a photoshop person) who can work with code but doesn't understand the code. A hacker only understands what they need for it to work. A programmer understands how it works. And a software engineer understands the whole approach. Not all programmers are Software Engineers.

tkotitan
+7  A: 

A hack writes something that works, usually, and calls it good enough and moves on.

A professional, writes something that works, all the time, and it is written so that they, or someone else, can modify it latter.

Jim C
+3  A: 

Hacker's approach to problem solving is often "lateral". Problems don't have to solved if a workaround exists. As a consequence of this method, hackers, sometimes, can solve problems that are considered impossible to be solved by programmes. Think about cracking. A programmer writes a program, a hacker changes few bytes of the compiled project and smashes the security system. It's something that the programmer think it's (almost) impossible to do.

Hackers don't have to understand the whole system, to break into it.

Programmers should.

Zen
+11  A: 

Visualization and Abstraction.

A hack tends to pound furiously at the keyboard, hoping to get it to work. A gifted programmer will visualize a solution, and then work through the various obstacles to get it implemented.

An even better programmer will visualize a basic solution, then generalized it back a few times into a higher abstraction and implement that (all in the same time it takes for the hack to pound out an infinite number of bugs).

Paul.

Paul W Homer
liked this answer thanks..
zsharp
Good. Like your answer
Y_Y
That said... when being pragmatic, working with real deadlines and something needs to be done/fixed/etc the hack gets things working in no time, while the 'better programmer' is still in the clouds thinking of how to abstract the problem so that it can solve X other problems we don't care about. ;^) (Always happy to put things in perspective)
Toad
A: 

They both have a different definition for "Programmer" and "Hack(er)"

Paco
+1  A: 

Hacker: Fixes, band-aids. Results in band-aids on band-aids.

Programmer: Detects issue, repairs for good.

When a problem comes up, I usually hack it first to get it up and running while I detect what made it go wrong and fix it for good.

It's good to use the best of all approaches.

Jas Panesar
+4  A: 

Hacker - Indepth knowledge,Extreme out of the box thinking and Destructive mentality

Programmer - Use the technology as a means to solve a business problem , but usually do this for their bread and butter and always acts inside the strict boundary of rules and regulations assigned to them.

Hack - The first Google result(Code) which works

Jobi Joy
Is a hacker really always destructive in intent? I often think of a hacker in the MIT sense it was originally used in.
Jonno_FTW
+1  A: 

A programmer has some sort of methodology or plan of attack when writing code.

A hack tends to pound away at the keyboard until something resembling a solution emerges.

Logan5
A: 

I think something is missing from the descriptions so far. True, a professional programmer designs solutions rather than stumbling on something that works. Also true that a pro strives for reuse of modules, and designs programs in a way that are easy to read and modify. But I would like to add that a professional programmer also gracefully handles program failures. Specifically, he ensures that when a program aborts : 1) The appropriate person is alerted. 2) Information is displayed about what data was being processed and what caused the error. 3) information is available about which business processes are affected and which end users need to be notified. 4) There are clear instructions about how to restart or reprocess.

MartySteine
+1  A: 

There are 2 extreme schools when it comes to creating software:

  1. Plan everything out first - This is the case for someone that when they eventually start writing code will have very few if any rewrites as in the design and planning every possible scenario was covered. Granted this person has nothing to demonstrate at any point since all the code is written at the last minute, but it is flawless when done.

  2. Plan nothing out first - This is what I'd call the hack school. Trial and error repeated to an almost ludicrious degree will get a similar product done eventually. At most points though there is something to demonstrate but it will often have some bugs as details get worked through in terms of, "What happens if..." is done over and over again.

Most developers that I know fall somewhere between the two schools as hardly anyone would purely use one of the above approaches. I'm not sure what the midpoint between the 2 schools would be but it wouldn't surprise me to see a lot of programmers wanting to get there so that some planning is done but not enough to be a bureaucratic burden.

JB King
A: 

Perspective.

A programmer can plan, anticipate and innovate. A hacker sees the code that's in front of him/her and not much else.

A programmer see the weaknesses in their own abilities and tries to improve. A hacker blames their tools and over estimates his/her abilities.

A programmer might expose his work to his peers for review. A hacker may write copyright messages at the top of his code and plays his cards close to his chest.

This book is well worth reading: http://en.wikipedia.org/wiki/The%5FPragmatic%5FProgrammer

Rimian