written by owen on 2014-Jun-22.
Nothing interesting has been happening in technology recently (except maybe gravity waves *yawns*) so with the new hype behind HHVM I had to write an article about the continuing promotion of edge case tools and services. It seems that the spreading of high buzzword shill media has spun into a new level of epicness. Let's analyze these buzzwords individually.
The mobile first problem; millions of people are using iphones to visit websites (when not playing angry birds) and they cannot seem to click on your buttons because they are super small. So the obvious solution would be to build a mobile responsive website and this will encourage the people visiting your website to somehow feel appreciated that you spent the extra effort to accommodate thier more than capable device.
The execution speed problem; a set of websites like facebook and twitter can't seem to run fast enough no matter how many server farms they have in Alaska or how many cores they have inside each processor. No matter what they do they cannot manage the weight of the millions of hits they get per second. This is why it is a good idea that you should use HHVM so that you don't have the same problem with your app. Having your 10 lines of code running at facebook speed is top priority.
The problem of programmers and leaky abstractions; some companies have trouble with the quality of their code, crazy classes, interfaces and APIs in every corner of the codebase. Everything is a web of inconceivable ORM, MVC, OOP and API, RSS soup. Its so bad that the unit tests can no longer keep up. No one man can even understand the madness that is behind the facebook interface. Solution? Go back to using Java or something like it. Hopefully this will make your programmers avoid bugs and keep the codebase expanding consistently forever. If it is a good thing for facebook it must be a good thing for everybody.
The API problem; so you have this new thing that you want to build. Why not make it an API? Instead of building the new twitter or facebook why not just spend the time and build out a proper API that you and other people can use to interact with your unbuilt application? In fact this will save you a lot of time in the future when you application gets popular and other people realize that your API exists. Why would you spend time building something that is not a API using another API?
The "future proofing" problem; so if you use this framework you will never have to learn any other frameworks ever again. This framework will solve any problem which could possibly popup or any problem which may cause you to refactor your entire codebase. Every part is hot swappable and as long as you carefully and diligently follow specifications you will have code that is infinitely reusuable and easy to maintain. Do not reinvent the wheel.
Put it on github; in the event something bad happens or you start working with a team that is dispersed internationally, ensure that you are using github to help you avoid any of the problems of merging and version control and allow you rebase at anytime. 30 programmers changing the same page at the sametime and pushing those changes to production is an annoying problem that many people face. Plus if you choose to go open-source other people can join your project and continuously fork it to the point where it is almost impossible to merge it back to the master branch. A repo is critical.
Put it in the cloud; this ties back to scalability as well. The bigger your cloud stack the better the chance that your app/webservice/api will be be successful. And on top of that the cloud is more secure and frees you from learning Linux and complicated server setups.
Chasing the carrot syndrome; there is this new API/framework that is the best thing since slice bread. Its just like what you use now but it's built for the "internet of everything". Its crucial that you jump on it early so that you can be one of the few people with the knowledge to harness this new piece of technology that will be popular in the future once it comes out of beta. These are exciting times! Bleeding edge! I saw it on reddit.
The big data problem; spans several buzzwords half of which I cannot even remember, ORM, but basically you have too much data. You have so much data that you cannot even make sense of it. This magical tool will help you make sense of it for a small monthly subscription fee.
The rapid/efficiency/workflow development problem; development has slowed lately. The amount of code and files required to make and maintain even the simplest application is a test of patience and man power. This toolset will make your productivity improve 10x. You will be writing 10 apps week with no bugs and bueatiful code that practically autogenerates itself (once you set it up correctly). Some how all the 15 lines of code that you have ever written has been inefficient. You should consider learning a whole new language or frame work to help streamline your development.
The standardized code problem; you have a big company with lots of cowboy programmers and you want them all to write the same code consistently and you have a high turn-over rate - what do you do? You could get robots or better yet find a tool where everybody can write the same code in the most verbose way possible. The toolset allows for a constant stream of developers who you can hire to keep writing the same code in slightly different ways forever or until something new comes along. You don't have a big company? Well you should start using this toolset right now so that you can be first in line when they hire people to extend the code.
Check out these new "features" that are really bug fixes; frameworks often evolve to fix bugs in other frameworks. Things like auto constructor injection on controllers via containers - helper generaters. Yes, it's cool at first but it never really solves the initial problem. Expanding the codebase in the name of making it more maintainable is like buying a bigger house makes the walls easier to paint because the doors are further apart.
Conclusion: At the end of the day you can use any tool you want. You can even build your own tools. If you are just starting out, you can pretty much just do anything that you stumble across because there is no "best" framework. There is no magic framework that will reduce the amount of bad code that you will produce. There is no guaranteed tool that will get you a good job. Programmers should strive to be smart - not to be "tools". Get smart. Everything has disadvantages - everything! Learn how stuff works and stop reading techblogs.
All that is important is that you produce something, gain experience and learn. Please for the love of all that is good stop spamming the world with random things that pop up everyday. Jumping between frameworks like level 6 in Mario. There are enough cheerleaders in the world. Ain't no one got time for all these frameworks! Put up some demos, give us some APIs, do some fun side projects, show us the things you have built. If this new thing was that good you would have built something with it already. Shut up.