Foundations
Intro
Foundations are important whatever you do. That was said by many. So why I’m writing about that? It’s because I’m worried about foundations situation in IT world.
Foundations are by definition important, because all things built in given space dependents on it. I’ll try to describe why that matters in examples of fields that I’m interested in.
I’ll say it at least twice - there is no shame to back to basics even on senior level of experience. Most of your practice should be focused on the foundations.
Maths
As my topology tutor, Stefan Jackowski, said mathematics is brutally hierarchical and there is no way around this which is another phrase for Euclid quote there is no royal road to geometry.
Foundations in maths are inevitable. It’s very hard to do mathematics without firm grasp of basics. It is even visible in middle school. If a pupil skip one or two topics there is a great chance that he or she will have troubles with next topics. That stays true on academic level too. In my opinion this is the reason why most people finds mathematics relatively hard.
In Maths things are literally built on top of the axioms. There is nothing outside axioms and its consequences. Therefore foundations are written into it. There is very low probability that one can perform proofs and even read maths without confident knowledge of the foundations.
Calisthenics
Another field I’m interested in is calisthenics. Anyone who starts calisthenics and sees classics like planche obviously want to be able to do it. One might try to practice this exercise right away but without establish strong foundations it’s nearly impossible.
In this case is not as rigid as in case of maths. One physically can try practice hard exercise. It will be just inefficient but not impossible.
In order to practice efficiently one must keep the foundations strong. They (push ups, pull ups, dips and squats) might sound very boring in comparison to planche or front lever but it is crucial to keep it strong with the perfect form.
IT
The main field I’m into is IT. As we’ve already established foundations are important whatever you do. Nowadays it is very easy to do many things in programming without knowing almost any basics. For example you can train deep neural network in Python with less than 100 lines of code without knowing any maths and even Python, just depending on tutorials and tweaking upon examples. It is not a bad thing on its own. Things shouldn’t be overly complicated just to force you to deepen your knowledge. Appropriate interface should be design.
What, in my opinion, can be a problem is that you can advance your career really far without solid understanding of foundations. That even might gave you an illusion that you know them. If you often say “yea, that is probably done this way under the hood…” that might be a symptom. What is even worse is thinking that you’re too advanced in programming to even think about details of basic concepts. One of symptoms of this one might be something like “let’s not talk about it, this should be probably optimized by compiler”.
In case of programming foundations are very broad. Just to name a several areas of IT foundations
- logic
- data structures and algorithms
- hardware (CPU, GPU, RAM, storage, …)
- databases
- operating systems
- networking
- security
- programming languages
- compilers
- text editors and tools
- design (systems and UX)
- localizations (encodings, time zones and other local conventions)
Yep, that’s not all but it is already a lot for just a foundations. Good universities covers most of those foundations across lectures and tutorials. Even though you had those basics worked out back in a university you probably forgot most of it after few years in the industry. We are truly standing on the shoulders of giants and we rarely have to tweak around foundations in regular job. I encourage you to not be ashamed of going back to basics and to broaden your foundations. This will got you more then learning new js framework. If your foundations are strong picking up anything on higher levels of abstraction will be easy. You will not struggle.
In my opinion if you want advance in IT you should practice and most part of this practice should be foundations. If you are a programmer you probably have used HTTP server clients but have you ever written one? Do you know HTTP(S) protocol? How TCP/IP is used in implementation of HTTP? How routing of endpoints is done? How HTTP messages looks like in a memory? What is structure of URL and what is URI? Why are there cookies? How clients establish connection with another servers? And many more…
My criteria for the question “do I really know how it’s done?” is the answer for the question “Am I able to program it in C?”.
If you don’t know where to start I’d recommend to start reading standard library of your favorite programming language. I’d also recommend Go’s standard library even for people how don’t program in Go. It is very well written and documented and Go is pretty straightforward language.
Summary
I’ve seen on my example how focusing on the foundations in each field made a progress much faster. Do not be ashamed of going back to basics. Foundations cannot be too strong. Patiently developed levels upon foundations will bring satisfaction and fulfilment. Build gradually. Work, consistency and patience will be rewarded.
As maths grad who stepped into data analysis and programming I initially started from very high level programming languages (R and Python). But in order to deepen my understanding (and performance) I was going down the abstraction levels to improve my foundations. It took me few years and I have still plenty to learn but I think I know what is important and what I should be focused on.
Obviously I’m not saying that you should practice only foundations. You should checkout new languages, tools and frameworks but that shouldn’t be vast majority of time spent.