Lately I've been watching quite a bit of Veritasium, I find them quite entertaining and are thought provoking. Feels like I get smarter every time I watch one of his videos. I've seen his video on mastery about three times now. It's quite interesting to realize that, there is a path to mastery. Especially since people who are masters, make it look like magic and it seems almost unattainable. But the breakdown of the steps reveals how anyone can do it. It helps if you enjoy the thing you are trying to master. For me it is and has been programming, for the last five years. Although I'm quite comfortable programming in Go and JavaScript, it still feels like there is a lot more out there to master. Things to get better at. Plus, for the past few months I've been quite comfortable with Go as I have built a lot of projects with it and read a couple of books on it by this point. It took me roughly four years of on and off practice to get here. And I was right, I do feel like a better programmer. But during this time, I not only was learning Go but other concepts of programming to help me grok things better. Like understanding memory better, understanding how sockets at the Kernel level allow you to send and listen for requests and just general Go and web development stuff. Like Databases, Http, SQL etc. Considering I have a better understanding of programming now than I did four years ago, it should take me fewer time to learn a language now.
One of the steps to mastery is to do things just outside of your comfort zone, so I decided to learn Zig. Then test my skills by building a browser Tiger Style. This seems well out of my comfort zone and a few steps closer to mastery compared to where I am right now. It has been quite a challenge learning Zig, this feeling of not knowing what your doing is something the mind does not enjoy at all. I've been doing some Advent of code to practice and reading the language reference top to bottom whenever I find time. I was sort of getting comfortable with the AOC style questions so today I decided to write a simple server in Zig. It hasn't been easy. The documentation does not have any examples, so that makes it a challenge when you have no clue what you are doing. Putting yourself in uncomfortable situations like this is not easy, but it sure seems worthwhile, by the end of the week you feel a little bit more competent and that acts as fuel for the discomfort next week. I've done a bit of C here and there, so some of the concepts are not entirely foreign. Prior programming experience helps a lot. I would have not enjoyed it as much if I had gone from JavaScript to Zig. But going from JavaScript to Go was not as bad. Go is a great mid language and is a good step in between high level and lowish level programming. Since, doing Go I have much better appreciation for errors as values, it's the same in Zig but it feels like Zig took it further with the try
and catch
syntax. It's not exceptions, errors are still values but the way to handle them is quite neat.
The other three steps to mastery are quite obvious. It's timely feedback, environment, and repetition. Of all the three, being at the edge of your comfort zone is the hardest one I think. Especially, once you get competent. The road to competence is always filled with discomfort, as you don't really know anything so everything is uncomfortable. This makes it especially hard to put yourself in an uncomfortable stage after you've overcome this. Since, my goal is mastery over programming, or at least the pursuit of mastery without a timeline I can add small discomfort daily in an attempt to get better. Quite exciting to see how far I can go, and how good I can get.