30 Days of Writing, Day 15: How I Learn Programming Languages and Technologies

Over the past few months I’ve learned a lot of different programming languages and web development techniques: ReactJS/“modern” JavaScript, Redis, Domain-Driven Design, Elixir/Phoenix, and AWS/Chef/Docker. While I’m still at various levels from newbie to intermediate, I think I’ve gotten a better grasp of how to learn new technologies now. Here’s how I did it:

  1. Devote a few hours reading about the possible use case of that technology. For 2018, my goal was to expand to full-stack status (front-end framework to Rails to servers). I read a ton about React and AWS before I started coding.

  2. Find someone you can ask questions. For React/Javascript, it was my friend Aaron. For Elixir/Phoenix, my friend Norman. You can also find a lot of helpful people in Slack channels and subreddits. This is very important because you can learn the technical details of things but it’s really faster if you have a guiding compass so you can have some structured learning. If I didn’t ask questions to my homies, I would just by spraying and praying and falling down into a rabbit hole of blog posts and Github repositories.

  3. Get a book or something to add to your structured learning. I bought Full Stack React for ReactJS (used another person’s credit card, actually, but it’s all good lol) and some lessons from A Cloud Guru for server management. Each of them cost about 20 dollars each. While this is expensive in Filipino terms I know that I can make it up if I learn the skill. For me, spending money is a proof of stake and helpful evidence that I’ll be investing my time in learning that skill. Also it adds to the structured learning thing that I was talking about.

  4. After figuring out some things/becoming “sort of fluent” with that new technology, it’s time to test it out. Don’t worry about tests and whatever. Just go YOLO-style and code. Ideally you should have a project for each technology that you have. So for me it’s Daryllxd/a web and command-line application I use to manage my life. For Elixir I also tried to make a Habits app. I’m still interested in Elixir but right now I’m concentrating on Ruby to get a job.

  5. When you’re hacking away, get feedback from people. Constantly ask people in subreddits and Stack Overflow and Slack and in real life for feedback. Remember that the goal of learning is to put things in your brain and be fluent in that technology. Once that tech is in your brain it doesn’t matter where you learned it from. Honestly for this one I think it’s important to not have an ego. Remember to get your self-worth not from the code but from your ability as a learner. I don’t mind looking like an idiot right now because I put in the work every day anyway. So it’s just all about a matter of being patient and getting maximum learnings per day.

  6. Have a “TIL” or Today I Learned repo or document or whatever. Just somewhere where you can measure your progress. I have one, https://til.daryll.codes. I like having that because it’s like a written log of “your progress”. When you get to 30 or so entries you’ll love writing on there periodically. I have 250+ entries and I’m very proud of those.

  7. Trust the process. Embrace the suck. Make mistakes. You have to love making mistakes because that’s how you will learn. When I was first learning out databases, I think it took me more than an hour to connect to a database with C#. That’s all good because I never made that same mistake again. Just keep on putting the work boys. That’s how you “get good”.

Okay, that was it. Just an addendum, find a place where you can do your deep work in. It’s very hard to learn things if you’re constantly interrupted. Find a quiet place and turn off your phone so you can put 2-3 hours of focused work in. Anyway, that was that. I’m still trying to refine my learning patterns and trying to string together days of productivity. See you!