How do we communicate? Passing information between our human brain holes is difficult. We all come from such different places that we have to work hard to establish a shared context, as a team, so that we can speak to each other.
This is one of the reasons that I love the concept of Domain Driven Design. That we should design things in software as the agents of the business see them.
As a business student in school I studied accounting, economics, marketing and how to write. All that I know of the wonderous world of programming I have learned on my own. Which has allowed me to build software from a DDD perspective from the get go. But I have one large flaw, I just don't understand classic CS problems. You want me to walk a binary-tree and print the longest path? Nope. Give me 5 minutes on the internet and I will have this simple procedure typed out for you in any number of languages. But can I do it from route memory? Yeah right, I have better things to study.
Is it important that I understand classic CS problems? Absolutely, and the older I get, the more I enjoy not only learning them, but finding the commonality in my business problems and how an intimate understanding of graph theory really does help solve them.
As much as I start to learn about classic CS solutions the more that I want to build these abstract solutions to problems using generic data structures. But then it seems that I have lost the focus on the business in exchange for solution that a larger group of programmers would have the ability to plainly see. "Oh, this is just a graph traversal problem."
How can we balance these two forces of general CS problem solutions and those built with a clearer understanding by those in the domain of the business?
I don't know. But I don't intend to stop seeking a solution either.