The Merriam-Webster Dictionary defines “understand” as follows:
- to know the meaning of (something, such as the words that someone is saying or a language)
- to know how (something) works or happens
Within the context of most STEM (Science Technology Engineering Mathematics) classes, “understand” is applied to “concepts”. The Merriam-Webster Dictionary defines “understand” as follows:
- something conceived in the mind
- an abstract or generic idea generalized from particular instances
Both definitions are generally applicable in STEM classes. Both definitions suggest that a concept is not concrete or sensory-based. For example, the word “blue” (as in the color) is not considered a concept because it is sensory-based and concrete in the sense that the color can be defined using parameters in different color spaces.
A “deep understanding” is an understanding with its own special attributes. The Polytechnic University of Hong Kong has a simple document to compare the various level of understanding.
The fact that “understand” is a verb is significant because to understand is an action. Steps are to be taken.
As this article will explain, there are steps that one can take in order to understand concepts at a deeper level.
Except for few individuals who are either exceptionally gifted or exceptionally handicapped, most people have the capacity to understand concepts at a level deeper than what they are used to.
This is not unlike riding a bicycle. There are gifted cyclists who can take cycling to the next level, there are handicapped individuals who cannot ride a bicycle. The majority can ride a bicycle leisurely. Given some training, most people can ride a bicycle at an “amateur” level and gain health benefits.
To most of us, one aspect of “to understand” is not so much whether we can, but whether we choose to. In a larger scope, whether to understand a concept or not is an attitude (toward life and many other general things).
Why would anyone choose not to understand? To properly understand concepts requires an investment of time, and some people may decide that this extra time is not worth it.
This does not imply that people who choose not to spend the time to understand concepts are “lazy.” Indeed, many people who are hard working choose not to spend the extra time to understand concepts at a deeper level.
A theory to explain this is that some people evaluate using observable outcomes. The answer to the question of “am I doing a good job?” is, then, dependent on observable outcomes in the form of completed assignments, approval of peers and supervisors, and etc. In an academic environment, this translates to scores of homework assignments, and the amount of work done in a given amount of time.
In order to understand a concept in a deeper sense, the work done is not observable nor quantifiable using external measurements. To some people, this extra work is time wasted. However, a deeper understanding of concepts does have measurable benefits in the long run.
Symbols make up the most basic building blocks of languages in specific STEM areas. Symbols are useful because once familiarized, symbols are concise and precise language concepts. Although symbols are mechanical constructs for communication, the meaning of a symbol potentially requires some effort to understand. For example, in calculus, what does the \(d\) of \(\frac{dy}{dx}\) mean?
Definitions utilize symbols to express “macros”. A macro is, essentially, a shorthand so that the lengthy and long explanation of a concept can be simplified using a much more concise notation. A definition may make use of symbols, forming a composite concept out of concepts represented by each individual symbol. A definition exists for several reasons. Some definitions are meant to be shorthand, a more concise way to refer to a concept. Some definitions are meaningful by themselves.
Symbols and definitions are mechanical in the sense that they are very much rule-based and symbolic. However, they are utilized to express concepts. Understanding is not about the memorization of symbols and definitions, but the semantic connections between concepts as expressed by definitions and symbols.
Concepts are representations in the mind. As such, how a concept is represented is unique to each individual. While a concept may relate to specific experiences and/or sensory inputs, a concept is, ultimately, an abstraction. Furthermore, even though most concepts are associated with words, the associated words are meant for communication with another individual. The utilization of concepts in thinking may be wordless to some people.
Using a computer-related analogy, symbols define the lexicon of a language that is used to convey concepts in a specific subject area. Definitions utilize symbols to mechanically represent concepts in a written/verbal form for communication and archiving (as in books). Concepts are internal representations of definitions that are ready to be utilized in algorithms.
How does the understanding of concepts related to competency? The definition of competency is as follows according to the Merriam-Webster Dictionary:
- possession of sufficient knowledge or skill
In computer science, “knowledge” is often not an issue because with search engines, knowledge can be looked up and retrieved with ease. “Skill”, on the other hand, refers to a broad area of abilities. Skill is defined as
- the ability to use one’s knowledge effectively and readily in execution or performance
- a learned power of doing something competently : a developed aptitude or ability
“Competence”, in return is defined as follows:
- the ability to do something well
The dictionary definition of competency does not specify what skill or ability, it is just “doing something well.” In the context of the duty statement a software developer or software engineer, the skill/ability includes the following (according to Indeed.com:
None of these abilities relate to the proficiency of following a known sequence of steps. The two essential skills/abilities common to these duties are critical thinking and problem solving.
Critical thinking is
- the objective analysis and evaluation of an issue in order to form a judgment,
And, problem solving is
- the process of finding solutions to difficult or complex issues
One can think of critical thinking and problem solving as two sides of a coin. Critical thinking about objectively (using logic and reasoning) breaking down an issue into core concepts and establishing the interconnections of these core concepts. Problem solving, on the other hand, is the synthesis of plans, strategies, instructions and/or other specifications of methods to accomplish a specific and objectively defined goal.
Both critical thinking and problem solving involve not only an understanding, but a thorough and deep understanding of the subject matter.
Assessments are important in a class because they serve multiple important roles.
“The next step” includes both future classes as well as career competency. The understanding of dependent concepts is necessary for more advanced classes. For example, the concept of “subroutines (functions)” is required in order to understand the concept of a “method.”
In most STEM subject areas, concepts stack deeply. This means that there is a high level of stacking of concept dependency. For simplicity, one can look at the dependency of concepts as a chain, and each individual concept is a link in the chain. The overall strength of the chain is only as strong as the weakest link.
Passing an assessment is ultimately a confirmation that the person being assessed has shown sufficient competency and is ready for the next step(s). As such, “passing an assessment” has much significance.
The attitude toward assessment can impact the amount of energy an individual invests in understanding concepts.
Some people look at assessment as obstacles on their way to success. This attitude translates to self talks like the following:
There is absolutely nothing wrong with keeping goals, long term and short term, in mind. However, neglecting the proper means to achieve these goals is counter-productive.
Assessments are tools to help smooth out the path to success.
Let’s assume the grade of D or F is “nudged” to a C, a passing grade. What this is doing is to falsify the readiness of an individual for the next steps. An insufficient competency of the material of a dependent course means there is insufficient assumed and required competency in the next (depending) classes, or in the longer term, career.
While individual experiences may differ, discovering a severe lack of necessary competency in a job is nerve wrecking because of the risks of getting fired, or at least not being to advance. By comparison, retaking a class and/or needing one additional semester have relatively low impact.
Another question regarding the attitude toward “passing an assessment” is “what kind of judgement is it?”
A score/grade in an assessment or even a class is not a judgement of a person, or the character there of. It is a gauge of subject matter competency and readiness for the next step. No more, and no less. Many successful people have their share of getting low scores/grades, or even failing assessments and/or classes.
However, these people learn from these experiences:
Because the understanding of concepts has a representation that is internal to the mind, there is no direct methods to assess whether a person understands a concept or not.
The ability to recite definitions of a concept is not proof of understanding. Nor is the ability to follow prescribed steps.
There are several ways to assess the understanding of concepts.
Analysis: detailed examination of the elements or structure of something
As defined by the Foundation for Critical Thinking:
Critical thinking: the intellectually disciplined process of actively and skillfully conceptualizing, applying, analyzing, synthesizing, and/or evaluating information gathered from, or generated by, observation, experience, reflection, reasoning, or communication, as a guide to belief and action
One method to assess the level of understanding or comprehension of a system of concepts is via the logged output of analysis.
In computer programming, a common activity that is closely associated with analysis is debugging, especially the first phase of locating the source of a problem.
Analysis is about recognizing patterns in a situation, relating the patterns to concepts already learned, and form a coherent, logical and sound structure of concepts to characterize the situation. The ability of analyze reflects understanding/comprehension because the concepts need to be properly stored and indexed in one’s mind before they can be utilized in analysis.
Synthesis: the combination of ideas to form a theory or system
Problem solving: the act of defining a problem; determining the cause of the problem; identifying, prioritizing, and selecting alternatives for a solution; and implementing a solution
Another method to assess the level of understanding or comprehension of a system of concepts is via the synthesis of solutions to problems.
In computer programming, a common activity that is closely associated with synthesis is the creation of algorithms to achieve technical and well defined objectives.
Problem solving is about utilizing concepts already learned to form a coherent, logical and sound structure of steps, processes and procedures in order to convert/transport a situation to a goal.
But how do I start to understand concepts at a deeper level?
Let us use an example to illustrate this concept. The concept being discussed is xor
, and it is defined as follows:
\(X \oplus Y = (\neg X \wedge Y) \vee (X \wedge \neg Y)\)
Unless a person is already familiar with logical operators used by mathematicians, it takes a little bit of time to look up the definitions of the operators:
!
in C++&&
in C++||
in C++By connecting the symbols to their definitions, and also to known operators in C++, there are now multiple pathways to connect the mathematical symbols to concepts already understood.
Better yet, it also helps to re-express exclusive-or (\(\oplus\)) using C++ notation:
(X xor Y) == (!X && Y) || (X && !Y)
This last step is important because the act of authoring content helps the mind create pathways connecting concepts more so than just reading. Furthermore, the last step also creates content that can be reviewed later on.
To continue the example in the previous section, the last form (in C++ expression) can be tested using a simple program. Instead of taking the textbook or lecture for granted, a learner can write a simple C++ program to make sure that the expression (!X && Y) || (X && !Y)
reproduces the values of the truth table of exclusive-or.
Exploring ways to self-verify the understanding of concepts is crucial to deep understanding because the exploration itself helps to reinforce the connection between concepts. Thinking of ways to self-verify also exercises critical thinking, and it trains creativity (seeking alternatives).
Maintain the long term goals, but also think about how to refine the means to achieve those goals. In fact, from time to time, shelf the goals.
Why? This is because when the focus is on the goals, and there is bump on the road, the experience can lead to emotions like disappointment, helplessness, sadness, anger and etc. While it is important to acknowledge these feelings, as they are a part of the survival mechanism, it is also important to return to calmness for the next step (focusing on the means).
Meditation and mindfulness can help to achieve calm.
Once an individual is calm, the part of the brain that is capable of rational thinking and learning complex concepts can work again. This is when questions that involve “why” and “how” can be pondered upon.
To understanding concepts deeper is not just a skill, it is a way of life. This is not exactly something that will change overnight. There are steps that can help, but being immersed in a community of people who are curious can be a fun and effective way to gradually change a person’s attitude to one that enjoys understanding concepts at a deeper level.
There are several reasons why hanging out with curious people can help with the long term goal of improving the understanding of concepts. Curious people tend to judge and worry less, and they often foster an atmosphere of openness that is crucial to lifelong learning. Many curious people are also curious about how different people think differently, they can help other people diagnose the individual thinking process.
What is \(\frac{dx^2}{dx}\)? This is a calculus topic, but it is also a good example to utilize.
Being able to recall \(\frac{dx^2}{dx}=2x\) does not reflect any understanding.
Being able to apply the general rule that \(\frac{dnx^m}{dx}=nmx^{m-1}\) and substitute \(n=1\) and \(m=2\) does not reflect any understanding.
Understanding, in this example, involves first recognizing the notation as a short hand, and establish the following equality:
\[\frac{dx^2}{dx} = \lim_{\Delta x \rightarrow 0} \frac{(x+\Delta x)^2-x^2}{\Delta x}\]
But this expansion is no more than just a syntactic and mechanical step. Someone may notice a way to simplify this
\[\frac{(x+\Delta x)^2-x^2}{\Delta x} = \frac{x^2+2x\Delta x+\Delta x^2 - x^2}{\Delta x} = 2x+\Delta x\]
And then substituting \(\Delta x = 0\) results in \(2x\). But this is a terrible way to demonstrate an understanding of the original formula! Why? The substitution of \(\Delta x = 0\) reflects a non/mis-understanding of the concept of limits!
The symbol
\[\lim_{\Delta x \rightarrow 0} f(\Delta x)\]
becomes the next key concept. Of course, this concept (of limits) has its own definition, mechanically expanding it:
\[\lim_{w \rightarrow 0} f(w) = k\]
means
\[\forall \epsilon > 0 \in \mathbb{R}(\exists \delta \in \mathbb{R}(|f(w\pm \delta)-k|<\epsilon)) = \mathrm{true}\]
This, then, relies on the definition that \(\mathbb{R}\) is the set of all real numbers. But then the most interesting part is the \(\forall\) and \(\exists\) notations, meaning “for all” and “there exists”, respectively.
This is where mechanical expansion comes to an end. \(\forall v \in S(P(v))\) means “for all element \(v\) in set \(S\), the predicate \(P(v)\) is true”. \(\exists v \in S(P(v))\), on the other hand, means “there exists at least one element \(v\) in set \(S\) such that \(P(v)\) is true”.
What does a deep understanding mean at this point? Perhaps the question of whether \(\forall v \in \{\}(P(v))\) for some predicate (function that returns a boolean value) is true or not. This is an interesting question because it is essentially asking whether the statement “every apple in a basket of oranges is sweet” is true. There are no apples in the basket, so is the statement true or not?
As it turns out, the answer is that \(\forall v \in \{\}(P(v))\) is true regardless of how \(P(v)\) is defined. In other words, a for all statement (condition) is true by default if there are no applicable elements. The importance is to ask this question regarding the definition of \(\forall\). This involves an understanding of the concept, and the ability to think of extreme/boundary cases where the description in natural language is ambiguous or does not conclusively answers the question. The ability to come up with this question is a demonstration of critical thinking.
Because understanding is the ability to make logical connections between concepts and definition, certain tools can help a person make and maintain those connections.
This section outlines the criteria to evaluate a tool:
A graphical tool is, at first glance, more intuitive and therefore “better.” However, for the same reason that flowcharts are seldom used in actual programming, a graphical concept map tool has severe limitation when the number of concepts grow.
markdown
markdown
is a shorthand of HTML (Hypertext Markup Language). Compared to HTML, markdown
formatting is convenient and intuitive. However, markdown
is still a plain-text language, this means any text editor can be used to author markdown
documents.
There are many ways to use markdown
to write and maintain notes. There are some self-contained products, and there are many homebrew products as well. Self-contained products, such as Joplin, are easier to use, but at the same time has a number of restrictions.
There are many tools to support homebrew markdown
authoring. Technically, authoring is easy because any text editor will do. However, there are no native markdown
viewer (much like Firefox is a viewer of HTML). This means that even though it is easy to use markdown
to author and create notes, there are relative few ways to review such notes.
pandoc
is a tool that converts between various formats of text. pandoc
can convert markdown
to HTML for viewing/reviewing purposes. Furthermore, pandoc
is an open architecture, and there are many filters created to expand on what pandoc
can process. Compared to “standard” markdown
, pandoc
can include other files, create numbered section headers, along with quite a few additional enhancements.
While markdown
requires a little bit of overhead to learn, its has a wide application in computer-related fields. For example, the README file of a github project is written in markdown
.
One of the most important point to author material to help with deep understanding is the ability to link concepts. Markdown accepts HTML, and therefore has much flexibility.
The following is a <div>
block template that has an anchor for referencing:
<div id="TODO-id" style="border: ridge; padding: 2px">
<div style="border: dotted thin; font-style: italic; color: gray ">#TODO-id</div>
</div>
The idea is to clone this template, then change the id
from TODO-id
to something more meaningful as the name of the anchor. The following is an example of a simple linkable <div>
section:
<div id="example1" style="border: ridge; padding: 2px">
<div style="border: dotted thin; font-style: italic; color: gray ">#example1</div>
`<div>` block that has
This is just an example or an anchored `id` of `example1`. Within the same document, a hyperlink
an `[link description](#example1)`, which
to this block is simply [link description](#example1).
is rendered as
Note that Markdown syntax still works here. Equations like $E=mc^2$ `<div>` block.
can be used within the
</div>
When rendered, it appears as follows:
This is just an example or an anchored <div>
block that has an id
of example1
. Within the same document, a hyperlink to this block is simply [link description](#example1)
, which is rendered as link description.
Note that Markdown syntax still works here. Equations like \(E=mc^2\) can be used within the <div>
block.
A <div>
block is a part of a file, the next level of organization is file-based. There are a few ways to group concept <div>
blocks into files.
20220701.md
for the notes take on 2022 July firstmermaid
is an extension of Markdown that can be used to specify a graph using text. While mermaid
is not suitable for large and complex graphs, it is quite useful for smaller ones. The best feature of mermaid
is that it automatically figures out how best to draw a graph.
As a result, mermaid
can be used to specify a graph that outlines the dependency of concepts.
The code of the above diagram is as follows:
```{.mermaid format=svg}
graph TD
diff(differentiation)
lim(limit)
quant(quantifiers)
algor(algorithm)
universal(universal quantifier)
existential(existential quantifier)
diff -->| depends on | lim
lim -->| depends on | quant
quant --> | includes | universal
quant --> | includes | existential
quant --> | can be implemented by | algor
click difff "https://power.arc.losrios.edu" "this is a link"
```
When mermaid
is used in conjunction with pandoc
as a part of a markdown
document, the ability to create hyperlinks or interaction is lost. Some other conversion tool may preserve the interactive aspect of mermaid
nodes.
In order to overcome the problem of pandoc
pre-rendering mermaid
graphs and therefore not supporting tool-tips and clicking, those who feel comfortable with HTML and a little bit of client-side Javascript coding can get around this problem.
First, include the following in the YAML header:
header-includes: <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js" type="text/javascript"></script>
This line is needed in order to bring in the JavaScript rendering JavaScript code.
Next, somewhere in the markdown document, include (just once in the document) the initialization of mermaid
and define a function for convenience as follows:
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.js" type="text/javascript"></script>
<script>
.initialize(
mermaid
{startOnLoad: true,
flowchart:
{htmlLabels: true,
useMaxWidth: false
,
}securityLevel: 'loose'
};
)function mirt(id, mm)
{document.getElementById(id).innerHTML = mm
}</script>
Then for each mermaid
graph, create a <div>
and the associated JavaScript code to specify the actual mermaid
code
<div class="mermaid" id="dynamicMermaid">
</div>
<script>
mirt('dynamicMermaid',`
flowchart LR
b --> a
click b "https://power.arc.losrios.edu" "hover to see this tool-tip"
`)
</script>
The result is rendered as follows. Note how hovering over node ‘b’ shows the tool-tip, and clicking node ‘b’ links to the anchor specified
Note that in order for the tool-tip to display properly, you need to define a CSS (cascading Style Sheet) entry. The following is the content of the CSS file that you need to include:
.label {
font-family: 'trebuchet ms', verdana, arial;
color: #333;
}
.node rect,
.node circle,
.node ellipse,
.node polygon {
fill: white;
black;
stroke: 1px;
stroke-width:
}
.node.clickable {
cursor: pointer;
}
.arrowheadPath {
fill: black;
}
.edgePath .path {
black;
stroke: 1.5px;
stroke-width:
}
.edgeLabel {
background-color: gray;
}
.cluster rect {
fill: !important;
!important;
stroke: 1px !important;
stroke-width:
}
.cluster text {
fill: black;
}
.mermaidTooltip {
divposition: absolute;
text-align: center;
max-width: 200px;
padding: 2px;
font-family: 'trebuchet ms', verdana, arial;
font-size: 12px;
background: center lightgray;
border: 1px solid gray;
border-radius: 2px;
pointer-events: none;
z-index: 100;
}
You can download a copy of the CSS file.
Once you have the framework set up, embedding mermaid
in client-side JavaScript is still cumbersome, but it does provide the ability to render mermaid
graphs on-the-fly and the ability to have mermaid
nodes to act as hyperlinks.
Google Doc is another platform that is quite useful for taking notes in the context of improving the understanding of concepts. Compared to pandoc
(which implements markdown
), Google Doc is a commercial (but free of charge) and polished WYSIWYG tool.
Compared to markdown
and pandoc
, Google Doc has a shallow learning curve. This can be an important factor because the overhead of learning markdown
and how to use pandoc
can be overwhelming unless a person has time to invest in the learning process.
Furthermore, Google Doc is WYSIWYG compared to the “this is really a markup language” nature of markdown
. mermaid
is a more complex language to specify graphs, but the equivalent Google Doc feature to create diagrams is intuitive and has no language to learn.
Google Doc is cloud-based. The advantage is that everything authored is saved with high availability and security automatically. Furthermore, it is possible to continue the editing of the material from just about any modern computing device (mobile devices included) as long as there is Internet access.
pandoc
can be installed on a server computer, and offer some of the advantages of Google Doc. However, a server computer still requires maintenance and updates.
From a different perspective, however, pandco
and markdown
has the advantage of being usable on older computers. All the CLI (command-line interface) tools required to author and publish content are efficient in terms of computer resources (RAM, CPU, mass storage, display). Furthermore, except for publication and back up purposes, there is no need to use the Internet. One can quite comfortably continue to work on documents using a locally installed pandoc
with no Internet access.
Efficiency refers to how much note authoring or editing that can be done over a period of time. Google Doc has the initial advantage, but markdown
and pandoc
may catch up and become more efficient than Google Doc.
This is due to several reasons. First of all, markdown
is essentially simplified HTML. There is no need to access any menu or rely on mouse clicks to author content. While the efficiency difference of using a pointing device may seem negligible to most, it is significant. To some people, once markdown
and using a competent text editor like vi
or emacs
become muscle memory, the act of moving one’s hand to use a pointing device can be distracting. Distracting a line of thought is more disruptive when taking notes of more abstract and complex concepts.
Indeed, the original concept of vi
(the text editor) is to rely only on the main keyboard area to perform all operations. This includes page-up, page-down, home to the beginning or move to the end of a document. There is no need to move one’s hand to use the cursor keys, the home
key, the end
key, and etc. Despite the availability of more GUI and more WYSIWYG text editor, vi
continues to be one of the core editors used by programmers.