Article: Learning strategies for developers »
FERDY CHRISTANT - JAN 4, 2007 (07:47:51 PM)
It is uncommon for me to write a "soft" article, one not discussing technology or software. Still, my own personal challenges triggered me to write the following.
Ever since I was in the software development industry, I have tried to keep up with new developments. I still do this today. However, as I'm getting older, it is getting harder and harder to combine the educational part with my other responsibilities. Through this article, I will tell you how I manage it all, or at least how I try to. I hope you can use some of these tips to your own benefit.
I'll go through some tips in random order, and explain how I apply them. Note that I do not follow these principles all the time, but I know that I should. Even by following only 80% of these guidelines, you will most likely boost your own growth.
The first thing to do is to accept that you continuously need to learn. Consider it part of your destiny. Accept that it is not optional, and that your future income is at stake. This will help in dealing with the sacrifices that you need to make later. Speaking of destiny, at one point you will have to make some important decisions:
- Will I continue to be in this industry in the long term? Do I want to?
- If so, is it my passion or solely a provider of income?
These decisions affect your learning strategy dramatically. I personally want to be in this industry in the long term, and I surely am passionate about it, and do not want to be mediocre. Given the fierce global competition, my reality is that I have intense educational needs. Continuously. I need a strategy.
What to learn
This is a complex puzzle. There is so much out there to learn, and only so little time to do it. You will need to make choices. I solved the puzzle as follow. First, I split my learning needs in two parts: professional needs and personal needs. The professional needs I consider the most important. I have bills to pay, if I can't, I cannot continue my way of living. Personal needs I consider important as well, but are mostly targetted towards fun and the expression of creativity.
To decide on your professional needs, you need to have some insight in the job market in your environment. Do your current skills suffice to provide an income in the next years? Also, you need to be aware of market movements. If it is clear that a particular skill is in demand the coming years, you can decide to invest in it now.
With your personal needs, it is wise to also follow market movements and trends. This way you can combine the fun factor with something useful for the future.
In my case: I have solid Lotus Notes and Domino skills. In my country I can continue to work with this technology for a living in the coming years. Still, other platforms, such as .Net are rapidly growing in popularity. Therefore, for my professional needs, I will learn .Net. I also noticed the rise of the web scripting languages, such as PHP and Ruby. Therefore, in my personal needs I will learn those. I consider them fun, and maybe one day I can make use of them professionally.
Note that despite these choices, you should continue to monitor other segments of the market. J2EE is not part of my learning strategy, but at all times I know what is going on in that community. How? Simply by subscribing myself to the most important web feeds, and reading about it almost daily.
Getting out of the comfort zone
It is common practice for professionals to specialize themselves in a certain technology, but there is also a hidden danger in it. Even when the technology provides you a solid income, and an outlook of years of demand for it exists. The danger is that the market decides on the destiny of the technology, not you. We all know how fast our market moves. Furthermore, the technology vendor you depend on has a strategy, and most likely it is to make money, not to provide you a job. See the conflict?
So, how to get out of the comfort zone? I will get into that later, but one clear sign that you are out of your comfort zone is: pain. No pain, no gain. It can be hard to learn new stuff. It takes a lot of effort, practice and dedication. If your head hurts after studying or practicing, well done. You're growing. At the same time, learning new stuff can also be joyful, refreshing and inspiring. Even still, it will not make your head hurt less.
Get real, and get over it
You can fool everybody else, but not yourself. How good are you really at what you do? How many good things have you come up with yourself, not relying on others? Do not make the error of comparing your skills with your office buddy. Instead, compare it with an entire community. Do you lead, or follow? It is key that you know what you do not know.
Be open minded
Our industry is full with technology enthusiasts, and many of them defend their technology choice passionately. Do not waste your time doing this, unless you can directly affect the outcome. There is no best technology, there's only choices. Before you decide to hate a technology, or the company associated with it, at least know what you're talking about. Participating in the technology flame wars is a waste of time, your credibility, and limits your choices. Once you're skilled in multiple platforms, your need to defend one of them will vanish.
Learning from others
For somebody to become a good software developer, years and years of dedication are required. What better way then to take a shortcut and learn the best practices from the start? On my first job, I was working in a department with a few senior developers. Instead of bugging these guys with continuous questioning, I got access to their code and analyzed it. The quality of the code was much better than mine, and I quickly discovered why. I started to understand and apply the differences in my own code and became a better developer. It felt like taking a shortcut, and that is exactly what it is. I cannot imagine a faster way to learn than to learn from others.
A word of warning applies. Do not rely on a single example. That way you may learn things the wrong way. Instead, use code of multiple co-developers and public code to learn from others.
Practice, or you will not understand
I'm subscribed to dozens of web feeds covering multiple technologies. I spend at least an hour a day reading them. This routine improves my knowledge, but not my skills. The only true way to improve my skills is to practice. With limited time available, it is important to pick the most important aspect to practice. I am a certified Java developer, but since I have not practiced it for the last two years, I know that I do not truly have those skills. However, last year I did lots of PHP coding for some personal projects. I acquired my PHP skills though practice. Practice is the most time-consuming aspect of learning, but also the most benefitial one.
Prove your knowledge and skills
I am still surprised how many developers do not care about their certifications. They posses the skills, yet not the proof. This is foolish. A piece of paper means nothing to your peers, but it does matter for your (future) job. Out of two candidates with equal experience, the one with proof of their skills wins. Take that last step and go for the exam. I usually try to acquire two new certificates each year. The extra effort of studying for the exams is neglectibe. As a result, years later I now behold 15 certificates. I'm not saying this to show off, there are lots of people with the same or better skills, but relatively few with such proof of it in my age group.
The other way to prove your skills is your track record at your customers. Since this builds up automatically, I will not give it much attention here. The importance is evident though.
Finally, my personal favorite: have a portfolio. It is wise to have your own web site or blog. Employers will look at this more and more. Even better, make your hobby projects public, much like I did with the s3maphor3.org site. Since your code is public, you have proven your skills.
Patience and persistence
One crucial aspect in the learning process is to be humble, patient and persistent. Rome was not build in one day, and it is ok to screw up. Every developer is familiar with the scenario where you spend hours and hours troubleshooting a problem, only to find out it was the misplacement of a single character. Stupid you. Not so, you are being persistent in solving a problem and learning, and you will never forget about the mistake you made. While you think you are wasting time, most others made zero progress. They came home, had dinner and watched TV.
Persistence, combined with frequent short practice sessions over a long period guarantee your growth. You may not notice it, since the daily growth is so slight, but your environment will notice. Persistence and patience are your friends. Never give up.
On to the most challenging part. Depending on your specific learning needs, you will need time to spend on it. Most likely, it will be a lot of time. Step one is to convince yourself that you really need the time. Step two is to convince your environment of it. Step two becomes much easier once you realize that this concerns your future income. It concerns the future of the familiy. If you're like me, you can also explain that this is you, the profession that you chose, the passion that defines you. How can someone else possibly deny you this time, given its importance?
The "get real" concept applies here as well. Nowadays everybody seems to be on the fast train, claiming they do not have time. It's trendy and makes them feel important and productive. In reality, they probably spend dozens of hours a week being in front of the TV. Everybody has time. Everybody. You have control over the majority of your free time. They don't call it free time for nothing.
Realistically, time management can be challenging indeed. I personally combine frequent short daily sessions (to learn) with infrequent, long, full-day sessions (to practice). And yes, I have a life.
As stated, learning can be hard. It requires focus. It is tempting to get distracted in the comfort of your own home. How to setup a focused environment differs for everybody, but here is how I do it.
First, I prefer to be alone. In my current situation this is possible. See, learning can be received by others as a non-working activity that they are free to interrupt. To avoid this, I try to be alone in the house, or at least in the room. I set myself a time frame for the day, and stick to it, unless I have the freedom to continue longer. I prefer to be in a room that is slightly cold. It alerts me and keeps me focused. I like a gentle background noise, preferably upbeat electronic music. This brings a level of comfort, without the interruptions. There's a wealth of possibilities in creating the ultimate learning environment, but I'll leave that up to you.
Learn to love it
When I started in this industry, I hated the idea of spending unpaid time. Over the years I made a 180 degree turn. It is now part of my routine and I love it. I actually look forward to my practice sessions, they're an outlet of creativity and make me feel productive and valuable. There's no secret in how to accomplish this affect. You simply need to make the whole learning and practicing part of your routine. Once it is in your routine, continuous growth is on auto pilot.
Take pride in your accomplishments
It is ok to be proud of yourself once you accomplished something, no matter how small. During my first job, I wrote software and a manual that drastically improved the software development thoughput time of the team, by maximizing software reuse. It was not my job to do so, it was born out of my own frustration and done in my own time. It got me my current job. I cherish the product that I then delivered, even though it is highly irrelevant today. I have it printed in a nice booklet in my personal archive, that I intend to keep forever.
The point: it is ok to look back and take pride in your accomplishments. It will empower you to take on new goals and achieve them equally well. Over time, you will build up a great track record of high quality deliverables, whether it is a certificate or piece of software. These are deliverables to yourself, not others. Since you will not want to break such a great track record to yourself, you will try extra hard to maintain it. And there you have it: continuous learning and improvement has become part of your life.
I'm no psychologist or personal improvement coach. Still, I hope that my tips and attitude towards learning inspire others. My own reality is that I am not able to follow all the above principles all the time, but I do try. So far, I consider it to be a successful approach. I have turned learning from a sacrifice into a joy.