I am a big believer in personal development and growth. One of the things that often keeps us from growing is lack of awareness. There may be certain ways that we present ourselves or ways that others perceive us that we aren’t aware of. I did an exercise recently where I went around and asked some colleagues and friends various questions in an attempt to gain some awareness. Questions like: What are my strengths? What are my weaknesses? and some other similar questions.
The one answer that came up several times is that I Ieaned perhaps a little too much towards the theoretical over the practical side of things. That is likely true. This past year as I have focused more on teaching/mentoring and growing my business, I have not spent as much time writing code as I would like. I have also been reading more books lately. I probably have drifted that way a bit.
I have always valued both the practical and theoretical side. They compliment each other nicely. To be a successful software engineer, requires a bit of both. It doesn’t have to be exactly 50-50. The exact ratio probably depends on your disposition and exactly what your specific job entails, but you certainly don’t want to leave either out completely.
There is a certain type of knowledge that only comes from doing. You can read all the books you want about riding a bicycle yet none of them can teach you how to balance. They can give you some tips and tricks, but you have to experience it yourself in order to get it. The danger with being too practical is that we can get tunnel vision. We miss the bigger picture. We end up solving problems instead of overcoming obstacles. The solutions we develop in one area, are hard to generalize without a deeper understanding of why they work.
The nice thing about theoretical knowledge is that it is readily transferable. Take something like basic psychology, which has lot of theory involved. Once you learn basic psychology you can apply that in all kinds of areas of your life. Theoretical knowledge also helps when solving problems. Understanding why things are happening allows us to drill down to the root cause and turn the problem into an obstacle. Where we get into trouble with the theoretical side is when we gain a bunch of theory but never practice it and start to think we know what we are doing. When we are forced to finally apply it we find all the gotchas and we stub our toes on them, or we give our friends advice that sounds great in theory but doesn’t actually work for their application.
When it comes to software, the best approach is a balance of both the theoretical and practical. Understanding ideas like coupling and cohesion, the GOF Patterns and the SOLIID Principles is just as important as understanding how to implement them in LabVIEW. At the end of the day we do get paid to implement, but understanding the theory is what allows us to write robust code that is both reliable and maintainable. That is a huge benefit to us and our customers.