I used to refer to myself as a self-taught programmer since I never went to college. Recently I have changed my position on this. Instead of self-taught, I have a wide variety of teachers. Each has taught me something and I’ve tried to apply everything I’ve learned and form my own opinions.
I was working as a tech writer when my uncle Dwayne Crider came to me and said “You think like a programmer, you should look into this.” The next week, I bought a copy of the newly released Visual Basic 2.0. I had taken a semester of Basic (on a TRS-80) in high school years earlier. I played around, but never did anything useful with it. Just lots of Hello World type apps.
The company I worked for produced electronic temperature controls for the agricultural industry, and was working on some software to network them back to a home pc (so the farmer could monitor his livestock remotely). I was pretty good with graphics at the time, so I took over the “resource” (icons, etc.) creation with the developer. When he left the company I found “G” the graphical programming language from National Instruments and proposed that I could do the work he started with this tool. BAM!!! I’m a developer. (well, not really).
My boss, Tony Ellard had been a software engineer with Intergraph for several years and was an assembly programmer. He gave me free reign to explore, try, fall on my face, then give me suggestions to pick myself up and begin over at the bad decision and drive through the problem. He was my first mentor, whether he knows it or not. I have a huge amount of respect for him, even though I don’t think I ever told him so.
At this time I began digging in and reading everything I could get my hands on. If it was a software book I’ve probably at least skimmed it. But the book that really set in stone my being a developer was “The Soul of a New Machine” by Tracy Kidder. His book captivated me, and his descriptions of the various jobs needed to bring a new computer to life were outstanding. His chapter on the developers and the way they thought opened my eyes to the way I approach problems. It proved to me that I should be doing this job.
I did contract VB work for a couple of years, then signed on at a new job and met my next mentor Scott Densmore. He was working contractually with a company in Birmingham, AL and during my first few weeks there he gave us a week long COM+ training. I had coded COM+ objects in VB before, but not C++ and this was new ground. He turned me on to a book “Transactional COM+” by Tim Ewald. I knew nothing about C++ when I took this job, I’ll admit. I still don’t know much but from digging into the framework code that Scott wrote during my year and a half there, I saw the need for frameworks, and the beauty of object oriented coding. No longer would my code look like that of a junior hacker. His code was elegant, precise, and I was proud and surprised when I found the first bug of the system. I still have that congratulations email from him.
Leaving that job and moving to Atlanta was a big move. For the first time I’d be a Lead Developer. I took the job based on my VB6 (and limited C++) skills, but immediately convinced management to allow us to do .net coding. I had found my calling. VB.Net allowed me to do the inheritance and polymorphism I had learned in C++, and write the first code I’m truly proud of. Yeah, there are many improvements to be made to it, but given the time constraints, and the budget for the projects, they were robust, and I feel exactly the proper solution to the given problems at the time.
During this time I discovered the Application Blocks that Microsoft’s Patterns and Practices group began putting out. The Data Access block captured me, and I began enforcing its use within my department. I had used it for a while, and been anxiously waiting the next release of a block from them when I see a familiar name on the bottom of the page, ‘Scott Densmore’. Small world… Two jobs later for each of us, and he’s still influencing my code. I contacted him and he sent me some links to some sites to help me as well.
Barbara Davis, Director of Internal Systems at my company gave me a lot of insight. I had always been a researcher, looking for new and better practices, but when she sent me to PDC in 2003, she created a monster. I have been actively reading blogs, articles, playing with the new ‘bits’, and coding for fun at a furious pace since that conference began.
I picked up a book of sample chapters there and one of them happened to be a chapter from “Test Driven Development in Microsoft .Net” by James Newkirk and Alexi A. Vorontsov. I read this book cover to cover at least three times. It truly changed the way I code. I became ‘Test Infected’. Now my code doesn’t just follow rules of OO such as once and only once, Replace conditionals with polymorphism, etc, but it is verified to work, and I’m protected against myself when refactoring (and I do refactor merciliessly).
I still spend several hours a day studying code, and most of it from blogs of people I respect. I could list them here, but that would just take up space in my DB.
All in all, I can’t say I’m a self-taught developer anymore. Just one who seeks knowledge wherever I can find it.
I hope I can do you all proud.
Happy coding.