My Resolution Guidelines

So here’s the obligatory New Year’s Resolution post. I’m not going to tell you what my resolutions are, or what yours should be, but I have been mulling over some guiding principles for quite a while. These aren’t resolutions, per se. But they are guideposts I try to keep in mind personally when thinking about my resolutions, or in fact, whenever I’m taking any action.

So here you go, my four principles. These are all in the form of “X is greater than Y”. In each case, this does not mean that X is holy and Y is evil. It just means that when all else is equal, I would prefer to give preference to X over Y.

1. Creation is greater than Consumption.

If I have a chance to create something versus consume something that someone else has created, I like to focus on creating. Whether this means writing a blog post or tutorial, making a video, publishing some open source experiments, building an app or game, going down into the shop and doing some wood or metal working or even doing some home improvements, creating something either for myself or for someone else will always be priority for me.

This doesn’t mean that consumption is bad. Nothing wrong with some Netflix and chill. I do some casual gaming on Steam, etc. and I’m even thinking of getting a more decent gaming rig this year to try a few more serious games. But personally, I need to keep in mind that games and popular media can be traps.

Yeah, sometimes I find myself at the end of an evening, having done nothing more than surfing imgur, reddit, YouTube and my RSS feed all night. It doesn’t feel very good. Other nights, I pull myself away from the computer after working on some long post or open source library all evening, with my head full of plans on where to go with it next. The latter is far more fulfilling. To me. Personally.

2. Enlightenment is greater than Entertainment.

Whenever I create something that has nothing but entertainment value, I feel empty. I have a side site called Art From Code where I just post algorithmically generated images and occasionally animations. Every once in a while, I get back into it for a little bit. But it never lasts very long because it’s just me saying, “Look at this cool thing I made.” And maybe some other people come along and say, “Hey, I like that cool thing you made.” And it ends there. That’s really boring for me.

I guess that’s why artists like to go on and on about their visions and inspirations for various pieces. I’m convinced that a lot of that stuff is dreamed up after the pieces are complete, but I understand the sentiment to explain what’s behind a particular work. That’s why I prefer to do stuff with open source. Even with computer-generated art, I like to share the code that created the image. It’s not some pseudo-intellectual artist’s statement about a dream I had, it’s literally what I did that brought that image about.

Hopefully, by sharing that, someone else will have some similar idea pop into their head and they can go riff on it and do some creation of their own.

Of course, I often go further than just sharing the code, and wind up writing tutorials or books or doing videos or talks on how I did things. And nothing beats the feeling of someone emailing to thank me for some bit of info I passed on, with a link to some project they were able to do because of that. It always makes my day.

3. Advice is greater than Authority.

So many articles and tutorials are designed, I think, not so much to teach, but to build up the egos of the authors. You know the ones I’m talking about:

“Everything you know about ____ is wrong!”

“The right way to ____.”

“10 things you should be doing in ____.”

“You’re doing ____ all wrong.”

A lot of these are outright clickbait, designed to create controversy. Others are from people who have learned some stuff about some stuff and have taken it upon themselves to instruct the world on the right way to do that stuff. Apparently, by speaking like an authority, you become an authority. At least in your own mind. And often in the minds of those coming newly to a subject.

I’m not perfect, but I intentionally try to avoid such a tone whenever I’m writing an article or tutorial. I actually do word searches for words like “should” before publishing an article. It’s a word that often indicates that I’ve slipped into authoritarian mode. I’m not saying I forbid the use of the word in my writing, I just look extra close when I do find myself using it.

Now, obviously, there are times when you are explaining some process to an audience and there is a common pitfall you want to warn them about. Say there’s a situation where strategy A is going to cause them a big headache and strategy B is a much better solution. You could write:

“Don’t use strategy A! It’s wrong. Strategy B is the right way to do this.”

But now you’ve just stuck the reader with a fixed idea that strategy A is bad and strategy B is good, with no real understanding of why. They’ll probably go off and repeat this to others, with just as much authority. And just as little explanation. Alternately, you might want to write:

“You could use strategy A here, but if you do that, here’s what you’re going to run into… [explain the pitfalls] Instead, you might want to look at strategy B, which has these advantages in this situation… [explain the benefits]”

There are no stone tablets with right and wrong coding practices written on them. Or design practices, or really any other practices in any field. There are different ways of doing just about anything that can be done. Each of those ways will have its benefits and its disadvantages. What we call the “right” way is usually one of the ways where the benefits greatly outweigh the disadvantages. Rather than just dictating “right and wrong”, why not explain the details and let them decide? It’s more work, but I find it much more valuable.

4. Commendation is greater than Condemnation.

Everything I’ve talked about so far has mostly to do with things you create yourself. This last one has more to do with responding to things others are doing or have created.

Another easy way to stroke one’s own ego is to put down something that someone else has done. Apparently, some people feel that if they are able to criticize something, they must be better than that thing they are criticizing. They are able to see the flaws in the product that the author could not see. So we get movie and book reviewers who have never written anything other than movie and book reviews. Software and hardware reviewers who have never built anything real or virtual. And of course, political experts who have never been in charge of anything other than their own life (and have often failed miserably at that).

If you use some software or hardware that has a bug, it’s way too easy to write some scathing review about how the developers are a bunch of idiots. You feel justified. I used to do this all the time. I’m trying to get out of that. I’ve actually found that directly communicating to the developer or company and explaining the issue usually works far better. Not always, but often enough to be a much better first attempt. If I do wind up posting a bad review about anything, I try really hard to not let my emotions get too involved. And I try to remember that there are real people behind the product – developers or creators like me, who are not perfect, but generally aren’t idiots.

Along with this, I’ve made a real effort to commend those things I really like. If I use some software or device or service that I like, I’ll tweet about it, tell people about it, leave a positive review about it. Usually we are only driven to give feedback when something goes wrong and we get pissed off. If something just works the way we expected it to, we go on our happy way without another thought. So I’ve been trying to go back through my purchase histories now and then and do positive reviews for all the things I bought. Particularly for smaller companies, individuals, eBay sellers, etc., whose livelihood depends on positive word of mouth.

I’ll even sometimes send a personal note to the seller/creator if I particularly liked something I bought or used. I know the effect this has because people often do the same for my books, videos, tutorials, etc. and it always puts me in a good mood when I get one of those notes.

Rewarding positive behavior can be just as powerful as punishing bad. Sometimes a bit of both is needed. But if I had to focus on one, it would be the former.

Summary

There is a lot of negativity in the world. It’s tempting to fight back at bad things with more negativity. But if we do that we just have negative on top of negative. Someone somewhere needs to do something positive once in a while. All of the above are focused on adding some positivity back into the world, lifting others up in the hopes that they’ll do the same for me now and then.

Have a great new year!

2017 in Review

It’s that time of year when we look back to see how things have gone in the last year, what we accomplished, how well we stuck to our goals, any major changes – good or bad, and start making plans for the next year. All arbitrarily based on a calendar system someone made up centuries ago, but so be it. If there’s no natural origin point, make one up.

2017 was a year of massive change for me. I changed companies once and changed jobs twice. And to a large degree, I actually changed careers once. I abandoned one coding platform, ramped up on another one and started learning an entirely new one.

My Job and Career

When the year started, I was working at a company called Dreamsocket, doing mostly Android work, with some web work and helping out now and then on iOS. I’d been there nearly three years and learned a whole lot. It’s a small company that does way more work than you would imagine possible. Award-winning, high profile work. It was an honor to be part of a lot of those projects. But I was feeling the urge to move on. It was just a feeling. I hadn’t gotten to the point of actually looking for another job. But then Steff, a friend and former coworker at two different companies reached out and asked if I’d be interested in coming to have a chat where he was working.

