Autodidact

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.

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.

Code

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.