Thursday, March 25, 2010

The need for a Mentor in a Developer's early Career

(Author's Note: I wrote this a couple of years ago after my mentor left the company. Shortly after he left, nearly every other Developer who felt the way my mentor and I did left the company. Demoralized, I abandoned this blog for about a year, but there are still some good nuggets of information here.)

The old saying “When it rains, it pours” has proven very correct rather recently. Not only have I been busy with a particularly nasty bug lately, but I also received news that one of the developers on another team at the company I work for was leaving. He's been a mentor to me since I started my career in development, so it is with great reluctance that I see him leave.

I have been giving a lot of thought to learning from the events that occur in my daily work. So, I've been reflecting on why I've felt such a kinship with my mentor (and why I keep referring to him a such), as well as why I think it's been helpful for me.

First, he and I have a lot in common. Besides a similar sense of humor, we also have a strong desire to not only write code, but write GOOD code. On several occasions when I walk by his office, he will point out the code which he is currently working on and show me questionable coding decisions his peers have chosen and what he is doing to correct them. Often we'll discuss an optimum solution, but often, with project time constraints being what they are, this is purely an academic discussion.

Second, of most of the developers I know, he is one of the few who seem to care about the craft. I'd say most developers fall into a category called “Code Monkey”. A “Code Monkey” might do designs, some coding, and be very proficient at it, but has little desire to learn beyond what the everyday tasks requires of him/her. A “Code Monkey” knows a few languages very well, but couldn't name, much less code in the latest “hip” language. The ''Code Monkeys" will never see this post though, because the very same desire to read blog posts and other writings from other developers demonstrates a desire to become better at our craft.

The developers who care to learn beyond the every day tasks, who desire to make things better, and are actively learning about new techniques and how to employ them are true Software Engineers in my book. They care about their chosen profession, and realize that the field is always evolving and requires a commitment to learning.

He's also the developer who introduced me to Code Complete. This book has proven an invaluable insight into the Development process and thanks to it, I've found and have been a daily reader to the blog Coding Horror. If you are not familiar with either the book or the blog, then I urge you to check them both out now. I'll wait.

Finally, he's been a good friend whom I've always been able to talk to. The nuances of corporate culture, development style, internal code systems and the like make it easier for us to relate to each others problems.

In the end, I know my fellow Software Engineer must move on to another company for a variety of reasons. Hopefully the two of us will be able to stay in touch. In the mean time, I will look forward.

In many classic tales, the hero of the story must lose his mentor before achieving greatness (Luke Skywalker and Obi-Wan Kenobi, Harry Potter and Albus Dumbledore, Frodo Baggins and Gandalf, just to name some more well known examples). Perhaps this is my chance to step out on my own and find my own path.

If you're staring out in development, I urge you to make friends with some of the Senior developers, either on your team or on others. The bond you make with them may provide you with knowledge and understanding that you would not have gained on your own.

Tuesday, March 23, 2010

A Software Engineer's Development Path

A couple of years ago, my employer jumped on the Personal Career Development band wagon. They hired a consultant, setup training for everyone, and encouraged everyone to set career goals and make plans to achieve these goals.

But most of the training focused on the typical 'soft' skills of career development, such as communication, project management, organization, etc. While this may be the typical career development tasks for business people, for those in IT, and especially software development, these tasks will likely be on the periphery. The bulk of a Software Development training will center around the technical knowledge, software development processes (which are unique and ever evolving), software design, and project estimation. The consulting company Construx has a very good Professional Developer Handbook that I'd recommend checking out.

Soft skills, such as communication, are important, but present a unique challenge. While conversing with other developers, the technical terms and jargon can be used to quickly explain an issue. But, when conversing with business people, this needs to be kept to a minimum, even if it requires explaining the situation in a verbose manner.

There is another matter to discuss regarding career development: job promotion. There are two typical routes a developer will take. The first route takes a developer from a Junior Software Developer to a Senior Software Developer. Eventually, this developer learns a great deal about the processes and management of a software project and becomes a project manager.

The second route sees a developer progress further until they become a Software Architect or a DBA, or a specialist in some particular technical field. Or perhaps they continue to be a Senior Software Developer. Whatever the title, the second route arrives anywhere but management.

As for me, I can't predict the future, and its hard to say where I'd like to end up. I've always liked the idea of becoming an Architect, but my experience with them has not always been a pleasant one. My current plan is to continue coding until the pace of change is faster then the pace at which I can keep up. At that point, I think a management role will suit me better.

Do you have an overall career plan that will lead you to one of these two routes, or do you have another destination in mind?

Thursday, March 18, 2010

Reading Lists

The vast collection of Human Knowledge can be found in books. And sometimes, it feels like I have a large percentage of that knowledge in my book cases at home. Through Borders, eBay, Amazon, and Bookmooch.com, I have many places to get new books to add to my collection of Knowledge.

Yet this Knowledge goes to waste unless the volumes get to tell their story. That is why I have set up numerous reading lists for myself,  and following my policy of making goals public, I have placed the current book from each list in a sidebar with a link to this page and I will keep this list updated.

As you can see on the sidebar, I currently have four reading lists: Certification, Software Development, Classical Education, and Miscellaneous.

The Certification list contains the textbook necessary for the Certification I am currently working on. Right now, I am pursuing either the MCTS Asp.Net 3.5 or 2.0 certification. The 3.5 Certification is more current, but the books for the 2.0 are a lot cheaper on Amazon. Either Certification requires 70-536, which  is the test I am currently preparing for.

My Software Development reading list contains books on Software Development but aren't directly related to my Certification training. For this list, I am currently reading Mythical Man Month.

The Classical Education list contains books recommended by the book The Well-Educated Mind: A Guide to the Classical Education You Never Had. I came across this book a couple years ago thanks to the Book Lover's Page-a-Day Calendar. This Book describes the classical method of education and how to apply it to fiction novels, histories, autobiographies, plays, and poems. For each genre, it provides a reading list. Sadly, even though I've attempted 3 times to start this list, I've only completed abort half of the first book on the list, Don Quixote.

My Miscellaneous reading list includes any other book not on the other lists. Currently, I am reading Getting Results the Agile Way. Scott Hanselman tweeted about the book and I decided to look into it. The book describes itself as a system for managing outcomes that is easily incorporated into an existing System. Since starting this book, I have certainly found this to be the case. If you are like most people and need to get more at of your day, then you need to check out this book.