Debugging, The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems

Overall

Software Engineers spend a huge amount of their career on debugging existing code: production or developing, own code or vendor packages. Yet people don’t spend as much time reason about the methodology behind these time spent. David J. Agans set out to address this issue from his experiences of both hardware and software.

The Nine Indispensable Rules

  • Understand the System
  • Make It Fail
  • Quit Thinking and Look
  • Divide and Conquer
  • Change One Thing at a Time
  • Keep an Audit Trail
  • Check the Plug
  • Get a Fresh View
  • If You Didn’t Fix It, It Ain’t Fixed

Since all projects are extremely diverse, the debugging rules need to be highly abstracted out. Even harder, debugging is such a unique kind of activity, that it is as much of a creation process as designing the product itself. In many ways, the author compares it to detective fictions.

Scientific method fails to capture such creativity, and the best we have got is a series of guidelines from various personal perspectives. The author did a great job to summarize a huge amount of experiences into 9 simple and powerful sentences.

Share Comments

On Picking Code Editor

Motivation

Happy July 4th! During the holiday I’ve decided to take another look at the new shiny Atom/Nuclide code editor. Although I’ve spend a couple of years on Sublime test, and a year or so on Emacs, exploring great tools it still great fun.

After poking around for three hours, it turns out to be a NO. And I would like to reason about it.

As discussed in a previous post, the majority of the time spent in text editors is actually browsing around. Atom really shines at displaying code in a beautiful GUI, and it offers fuzzy search of file names that are on par with all of other editors. However when it comes to defining clear modal contexts, it falls short.

Vim/emacs are defined with clear context in mind, which allows maximum knowledge transfer after one learns about the basic of one context. If you are in a grep-mode, you can expect all the shortcuts (most important ones are ‘n’ and ‘p’) to work in that context. In Atom it’s a chaos of interfaces. Each plugin tries to define some unique UI that does not follow the convention of the others. And the shared context is nowhere defined.

Command line efficiency

I spend a great amount of my day working in terminal window, which is a great time-saver. For almost all known tools, command-line versions have less bugs and run much faster. The performance for Emacs to open a file is noticeably faster than atom. Same for syntax highlighting and automatic styling code.

For finding hidden features in the editor, all editors evolved into some search solution. On Atom this is achieved with command palette fuzzy search, on Emacs this is done via ido.el/helm.el. In a GUI setting Atom wins for much easier access to commands and descriptions for each selection.

After all, coding speed is limited in thoughts, not tools

For over 50 years, engineers are stuck on keyboards and they have yet to discover/input a better input device. If this does not change, the efficiency for human-code interaction is not likely to see a dramatic change simply from improving current tools.

In a nutshell, software is purely thought stuff. And for most engineers, the real bottleneck for productivity is actually the speed of organizing thoughts. It would certainly be easier with better tools. But as far as thoughts are organized into texts, mainstream editors are almost equal at efficiency.

Share Comments

Code - The Hidden Language of Computer Hardware and Software - Charles Petzold

Synopsis

Yet another classics on computer theory. Charles Petzold is famous for ‘Programming Windows’ series. In this one he set out to explain how code is central to transmitting and processing information. ‘Code’ is pun-intended here.

This is not a common textbook that explains how electrical digital computers work, even though the author achieved it. The book is organized from a scenarios-driven way; aims at deriving how computers evolve instead of showing the computer architecture as of today. How is code invented the way it currently is? How does computer came to know and use it? And how do human use code to communicate between each other and other information processor?

Code in Life

Beyond computers, code is generalized into abstract vehicles that carry information under contexts. The author has shown how civilization has derived more than natural language: drawings, Morse codes, Braille, binary codes, and lengthy modern software. At certain points in history, these inventions serve a purpose of recording, conveying and processing info between various entities. And to the latest and most theoretical, bits as the building blocks of currently comprehended information. Computers are no longer only about numbers and arithmetic, they are abstracted to a much higher level of autonomous entities in the worlds of bits.

Share Comments

JavaScript: The Good Parts - Douglas Crockford

Overall

Javascript being ‘the most misunderstood’ language, really deserves a good book. This is the closest people have got to be ‘the only’ book you need for Javascript. The author successfully explain the fundamentally difference of the language’s prototype-oriented nature. Therefore fundamentally changes the reader’s perspective on the structure and mentality of programming in it. Definitely a must-see.

