As mentioned in my last post, I want to gain a deeper understanding of Software and Technology in general. I never received formal education in software engineering. Despite this, I'm currently the only full-time engineer at Homigo. There's a lot of responsibility here as one mistake could cost us a lot of money and a lot of unhappy customers.

Beyond learning practical workplace skills, I'm also tickling my fancy, so to speak. I find computer science to be a fascinating yet highly challenging field that I'd like to learn more about.

As an entrepreneurial person, I also want to better equip myself for the next technology company that I start.

I've developed a set of challenges and sub-goals for this year. I already know I probably won't be able to achieve all of these things. After all, one of my other goals is to prioritize my finite time. This means that sometimes other equally-important things will prevent me from achieving one of these sub- goals. As I mentioned previously, I hope to complete half of the following items:

Understand Networks

As a web developer I work every day with the interwebz. It's critical that I understand what's happening under the hood so as to make informed architectural decisions.

This challenge consists of:

- Completing the Networking for Web Devs course

- Completing the Client-Server Communications course

Contribute to an Open Source Project

I have been slacking very hard on this front. One area in particular that I am quite lazy in is reading other people's code. Contributing to an open source project would help me learn from others who are much more skilled and experienced than I am.

As of now, I am not sure which project I am going to contribute to. There are so many. But in order for this challenge to be considered complete, my code must be integrated into the codebase of the project.

From a quick search, I found this article which has already given me some ideas on what to contribute to.

As someone who works daily with React.js, Grommet looks like super promising project that I'd be curious to learn more about. This might actually be the project I choose to contribute to. I noticed they don't have an autocomplete component, so this could be a component I design for this library.

Actually Use my Arduino and Raspberry Pi kits

My love for technology is known to all. Because of this, I have been gifted several Arduino and Raspberry Pi kits. These are some of the best gifts I've ever gotten. The problem is, I've never taken the time to actually play around with them.

So this year I resolve to change that.

Redesign My Website

The goal of this is to improve my CSS skills and organize this website in a better way.

One thing I currently don't like how I can't categorize posts and search for specific topics.

Understand Algorithms

The prerequisite to this challenge is that I read about data structures

Algorithms are a core aspect of my job. But I lack the framework to think about an algorithms efficiency. I know the basics, but I don't feel satisfied knowing just the basics of this field. Proficiency in algorithm design and analysis is one of the pillars that compose a good engineer.

There are a few online classes that Udacity, edX, and Coursera have. I'll decide which to take once I feel ready to take the class.

Read Some Great Books

You'll know I've read these books when I post my notes to them here.

Secrets of the JavaScript Ninja

This is the first book on my list, and one I've begun reading already.

Algorithms and Data Structures

There's a really good book offered for free online that I'd like to use as my reference for learning Data Structures.

Its examples are written in Python, which is also a language that I'd like to understand better.

High Performance Browser Networking

This is the seminal book on networking for web developers. It goes into great detail on what web devs should be aware of when working with the web applications.

On JS Execution Context and Scope Chain

There is a great 2-part series on the JavaScript Execution Context and its Scope Chain, which I find quite illuminating. This is must-know knowledge for JS devs.

On Containerization

Containers are a great way to manage inconsistencies across various software environments. They aren't the easiest things to understand at first, but with a few articles I'm sure I'll be up to speed.


Charles Petzold's book looks quite interesting. He starts with the basic building blocks of computing (binary data) to eventually creating a computer.

Learn You A Haskell

I've wanted to learn a functional programming language and thought since Haskell is so hipster, why not give it a shot. The book is also meant for programmers who have never tried functional programming.

The Imposter's Handbook

This book is intended for people like me - devs in industry who did not receive formal education in the field of computer science. It's meant to cover at a high level the key concepts of the field.

Wish List

These are resources I found online that I may one day read but am not actively focused on doing so any time soon.

Full Stack Python

A practical introduction to Functional Programming