As a programmer seeking to one day be considered an expert in your field, you must decide what technical areas you want to focus on.
Focusing on one area means you don’t focus on another. It’s a reality of life that you need not fear to embrace. The good news is, you get to choose the technical areas that interest you most.
Not too long ago, choosing a platform generally meant choosing a desktop operating system to develop on, with Windows being the 800 lb. gorilla. Cross-platform libraries were developed and came to maturity, and a stasis of sorts was reached.
Then the web came into its own and mobile followed, and suddenly the tables were upended again and all development was done in proprietary silos. Now, new cross-platform tools and frameworks are beginning to bridge the gap and make it so that you don’t have to commit yourself to choosing just one or two platforms and re-implementing your code multiple times.
You now get to choose from a wide area of places to focus your skills. Do you want to do web-related programming? Client-side or server-side?
Do you want to do mobile development? Android or iOS platform? Or maybe you want to use C# and Xamarin and write cross-platform mobile apps across both platforms and Windows Phone as well.
The critical question you need to ask is: where the world is going? Web and mobile are here to stay, while big desktop applications continue to dwindle in number and importance. You don’t want to be cut adrift on a shrinking iceberg of stale technology that leaves you with irrelevant expertise. If you can make a bet with your skills, bet on web and mobile over desktop.
Programming languages inspire religious wars (though ironically, fought mainly by agnostics and atheists). No need to get into them. The same question applies here: what languages are popular and growing, or at least holding their own?
If you are crazy about wanting to do low-level development, embedded systems, drivers, and real-time apps, learn C++. Or learn C++ if you want to really understand how memory allocation and deallocation work, how shared libraries differ from static libs, how the heap and stack operate, how classes are laid out and virtual function pointer tables are used, and other details.
If you want to work at a higher level and have an excellent object-oriented language, pick C# or Java. Both languages remain popular and powerful and can be used in a wide range of applications.
I spent seven years of my career in C++, programming low-level systems and chasing insanely difficult bugs through the disassembly. The next seven years were C# dominated, and I never looked longingly back to C++. For me, the programming language that most easily helps me express my intentions and solve a particular problem is the best one. For some problems, C++ is better, but thankfully I don’t have to solve those kinds of problems anymore, so C# is my choice.
Even when a platform and language are chosen, a myriad of different choices await us when we tackle any problem. Do we need a database? If so, should we go with SQL or NoSQL? Which NoSQL database?
Do we need a distributed messaging framework? Should we use RabbitMQ and perhaps another library on top of it?
What about our web backend: should we use Microsoft Web API or Ruby on Rails?
Should we use Redis, NServiceBus, and SignalR or choose a different set of competing technologies?
Is it best in this situation to use CQRS and event sourcing, or is another pattern better?
The important takeaway here is not so much which specific technology choice you make across these different areas, but rather that you are evaluating them and keeping abreast of where the industry has been headed. You don’t choose something new for new’s sake, but you are aware of what is gaining traction and the reasons why it is gaining steam.
I made the mistake of going head down at my job for year and years, only to wake up one day, look at some job listings, and realize I wasn’t qualified for any of them. They all required at least some relevant database experience, and I had none. Most wanted some web or mobile experience, and I had none. The world had passed me by while I was slaving away at an old desktop app that was still years away from seeing the light of day.
Stay up-to-date on platforms, programming languages (and their newest features), and technologies. You will then be able to learn them, evaluate whether your current job is staying relevant tech-wise, and find another job that uses them if not.
Technology changes rapidly, especially in our programming world. You aren’t a fossil yet, so you have to stay nimble and keep learning.
Post Footer automatically generated by Add Post Footer Plugin for wordpress.