Let’s consider a hierarchy of learning that consists of four groups.
Consider, if you will, the different nature of learning in each of these groups. We could take almost any subject, but let’s use German language, and compare it to software development. Natural languages are close enough to programming languages for the analogy to stand.
When you enter German 101, you start with the most basic rules of grammar and pronunciation. You learn that plurals end in “en.” Your learning is nearly 100% rules-guided, and built up with rote practice. You memorize the alphabet. You need to be told what to do and say.
In software development, when you’re a novice, you’re just learning the rules of syntax and the basic structure of program flow. An introductory tutorial is helpful. You may not understand the expressive power of the language yet. You begin reading the language reference.
Questions at this level need straightforward, prescriptive answers.
By the time you’re far enough along to be called an Inquirer, you’re able to read and understand common German phrases and you’re picking up a few idioms. You can ask simple questions in German. Your learning is still mostly memorization, but your knowledge is developing within the framework of the rules you learned in the first year. You might diagram sentences. You might construct simple original paragraphs. Your pronunciation is improving.
If you’re a programmer, your title is probably “junior,” and you’re advancing under the guidance of senior colleagues. You have identified several good learning resources, and you may be taking a class in the language of choice. You understand and practice the SSCCE. You may need some help, but you can write small programs that do something interesting or useful. Through experience, you have come to understand the necessity and utility of test data. You may benefit from guidance in design and program logic. You have begun to create your own library of programming examples.
Questions at this level benefit from code examples, especially with comments.
As you achieve competence in German language, the learning process changes. The rules you learned earlier are no longer in the forefront; they have become the underpinnings of your expanding knowledge. You think in the language and you begin to infer meaning in unfamiliar vocabulary. You read literature and form opinions about the viewpoints of the authors. In this level of learning, special exceptions and cultural sensitivity are useful cues; you no longer need to hear more repetition of the basics.
In software development, you’re able to do some original research. You practice the principles of Object-Oriented Design and use Unit Tests. You’ve probably put aside the SSCCE in favor of the MCVE. You’re probably using version control, and you’re conversant in the principles of Agile methodologies. You know how to catch and correct most of your own errors, and the nature of your errors changes. You no longer make errors of design or logic; most of your errors are simply typographical.
Questions at this level are often exploratory or complex and may be best answered with links to reference materials.
At the expert level you can write fluent German poetry, and you can teach the language. Your learning now consists mostly of conversations and exchange of ideas. You have read most or all of the greatest books. Cultural and current-events issues dominate your learning process, as you learn by doing. You are capable of linguistic experiments and independent study. You can write speeches for native speakers.
As an expert software developer, you’re able to compare and translate solutions between programming languages. You can be constructively critical of the shortcomings in your languages of choice. You can use modern design principles to produce innovative solutions to common problems. You know why Eric Lippert and Taylor Otwell are considered important thinkers. Your testing framework uses Mock Objects to advantage. You may be a contributor to open-source projects. You can lead and advise a team of software developers.
Questions at this level are usually looking for guidance about industry standards and best practices.
A NICE Approach to Online Forum Questions
This NICE hierarchy of learning seems applicable to the questions we see in online forums. Novice and Inquirer questions need succinct “do this” responses. Questions from the more advanced viewpoints usually need more nuanced responses, since they probably already tried the “do this” approaches. If we know the Author’s level of understanding it’s usually easy to craft an appropriate response.
Ways of Misunderstanding Questions and Answers
The most frequent misunderstandings seem to arise around questions that sound like they come from one NICE level when they actually come from a level above or below. A question from a Competent Author with a typographical error may get answered as if it were a Neophyte question, and the Author may feel insulted. Nobody wants that! A question from a Inquirer with some (possibly misused) technical terminology may get answered with truly detailed and Expert guidance, and the Author may become frustrated and confused, or a technical dialog may arise over irrelevant and misunderstood parts of the question. These misunderstandings are not infrequent — we are often separated by languages and time zones.
I find the absence of this hierarchical frame of reference to be the single biggest reason that answers (and people) can be misunderstood in the online forums. Therefore I’d like to propose a solution.
Use the NICE Principles to Clarify Our Perspectives
When you’re the Author of a question consider self-rating your knowledge on the NICE scale, and include a link to this page. When you read a question that could have different answers depending on the Author’s knowledge base, consider sharing this article. A common understanding of our perspectives can save us huge amounts of time. And it will make the forums a friendlier place to ask and answer questions.
Thanks for reading!