Where it shines

The book does a good job of explaining all the components of the ECMA standardized version of javascript. Especially explains the often confusing variable scope: variables don’t have block scope, they are either global variables or inside a function scope. This is a result of the availability of direct references to global variables at any level of nested functions.

The author also spend great length to describe the prototype model of OOP. This is another attractive feature of Javascript that also makes it hard to grasp on. However when familiarized, this becomes so handy that the more commonly used class-driven OOP looks very verbose.

Share Comments

The Algorithm Design Manual - Steven S. Skiena

Overall

Though named a ‘manual’, it’s actually a very good textbook for the introduction of algorithms class.

In the first half of the book, the author gives a very good overview of all the types of algorithm questions for a student’s angle. And it clearly states the book’s focus–combinatorial problems. The most value in the book comes from the second half, where it lays out the different types of problems and useful resources. Particularly useful to a less experienced software engineer, all problems the book describe have book references and implementations available in link.

Definitely worth reading a second time, and keep it close by hand! More, a lot of exercises have solutions here: http://www.algorithm.cs.sunysb.edu/algowiki/index.php/Main_Page

Share Comments

Effective learning: Twenty rules of formulating knowledge

Overall

This article will help you overcome one of the greatest difficulties you will face when trying to accelerate learning: formulating knowledge.

The speed of learning will depend on the way you formulate the material. The same material can be learned many times faster if well formulated! The difference in speed can be stunning!

The rules are listed in the order of importance. Those listed first are most often violated or bring most benefit if complied with!

There is an underlying assumption that you will proceed with learning using spaced repetition, i.e. you will not just learn once but you will repeat the material optimally.

Original article by Dr Piotr Wozniak

Summary

Here are the twenty rules of formulating knowledge. You will notice that the first 16 rules revolve around making memories simple! Some of the rules strongly overlap. For example: ‘do not learn if you do not understand’ is a form of ‘applying the minimum information principle’:

  • Do not memorize if you do not understand, learn before you memorize - build the picture of the whole before you dismember it into simple items. If the whole shows holes, review it again!
  • Build upon the basics - never jump both feet into a complex manual because you may never see the end. Well-remembered basics will help the remaining knowledge easily fit in.
  • Stick to the minimum information principle. Optimize wording - if you continue forgetting an item, try to make it as simple as possible. Like you reduce mathematical equations, you can reduce complex sentences into smart, compact and enjoyable maxims.
  • Cloze deletion is easy and effective - completing a deleted word or phrase is not only an effective way of learning. Most of all, it greatly speeds up formulating knowledge and is highly recommended for beginners.
  • Use mnemonic techniques, such as imagery A picture is worth a thousand words. Learn how to convert memories into funny pictures. Read about peg lists and mind maps.
  • Graphic deletion is as good as cloze deletion - obstructing parts of a picture is great for learning anatomy, geography and more.
  • Avoid sets - larger sets are virtually un-memorizable unless you convert them into enumerations!
  • Avoid enumerations - enumerations are also hard to remember but can be dealt with using cloze deletion
  • Combat interference - even the simplest items can be completely intractable if they are similar to other items. Use examples, context cues, vivid illustrations, refer to emotions, and to your personal life.
  • Refer to other memories - building memories on other memories generates a coherent and hermetic structure that forgetting is less likely to affect. Build upon the basics and use planned redundancy to fill in the gaps.
  • Personalize and provide examples - penalization might be the most effective way of building upon other memories. Your personal life is a gold mine of facts and events to refer to. As long as you build a collection for yourself, use penalization richly to build upon well established memories.
  • Rely on emotional states - emotions are related to memories. If you learn a fact in the sate of sadness, you are more likely to recall it if when you are sad. Some memories can induce emotions and help you employ this property of the brain in remembering.
  • Context cues simplify wording - providing context is a way of simplifying memories, building upon earlier knowledge and avoiding interference.
  • Redundancy does not contradict minimum information principle - some forms of redundancy are welcome. There is little harm in memorizing the same fact as viewed from different angles. Passive and active approach is particularly practicable in learning word-pairs. Memorizing derivation steps in problem solving is a way towards boosting your intellectual powers!
  • Provide sources - sources help you manage the learning process, updating your knowledge, judging its reliability, or importance.
  • Provide date stamping - time stamping is useful for volatile knowledge that changes in time.
  • Prioritize - effective learning is all about prioritizing. In incremental reading you can start from badly formulated knowledge and improve its shape as you proceed with learning. If needed, you can review pieces of knowledge again, split it into parts, reformulate, re-prioritize, or delete.

