Before delving into the reasons, I have to state that in my opinion talent is the first and foremost factor in success as a programmer. This is something learned through years of experience and I don’t think that I can verify that with a logical reasoning, but I can consider programming as a type of skill totally independent from some basic skills like logic, analysis, critical thinking, or mathematics, and it is not also a combination of such skills. I believe that programming is a skill on its own that should be in somebody’s DNA in order for him or her to become a really successful and professional programmer. A university degree, a bunch of certificates, and many other factors can assist in earning that degree of expertise, but can’t be a replacement for the natural talent. Having this said, I’ve witnessed many people wasting years of their lives writing code while they didn’t appear (at least to me) to have the required talents for this job. That’s why you see many people without an academic degree, or with an unrelated degree (like arts or philosophy) being very good at programming while some people with highest degrees in relevant fields are simply unable to do that.
After this, the second parameter, in my opinion, that plays a key role in success in programming is the age when you start programming. I can exemplify this with a simple comparison with professional sports where for most sports you need to start playing in very young ages in order to be a successful professional and then as you become older, you lose your abilities to play. That’s why you see programmers losing their abilities after passing a certain age, and having many of the best programmers having their most effective skills at a certain age range.
Therefore, I believe that in order to be a professional and successful programmer a person should start programming at a young age (before 16-18). In my experience the age between 25 to 45 is the golden time for a programmer when he or she can have his or her best performance and results, and passing 45, programmers tend to lose their quality and skills slowly, so they try to move towards administration or business positions. Of course, there are always some exceptions to social statements, and I, myself, can provide some of those exceptional cases, but it’s not the case for most people. Here I’d expect some people to come and say that they haven’t experienced such changes, but I have to respectfully state that there are many people employed in the field of computers specifically in programming but most of them are not really professionals (unlike what they assert to be). There are some factors that can distinguish a good programmer from an ordinary or bad one that are beyond the scope of current writing. But this shouldn’t prevent anyone from disagreeing with me on this topic and sharing his or her experiences.
With this introduction, let me try to clarify my statements with the reasons below.
The most obvious reason that can come to mind for starting programming at a younger age is the huge impact of experience on programming. You can’t find a single professional programmer who doesn’t have years of active programming in his resume and hasn’t used several programming languages and technologies.
Experience along with talent and knowledge make the foundation of programming, and unsurprisingly, experience is a vital part of this chain with a much higher importance than what it has in other fields of science and technology.
Obviously, experience can’t be gained without spending time, and unfortunately, for programming this requires a full dedication to learning a programming language along with its related technologies and some software development practices. Such a dedication is really hard to be done by someone who has passed his mid 20’s because, as I will state in the next section, there will be many enforcements by personal life and environment that doesn’t allow somebody to dedicate much time to learning without any income from it. I stress on the fact that such a learning should be done in a certain period of time with full dedication, and before earning such a level of skills, it will be almost impossible to make much money out of prototype programs usually developed for learning purposes only.
On the other hand, it sounds to be arduous to make this learning process a part-time task in parallel with employment in something else, because programming technologies change so fast and before you finish learning something, new technologies are introduced and you start to lose track of changes.
Reading these, you would understand that a successful programmer should have started coding before engaging in such difficulties when he has a free mind to focus on learning. This is a major problem with many of the Computer Science graduates as they come out of university and face with the truth that real world programming is very different from building prototypes at academia. Most of these people either switch to other fields of Computer Science where programming is not necessary, or hardly spend some time to learn and adapt with the changes to become an ordinary programmer.
Personal Life Enforcements
Even the most nerdy people in the world have some human needs and at some point they give up on computers to look for a life and maintain that (even Sheldon Cooper did that)! None of us wants to be dependent on parents or live with a low-level job and income, so we all know that we’ll be forced to do something that we may not like and such a repeating job can eat up most of the best hours of our workdays.
This is the common problem in late 20’s and early 30’s before you marry (even if you don’t marry, you will have similar issues) and probably have kids in late 30’s and from there you engage in spending time on raising your children and taking care of their education and life.
Generally speaking, you will experience that as time passes, you will have less and less time to spend on learning and keeping yourself up to date with new technologies. You can succeed in managing this problem till a certain age if you have started programming at a young age and could keep yourself updated with the newest changes on a regular basis before they become big enough that you go out of synchronization with current technologies and methods. This can help you stay in business for a decade or so, but as life enforcements become bigger (and you physically change), you will start to feel the difficulties of maintaining this progress.
This is the point where you see many of the older programmers losing their fame, skills, and positions, and try to move towards management and leading positions whether employed by someone else or by themselves using the money they could save during their active years. This is very similar to professional sports where you play when you’re young and after retiring, you become a coach or manager.
Observing the History and Trends
I don’t think that there is a single person disagreeing with me on the fact that it’s critical for a programmer to stay up to date with the latest changes and trends in technologies. This requires time and regarding the parameters I mentioned above, it will be hard to stay up to date at an older age if you haven’t already established the core skills that you need.
In addition to this basic reason, I believe that knowing the recent history of programming and being familiar with the recent trends and changes can influence the future success of a programmer. With no exception, all the good programmers that I know have started programming at a very young age with low-level and older languages and have used several languages to date, so they’re very familiar with what has happened in the past of programming. Without such a background, it seems to be harder to learn newer technologies because these are stacked up with a hidden dependency on each other.
You can feel this when you try to teach programming at a college or university level to students. You will see how easy it can be for students with past experiences to learn new concepts and move on while other students have serious difficulties.
Based on what I’ve written so far, it’s very clear that time is such an important parameter in learning programming and being up to date with the latest changes, and enforcements by personal and career life will take away this precious factor. This is somehow stated in the previous sections, but to generalize things, I have to say that we all have experienced that usually we’ve had more time in the younger ages than older ages and this is totally independent from our job, position, gender, wealth, or similar factors. Additionally, the energy that we have in a younger age can help us a lot.
This is also something social, hence experimental, but as humans, we have different stages in life where we try to work and make a better future when we’re younger, so we accept to work more, have a lower income, and live in worse living conditions, but as we age, we lose our patience in life. When we become older, we expect to cultivate the seeds that we planted in younger ages.
Doubtlessly, programming mandates patience and without such a patience to sit in front of a computer for hours trying to build something you wouldn’t go far. That’s yet another reason for seeing better performance by younger programmers and a lower performance by older ones.
While this post is based on my personal experiences and observations, there are surely exceptions to that as there are to any social rule, however, everyone can observe and verify the correctness of these statements by looking around at workspace or by talking to different programmers at different ages. That’s what I’ve done a lot which has made the basis of my reasons mentioned in this post, otherwise, I’m not old enough to know many of these points. In fact, I should be at the beginning of the road!
All in all, I don’t want to disappoint anyone at an older age. With diligence, you can change everything and as you see, most of my reasons are based on the common case of people who work at an average level. If you can manage to work exceptionally, you can earn whatever you wish to earn.