While conducting interviews, I keep running into programmers who seem to be very specialized, but know little outside that zone, even if that knowledge is very related to their work. That is, they know a programming language and framework and they can program all day in that, but they are not very knowledgeable in databases, web servers and so on. And this makes them less useful in many situations.
Now, I understand that learning even one language or framework can take significant time and it is better to stay focused than be all over the map. And from a career perspective, it is useful to point out continuous experience in something than experience that is distributed across multiple knowledge areas. As a general principle, that is valid, but in practical terms, a software developer is very inefficient if they don’t know more about knowledge areas that directly affect their work.
Let me give a few examples:
- Someone who only uses an ORM to connect to the database and does not know how to write a SQL query, does not understand database design. Or worse, always relies on a database admin/developer to write SQL queries for them.
- Someone who doesn’t know to install their web server or configure its settings.
- Someone who doesn’t understand security concerns such as SQL injection, authentication, etc.
A team comprised of specialized personnel (pure web designer, pure developer, pure DBA) may produce results. But there will be more bottlenecks when compared to a team that has people who can contribute at each level if required. This does not mean that each person will do everything (practicing “total programming”!), but they can reach out of their comfort zone to get things done.
Yes, some companies institutionalize these silos by creating departments with various functions. Risk management and bureaucracy does the rest. But that is no excuse for individuals not to extend their learning outside their primary job functions. For acquiring knowledge at the basic level I am talking about, it would hardly take 10 minutes a day on a consistent basis.