Do not learn if you do not understand

Trying to learn things you do not understand may seem like an utmost nonsense. Still, an amazing proportion of students commit the offense of learning without comprehension. Very often they have no other choice! The quality of many textbooks or lecture scripts is deplorable while examination deadlines are unmovable.

If you are not a speaker of German, it is still possible to learn a history textbook in German. The book can be crammed word for word. However, the time needed for such “blind learning” is astronomical. Even more important: The value of such knowledge is negligible. If you cram a German book on history, you will still know nothing of history.

The German history book example is an extreme. However, the materials you learn may often seem well structured and you may tend to blame yourself for lack of comprehension. Soon you may pollute your learning process with a great deal of useless material that treacherously makes you believe “it will be useful some day”.

Start with the big picture

Before you proceed with memorizing individual facts and rules, you need to build an overall picture of the learned knowledge. Only when individual pieces fit to build a single coherent structure, will you be able to dramatically reduce the learning time.

This is closely related to the problem comprehension mentioned in Rule 1: Do not learn if you do not understand. A single separated piece of your picture is like a single German word in the textbook of history. Do not start from memorizing loosely related facts! First read a chapter in your book that puts them together (e.g. the principles of the internal combustion engine). Only then proceed with learning using individual questions and answers (e.g. What moves the pistons in the internal combustion engine?), etc.

Build upon the basics

The picture of the learned whole (as discussed in Rule 2: Learn before you memorize) does not have to be complete to the last detail. Just the opposite, the simpler the picture the better. The shorter the initial chapter of your book the better. Simple models are easier to comprehend and encompass. You can always build upon them later on.Do not neglect the basics. Memorizing seemingly obvious things is not a waste of time!

Basics may also appear volatile and the cost of memorizing easy things is little. Better err on the safe side. Remember that usually you spend 50% of your time repeating just 3-5% of the learned material! Basics are usually easy to retain and take a microscopic proportion of your time. However, each memory lapse on basics can cost you dearly!

Stick to the minimum information principle

The material you learn must be formulated in as simple way as it is.

Simple is easy

By definition, simple material is easy to remember. This comes from the fact that its simplicity makes is easy for the brain to process it always in the same way. Imagine a labyrinth. When making a repetition of a piece of material, your brain is running through a labyrinth (you can view a neural network as a tangle of paths). While running through the labyrinth, the brain leaves a track on the walls. If it can run in only one unique way, the path is continuous and easy to follow. If there are many combinations, each run may leave a different trace that will interfere with other traces making it difficult to find the exit. The same happens on the cellular level with different synaptic connections being activated at each repetition of complex material.

Repetitions of simple items are easier to schedule

I assume you will make repetitions of the learned material using optimum inter-repetition intervals. If you consider an item that is composed of two sub-items, you will need to make repetitions that are frequent enough to keep the more difficult item in memory. If you split the complex item into sub-items, each can be repeated at its own pace saving your time. Very often, inexperienced students create items that could easily be split into ten or more simpler sub-items! Although the number of items increases, the number of repetitions of each item will usually be small enough to greatly outweigh the cost of (1) forgetting the complex item again and again, (2) repeating it in excessively short intervals or (3) actually remembering it only in part!
Here is a striking example:

Ill-formulated knowledge - Complex and wordy
Q: What are the characteristics of the Dead Sea?A: Salt lake located on the border between Israel and Jordan. Its shoreline is the lowest point on the Earth's surface, averaging 396 m below sea level. It is 74 km long. It is seven times as salty (30% by volume) as the ocean. Its density keeps swimmers afloat. Only simple organisms can live in its saline waters

Well-formulated knowledge - Simple and specific
Q: Where is the Dead Sea located?
A: on the border between Israel and JordanQ: What is the lowest point on the Earth's surface?
A: The Dead Sea shorelineQ: What is the average level on which the Dead Sea is located?
    A: 400 meters (below sea level)
