Software engineering learning hack
For the first five years of my professional life, I worked with ASP.NET/C#/vanilla JavaScript/jQuery most of the time. I was not married to the technology, so I started looking for opportunities to do other things than that.
For the past two years, I have learned and built things with:
Ruby on Rails/Ruby
React/Redux, Ember.js
Django, Flask/Python
Mobile development / iOS / Swift
It is a lot of work - but it is super fun!
Mindset
I admitted to myself that I knew nothing about web development, even though I had been working with it my entire professional life. It helped me accept new ideas and different practices.
At the same time, I did not realize that this might have been a mistake. If you have a firm grasp of at least one programming language, some basic knowledge about how the web works, learning new concepts become less difficult. Most of the time, new technologies are just fancy names attached to old things or a new method invented to solve problems. With this new mindset and confidence, I find myself willing to invest more time and energy to learn, challenging myself to do something outside of my comfort zone.
Pick a book / tutorial to learn the basics
Pick a book or tutorial you find enjoyable, or at least not too torturous to go through. If you don’t know where to start, ask people who have worked with those technologies, or Google it. Because the book is helpful to other people does not mean it would be helpful to you. Select something that you enjoy to read, listen, or watch to pick up the basics. The rest of the knowledge will be easier to obtain once you have a firm grasp of the basics.
Dump everything
After I go through that book or tutorial, I build a Hello World app with some features. I switch to what I call my “Absorb EVERYTHING mode”: I sign up for newsletters and listen to podcasts. I read and listen to these when I am free, waiting for the train, driving, working out, traveling etc. I don’t read or listen attentively all the time, but it helps me have a vague idea about what’s going on in the community, how people solve problems in the community, and whether this is something I want to keep investing my time and efforts into.
Make something
This can happen in parallel with “dump everything”. Pick an idea you want to work with, and start building something with the technologies. I learn so much when I build. It helps me to have a chance to work with the technologies, from design to development to deployment. It gives me an overall look at the technology I am dealing with.
Repeat
If I find the technology enjoyable and worth investing my time and resources, I go ahead and continue the process: pick another book, absorb more information and build something. I find some of them become useful at work eventually, even if stopped learning about it. For example, I usually don’t work with Python, but the Python community has good analytic and screen scraping tools. For my National Parks-related app, I use python to screen scrap and process National Parks data into the database.
Keep learning
I find that learning is an important skill a software engineer needs in order to survive in the industry. Perhaps it is even an essential skill for everyone regardless of their discipline, because the world changing so fast with the speed of innovation. It can be scary, venturing outside your comfort zone, but you will gain a lot of confidence every time you learn a new skill. For me, it has been a thrilling experience, and I can’t stop myself from wanting to learn more. I hope you’ll find your motivation and enjoy learning too!