For the layman, the development of computer programs and applications might as well be magic. There is a reason that it is so difficult to find strong programmers to fill entry level jobs and why veteran developers are feverishly fought over. The skills required to create software are novel, and require a huge time investment to become proficient in. What’s more, just having technical expertise isn’t enough. The creation of a successful software application requires that its developers have an adherence to engineering principles and conduct sensible design practices.
Simple Apps That Aren’t So Simple
On the surface, many proprietary finance applications might seem like simple calculators. However, under the hood these applications use complex algorithms to assist investment bankers and underwriters. The logic requirements of these applications may be simple, but the mathematics involved in calculating results for risk analysis can become very complex. Additionally, many times brute force solutions are not viable and require more elegant algorithms to improve application performance. IBM’s SPSS is heralded as the standard in risk management software.
When one thinks of a search engine, they probably jump straight to Google. Google is after all the most popular search engine in the world outside of China. However, search engines exist in many forms. Many websites and even offline applications utilize search engines to allow users to completely skip navigation. What is clear, is that search engine capabilities, and thus complexity can be inconsistent. For example, many proprietary search engines rely on exact string matching. The search engine parses everything included and then regurgitates any location where it found an exact match. This approach is quite simple, and isn’t exactly sophisticated. Search engines such as Google however, have complicated algorithms that determine the relevancy of individual terms in query, account for misspellings and penalize websites trying to game the search algorithm. Search engines also have to be able to scale, and often utilize concurrency in their programming.
Forget about all of the crazy features that Facebook has implemented over the past few years. When Facebook originally hit the scene back in 2004, it was nothing more than a CRUD app written in PHP. In other words, it was a database backed application that was able to create, read, update and delete records. What started as a simple application eventually exploded in popularity. What was interesting in the case of Facebook was that it grew so fast it became essential to develop more efficient ways to serve the content to users. Much of the original PHP code became rewritten into C++ and D code.
Scaling is the common complexity
For the most part, computer hardware performance has gotten to a point where it is sufficient enough to run all but the most memory leak ridden code at an acceptable rate. However, many large scale applications eventually reach a point where the efficiency belt has to be tightened, and developers have to retreat to their software engineering roots of writing elegant, scalable algorithms.