Q: How long is the Dead Sea?
A: 70 km
Q: How much saltier is the Dead Sea than the oceans?
A: 7 times
Q: What is the volume content of salt in the Dead Sea?
A: 30%
Q: Why can the Dead Sea keep swimmers afloat?
A: due to high salt content
Q: Why is the Dead Sea called Dead?
A: because only simple organisms can live in it
Q: Why only simple organisms can live in the Dead Sea?
A: because of high salt content

You might want to experiment and try to learn two subjects using the two above approaches and see for yourself what advantage is brought by minimum information principle. This is particularly visible in the long perspective, i.e. the longer the time you need to remember knowledge, the more you benefit from simplifying your items!

Note in the example above how short the questions are. Note also that the answers are even shorter! We want a minimum amount of information to be retrieved from memory in a single repetition! We want answer to be as short as imaginably possible!

You will notice that the knowledge learned in the ill-structured example is not entirely equivalent to the well-structured formulation. For example, although you will remember why the Dead Sea can keep swimmers afloat, you may forget that it at all has such a characteristic in the first place! Additionally, rounding 396 to 400 and 74 to 70 produces some loss of information. These can be remedied by adding more questions or making the present ones more precise.

You will also lose the ability to fluently recite the description of the Dead Sea when called up to the blackboard by your teachers. I bet, however, that shining in front of the class is not your ultimate goal in learning. To see how to cope with recitations and poems, read further (section devoted to enumerations)

Cloze deletion is easy and effective

Cloze deletion is a sentence with its parts missing and replaced by three dots. Cloze deletion exercise is an exercise that uses cloze deletion to ask the student to fill in the gaps marked with the three dots. For example,

Bill …[name] was the second US president to go through impeachment.

If you are a beginner and if you find it difficult to stick to the minimum information principle, use cloze deletion! If you are an advanced user, you will also like cloze deletion. It is a quick and effective method of converting textbook knowledge into knowledge that can be subject to learning based on spaced repetition. Cloze deletion makes the core of the fast reading and learning technique called incremental reading.

Use imagery

Visual cortex is that part of the brain in which visual stimuli are interpreted. It has been very well developed in the course of evolution and that is why we say one picture is worth a thousand words. Indeed if you look at the number of details kept in a picture and the easiness with which your memory can retain them, you will notice that our verbal processing power is greatly inferior as compared with the visual processing power.

The same refers to memory. A graphic representation of information is usually far less volatile. Usually it takes much less time to formulate a simple question-and-answer pair than to find or produce a neat graphic image. This is why you will probably always have to weigh up cost and profits in using graphics in your learning material. Well-employed images will greatly reduce your learning time in areas such as anatomy, geography, geometry, chemistry, history, and many more.

The power of imagery explains why the concept of Tony Buzan’s mind maps is so popular. A mind map is an abstract picture in which connections between its components reflect the logical connections between individual concepts.

Use mnemonic techniques

Mnemonic techniques are various techniques that make remembering easier. They are often amazingly effective. For most students, a picture of a 10-year-old memorizing a sequence of 50 playing cards verges on discovering a young genius. It is very surprising then to find out how easy it is to learn the techniques that make it possible with a dose of training. These techniques are available to everyone and do not require any special skills!

Before you start believing that mastering such techniques will provide you with an eternal solution to the problem of forgetting, be warned that the true bottleneck towards long-lasting and useful memories is not in quickly memorizing knowledge! This is indeed the easier part. The bottleneck lies in retaining memories for months, years or for lifetime!

There have been dozens of books written about mnemonic techniques. Probably those written by Tony Buzan are most popular and respected. You can search the web for keywords such as: mind maps, peg lists, mnemonic techniques, etc.

Experience shows that with a dose of training you will need to consciously apply mnemonic techniques in only 1-5% of your items. With time, using mnemonic techniques will become automatic!

Graphic deletion is as good as cloze deletion

Graphic deletion works like cloze deletion but instead of a missing phrase it uses a missing image component. For example, when learning anatomy, you might present a complex illustration. Only a small part of it would be missing. The student’s job is to name the missing area. The same illustration can be used to formulate 10-20 items! Each item can ask about a specific sub-component of the image. Graphic deletion works great in learning geography!Exemplary graphic deletion:

