Programmer is a lifetime occupation. But first, as a programmer you need to love programming, rather than just an occupation to achieve other goals in life.
Now if you plan to spend decades of life on programming, then you should continue to think about what is more efficient. In other words, how are you different from who you were a decade ago and how will you be better than who you are now a decade later?
In my opinion, a programmer, regardless of his work, should improve himself in three aspects.
First of all, keep the curiosity of the unknown, try to broaden your views.
If you are proficient in only one programming language, then go to learn another one and it should be much different from the one you knows. This allows you to look at the problems from a different perspective.
If you only focus on one area, then it will be very helpful if you research on other field as well. Most people like to solve problems with their own knowledge structure they are familiar with, There are always troubles while learning new things, you need to understand lots of basics to begin the actual work. Organizing the relative information in your brain is very different from using external materials. The latter needs you walk through a rather painful process. However, once you get used to them, you will gradually master a set of methods to alleviate this pain.
Second, grasp the details on all levels.
Try best to understand clearly about each level of a system. How does hardware run machine instructions? What is the flow of data in the hard disk, memory, cache, CPU? How the code is compiled and linked? How is the program loaded into memory? How does JIT speed up the bytecode execution? How does operating system manage threads, process IO? The third-party modules used in software and how do tools process data? In a network environment, the communication protocol of the data stream; etc... You need to know the details as clear as possible.
Third, intuitive to code.
Excellent programmers will find out performance bottleneck of a system quickly, and they will find the cause why system crashes and the codes which are not reasonable very soon. The accurate estimation capability is very important to calculate the cost of each module.
Keep yourself having code to write, and continue to discover new interests, and to diversify into new areas. Programming itself is an interesting mental activity, rather than just write a program in order to solve some problems.