What Frameworks and Languages Should I Learn
With so many new frameworks being released and the large number of languages available to write an application, it can be very difficult to know where to focus your attention. I quite often read articles and blog posts related to this subject and everyone seems to have an opinion on the best framework and language to learn and use.
Here is a small selection of the various frameworks/tool/languages on offer:
Frameworks - ASP.NET MVC, AngularJS, Ruby on Rails, React (not a framework, but it is ever increasing in popularity), Django etc.
I wanted to write this blog post to give you some of my tips and advice to assist you in making the decision for your next project. Often the framework you decide to learn and use will determine the programming language required. I am going to cover several points from the aspect of developing a personal project and also as working apart of a team in a professional environment, they will differ and should not really be considered with the same approach, there will however be some overlap. I am going to cover the following sections:
- The Problem
- What type of application are you developing?
- What skills do you/the team have?
- What are the benefits of learning these new skills?
- What is the longevity of the framework?
You have decide to write a new application in your own time and am trying to decide what framework to learn and use. You have full control of this decision with nobody limiting the framework, language or tools used.
Your project manager has informed your team about a new project you need to develop. Now depending on the environment, you will have a varying level of control over the framework, language and tools used. I have worked for companies where we had zero control or opinion over this and also in environments where we had much more control of the approach. I am going to assume the development team will have say in the framework and language used, being as they will have to actually develop the application. I think this makes sense and should happen.
What type of application are you developing?
One of the most important factors that must be taken into account is the type of application you are developing. I think this sometimes get overlooked and really will filter down the list of frameworks that are suitable for the application. Don't just choose a framework because it is the latest buzzword. Things to take into account:
- The size of the application
- The complexity
- The number of users
- The functionality of the system i.e realtime notifications
- The time frame of the project
Of course this list is by no means exhaustive and all possible aspects should be taken into account when deciding the framework to use. This consideration is valid for both a personal and professional project.
Let me give you a quick example, if you have a dynamic website that changes frequently and the content need to be re-rendered often, then use something like React. On the flipside, if the content of the web application does not change often, don't worry about using something like React. Facebook created React to handle their requirement of very frequently changing content. Oh and just an FYI, React is not a framework, it just the view part and you will need some other parts to create an entire application, but that is an entire separate post of its own.
What skills do you/the team have?
What are the benefits of learning these new skills?
Learning any new skill simply cannot be a bad thing, however, you should also consider how these new skills will assist in your career progression. Now for someone like myself, I have great ambition to enhance my skills to be able to develop my career as much as possible. I can distinctly remember looking at some online tutorials and working my way through the tasks. It then suddenly dawned on me, when was I ever going to use these skills in my current career path. The simple answer is, I wasn't! I was investing my limited time in something that was not going to help me achieve my goals. Now of course, I am not suggesting you should avoid learning anything that will not directly help you on a daily basis, but for me I had to reconsider my approach and look at learning a framework closer to my area of work. This is something I explicitly think of whenever I am investing my time in a new framework and/or language. I quite often consider what my daily tasks are in my work environment and based on this will look at developing those areas. For example, we have an upcoming project that will involve realtime notifications and so I am looking at the frameworks that can help me achieve that exact functionality, again this is all about choosing the right tool for the job.
What is the longevity of the framework?
As I have mentioned, there are so many new frameworks out there that can be used to develop an application. A real consideration that must be thought about is the longevity of the framework/language/tool. If you invest your time in learning a new framework only to find it is losing popularity and eventually disappears, this is going to be really frustrating and ultimately a waste of your time. Now this, of course, is a very difficult thing to predict accurately, but there is a simple way I think about this. If one of the big boys is invested in a framework, then it will probably be around for sometime. When I say big boy, I am talking about Facebook, Google etc. If they get behind/create a framework it gets a lot of traction and popularity. The support and documentation will be vast and you can say will some level of confidence this framework is not going anywhere anytime soon.
Let's wrap up
As developers we are always looking at learning new skills for various reasons, quite often this time is limited and so deciding which framework/tool/language to learn and use can be difficult. There are so many contradicting articles and blog post it just complicates things further. Here are my top tips and advice:
- Look at the type of application you are developing and learn a framework that will assist you in achieving this
- What current skills do you/your team have that could affect the development process. You may find learning a new framework also requires learning a new programming language, this factor must be taken into account.
- What are the benefits to yourself or your team in learning this framework/tool/language. Will this enhance your career progression opportunities? Will this allow you to develop the application in the desired time frame?
- Is the longevity of the framework worth your time investment?
Ultimately, there is no definitive answer to the question 'Which framework should I learn?', I have provided some points for consideration in making that decision. If you have more point to add please do leave a comment.
If you have decided where you are going to invest your time, take a look at my post about learning new skills to become a better developer
See you next time, Ben.