Here is my approach to solving problems of many kinds, be it programming, mathematics, design or psychology of communication. This article only scratches the surface of a much deeper set of cognitive strategies, but I hope most readers will find something new and useful to their life situations.
What does “generic” mean?
Wiktionary’s definition provides many senses for the word, but here I will pick the first one: “Very comprehensive; pertaining or appropriate to large classes or groups as opposed to specific.” Creators can also note that the word comes from a Latin word “genus”, which has “birth, origin” as one of it’s meanings. For me “generic” also means as coming from the same origin and is therefore coherent from the start. I specifically mention this, because some concept can also be made generic by bringing other concepts together artificially. I will assume “having same origin” understanding in the stories which follow.
Generic and specific in personal communication
There could be different reasons for communication. It’s a common stereotype that men usually seek information and women are mostly tuned to emotional aspects of verbal communication. And both sides need to adjust the level of “genericity” for communication to be pleasant and effective. I can’t faithfully describe the woman’s side of this, but for men some emotional expressions can be very generic. For example, a well-known “I am tired” (said by a wife or a girlfriend) is utterly generic. There is probably no way a partner can continue verbal communication beyond that point with more specific suggestions. Ironically, this is where everyone should necessarily become a specialist.
While looking at emotional aspect through generic-specific lenses may be very fruitful, from now on I will assume communication as being mostly rational, logical (in a wider sense), and based on facts.
And this is where we also can solve a lot of problems by paying attention to the level of generality participants can appreciate. This applies to workplace and family alike.
Let’s recall, that when something is generic, it “works” for a large number of cases. This means, that one can choose to speak about more generic case than is being discussed just because conclusions can be easier to produce (it’s the speaker’s responsibility of course to ensure applicability of a more generic case to a situation). Unfortunately, it seems that many people feel uncomfortable to navigate in the sea of generic ideas: This is how “generic” is described in a second definition in the Wiktionary: “lacking in precision, often in evasive fashion; vague; imprecise.” I do not know what is the reason, but I suspect it being rooted in the mental effort needed to translate a more general case to specific ones, and perform that translation over and over again to understand the reasoning. Generic case may be very abstract. I can presuppose directions from generic to specific and back can cause different level of difficulties. Also I’ve noticed this even in situations, where there is no lack of knowledge involved: Humans just tend to avoid mental efforts.
However, generalizations, abstractions, models are very powerful tools. Solving a problem in general usually means solving the whole class of problems — much more valuable. So how to make it work? From quite early age I always tried to achieve maximum level of genericity in my reasoning, bringing me (sometimes unknowingly) to philosophical kind of contemplation. Later I learned the hard way it’s not the case with most of the people. Fortunately, I found one effective way: Examples. Choosing representative examples can make people understand the more general statement. Analyzing seemingly contradictory example is the most powerful of all. Of course, if one is indulged in reasoning with generic statements, that one should know one’s subject well.
For those who feel like “the speaker is vague” one good exercise can be: Before labeling the speaker’s concept as vague, stop for a moment and try to think if those abstract terms really make sense. If they are not, are there any significant counter-examples? Or maybe the speaker assumes too much? Or the you-the-listener missed some trivial statements in the very beginning, which are actually keys to understand the ideas? We all attended school (I hope) and schools make one exercise abstract-specific translations, both directions — almost everyone can do it with active listening.
Generic and specific can be very useful in brainstorm sessions. Something as simple as trying to find generic base for several concepts or deduce specific cases from generic idea can cover much bigger solution space than just going through specific ideas.
One more aspect of communication is whether to start with generic and then deduce specifics or the other way around? This may depend on the audience (scientists may have different preferences from chief officers), but short summary at the very beginning and a recap will not hurt.
Lastly, being aware of the genericity level in verbal conversations and improving one’s skills to be adaptive, can bring significant benefits for all communicating parties.
At this point readers not interested in the creator’s perspective can skip the rest of the article.
Can design be generic?
Without much ado: Yes. And in several ways: From conception of an idea to the design principles and methodology to the result itself. I believe 99% of everything designed benefits a lot from having some idea or set of rules as a generic base. This is obviously what gives the end result a sense of coherence (remember same origin?). And such a result is easier achieved by having some generic methodology. Even though design usually does not have strict rules, and artists do not necessarily think in the same way as mathematicians, generic foundations can be found in every designer’s way. The deeper the origin the better.
I’ve seen a definition of beauty as a sense of unknown goal. We can say a plant is beautiful, but we may not even guess that beauty comes from the necessity to catch as much sunlight as possible. And that “design principle” is quite generic as almost all plants share the goal.
It does not matter whether generic design patterns are found through years of practice or read from a book and consistently applied throughout the designer’s career, it’s the same generic-specific axis here again, which is so obvious that can be easily overlooked. It should be mentioned here as well that “same origin” is also important for the end-users: Materialized or instantiated design artifact will require less mental efforts due to its consistency (simpler mental model), which is the result of the designer having powerful abstraction in his head (or computer).
Here I would claim that at the end of the day thinking in generic terms is more economical cognitively, than dealing with a much larger number of specific, but unorganized things, for both creators and consumers.
In conclusion, design intentions, activities and artifacts — all of them hugely benefit from being generic-specific-balanced.
Here another portion of readers — not so technically savvy designers — can depart. Thank you for following this far!
What about generic programming?
First of all, there is already an established term, which for the purposes here is but one example of the practice of generic programming. I do not mean Generic Programming below. With all above written I think a whole article on it’s own is needed to elaborate on the details, so I can only highlight a few points here.
While coding ideas in some language, a programmer almost always is faced with the choice: Do I write more specific or more generic function to satisfy this requirement?
I must admit here, that this is quite a controversial topic. Superficially understood agile methodologies and methodologies like TDD (Test-driven development) advise the most specific possible implementation on the generic-specific axis. The argument is expressed as a well-known YAGNI principle: “You aren’t gonna need it”, where more generic implementation is automatically labelled as unwanted additional functionality. Developers are not supposed to accurately predict the way their system will evolve, so why spend extra effort now? Let’s be agile and solve only immediate problems.
And I agree with that: There is no point in finding generic solution if that solution is a mechanical sum of partial solutions or it’s finding is indeed hard. For example, at the moment of writing publisher of paper calendars may find it very stupid to add calendars for Mercury, Venus, Mars and the rest of the Solar system, even if the calendar is for the year 2219.
My argument here is that generic solutions may often require even less effort to implement, produce code of better quality, and bring more work satisfaction for the developers, which also positively impacts their productivity. The resulting code can become more maintainable due to some cases will have been covered when they arise. Generically made solutions (in a stricter sense I assumed above) can contain fewer bugs or defects can be spotted easier. For example, it’s much easier to see a problem in the expression: x + 2 * y — y = x — y than in: 3456732456 + 2 * 2358922763–2358922763 = 3456732456–2358922763.
There is still one problem here. In order to come up with generic solution software developer should be inclined (and be able) to produce such solutions in the first place, and understand the trade-offs. And so far, with or without the agile influences, masses of programmers and their managers see “generic” equals “costlier”, and continue to produce highly “hardcoded code” as a result! (Interesting, that mathematicians strive to achieve the exact opposite: To prove the general case, usually after partial cases are proven as sometimes a centuries long exercise.)
The above does not mean of course that we should start doing generic programming everywhere and forget the specific. Specificity can’t just disappear. I’d even said there is a “law of specificity preservation” in the software. My point is the balance needs to be restored. In some cases problem domain specificity can be easily expressed in a less powerful languages, even declaratively or with the help of domain-specific languages.
As a conclusion, when a more generic solution is naturally also a more compact than a partial one, there is no reason not to go for the generic solution. The developer’s prejudice, fear, and the resulting bias towards specific solutions, is the only problem to a better world.
You mentioned mathematics?
This is the shortest part: If you are a mathematician or practiced more or less serious math, then you are already at home with generic-specific axis. I hope you have found something useful in this article though.