I have always had a love and passion for learning. It is so satisfying to discover something new daily, regardless of the topic learned. In school, while most of my schoolmates found learning dull and dreary, I managed to find something challenging and interesting in even the most boring subjects. I’ve always tried to find a way to apply the knowledge to the real world, thus making the dry material most teachers monotonously recited exciting to learn.
I have a strong faith in knowledge. I believe it is the only thing in life that will surely persevere and never let you down. One summer day a long time ago, when I was but a little kid, I and my family were sitting in our garden. They were discussing how a family lost everything they had in a fire. I was intently listening to the devastating story as my uncle turned to me. “This …” he said, pointing at my head ”… this is your greatest asset. The world can take everything from you, but it can never take your mind and knowledge”.
I might have not fully understood what he meant at the time, but I do now. I’d rather be poor and knowledgeable than rich and clueless because I know it would be far easier for a poor, properly educated person to acquire wealth than for the rich, uneducated person to maintain it or, in the event of loss, to rebuild it. I have to stress the words properly educated here. Getting good grades in school is not what I mean by properly educated. Having real-world experience, focusing on the right things, and knowing what you don’t know is what I consider properly educated.
The pitfalls of being knowledge-hungry
Having the drive and passion to learn is in most cases a really good trait to have. However, the issues arise when drive and passion turn into insecurity, and with it into an addiction. This is what happened to me.
I’ve decided to be a computer scientist a long time ago, but it wasn’t until I’ve started attending college that I became rather overwhelmed with the vastness of the study that is computer science.
I think we can all agree that computer science is a very large subject, comprised of many fields, each concerned with a different way to utilize computers to our advantage. There is web development, computer graphics, database engineering, quantum computing, etc. If I started naming all of the fields in the morning, I’d say I’d finish by the time the dinner was on the table.
Having such a wide variety of fields is exciting, as it allows one to explore and choose the one they like the most. However, at the same time, it can also be overwhelming, especially when a person wants to learn about all of them at the same time. This is what happened to me in college.
The overwhelming insecurity
In college, I and my peers learned about many fields of computer science. This fascinated me at first and I was ready to learn everything about these topics. For the first three years, after my first week in the semester, I had taken a trip to the library to borrow the books that were recommended by professors in each of the subjects. If someone had stopped me and asked what I was trying to achieve by reading all of these books and getting in-depth of each subject, I’m not sure what the answer would be. I’d probably say I am just excited to learn.
Looking back at it, I know the reality of what drove me to learn this much - too much. The drive to learn is great and on paper a really good characteristic to have. However, there is a difference between a person who has a clear goal and a realistic learning plan and a person who wants to know everything about everything, being all over the place with no clear focus and being insecure about not knowing things. Note the stress on the word insecure.
Insecurity is what was really behind my drive to learn back then. The insecurity, or fear of not knowing things.
In college, once I started hanging out with people who also study computer science, as well as listening to all the professors who were experts in their respective fields, I quickly realized how knowledgeable all of these people were at what they did. I wanted to be the same. The issue was that I wanted to be all of them at once. A web developer, data scientist, algorithm expert, cryptographer, electronics expert, and more. My insecurity prevented me from ditching these goals and focusing on one thing only. What was pulling me back was the fear of not knowing things and admitting my inexperience and inability to others, but more importantly, to myself.
What didn’t help this problem was the elitism that I’ve often felt among my peers, but even more often among the professors. It seemed like professors looked down on other fields that were not their own, deriding them and calling them “untrue”. At that point, I had been pretty convinced I wanted to be a web developer, but what prevented me from focusing on web development purely was in part this elitism. As a web developer, I didn’t need to know operating systems or complex mathematics behind natural language processing. However, many professors shamed us for not knowing the basics of operating systems or mathematics. This kept me wanting to learn all about these topics, just for the sake of not being ashamed of not knowing these things.
What computer science college really is (in my opinion)
Note that what is written in this section applies to computer science colleges only. I don’t know anything about relationships between the college and real-world practices in other professions.
If I could go back in time and go to college again, what would I do differently? I think the most important part is the mindset of what college is supposed to give you as a computer science student and a future professional.
Is a computer science college going to turn you into a professional and give you mastery in a certain field? No, it will not. You need years of working experience and continuous learning. Apart from that, many professors come from an older generation and have an academic background, thus having archaic teaching methods and no real working experience.
I’d say that computer science college is there for a person to get a taste of different fields of computer science. Over the 5 years that I’ve spent in college, I think I’ve grasped the ideas and concepts of most of the major computer science fields. Using these concepts and ideas I was able to make a confident decision on what I wanted to dive into and focus on for the next years. Also, if I’d ever want to switch to a different field, I’d know which ones I’d consider, thanks to college.
So if I could go back and do college over again, I’d focus on concepts, rather than details. I’d ignore the advice from professors to get good grades, because getting good grades requires learning details that are virtually useless to know if you aren’t working in the given field, not to mention you’ll forget them 5 minutes after exiting the examination room. Grasping the concepts helps you decide whether a field is worthy to dive into or not, based on your personal preferences and interests. Learning details is only worth it in the field that you decided to dive into, otherwise, it is a waste of time (unless you care about getting good grades).
Most importantly of all - I’d stop being insecure about not knowing something and having a grade lower than 10. It’s okay and normal. We aren’t super-people.
Web development - here we go again
My insecurities about not knowing things didn’t end once I decided to ditch learning about all of the fields of computer science and focus on web development only. It turns out web development is a huge sphere as well.
What caused the most stress for me in the sphere of web development were the choices of technologies that you have to build something (I’d imagine a similar story occurs in other fields as well).
- So many ways to write a mobile app.
- So many database systems to pick from.
Recently I was cleaning up my Google drive. I found a very aptly named document there, called “Things to learn”. Here is the redacted version of the document:
- Angular 2+
- Node.js (JS)
- Django (Python)
- .NET Core (C#)
- Spring boot (Java, Kotlin)
- React native
- Native (Java, Kotlin)
- Google cloud
- Travis CI
- Circle CI
I kid you not, my goal was to know and master all of these technologies. Needless to say, I haven’t even properly started tackling this list. And to be honest, it would have been a waste of time, as a large section of these technologies is redundant with one another. Once again, my insecurities were taking me over. I was able to write a backend in Node.js, but when I met a C# developer, I wanted to learn .NET Core. After browsing a list of job postings, I discovered that a lot of companies were searching for Python developers. Here we go, Django is now on the to-do list.
Even though this document was made 2 years ago and lastly opened a year ago (since I’ve had a lot of work in the past year), it was hard-coded somewhere in the subconscious part of my brain. Many times during the day my mind would remind me of this huge list that I promised myself I will do one day, making me stressed and insecure for not doing it yet. Sometimes the stress was present and I didn’t even know why.
A new learning plan
Recently I took my time to write this list down once again. Then I consciously crossed off the majority of the things on the list, thus letting my brain know this was no longer on my conscience and no promises were made. This was the beginning of my new learning plan. This plan allows me to focus my energy on learning things that improve me as a professional or personally, instead of curbing my insecurity. It allows me to focus, rather than diverge and diversify.
As a web developer, I operate on a technology stack. Some people focus on a single stack, but I prefer to be full-stack so that I am self-sufficient - I can create a web system on my own. However, I devote more energy to some of these stacks than others. I have thus defined the following classes of stacks:
- Primary: these are the stacks that I have my full focus on. I spend most of my energy on them, improving myself daily. I read blogs, watch videos or read books about these topics. I also work with these professionally.
- Secondary: these are the stacks that I use and learn about, but not in-depth. I might read a blog post there and now or watch a video to improve my skills, but at the moment I am happy with the knowledge that I have of these stacks.
- Supporting: these are the stacks that I don’t learn about at all. I rely on the documentation or Stack overflow to save me when I need to accomplish something with these technologies. These stacks are only on the list because I need to use them to accomplish my goals when building an app. If possible, I seek advice on these stacks from other people.
Here is my stack:
- Front-end (React)
- Back-end (Node.js with Typescript)
- Mobile apps (React native)
- DevOps (Docker, Ansible, Linux, CI/CD)
- Cloud (AWS)
- Message queues
- Operating systems
- Data science, AI
I have defined a single technology in each of the stacks that I focus on. The most important part is that I enjoy learning about these technologies, but still keep an eye out for potential new technologies.
Adopting new technologies
I think it would be very foolish to engrave the stack above in stone and not look at other technologies. I have discovered most of the technologies that I use today once I did some research. However, I am very careful about spending too much of my time on a technology that I will potentially not use in the future. This is why I came up with a multi-step process that I use when I want to learn new technology, stack, or even a field.
- What is it? Watch a non-technical talk to discover what the technology does and what kind of problems it aims to solve.
- How is it used? Watch a technical video (eg. a coding video) to see how the technology is used in practice. I usually watch these at 2x speed, just to grasp the idea.
- How can I use it? Use the technology yourself by creating a small app or following along with the coding video. The result is typically a Github repo with useful code snippets and reference code.
- How does it fit in my stack? Put the technology in one of the stacks.
The key here is that if at any of these stages I feel like the answer to the question is inadequate, I simply don’t continue with the next steps. I keep track of the answers to these questions for future reference, though.
I can proudly say that I am no longer afraid to not know things. And boy, is it a sigh of relief. Not only am I spending time on things that matter, but I’m also under much less stress. Also, I have more time to focus on things outside of my profession.