Avoid sets

A set is a collection of objects. For example, a set of fruits might be an apple, a pear and a peach. A classic example of an item that is difficult to learn is an item that asks for the list of the members of a set. For example: What countries belong to the European Union? You should avoid such items whenever possible due to the high cost of retaining memories based on sets.

If sets are absolutely necessary, you should always try to convert them into enumerations. Enumerations are ordered lists of members (for example, the alphabetical list of the members of the EU). Enumerations are also hard to remember and should be avoided. However, the great advantage of enumerations over sets is that they are ordered and they force the brain to list them always in the same order. An ordered list of countries contains more information than the set of countries that can be listed in any order. Paradoxically, despite containing more information, enumerations are easier to remember. The reason for this has been discussed earlier in the context of the minimum information principle: you should always try to make sure your brain works in the exactly same way at each repetition.

In the case of sets, listing members in varying order at each repetition has a disastrous effect on memory. It is nearly impossible to memorize sets containing more than five members without the use of mnemonic techniques, enumeration, grouping, etc. Despite this claim, you will often succeed due to subconsciously mastered techniques that help you go around this problem. Those techniques, however, will fail you all too often. For that reason: Avoid sets! If you need them badly, convert them into enumerations and use techniques for dealing with enumerations

Avoid enumerations

Enumerations are also an example of classic items that are hard to learn. They are still far more acceptable than sets. Avoid enumerations wherever you can. If you cannot avoid them, deal with them using cloze deletions (overlapping cloze deletions if possible). Learning the alphabet can be a good example of an overlapping cloze deletion.

Combat interference

When you learn about similar things you often confuse them. For example, you may have problems distinguishing between the meanings of the words historic and historical. This will even be more visible if you memorize lots of numbers, e.g. optimum dosages of drugs in pharmacotherapy. If knowledge of one item makes it harder to remember another item, we have a case of memory interference. You can often remember an item for years with straight excellent grades until … you memorize another item that makes it nearly impossible to remember either! For example, if you learn geography and you memorize that the country located between Venezuela, Suriname and Brazil is Guyana, you are likely to easily recall this fact for years with just a couple of repetitions. However, once you add similar items asking about the location of all these countries, and French Guyana, and Colombia and more, you will suddenly notice strong memory interference and you may experience unexpected forgetting. In simple terms: you will get confused about what is what.

Interference is probably the single greatest cause of forgetting in collections of an experienced user of flash cards. You can never be sure when it strikes, and the only hermetic procedure against it is to detect and eliminate. In other words, in many cases it may be impossible to predict interference at the moment of formulating knowledge. Interference can also occur between remotely related items like Guyana, Guyard and Guyenne, as well as Guyana, kayman and … aspirin. It may work differently for you and for your colleague. It very hard to predict.

Optimize wording

The wording of your items must be optimized to make sure that in minimum time the right bulb in your brain lights up. This will reduce error rates, increase specificity, reduce response time, and help your concentration.

Less optimum item: cloze deletion that is too wordy
Q: Aldus invented desktop publishing in 1985 with PageMaker. Aldus had little competition for years, and so failed to improve. Then Denver-based ... blew past. PageMaker, now owned by Adobe, remains No. 2
A: Quark

Better item: fewer words will speed up learning
Q: Aldus invented desktop publishing in 1985 with PageMaker but failed to improve. Then ... blew past (PageMaker remains No. 2)
A: Quark

Or better:
Q: Aldus invented desktop publishing with PageMaker but failed to improve. It was soon outdistanced by ...
A: Quark

Or better:
Q: PageMaker failed to improve and was outdistanced by ...
A: Quark

Or better:
Q: PageMaker lost ground to ...
A: Quark

Note that the loss of information content in this item is inconsequential. During repetition you are only supposed to learn the name: Quark.

You should not hope that the trailing messages on the ownership of PageMaker and the year of its development will somehow trickle to your memory as a side effect. You should decide if the other pieces of information are important to you and if so, store them in separate items (perhaps reusing the above text, employing cloze deletion again and optimizing the wording in a new way). Otherwise the redundant information will only slow down your learning process!

Refer to other memories

Referring to other memories can place your item in a better context, simplify wording, and reduce interference. In the example below, using the words humble and supplicant helps the student focus on the word shamelessly and thus strengthen the correct semantics. Better focus helps eliminating interference.

