An Intro to Opportunities for Programmers in the Market
For young programmers, it is sometimes difficult to find information about the type of actual development that is done in major corporations. This is unfortunate, because this is the environment in which they will spent most of their careers. There is a lack of information about what really entails to be a software developer working on many corporations and market segments.
I give here my observations on software development on a few areas. These are generalizations, but give some idea of the flavor of programming tasks that can be found in companies, ranging from big corporation such as Google and Microsoft to small companies.
Development of Web Software
Most web software is pure manipulation of input output. In other words, the biggest task is to get data from web pages and to return data to web pages. There is A LOT of code that can be done to do this, but 99% of that code is boiler plate.
Interesting problems, however, do happen in these areas, but only as sub problems. E.g., how to classify web pages in a search engine. Or a routing algorithm inside a map application. Or a video processing engine on a web site such as YouTube. These are problems that really require development of algorithms other than writing html and JavaScript to a web browser.
Most commercial applications are also on this category. For example, they will be heavy on the side of getting data from users, adding then to the database, and creating reports from that database. Companies usually create software to support their existing workflows, so the focus is rarely in the complete automation of a process that is already done by a group. The goal is frequently in creating tools that will help that group in doing the same activities, but faster and with less bookkeeping.
This means that many companies will rarely make a huge progress in automation, because the time take by a process is largely dependent on the time needed by the people controlling the process. It also means that the algorithms in these applications are usually dumb. They just provide a means for information to be stored, but there is no complex transformation performed on the data.
Financial Software
In the financial world, most of the software is created to do some simple mathematical processing of the numbers coming in. For example, analysis of data that generate graphs is very common and useful for financial folks. Another area that is important for them is networking code that can communicate with other financial systems in order to perform transactions.
In terms of language used, most companies will try to get developers for the most common language of the moment. The idea is to get people that can readily work with the existing technologies in the shortest period possible.
Systems Programming
This is another class of problem where algorithms are less important than the enormous amount of detail in the input. An example is web browser development. The basic ideas behind it are not all that complicated. However, the diversity of input found on web pages in the Internet makes it a very challenging task, because the browser needs to display a huge number of versions of html in a reasonable way.
Another examples are operating systems. Here, the main complexity is not on the algorithms but on the diversity of hardware that the system has to handle. Talking to the processor is complex enough, but the operating system needs to communicate with every single device on a computer. Each device has a slightly different interface, which makes the software very hard to maintain and debug.