A few things I've read over the last couple of days have been sparking some thoughts. First, Jason Mauss' Devcampus project, and the comment discussion about the various "schools" or "subjects" to be covered. Then there was someone who gave me the link to this post (yes, it isn't recent, but if you haven't read it it's new to you) by Eric Sink. And today, PragDave had a post about growing from novice to expert and why that will be important in the war on outshoring.

So, I start to thinking about the path from coder to developer. Novice to expert. Weenie to Wizard.

I'm not sure exactly how the process takes place. It has to be different for everyone I am sure, but I think there are a few common links that tie the progression together. Those are experience, desire, opportunity, and talent.

Being smart tech types, you no-doubt noticed that I omitted education. That's a tricky one. For my part, I don't have a CS degree. What college I did attend was focused on history and philosophy. And I didn't finish. I know there are people in various camps regarding formal education/training. Some would say that a CS grad with no experience is worthless, or that someone with an MCSD, MCDBA, MCSE, YACA (Yet Another Cert Acronym) doesn't necessarily have the real-world skills that would back up the cert. Others would say that the education can't be a bad thing, and will help a noob become experienced at a much faster rate than the non-educated. I don't know. This is why I included desire and talent.

I know there have been times when programmers have worked for or with me, and I wished they had a solid CS foundation, because outside of the realm of writing code, they just didn't understand computing and information concepts on a high enough level. And I have also worked with CS people who just can't come around to the way things work when you are developing in the business world. Or who are just bad programmers, regardless of schooling. The simple fact of the matter is, anyone can do the homework and study hard for the tests and get a CS degree. That's not a slight to those who do it, it's just my version of reality. What that doesn't mean is that everyone who studies hard and gets their CS degree really understands, or is able to apply, the knowledge that the degree implies. That's where the talent comes in. You have to have a certain innate talent for tech work to really excel at it. Dispute me if you will, but think it through. You can be a passable programmer, or tech, or network engineer, with just the schooling and the benefit of repetitive experience. But to really rise above the crowd, you have to have the talent.

The desire comes into play, I think, for those who don't have the benefit of the schooling. I recognized that shortcoming early on in my career, and have always done everything I can to learn the things that I would have learned in school. I think that it is important for the "experience-only" geek to round out that experience with the textbook fundamentals and theories, otherwise you may find yourself spinning your wheels in your career, unable to advance because you just can't rise above the limitations of your experiences. I've known programmers with absolutely no structured knowledge of computing that become great because, paired with their talent, they have the desire to excel, and always go that extra mile. They read one more book, search through one more set of results on google, or create one more proof-of-concept application than their coworkers, thus advancing in capability that much faster. Then things start to come naturally, and you are learning new concepts and new languages and new platforms with ease, because you are combining your experience with your desire to enhance your knowledgebase.

Experience we all know about. There is just no substitute. You just don't know certain things until you have done them. Those undocumented features or bugs. New APIs. Algorithms. Patterns. Architectures. Databases. Networks. You can read all day, but until you get your hands dirty, you just don't know for sure. Pairing experience with the desire and talent, and with the education when applicable, will make you a formidable geek to be sure.

Finally, I think opportunity comes into play in a big way. Looking at my own career, I just marvel at how I got from there to here, and all of the knowledge and skills I've picked up along the way. I started out training lawyers on Word and various other programs. Then the help desk was understaffed, so I ended up there. Then I applied the desire principle, and became the defacto guru. Then the Network Admin quit. So I learned Netware, UNIX, and NT and did that. Then we needed some web work done, so I did that. And the web programming gave me the knowledge and experience to become a programmer at my next job. And my background in systems and networks gave rise to me being more of an analyst. Then my experience in programming, system analysis, and user interaction allowed me to get another job where I was basically the lead developer and the solution architect. And so on and so forth. But basically, all of the reading, and all of the desire, would not have led to all of the experience I gained if it hadn't been for the opportunities that I was able to take advantage of. Who knows, if that first junior help-desk spot hadn't opened, I might still be praying for death every day after a training session with lawyers and their secretaries. And even if not, my career would have certainly been retarded in its growth rate, and I certainly wouldn't be as far along as I am now.

So what does it all mean? Well, I think if we can identify the things that help programmers, or IT people in general, advance from novice to expert, then we can build better teams, help people advance, build better systems, make more customers happy, and most importantly, keep advanced people in jobs.

What do you think? Am I on track? Am I off base? Let me know.

Tags: