Why is it important to develop an autonomous mindset?
My first big task when I started working was to build a service that's responsible for pulling data from YouTube API and perform some basic analytics for top videos with specific keywords in terms of views and likes, then present the results on a webpage.
College
At college the study was focusing more on writing the algorithms themselves, for example implementing the searching algorithms, SVM, KNN,...etc.
The rationale behind this is to ensure that we grasped the concept and understood its complexity and when to use it. Your main development environment resides in Anaconda, your main focus is in the code itself, you write code snippets in Jupyter notebook.
At college you are given:
A well defined, isolated problem.
A well-defined set of tools that you were introduced to prior to assignment/project.
A well-defined measure for the quality of your solution, with which you can easily determine whether your solution is good enough or not.
Industry
Meanwhile in the industry, the main focus is to build a production-ready-code that is able to fulfill the requirements. The code you write will be integrated in the overall codebase, or will communicate with other services.
The higher weight resides on the overall performance and understanding the trade-off "Completion is better than Perfection".
In the industry the problem is blurry, complex and embedded in context. It's a set of contradictory requirements that change over time and your solution must be flexible and robust enough for you to react to those changes in an acceptable time. The tools must be picked by you.
Programming in school and programming in the real world are not the same, so make sure you get couple of internships before graduation.
At that time I didn't have much experience on web services, nor cloud services. I only have worked with Twitter API in couple of college projects to pull data and use it with big data tools, train ML/DL models.
So I started to write a code to pull data from YouTube API and perform basic analytics. After that I had to deploy the code as a webpage, at that time I have made some search and found that Flask was the suitable solution for my use case.
At that point I have faced the problem of "the code is working fine on my machine" but how to deploy it on EC2 (server) was a bit tricky as at that time I didn't work with AWS services before.
I had a problem of which code files I will upload to the EC2, which third-party libraries I had to re-install on the EC2. Back then I didn't have prior knowledge about Docker and the concepts of containers.
So I had started searching for a solution and after some investigation, I reached to a possible solution of using "virtualenv" and how to use it with dependencies. After a lot of debugging and reading tutorials I managed to deploy the task successfully.
The main Takeaway
There are mainly two philosophical schools of mentoring and you should be consciously aware of which one is in your environment and understand their pros and cons.
1. Having a mentor
Pros: You’re reaching your goal faster
Cons: You’re not learning to get get unstuck by yourself, you might get used to have continuous mentor and your knowledge will be bounded by the knowledge of your mentor. A mentor will have an upper barrier, once you are on par, you will have to learn for yourself.
2. Learning on your own via trial and error
In the short term you will suffer somehow and exert a lot of efforts. You will face a lot of self doubt and you will face some inevitable failures, but in the long run you will learn how to be autonomous, you will be able to solve a problem in the best possible way, you will be able find the right tool for the right job and you will be able to grasp new knowledge quickly.
The optimal case is the hybrid: of having a mentor and learning by your own.
I believe for my task, if I would have been told to use the x tool then do y …etc. I will not learn for example how importance is concept of containers, as experiencing something is different than reading about it.