The Seven Stages of the Programmer
cowboyprogramming.com
cowboyprogramming.com
I wrote my first computer program, a text-adventure game in BASIC, when I was 10 (stage 2). Learned Pascal and C as a pre-teen and played around a bunch on a VAX in 8th grade (3). Started working on a MUD in 9th as I moved to a new school (4). Found out it was too hard, gave it up, and took up electric guitar instead (not quite 5).
Then when I graduated from high school, I got my first real programming job (stage 1 & 2). And found out I could write GUI programs in Swing and Java just like the professionals (3). Ended up doing the GUI for the beta version of our product - except the company never shipped it, and ended up going out of business six months later (4). I blamed the failure on a lack of engineering process, so I started learning all I could about design patterns and XP and rigorous engineering processes (5).
Then in college, I found out about Lisp and functional programming (1). Many of the problems in that previous startup were because of too many bugs, so it had an immediate appeal to me (5 & 1). I wrote my first little programs in Haskell and Scheme (2), then started learning everything I could about compiler & interpreter implementation and wrote a little tutorial about how to implement Scheme in Haskell (3). Then I tried making my own programming language (4), which went nowhere, except I knew that (5) was not the answer. I'd like to think I've skipped to (6), though given that the programming language is still going nowhere, I'm not so sure about that.
This might be offtopic, but link please.
Seasoned Hacker
% cc -o a.out ~/src/misc/hw/hw.c
% a.out
Hello, world.
One of my cubemates at Google is a project manager who used to work at Microsoft. She said that one of the biggest differences between the engineering cultures of the two companies was that engineers at Google are encouraged to make "product" decisions themselves, while Microsoft engineers basically stuck to code. If a spec was unclear on some point at Microsoft - say, what color of blue to use for the border on some dialog box - the engineer would throw it back over the wall to the PMs and wouldn't work on it until they got further clarification. While at Google, the answer was likely to be "Use your judgment, and we'll fix it if it's terribly bad." That implies some amount of knowledge about what users want, and you generally can't prove what users want.
You let other people do the work for you.
After you realize managing people and other's assets is not fun anymore you'll get back to your roots: start hacking again and start using your connections to build your own business
But seriously, the cycle is endless, there are always new depths of understanding waiting to be found and every couple of years you sort of go back to square #1, learn a new paradigm, only to find out after much hard work that the new is the same as the old only in different clothing.