10 things software developers should know about 'learning'



As new technologies emerge and older ones are constantly updated, software developers

learn many programming languages and frameworks over the course of their careers . However, just because there is a lot to learn, it does not mean that we understand how to learn or how to make people learn, and the monthly magazine ``Communications of the ACM'' We've compiled everything you need to know.

10 Things Software Developers Should Learn about Learning | January 2024 | Communications of the ACM
https://cacm.acm.org/magazines/2024/1/278891-10-things-software-developers-should-learn-about-learning/fulltext



1: Human memory is not a bit structure
As a paper published in 2020 states, ``Learning means that there has been a change in long-term memory,'' and human memory is at the center of learning. While software developers know firsthand the power of computer memory to store a sequence of bits and later retrieve the exact sequence of bits, human memory is not that accurate. It's also not very reliable.

However, unlike computer memory, when you try to remember something, connecting it with related knowledge can have a big impact on problem solving and deep understanding.

2: Human memory consists of long-term memory and working memory
Long-term memory is a place where information is stored permanently, and is similar to storage in a computer. Working memory is where a limited amount of information is stored in real time, made easily accessible, and used for reasoning to solve problems. The capacity of working memory is almost fixed at birth, and the larger the capacity, the faster the learning speed, but working memory capacity is not the be-all and end-all of performance. It is said that the reason why a skilled engineer becomes an expert is due to the content of long-term memory.

On the other hand, in order to learn new tools and skills, it is important to understand the cognitive load of the task, or working memory capacity. Cognitive load includes intrinsic load, which is necessary to accomplish a task, and extrinsic load, which is not necessary. Beginners will not be able to distinguish which parts are specific loads and will suffer from extraneous loads.

As an example, Communications of the ACM cites two different descriptions of the same database schema. What is illustrated on the left and what is explained in text on the right are the same content, but the text needs to be converted in your head, which increases the load.



Even if a task is too large or complex to handle, it may eventually become manageable if you break it down into smaller pieces. If you're a beginner or young person struggling with the task at hand, keeping the above in mind may give you some pointers on how to clear it.

3: Experts recognize, beginners think logically
One of the differences between a novice and an expert is that the expert has already experienced something.

A study of professional chess players found that their advantage lies in their ability to memorize and recognize board conditions, allowing them to figure out how to respond quickly and with little effort.

For example, if you are a developer, an expert may look at a specific part of the code and realize that this is trying to execute a sorting algorithm, but a beginner may not be able to grasp the overall picture and have to read each line line by line. It may not happen.

This means that beginners can become experts by reading and understanding a lot of code. Reading more and more types of code will improve your programming proficiency.

4: Understand concepts from abstract to concrete and vice versa
Programming often involves learning abstract concepts. People often aim for a concrete instantiation of a concept, for example to examine a function that returns the absolute number of a number, but the problem is that as the concept becomes more abstract, more and more concrete examples It's getting farther away.

The good news is that the more you learn about abstract concepts, the more concrete they become. For example, 'function' is an abstract concept, but by learning it many times, it becomes concrete for developers and they can learn the next level of abstraction.

5: Spacing and repetition are important
The ' spacing effect ' suggests that humans learn best by spacing out practice, ideally over multiple weeks. However, the advocate himself understands that many people like to cram things into a short period of time.

The maximum amount of study time per day is 90 minutes, and if you exceed this limit, your concentration will decrease. After each session of study, you should rest for at least 20 minutes. Rest means going for a walk or sitting quietly instead of doing other work, idly surfing the internet, or chatting with others.

One way to increase learning efficiency is to randomize the order of the problems you solve. This allows different concepts to be activated in long-term memory. However, as efficiency increases, more effort is required, so it is recommended to take a 10 second rest every 2 to 5 minutes.

6: The Internet does not make learning obsolete
Just because the Internet and AI have made it possible for AI to create the code you need almost exactly, doesn't mean that learning something is no longer valuable. If you don't learn enough and you don't have knowledge in your brain, your brain won't be able to form connections between knowledge, so you won't be able to achieve higher levels of understanding or abstraction.

Research has also shown that online searches are less efficient at remembering information than books. It has also been suggested that searching may take away the effect of recalling information, which strengthens memory.

7: Problem solving is not a common skill
Communications of the ACM says.

Humans cannot directly learn ``how to solve problems,'' so we learn how to solve problems in programming, how to find the best move in chess, and how to create patterns in knitting. Learn skills individually. These are independent and do not affect each other. In fact, studies on chess have shown that learning chess had little or no effect on academic or cognitive skills. Just as 'brain training' has no effect on general intelligence development.

The only exception is spatial skills such as ``being able to create and rotate a Tetris tetrimino in your head,'' which can improve learning in other areas through training.

From a hiring perspective, it is completely pointless to ask questions such as 'How do you weigh a jumbo jet' or other brain teaser puzzles when testing programmer candidates, if you want to measure programming ability. He said he should ask a programming problem.

8: Expertise can be a problem in some situations
Programmers use a number of tools and auxiliary functions to improve their work efficiency, but these tools have very different effects depending on the user, and beginners who try to use professional tools can be overwhelmed by the number of options available to them. There is a gender.

The same is true when an expert teaches a novice; the inexperienced expert may not realize that the novice thinks differently. The inability of experts to see things through the eyes of a novice is a common ``expert's blind spot.'' This problem can be overcome by asking beginners how much they currently understand and adjusting their explanations accordingly.

9: Predictors of programming ability are unclear
According to Communications of the ACM, success in learning to program, like most activities, can be attributed to a combination of innate aptitude and practice.

Numerous studies have been conducted to predict programming aptitude, but none have yielded reliable results. It turns out that your perception of computer science, your preference for humanities or science, etc., is completely unpredictable.

On the engineering community Stack Overflow, there is a correlation between age and reputation, with older people having higher reputations, but recent research has shown that there is a correlation between age and reputation when people are relatively early in their careers. The correlation is weak, and aptitude appears to have a greater influence than experience.

For these reasons, Communications of the ACM summarizes, ``There is no shortcut to measuring programming ability when hiring programmers.''

10: How you think is important
While there is a binary idea of whether programming can be done or not, there are also many competing theories. For example, anyone can learn physics, even if they are not good at it. However, the reality is that not everyone can win the Nobel Prize in Physics. Between these extremes we are trying to find the boundaries of our abilities, and when teachers and learners approach tasks with a growth mindset, we tend to overcome challenges and overcome failures.

Research shows that changing a person's mindset to a growth mindset is difficult. But Communications of the ACM says it's important to remember that when learning and training new skills, 'approaching tasks with a growth mindset' is effective, but also a skill to develop. I am.

In addition, Communications of the ACM advises mentors to praise their mentees' progress, accept failures without getting angry, and says, ``If you feel like quitting, take a break or go for a walk and think about your strategy. Please try again later,” he concludes.

in Note, Posted by logc_nt