JG logo

Joshua Gilless

It’s February and I’ve not really gone in depth with what I need to be learning this year. There’s a lot of cool stuff on my to-learn list, and I think it’s important to have a clear plan on not only what I want to learn, but how I’m going to achieve it.

This is a list of 4 topics that I think are important to my development in 2020. I will undoubtedly learn other things during this year, so this is just a list of things that I have a plan for. Keeping in mind, I’m not starting from nothing on any of these topics, I want to gain some deeper understanding and knowledge.

Programming

This is a funny topic for a person who’s been a programmer for several years to have as a “learn this” topic. However I think there are some gaps in my skills and knowledge that people with more formal CS degrees have and I don’t (my imposter syndrome is loud, y’all). I’m fairly good at a few things within the realm of computer science, so the gaps that I have, I’d like to fill to become a more complete programmer.

I found a website on Reddit or Twitter a billion years ago, bookmarked it and never came back to it. Teach Yourself CS promises a learning plan that if you complete it, you’ll know about as much as a graduate of a computer science program. There’s also an open source learning plan that looks pretty good. I’m self taught in a lot of things and there’s some aspects of CS that I’ve accidentally found that I’m better than I thought I was. The website is pretty nice for me since it is opinionated about what things are valuable to a CS education, and it has suggestions for both videos and books to learn the topic. I’ve been a software engineer for a while now and there’s certain things I know in each of these topics that I’ve picked up over time, but having a formality to it I think could help me at this stage in my career.

My plan here is to get my hands on a copy of Structure and Interpretation of Computer Programs (SICP) and go through it along with the SICP video lectures by Brian Harvey at UC Berkeley. I’ll do several projects from the book.

Go

I wrote some pretty decent Go in 2019 at work (Go also powers this website), and I started to read the Go book again. This year I’m going to finish the book, write some cool stuff in it and use the cool stuff on my website. I don’t have a particular capstone project in mind here, finishing the book and understanding different pieces of it are important to me, but the company I work for uses Go and there’s lots of little things that I’ll be doing in the language this year.

I have in mind adding Webmentions to my blog, and that would be a good place to build a little web service in Go.

I’d also like to build some kind of little command line tool here, I have an idea of a link shortener or a command line interface for this website or a Linklog section on my website that I publish to via command line.

Compilers

This is a topic that kinda got on my radar in the category of Stuff I Should Know when I was doing a lot of work with Webpack and Babel a year or so ago. There’s a lot of little cool things that you can do with pieces of a compiler, and I’d like to learn deeper in this realm.

I want to learn compiler basics. I sorta understand at a high level what’s happening, but I think it would be beneficial for me to write a toy language that lets you perform certain actions. Something that got me thinking was reading about APL, earlier this year, and that seems like something that’s a great place to start because you can implement pieces of it.

Jordan Scales tweeted a question about learning resources to write a compiler earlier this year, I bookmarked it because of the responses, I’ll go through some of those as well.

I’m going to start by following along with Gary Bernhardt’s A Compiler From Scratch video. From there, I’ll pick something a little deeper, Make A Lisp seems pretty straightforward. Additionally, I’ll get my hands on Language Implementation Patterns for what looks like a practical reference.

Angular Dart

I’m fairly good with React, but I haven’t really used any other frontend frameworks, so I’d like to write something in a different framework. I wrote a minesweeper clone last year in TypeScript, but stuck to the familiar React. I do tons of little things in JavaScript, so I think this time I’d like to do something that pushes me out of the React ecosystem and into something new. I’m picking Angular Dart for a couple of reasons: Dart (cool new OO language, yay) and Angular (cool old framework). There are paradigms that I learned from React that translate pretty well to Vue and Preact, so I’d like to get a little further from my comfort zone this time.

Learning plan to come, but it might get to be learning for a work project!