The company was Notarize. They do on-line notarizations. Not too exciting, I thought. But sure, worth a chat. As it turned out, I wound up being impressed enough with the people and technology that I wound up accepting an offer and became part of the web team. It’s all React, with Relay and GraphQL. Rails backend. In other words, a whole bunch of technology I knew almost nothing about. The first couple of months were a struggle. Although I came on as a senior engineer, I felt like a total noob. But I eventually found my feet and got productive and feel like I’ve been doing pretty well in terms of helping shape the team’s best practices, improving processes, improving the build, etc.

The company has been growing fast. There were 6 developers before me. Now there are close to 30. A month or so after I started there, Steff became the Engineering Manager. As we continued to grow, we needed additional managers. In just about every company I’ve worked for in my career as a developer, I’ve had some kind of manager role offered to me. I’ve never been interested. I just wanted to code. At Notarize, it was different. I really liked the way Steff was defining the role. It aligned with what I really wanted to do – help other developers be successful. So I volunteered. It’s very different. Much less coding, but I’m really enjoying getting to know all the engineers more and helping align what they want to do with what the company needs to get done. I have 8 developers I’m working with. Soon to be more. Working with Steff has been great. We see most things eye to eye and have a lot of agreement on where we should be headed. So that’s my job and the start of my budding new career.

Personal Projects

In the last few years, I’ve done a lot of physical making of stuff. Woodworking, knife making, leather work, blacksmithing. It’s been great, but it’s taken a back seat this year. Mostly due to the new job, which has required learning a whole lot of new stuff. There’s also the commute factor. For the previous four years, I was working at home. At the end of the day, I’d just pop downstairs into the shop and do an hour’s work before dinner. Or even get something done in the morning before work. I’m starting to feel the urge to build something these days though. I’m planning to at least get down into the workshop and do some cleaning up and organizing before New Years, and hopefully get a few projects done in the coming year.

As for personal coding projects, at the beginning of 2017, I started a new BIT-101 Lab. This was kind of a revival of my earliest BIT-101 Flash-based experiments lab. I had hoped to continue the experiment-a-day for the full year, but the new job did impact that. I’d be coming home and learning about React and Relay and Ruby and Rails. I had a backlog of daily pieces which acted as a buffer for a while, but when those ran out, I didn’t have the time to continue doing more.

Eventually, as I stabilized in the new job, I started being a bit more relaxed after work and had the urge to learn something new. I’ve been coding graphics and animation in JavaScript and Canvas for years. I really felt it was time to learn a new language though. Two that I was really interested in were Rust and Go. I somewhat randomly chose Rust, and for the last couple of months, that has been consuming me. It at once feels very familiar, but is also so fundamentally different than any other language I’ve worked in. It’s been a real challenge, but not in any overwhelming sense. I’ve been able to get productive in Rust while I continue to learn its weird nuances. I’ve been porting over a lot of my JavaScript graphics libraries. I’ve discovered that porting code you are really familiar with is a great way to learn a new language. You know exactly what you are trying to do. You just need to know how to express that in the new language’s constructs. I’ve already published one article on what I’m doing, and have plans for more to come.

I haven’t gone deep into animation with Rust. I’ve been using Cairo graphics, which really just generates image files which I save to disk. I have got a setup going where I can very easily generate an image sequence and convert it into an animated gif. Eventually, I want to explore the Piston game engine. More for its interactive animation capabilities than actually creating games. But who knows where that will go.

Personal Life

Not a whole lot to report here. I’m a year older than I was last year, slowly working my way through my sixth decade on this planet. (No, that doesn’t mean I’m in my 60s. Do the math!) There’s a lot to be said for getting older though. As your own mortality becomes more real to you, a lot of BS falls away. A lot of things you used to fret over now seem silly. You start to focus on what’s really important. And you realize that what is important is an individual thing that nobody can define for you, and you can’t define for anyone else.

I guess I’ll just end on that existentially inspirational note. I’m honestly excited for what 2018 will bring!