Secondly, the use of the words humble and supplicant makes it possible to avoid interference of cringing with these words themselves. Finally, the proposed wording is shorter and more specific. Naturally, the rules basics-to-details and do not learn what you do not understand require that the words humble and supplicant be learned beforehand (or at least at the same time)

Item subject to strong interference
Q: derog: adj: shamelessly conscious of one's failings and asking in a begging way
A: cringing

Item that uses interfering memories to amplify the correct meaning
Q: derog: adj: shamelessly humble and supplicant
A: cringing

Personalize and provide examples

One of the most effective ways of enhancing memories is to provide them with a link to your personal life. In the example below you will save time if you use a personal reference rather than trying to paint a picture that would aptly illustrate the question

Harder item
Q: What is the name of a soft bed without arms or back?
A: divan

Easier item
Q: What is the name of a soft bed without arms or back? (like the one at Robert's parents)
A: divan

If you remember exactly what kind of soft bed can be found in Robert’s parents’ apartment you will save time by not having to dig exactly into the semantics of the definition and/or looking for an appropriate graphic illustration for the piece of furniture in question. Personalized examples are very resistant to interference and can greatly reduce your learning time

Rely on emotional states

If you can illustrate your items with examples that are vivid or even shocking, you are likely to enhance retrieval (as long as you do not overuse same tools and fall victim of interference!). Your items may assume bizarre form; however, as long as they are produced for your private consumption, the end justifies the means. Use objects that evoke very specific and strong emotions: love, sex, war, your late relative, object of your infatuation, Linda Tripp, Nelson Mandela, etc. It is well known that emotional states can facilitate recall; however, you should make sure that you are not deprived of the said emotional clues at the moment when you need to retrieve a given memory in a real-life situation

Harder item
Q: a light and joking conversation
A: banter
Easier item
Q: a light and joking conversation (e.g. Mandela and de Klerk in 1992)
A: banter

If you have vivid and positive memories related to the meetings between Nelson Mandela and F.W. de Klerk, you are likely to quickly grasp the meaning of the definition of banter. Without the example you might struggle with interference from words such as badinage or evenchat. There is no risk of irrelevant emotional state in this example as the state helps to define the semantics of the learned concept! A well-thought example can often reduce your learning time several times! I have recorded examples in which an item without an example was forgotten 20 times within one year, while the same item with a subtle interference-busting example was not forgotten even once in ten repetitions spread over five years. This is roughly equivalent to 25-fold saving in time in the period of 20 years! Such examples are not rare! They are most effectively handled with the all the preceding rules targeted on simplicity and against the interference

Context cues simplify wording

You can use categories, provide different branches of knowledge with a different look (different template), use reference labels (Title, Author, Date, etc.) and clearly label subcategories (e.g. with strings such as chem for chemistry, math for mathematics, etc.). This will help you simplify the wording of your items as you will be relieved from the need to specify the context of your question. In the example below, the well-defined prefix bioch: saves you a lot of typing and a lot of reading while still making sure you do not confuse the abbreviation GRE with Graduate Record Examination. Note that in the recommended case, you process the item starting from the label bioch which puts your brain immediately in the right context. While processing the lesser optimum case, you will waste precious milliseconds on flashing the standard meaning of GRE and … what is worse … you will light up the wrong areas of your brain that will now perhaps be prone to interference!

Wordy item can cause accidental lapses through interference
Q: What does GRE stand for in biochemistry?
A: glucocorticoid response element
Context-labeled items increase success rate
Q: bioch: GRE
A: glucocorticoid response element

Redundancy does not contradict minimum information principle.

Redundancy in simple terms is more information than needed or duplicate information, etc. Redundancy does not have to contradict the minimum information principle and may even be welcome. The problem of redundancy is too wide for this short text. Here are some examples that are only to illustrate that minimum information principle cannot be understood as minimum number of characters or bits in your collections or even items:

  • passive and active approach: if you learn a foreign language, e.g. Esperanto, you will often build word pairs such as phone-telefono, language-lingvo, hope-esperanto, etc. These pairs require active recall of the foreign word. Active recall does not, however, guarantee passive recognition and you may fail with telefono-phone, lingvo-language, or esperanto-hope. Adding new elements with swapped questions and answers may in some cases be redundant but it does not contradict the minimum information principle! Your items are still as simple as possible. You just get more of them
  • reasoning cues: you will often want to boost your reasoning ability by asking about a solution to the problem. Instead of just memorizing the answer you would like to quickly follow the reasoning steps (e.g. solve a simple mathematical equation) and generate the answer. In such a case, providing the hint on the reasoning steps in the answer will only serve helping you always follow the right path at repetitions
  • derivation steps: in more complex problems to solve, memorizing individual derivation steps is always highly recommended (e.g. solving complex mathematical problems). It is not cramming! It is making sure that the brain can always follow the fastest path while solving the problem. For more on boosting creativity and intelligence read: Roots of genius and creativity, as well as more specific:Derivation, reasoning and intelligence
  • multiple semantic representation: very often the same knowledge can be represented and viewed from different angles. Memorizing different representations of the same fact or rule is recommended in cases where a given memory is of high value. This will increase the expected recall rate (beyond that specified with the forgetting index)!
  • flexible repetition: if there are many valid responses to the same question make sure that your representation makes it possible to identify the equivalence and reward you with good grades by providing just one of the equivalent choices. For example, if you learn a language, it rarely make sense to learn all synonyms that meet a definition of a concept. It is more adequate to consider a single synonym as the sufficient answer (e.g. a mark made by ink split on sth = blot/blob/blotch)

Provide sources

Except for well-tested and proven knowledge (such as 2+2=4), it is highly recommended that you include sources from which you have gathered your knowledge. In real-life situation you will often be confronted with challenges to your knowledge. Sources can come to your rescue. You will also find that facts and figures differ depending on the source. You can really be surprised how frivolously reputable information agencies publish figures that are drastically different from other equally reputable sources. With sources provided, you will be able to make more educated choices on which pieces of information are more reliable. Adding reliability labels may also be helpful (e.g. Watch out!, Other sources differ!, etc.). Sources should accompany your items but should not be part of the learned knowledge (unless it is critical for you to be able to recall the source whenever asked).

Provide date stamping

Knowledge can be relatively stable (basic math, anatomy, taxonomy, physical geography, etc.) and highly volatile (economic indicators, high-tech knowledge, personal statistics, etc.). It is important that you provide your items with time stamping or other tags indicating the degree of obsolescence. In case of statistical figures, you might stamp them with the year they have been collected. When learning software applications, it is enough you stamp the item with the software version. Once you have newer figures you can update your items. Unfortunately, in most cases you will have to re-memorize knowledge that became outdated. Date stamping is useful in editing and verifying your knowledge; however, you will rarely want to memorize stamping itself. If you would like to remember the changes of a given figure in time (e.g. GNP figures over a number of years), the date stamping becomes the learned knowledge itself.

Prioritize

You will always face far more knowledge that you will be able to master. That is why prioritizing is critical for building quality knowledge in the long-term. The way you prioritize will affect the way your knowledge slots in. This will also affect the speed of learning (e.g. see: learn basics first). There are many stages at which prioritizing will take place; only few are relevant to knowledge representation, but all are important:
Prioritizing sources - there will always be a number of sources of your knowledge. If you are still at student years: these will most likely be books and notes pertaining to different subjects. Otherwise you will probably rely more on journals, Internet, TV, newspapers, encyclopedias, dictionaries, etc. It is always worth being aware what is the optimum proportion of time devoted to those varied sources. As you progress with learning, you will quickly develop a good sense of which learning slots bring better results and which might be extended at the cost of others
Extracting knowledge - unless you are about to pass an important exam, it nearly never makes sense to memorize whole books or whole articles. You will need to extract those parts that are most likely to impact the quality of your knowledge. You can do it by (1) marking paragraphs in a book or journal, (2) pasting relevant web pages , (3) pasting relevant passages, (4) typing facts and figures directly to notes, etc. You will need some experience before you can accurately measure how much knowledge you can indeed transfer to your brain and what degree of detail you can feasibly master. Your best way to prioritize the flow of knowledge into your memory is to use incremental reading tools
Transferring knowledge - you may try to stick with the 20 rules of formulating knowledge at the moment of introducing your material. However, you can also literally transfer your notes or import whole files and later use the mechanisms provided to determine the order of processing the imported material. Probably the best criterion for choosing between formulating or just importing is the time needed for accurately formulating the item or items. If formulation requires more knowledge, more time, comparing with other sources, etc. you can just import. Otherwise, if you believe that formulating an accurate item is a matter of seconds, formulate it
Formulating items - make sure that explanatory or optional components of the answer are placed in the parentheses so that your attention is focused on the most important part of the item. The parts in the parentheses can be read after the repetition to strengthen the memory in its context
Using forgetting index - you can use the forgetting index to prioritize pending items. The sequence of repetitions will naturally be determined; however, you can request higher retention level for items that are more important and lower retention level for items of lower priority
Learning - the process of prioritizing does not end with the onset of repetitions.

See also:

Knowledge structuring
Knowledge structuring and representation in learning based on active recall
Genius and creativity

Share Comments

Networking workshop

  • A great CV/resume without networking will not lead to a job. A mediocre CV/resume with lots of networking will certainly lead to a job.
  • Prepare 30-60 seconds introductions for yourself under different occasions, prepare to make it natural and efficient.
  • Start networking with a goal in mind. Try to get more relevant contacts in the process.
  • Frequently update linkedIn profile/endorse to get more people checkout your profile.
  • The most import is to get IN PERSON through online/offline contacts.
Share Comments

JavaScript: The Definitive Guide, 6th – Flanagan

Overall

Bible of JavaScript, the best reference book you can have. David Flanagan is such a famous tech writer that it’s very difficult to complain about his writing. Interestingly, there’s heated request for him to write the 7th edition and cover ECMAScript 6.

Where it shines

The book is very comprehensive and it aims for the only book you will need for all language features. One has to be careful not to read the book from start to end. If you do that, you’re probably using it the wrong way.

Particularly, the important of object and function cannot be overemphasized. Readers could pay close attention to those as I think it would be useful for professionals at all levels.

Share Comments

Computer Systems A Programmer’s Perspective - Bryant & O’Hallaron

Overall

‘Computer Systems A Programmer’s Perspective’ (CSAPP) is a very practical book about computer architecture. Most books on computer architecture focus on particular areas, such as: compilers, processor architecture, and programming language principles.

This book strives to envelope a good part of everything, to give readers a big picture. The authors tailor to the needs of most developers who want to write performing and reliable code. And they achieved the goal precisely.

It took me a month to finish studying it, mostly b/c it’s level of abstraction is very low. However I’ve never regretted this time investment. Though it’s subtle whether this helps my day-to-day work directly, I optimistically predict I will come back to this book more and more. As my understanding of computer systems deepen.

Caching and the memory mountain

‘Because of the cache hierarchy, the effective rate that a program can access memory locations is not characterized by a single number. Rather, it is a wildly varying function of program locality (what we have dubbed the memory mountain) that can vary by orders of magnitude.’ - Chapter 6.

The efficiency of memory access is graphed as a mountain, with ‘ridges’ of temporal locality, and ‘slopes’ of spacial locality.

  • Temporal locality: the same data objects are likely to be reused multiple times. Once a data object has been copied into the cache on the first miss, we can expect a number of subsequent hits on that object.
  • Spatial locality: blocks usually contain multiple data objects. Be- cause of spatial locality, we can expect that the cost of copying a block after a miss will be amortized by subsequent references to other objects within that block.
Share Comments

The Mythical Man-month - Fredrick P. Brooks

‘The mythical man month’ is the most known classic in software engineering. Raised a lot of important notions, including the famous ‘no silver bullet’ assert.

No silver bullet

“There is no single development, in either technology or management technique, which by itself promises even one order of magnitude improvement within a decade in productivity, in reliability, in simplicity.”

The speed of software productivity improvements cannot match the speed of hardware updates in any forseeable way. This is limited by both the capacity of human communications, mainly because the number of bilateral communications increases as power of the number of people involved. Also, the constraints of communication and organization affects the division of labor in software engineering.

Efficiency of software tools

Another issue brought up is software tools enhancements. In recent years the explosion of networking and mobile technologies has made every single developer much more productive. However this still doesn’t meet the much more rapidly growing demand for quality software. Therefore the labor market responded with more and more software engineers in the industry.

Share Comments