Every 6 months to a year, I like to write a post that reflects back on what I’ve learned, where I plan on heading, and how that compares to my original plan. Without further ado, time to look at what’s happened.

Goals






So how did the first half of 2017 really go?

My checkmarks are rather deceiving. I’d say that I technically finished all of those bullet points but in reality, I finished all of them rather poorly.

I did work on OMEN, my markdown editor, for quite some time but didn’t get anywhere with it. Eventually, I abandoned this project that I poured countless hours into. I’ve had a few app ideas on my list all year but never got anywhere with it either

I also created a few libraries under the org name “Asteridux”. I created a few Redux-related libraries and then just dropped everything. Again, I’ve got a few ideas for libs (and even created the repos for them) but that’s about it. My crowning achievement of that repo is a library called Skorice that I don’t use anywhere.

I became a contributor to a rather popular AngularJS/Redux library called ng-redux so we’ll see where that goes.

I went through a crash course on Elixir and Go but ultimately dropped both. I still plan to do some Go but I can’t be confident that I won’t drop it again.

And lastly, this has been the year of Angular for me. I wrote OMEN in Angular, I wrote a couple of other smaller apps and we transitioned to Angular from AngularJS at work. Lots of TypeScript and lots of Angular for me this year.

What I’ve learned

This has been my slowest year in a while. And it has a lot to do with my personal life and my work life. In my personal life, my son was born which means I’m sorely lacking sleep. And in my work life, I was stuck on a project from February-ish to July which dealt with lots of spreadsheets and lots of JS to manipulate that kind of data. Since then, things have just been busy.

I don’t get a ton of personal time and I’ve shifted it away from code and toward health.

That meant, little front-end code (or back-end code), and little time. But without further ado.

Way More JS…and TS
One the things I had to deal with in the past 9 months has just been digging deeper into javascript, ES2015+, and compilers.

Whilst wrestling with Excel data, I used a ton of ES2015+ methods for destructuring, used a ton of reducers, dug into immutability a bit, and overall, used features of JS that I never thought about in the past.

I also explored async/await and was really surprised by how much it can clean up JS. Async/await has definitely been one of my favorite new JS features to hit Node with Node 8. It’s kind of funny seeing my code progression from February to today because I see this slow creep of ES2016+ features into my codebase.

I’m often checking if JS has new built-ins for basic functionality that I used to have to write on my own (like Object to Array conversion which you can use Object.values for) and it’s kind of fun finding out that the unnoticed features of new ES releases really clean up the language.

Just a few months back, I also had the idea of just writing everything in TypeScript. I dug into it and my previous experience haven’t changed: it’s an absolutely lovely language. Optional typing, access to things like interfaces and abstract classes, has been amazing.

It felt like I was writing documentation AND tests into my source code and it felt natural. Using it in combination with Angular has been also great. The two go hand in hand.

Performance, edge cases, and scaling
You know how the dev community has that saying that a lot of advanced tools and new revolutionary libraries only start to make sense when you either hit a certain point in scale or get to an area of development where these things make sense?

I hit that. And I hit that hard.

Here’s what I mean. Imagine a Redux application. Basic Redux architecture is dead-simple to understand: action goes in, runs through a reducer, state comes out. It’s one big glorified function.

The problem comes with scaling it out. How do you store data available only to the current route? Where do you put logic? Reducer, connector, or action? What happens when you need to respond to async actions? How do you keep your async actions organized?

I dug a little bit into Redux Sagas and some other solutions and they all started to make sense to me. But only at THIS point did they make sense. For a handful of thunks, Sagas is not only an overkill, it’s a learning detriment. Don’t learn it till you need it but learn WHEN you’ll need it.

Webpack & Rollup
I started working with Webpack late last year and this year, I switched over to Webpack 2. I’m currently using Webpack to compile several of my own apps, apps at work, and a few other things. It’s been a joy to use and I’m planning to write a quick-start guide because people really do overthink this tool. It’s simple and doesn’t really require much in-depth knowledge in order to use it.

Same goes with Rollup. I looked into Rollup when I realized that bundling libraries using webpack is less than ideal. In fact, it sucks. There is a lot of boilerplate code meant for the browser that libraries don’t need. Using straight-up babel always ended up in some kind of disaster for me so I decided to look into Rollup and use it to compile my ES2015+ code into ES5 code, and also tree-shake it and I’d say, make it tree-shakeable.

I saved most of the boilerplate for using the two in my library/app started called Asteridux.

More Libraries
This year, I started an organization called Asteridux. I meant to use it for Redux-related tools (Asterisk + Redux or *dux) but I ended up just building a bunch of libraries and starting several new projects.

