This is a blog post from http://blogs.msdn.com/b/alfredth/archive/2011/07/27/hacking-vs-programming.aspx
I have many students that ask me to show them how to hack, normally of which the answer is no, or we go through the hacker high school unit of work, which normally gives them a sense of satisfaction. But I had never thought about hacking as ruthless programming.
What is the difference between Hacking and programming? One opinion I have heard expressed is that a hacker can put a lot of code together in a hurry but if a change is needed the code has to be completely rewritten. A programmer may take a little longer but if changes are needed they are more quickly and easily installed without the need for a complete rewrite. One source I heard attributed an observation like this to Maggie Johnson of Google. It rings true to me though. Hacking is usually described as “quick and dirty.” You though a bunch of code together and make it up as you go along. Some hackers are quite brilliant and can do amazing things in incredibly short periods of time. And then they move to the next thing. Or perhaps they stay with the same thing because no one else can understand it well enough to fix it, modify it or improve it. Job security? Perhaps but not a good thing for the people who use, or importantly pay for, the software.
I do a little hacking – that is to say toss something together in a short period of time without a lot of planning – from time to time. I’m not a genius though and typically this ends poorly. The performance is poor, the maintainability is poor, and no one else wants to use it. This may make be biased against this way of doing things I guess. I prefer to program – to think things out, to plan, to proceed in an organized fashion. I saw the difference made clear to me my first year of teaching (a long time ago). I was working on a little game programming of my own and decided to show it to some of my students. As I explained how I had set things up around a number of constants that is hoped would make the program more easily expandable one of the students turned to another and said “Look at that. He’s just starting and already he is planning for additions.” That is one of the real keys, in my opinion, to real programming.
I was a major in Systems Analysis in college. This was during a time when computer science majors were rare and software engineering majors rarer still. But one of the things my professors drilled into our heads was that programs had to be maintainable and extensible. We were taught from day one that programs are not finished but, in a sense, abandoned. More likely at some point you declare victory and more on. But others will maintain these programs and expand them and adapt them. Making their lives easier is a good thing. Think of the Golden Rule – program was you would want the programmers whose code you are modifying to have programmed. I think that is how it is written.
The hackers get a lot of attention these days. These are the basketball players who make the slam dunk that makes it to the highlight reel. But basketball games are won by teams of players executing on the basics – the solid play well executed, the dribble, the layup, the pass that gets the ball to the star. In the long run we need more real programmers to make solid, dependable programs that don’t have be be rewritten from scratch when a change is needed.