In the course of a technical career, there is a need to first build a solid foundation of skills and then extend that. Unfortunately, it is essential to return to those foundational skills from time to time as well. It is not that a good foundation is forgotten as much as this allows one to adapt to a new technology.
As with most things in life, the first time is the hardest. Building a solid foundation takes years of study, work, and effort. However, it must be stated that putting in that time and hard work does not guarantee a good foundation. Thus, we should look at what makes for a good foundation of skills and then how do we ensure that foundation remains firm.
A Good Foundation Is General
The first critical aspect of a good foundation is that it is general. You cannot have a solid foundation built in a single language or platform. By definition that is specialization and not the generalization needed in this case. When you lack general knowledge, there is always a danger of treating everything as a nail because you only have a hammer.
The whole purpose of this foundation we want to build is to allow us to take our skills to other platforms and technologies. Even though every technology has different ways of approaching problems, we will still be helped by a foundational understanding. This topic can get annoyingly abstract quickly so let’s look at some concrete examples.
A Foundational Concept – Input/Output
If you have been programming long, you probably will not think of I/O as a foundational skill. However, think back to when you first learned about it. The idea of opening and closing a resource may have seemed strange. Random and direct access also were probably new concepts. As you grew comfortable with these concepts, they became “natural” to you. Over time these skills become something that is automatic. Very little time is spent thinking about the underlying actions, and instead, you just need to remember the syntax.
Event-Based Programming and Listeners
Another good example is event-based programming. The idea of listeners was new to us all at some point. I remember discussing them with other geeks like myself and particularly how some of us struggled with the concepts while others “got it” right away. Now it is hard to imagine what was difficult about the idea behind listeners or how to use them. They seem like the perfect solution to certain problems and maybe even “obvious.”
This comfort level that comes with these topics is due to a strong foundation in them. Notice that nothing about either of these is specific to a language or platform. Thus, this knowledge will translate to any existing platform and even new ones not yet invented. This is, of course, why a good foundation is so necessary. It allows us to be nimble in our adoption of new technologies. That ability to adopt happens to be a critical ingredient to becoming successful as a developer.
Hitting The Key Items of Knowledge
Whether you are learning your first language or your fifty-first, it always helps to get the foundational items under your belt. This is going to be easier to do because those pieces will fall into the category of things you thoroughly understand. Likewise, the foundational things seem to be the ones that vary the least across languages. We all know about the “Hello World” application we build on every platform, but several more items are crucial in knowing how to use a language.
- Basic Logic (if-then-else, switch-case, etc.)
- Looping and Iterating (“for”, “while”, “do”, “until”, etc.)
- File I/O (read and write)
- Database I/O (connecting and running queries)
- UI Basics (Creating pages and controls)
- Code structure (functions, classes, methods, etc.)
- Debugging (beyond output to console)
- Compile/Build/Deploy/Execute code
- String (and other values) manipulation
- Variable declarations, passing values, types, and scope
- Data Structures (arrays, collections, etc.)
- Control (exception handling, exiting code blocks or the application, etc.)
Once you have these figured out for a platform, you can write full-blown applications. The rest of it is syntax and either finding the command or writing it yourself. It is no coincidence that these are also the topics covered in computer science and IT curricula. When these items are mastered conceptually then learning a new language becomes a straightforward process.