Some days ago I was in a chattering with some fellow developer friends and that famous question arose once again: Which one is the best programming language and the best framework? Should I be heading my career towards certain technologies? Should I study X or Y? And what if I just throw it all through the window and change my profession? Ok, maybe it's too exaggerated.
Yeah, that question could be overwhelming and the root of big chaos: from tribulations about your professional life to such holy wars on technology between developers (just look at the communities of Java devs against the PHP devs). I have wondered it myself for a long time (link in spanish) and sometimes it's like if we are looking for the Holy Grail of development, but now I'm aware of the nature of this question and I decided to share my point of view, at least from the technologies I have used before.
Can you hammer a nail by using a screwdriver?
Certainly you can, but wouldn't be easier if you do it with a hammer? Of course we could find other harder missions to do as tightening a screw using the same hammer. That very same analogy can be applied to frameworks and programming languages; you will find more convenient to use one tool or another depending what you want to make. My criteria for choosing the right back-end technologies for a web project are the following:
- Size of the project. In case we are talking about a huge corporate project, Java would be my choose. Its virtual machine allows you to control more advanced features of the system (such as multithreading) and its API is like a Swiss knife with enough classes and functions for a better data structure and design patterns implementation. You can build with Java from a single webpage to an advanced low-level circuit application, and that's where its weak point relies: sometimes you might need a large bunch of code to create something really simple.
- Project deadlines. If your main priority is to aboard the DeLorean and time-travel to deliver your system on yesterday, Laravel is your best bet. I have used it for a short time now and it's astonishing how quick you can build up an entire project. That's the main reason why so many startups are using it, since they need faster incomes to survive on the market (opposite to huge transnational software companies which are already stablished), they can find it on Laravel a great tool to deliver projects faster. For a smaller projects you could think about Drupal or even Wordpress (great for something REALLY simple) as your better alternatives.
- Infrastructure. Maybe you have already designated the space where your project should be deployed and that could be another thing to consider. For instance, there are lots of hosting services for PHP and MySQL infrastructures and they can be very affordable and easier to configure. However it can be harder for a Java application as you would need to implement some kind of servlet server such as JBoss or Tomcat.
What are your preferences?
This also is an important question to help you to decide among languages and frameworks. The few examples I have just mentioned earlier apply to back-end technology for web projects, but don't forget to just tell yourself what do you like: what kind of languages, operating systems and platforms you do prefer for development.
If you are already focused on front-end development maybe you'll struggle between React, Angular or Vue.js; if you prefer the mobile applications development you might choose between Java for Android and Swift for iOS. That kind of choices are more important regarding your professional interests and the best approach is to think that your choose was the best.
Another key example of this scenario is the case in which I would be asked to develop Windows desktop applications, just like I did about fifteen years ago. My first choice would be C# as the integration of Visual Studio with the language and the operating system is the very best I have worked on.
Jack of all trades, master of none (but oftentimes better than master of one)
This is a good statement that my developer friend Israel Morales told me before, once we were talking about my concerns on specialization, and I think that multi-faceted approach has its own advantages. The appending of but oftentimes better than master of one gives us the commitment to become better than the average "master of none".
One of the greatest skills of a good developer is to identify the best choice according to the case, and that could be a mixture of options at the end of the day. For example, I have worked recently on a project where they required to me the development of certain advanced functions and the proper libraries were not working with PHP 7.2. The choice was to develop a Java/Spring application aside the main PHP project to solve these functions.
Finally, I think regardless the specialization our main goal as developers should be the constant update and to take advantage of what we can learn from the other technologies.