Theory and practice
There is a tension between theory and practice. The theorist claims that “you must learn the fundamentals” to a pragmatist who protests “but how do I use this?”
This tension comes from competing goals. The pragmatist wants to act now; learning this topic is a means to an end they are working towards. For the theorist, understanding is the end; without understanding the theory, how can you hope to apply it well?
These caricatures of the theorist and the pragmatist fail to understand each other, both to their own detriment. A pure pragmatist who only learns a tool well enough to use it will eventually be outcompeted by one who understands the fundamental theories of their craft well enough to adapt as circumstances and tools change. A pure theorist will struggle to find funding for their research, and be outcompeted by a more pragmatic theorist who connects their research topics to real-world problems that people are willing to allocate resources towards solving.
In the field of software engineering, the importance of theory vs practice comes up frequently in the context of education. Should people looking to enter the field take the long and expensive path of an undergraduate degree that teaches the theoretical foundations of computer science? Is it better to do an extremely practical boot camp program for a fraction of the time and money that promises a job upon completion?
Just as with the caricatures, neither one is the optimal path on its own. CS undergrad students complete their program and realize they don’t that when it’s time to actually build software, they have no idea what to do. Bootcamp grads are uncompetitive applicants for roles that don’t use the exact same tools they learned in their program, and they have a harder time adapting to new technologies. Being to far to either end of the spectrum has worse outcomes than being in between.
Conversely, the best new college graduates in the field are entering the workforce with more than a theoretical understanding of computer science. They build projects to learn concrete skills and worked in internships to gain professional experience. The best bootcamp graduates augment their learning by independently studying fundamental computer science topics. These are the people who understand the theory well enough to see how it benefits a broad range of domains, and also have the practical skills apply the theory in a real world project.
Without understanding theory, it’s challenging to take a practical skill and figure out how to apply it with other tools or in other contexts. To be pragmatic In the long run, it’s important to understand enough of the theory to be able to adapt as the world changes.