Every now and then I get asked for career advice – often from people just getting into the computer industry, but sometimes from experienced developers who are considering getting into writing, speaking or similar activities.
My overarching career advice is to be patient, focused and persistent. There really is no substitute for experience, so patience is important. Though there's no substitute for experience, a focused person can learn more in a year than someone who's just coasting through a job from day to day. All that said, you never get anywhere if you don't keep steady pressure on yourself and your surroundings to move slowly toward your goal, so persistence is key.
In the Clinton-era economic boom I encountered numerous people with 0-3 years experience as a developer who wanted to be an “architect”. Now! Instantly! That is an absurd concept, since an actual architect can only function due to having years of experience on many different types of project in different settings and environments. There really is no substitute for experience.
However, I’ve worked with people who have 5-7 years of experience that are absolutely qualified to be application architects. I’ve also worked with people who have 10+ years of experience that are not qualified for anything beyond the developer role.
What’s the difference? Focus.
Some people have a career, others have a series of jobs. People who have a career understand that everything is a learning experience, and that focusing on the benefits of each task or job is only good in the long run. People who just work in a string of jobs don’t have this focus and don’t learn nearly as much.
Like most people, I’ve had my share of crappy projects where I worked on old technology rather than the newest and best stuff. But I’ll tell you that each and every one of those projects taught me something. Maybe not about some specific tool, but often about business, or software design, or architectural principals.
To be truly successful in the computer industry you need to understand far more than just tools and design patterns. You need to understand the interactions between users, and systems, and networks, and operating systems, and tools, and fads/trends. You need to appreciate the cyclic nature of our technology so you can recognize when some “new” thing is an upgraded rehash of an old thing (like SOA and procedural programming).
These things only come through focus. Focus on your career, not just on the job/project at hand. A career is a long-term play. Who cares if you are a developer for a few years before becoming a lead, and then an architect? We’re talking about a 30-40 year span of time here, so 5-10 years to become an architect is nothing.
Yes, I know that careers used to be a 30 year proposition, but due to longer lifespans and the erosion of retirement security (e.g. the impending crash of social security and the destruction of pensions due to things like Enron) most of us (in the US at least) can expect to spend more like 40 years in the workforce in one capacity or another. Personally I’d rather spend more time doing cool computer stuff and less working at McDonalds as a “returning worker”, so I stay focused on computers and automation.
What I’m getting at here, is that things take time and effort. And we have time, and you can choose to put forth effort. So that’s OK.
But while you must be patient, you absolutely need to keep pushing toward your long-term goals. Persistence is what makes your patience and focus pay off. Purely patient people can succumb to inertia. Purely focused people can be sidetracked by frustration. But persistent people have the ability to patiently focus over the long-term in order to get where they want to be.