It just feels like a few weeks since I have started getting back into programming. Had I not captured my journey in this blog, I would have even have realized that it has been 2 years since I have started on this journey.
As I look back, I am filled with gratefulness for all the wonderful things I have experienced in this journey — both progress I have made in the form of concrete achievements and the stalemates I have encountered along the way when I hit concrete obstacles that made me pause, reflect and try a number of new things to move forward.
Before writing this post, I tried to refresh my mind by reading through some of the older entries and it was quite refreshing to see that the same themes have been recurring:
1. What matters more is slow and deep learning. Not how many materials I buy or how many of them I read/complete.
2. I don’t learn something deeply the first time around, no matter how confident I feel. Over time, memory fades, confidence wanes and you are back to square one almost.
3. Though there are plenty of materials for learning anything, very few really go beyond a certain level.
4. The best progress I have made was from doing concrete projects which were beyond my level of ability at that point.
5. There is a lot of joy in practicing the same problems over and over — this is something that gets rarely talked about. We want to solve more and more problems that are new. But when I revisit the same problem over and over, I get new insights that I could not have envisaged.
When I have read my progress update in the 6th month, the problems I face and the solutions still seem the same — 2 major problems are deep learning and consistent time allocation. The solution are simple to write, but very hard to practice.
> Learning Python & Front End — 6 Month Progress Update | by Siraj Samsudeen | Medium
When I looked at my first-year update, it looks I have achieved a lot:
Compared to my first year, the list of concrete achievements in the 2nd year are very few:
- I have applied TDD and Pandas to some data cleaning tasks in my professional work in data analytics. I did not go very far with this. But this helped me to solidify my understanding of TDD with Pytest.
- I went back to my Quran SRS project in Django and added tests to bring the coverage to 100%. Writing tests after the fact was much harder than I anticipated. I never realized that the baby-software I wrote had grown so complex over a period of time. Refactoring the complex algorithm seemed like a nightmare when I started, but by building a safety-net of tests, I was able to slowly disentangle the complex code. I removed a number of features to bring things under control. I still need to learn more Django — I bought a number of books, but could not finish them as my professional projects had deadlines to achieve — hence the personal project has to take a backseat.
- This is my 2nd professional project — I have completed an integration between SAP (ERP) system and a popular SaaS product using NodeJS — When I started on the project, I was totally new to Node. Using what I have learnt by practicing TDD in Python, I was able to build a solution locally in my system covered by tests and then move it to a cloud platform quite easily. I made the switch using Jest for TDD in NodeJS and it was wonderful. I touched new territories as I had to use mocks to speed up TDD when the code had to be deployed remotely.
- Though it may not seem like much, figuring out the process to take notes and revise them using SRS using the Obsidian + Anki Combo was a tremendous achievement for me.
In this past year, I could not spend a lot of time going through books or video courses. I DID go through a number of courses, but none of them made any significant impact like the few materials I have used in the first year.
To me, I still want to go back and reread the TDD book by Harry and the TDD book by Kent Beck.
For my 3rd year in programming, I want to master the foundational concepts one by one — here is a short list which might grow:
- Linux Command Line — though this seems like irrelevant, not having this knowledge is a handicap that affected me in many ways in many projects.
- Git — I have gained quite a bit of knowledge in Git, but still this is an area I need to master more
- Regex — I delved into it for a short while and even bought 2 books which are gathering dust.
- VSCode — I can consider myself a power user of VSCode, but still there were a number of times when I felt handicapped not knowing how to do something fast. I still have a VSCode Pro course I have bought which I have not even covered 1/3rd.
- Advanced Python — I covered the first part of Fluent Python and stopped. Need to go back and revisit. Python is a beautiful language and there is so much to learn by reflecting on why certain things are the way they are in python.
- HTML/CSS — I have forgotten most of this as I don’t use them in any way directly.
- Some Front End Framework like VueJS or React — React seem to be everywhere. Since I am very impressed with Jest, I might just as well try React to see what my reactions are as I already have a positive view of Vue.
As I realized that I needed some concrete path to master the fundamentals, I was checking out different options while suddenly an ad came up on YouTube pointing to Scaler Academy. When I listened to the co-founder Anshuman talk about his goals, it was music to my ears and I enrolled in their full-stack-developer course. So far I am enjoying the deep dive into Data structures and Algorithms and the really difficult assignment and homework problems…