There was:

  • Asteridux – the organization’s namesake which became my go-to library and app starter
  • Paradux-enhancer – a Redux enhancer that allows the injection of runtime reducers (currently empty, but already implemented/tested)
  • Paradux – a wrapper for Redux with the same functionality as the enhancer above.
  • Skorice – a JS Object structure validator and in my opinion, it’s fucking amazing. I’ve used its previous iteration for over three years.
  • Alterdux – a minimalist reimplementation of Redux
  • Kompilator – not started yet but this is an effort to combine industry best practices in terms of linting, transpiling, and bundling apps into a single tool.
  • Pre-boiledegg – a minimalist preact boilerplate.

I also became a core-contributor to the AngularJS library called ng-redux

Game Development
At some point this year, I got in touch with some great developers, ones that have produced widely known and played games. I asked them for advice on how to get into Game development and while the advice was rather simple, I found myself newly enthused by the prospect of writing my own games.

Even though I followed a tutorial, I managed to build two games and I’m getting ready to write a third one. This has been a pretty amazing experience because a few important concepts finally clicked for me:

  1. using Unity for game development – I’ve had a really hard time reconciling how the GUI editor works with the scripts. After going through a few tutorials, it finally made sense: how the GUI editor connects with the scripts and how the scripts communicate back.
  2. avoiding going low-level – I started learning gamedev quite a while ago by trying to write my own engine. I tried it again. And my impression of GameDev has been that it’s a TON of math and algorithms. I worked with Unity a bit and realized that math and those algorithms became options, toggles, and other GUI controls that I could easily fiddle with.

I also got a chance to work with C# and just like the last few times I did that, I absolutely loved it. I’d say that it pushed me to get into TypeScript.

Language Learning
Language learning has been a struggle for me for a while. Javascript is difficult to leave. Especially when compile-to-JS languages exist and satisfy that itch of trying something new but not too new.

I tried to learn Golang and Elixir and I did to some capacity. I breezed right through Elixir’s Koans but hit a roadblock when I couldn’t figure out what to do next. I wanted to build apps but the front-end has been my bread and butter on personal projects. I didn’t have much need of a back-end or tooling (that didn’t dive into JS tooling).

They’re both great languages and taught me a lot when I started playing around with them (especially Elixir) but I couldn’t do it. I just couldn’t get excited about writing a back-end application.

I tried to use Hugo with Golang and while it’s still on the table, I’m, again, having a hard time writing anything exciting.

So, I go another year promising myself to learn Golang or Elixir, and abandoning it for the very same reason yet again.

What about the rest of the year?

I only have a few months left! So what can I do during that time?

Unlofty goals
I’m aiming very low for the rest of the year. Side projects are overwhelming, time consuming, and generally draining if you overdo it. I tend to overdo it often and become overconfident in my time and my energy to work on projects.

I’ve been trying to keep things reigned in as much as possible and that’s my goal for the rest of the year.

Finish dev projects
I have a few projects on my plate that I’d like to finish up. Namely, my Preact boilerplate, Kompilator, and definitely transitioning Paradux into an enhancer because I’ve seen people talk about that functionality all the time and asking how they could add it to Redux.

I’m confident I can finish these projects quite quickly if I set my mind to it and nothing else comes up.

A podcast, a vlog? I’m just not sure
I’ve been experimenting with media other than blogging for over a year and didn’t get far with any of them. I got 7 vlogs for the year which is barely anything. I did a podcast but never got it up and working. And I made a few tutorial videos.

I enjoyed the tutorial videos the most and the podcasts were the easiest to produce. I’m hoping to set things up a little better to do more of podcasting or more of video tutorials.

But to be honest, it’s a drain to not only produce good code, maintain a healthy lifestyle, have some work/life balance, and write/produce tutorials. So we’ll see how that goes.

Writing
I usually like to include my non-coding goals in these reviews as well and one of my biggest goals for this year has been to release a sequel to a book I wrote nearly ten years ago at this point. I wrote the sequel but editing it has been extremely difficult. The main reason is that it’s a young adult science fiction book and that’s no longer a genre that I enjoy reading or writing.

But that’s definitely my goal for the rest of the year.

Focus and persistence
So far, my biggest problem has always been focus and persistence. Honestly, it doesn’t matter what project I work on as long as I’m doing something I enjoy and find productive. What’s not productive is switching context constantly because I can’t make up my mind about what I’d like to work on.

I’ve been doing better with some project management tools but honestly, it’s just not enough!