Coding Not About Memorization
Coding is a seemingly complex feat. In order to produce a working and practical piece of software, thousands or even millions of lines of code have to be committed to file. But what does it mean for the human mind?
The automatic response to this question is to think that the software developer has to do a lot of memorization to achieve the feat of creating working software. Although this line of thinking is logical, nothing is further from the truth.
Of course, it helps if you have a remarkably powerful memory but you will find that even with an average mind and sporting an average capacity for recall, a software developer does not require to have a substantive memory to get the job done.
Dealing With Complexity
Complexity is the name of the game when it comes to developing software. There are a lot of variables to consider, even outside the coding paradigm itself. The developer has to deal with complexity that quickly reaches exponential orders of magnitude.
What needs to be understood is the difference between complex and complicated. Complicated implies that something is difficult to understand but can be achieved with time and effort. Complex on the other hand speaks to how the number of interactions between components within a software project increase to the point where it is difficult to understand and manage them all.
The ideas that inspire a software development project are often not very complicated and in most cases are easy to understand. It is complexity that requires to be handled rather than complicated concepts to the extent that strong memory is a good thing to have but not necessarily a requirement.
There Are Rules To How Programming Works
The first thing to understand when considering and dealing with complexity issues in software development is to realise that there are fundamental rules to how programming works. Just like how there are rules of nature that apply to our universe and everyday life; there are universal laws applicable to software development.
No matter which programming language you are looking at, the rules are universal. There are slight differences in the different programming languages but these pale in comparison to the similarities.
The rules of programming are classified as either comprising syntax or semantics. Syntax are rules that govern the structure of a programming language- that is how different symbols are combined in order to consider that documents are well and correctly formed in that particular programing language. You may think of correct syntax as analogous to not using “broken English”.
Semantics on the other hand is a mathematical consideration that is concerned with the meaning that can be derived from correctly formed syntax. It is concerned with the computational considerations of the problem at hand.
Understanding the rules is the first step to figuring out why memorization is not a strong requirement. The rules of programming are a smaller body of knowledge compared to the programming language itself, which means that less recall is necessary in order to code as long as the software developer understand the syntax and semantics.
A Developer Can Always Rely On The Right Tools
Another idea that dispels the requirement for strong recall on the part of the developer is that there are tools that transfer the memory demands needed for a developer to code to a machine.
Computers are inherently much more capable of storing substantial amounts of data compared to their human counterparts. Infact the order of magnitude by which computers outperform humans in memory and recall is by comparison almost infinite.
I often use various tools ranging from a simple text editor to keep track of my thoughts to the more robust Trello, an online project management tool, to keep track of my thoughts and ideas. It should be obvious that saving your ideas to file is an efficient way to compensate for shortfalls arising from human memory limitations.
Text Editors and Integrated Development Environments
Even though the discussion is around memory and recall, there are other tools out there that lighten the memory load on the developer indirectly. The first thought that comes to mind is the text editor as well as Integrated Development Environments, IDEs.
A text editor is a software development tool that often has syntax highlighting. With syntax highlighting, the text editor checks the code that the software developer is writing for syntactic errors. It then flags those error and even offers suggestions. Some programming text editors will offer an auto-complete function which means the developer does not need to memorize the exact expressions they need.
An IDE is a text editor coupled with a project management tool. As discussed above, software development projects can get very complex and this can happen very quickly. Before you know it, the number of individual files in a project can grow rapidly and it becomes extremely difficult to keep track of it all. This is where an Integrated Development Environment Becomes indispensable.
Before reaching maturity, or at least being a viable product, software has to go through several iterations to refine it and remove errors. Complexity is often compounded by the fact that most software is developed within teams rather than by individuals.
Even on small projects, whether working in a team or as an individual, it quickly becomes apparent how critical it is to know who made what changes to which part of the software and at what time the changes were made. Obviously the ability to do this without the appropriate software tools also quickly becomes apparent.
This is why version control is an essential requirement in any software development project. Version control software, the most popular and my favourite being GIT, allows software developers to track and commit their changes. They can navigate their change history to see who performed which changes and have the ability to revert to older versions of the software.
The Internet Makes It Easier By Far
There are many considerations supporting the idea that although strong memory is a plus for a software developer, it is not a strong requirement but perhaps the Internet is the most significant.
The Internet is what used to be called the “Information Superhighway”- strange I no longer hear this term being thrown around. My point stands though. The internet is a numerous resource for information, you can easily find information on anything you require, more so with regards to coding.
In the first instance, the Internet is a great reference library. With powerful search engines like Google, as they have evolved today, a simple and quick search will yield relevant results within fractions of a second.
Aside from search, there are forums and communities of developers who are willing and able to support other developers when they get stuck. The most prominent of these is Stackoverflow.
With the Internet as a resource, it is clear that a weak recall capacity should not be a valid reason for holding a developer back.
Software Projects Are Incremental
Looking at a finished software project and even with a basic understanding of software development, it can be intimidating to imagine how much work had gone into developing the software. The shock can become even more accentuated if you inspect the code behind the software.
Conventional wisdom would dictate that panic should set in when considering how much memorization had to be undertaken by the developers of the software. If you slow down and think for a moment, you should come to the realization that, just as Rome was not built in a day, the software did not materialize overnight.
It is an accumulation of effort over a period of time with the developer having a firm grasp of the fundamentals of the programming language used, utilizing the tools at their disposal, leveraging knowledge sources online and not an indication of prowess in superior memory and recall.