John's Blog Zone

git - in - email

In an Instant

November 17, 2016

In an instant, everything fell into place: I got a job offer at JWPlayer, I accepted that offer, I quit my job at DataOnline, I got a 1-bedroom in Kips Bay, and I moved out from my Grandmother's duplex in Bayonne. I started May 1st and so far, so good. I work longer hours but I love the job and I work on a great team. The company is doing great. Living in Manhattan is exhausting but fun and worth it. Life's good.

Since moving and starting this new job I've been focusing on growing my (non-programming) hobbies and (non-programming) personal skills. I program enough during the day to scratch that itch - which usually leaves me wanting to do something else. I've picked up biking and homebrewing and have been working on myself. I stopped going to meetups. Maybe I burned out. So it goes. But as my life sets into something resembling balance I'm finding that I want to have side projects again, speak at meetups again. I'm typing this at BrooklynJS. I'm working on a fun side project. I can't do this every day but every now and then is enough.

The (First) Talk

March 20, 2016

This past Wednesday (March 16th), I gave my first meetup talk ever at the nodejs NYC meetup - and it went pretty damn well. It was a pleasant surprise since I'm rather used to the typical first-try blunder. There were about 30-40 people in attendance, and photo evidence of my time on stage shows not a single person on their smartphone. Victory indeed.

My topic was on using React higher-order components to make D3 components responsive without sacrificing testability or reusability. Not the most riveting topic, but suprisingly few people know about HOCs and I was glad to educate. It also gave me a chance to soapbox about the virtues of functional programming (which will be big soon, I swear).

I think that a large part of my success can be credited to the dozens of talks I've sat in on before making my own. I noticted that the most successful ones hardly talk about code - they're mostly about ideas and the personal connection to their topic. Talking to a friend afterwards, he put it nicely: "Your first job is to entertain, and the second is to educate. If you've done the first you've already won". If your audience is asleep, what have they learned?

Check out the demo and slides 👀

Surfacing Knowledge

February 23, 2016

Have you ever tried explaining something you use or know well, only to be find yourself stuttering, stumbling, and floundering about? The words are right on the tip of your tongue - stuck firmly, and unable to shake loose. What gives? As a frequent beginner I've know this feeling many times before. Since realizing this I've made a conscious effort to practice what I call "surfacing knowledge". Surfacing knowledge is the act of bringing succinct bits of the stuff you know, the stuff you know you know, right up to the top layers of your brain. Right where the knowledge is ready to be shared and explained effortlessly, a place where you shouldn't have to dig deep or look up-and-to-the-left to find them.

The key to surfacing knowledge is in the distillation of wide topics into grokkable bytes simple enough for a beginner to understand. It's taking the 0.0001" view and transforming it into the 1000". A sentence or two should be more than enough to get your idea across - any more, and you risk glazed eyes. The funny thing is that software engineering principles provide a pretty good guide to sufarcing knowledge. Composing small bytes together into larger ideas forms the basis of explaining complex topics without loosing your audience.

It's worthwhile to surface knowledge periodically, but even more so to practice it consistently and almost subconsciously. Whenever I learn something new I always imagine having to explain it to someone who knows absolutely nothing. It helps me solidifiy my own understanding and share it when I need to. When I'm bored and idle I sometimes reflect on what I've been learning and surface it manually. Blog posts, open-source projects, and meetups are also great for this. Practice it often enough and eventually you'll be surfacing on autopilot. ✈️

Site Refresh

February 07, 2015

Well I finally did it. I made a new blog without any frameworks or javascript. And it was fun. It's a stark contrast to my first blog ever which was built on the MEAN stack, had a 100 line grunt file, and way too many npm packages. That was a mistake, but in my defense it was primarily a learning exercies. It feels good to finally unplug it though. As much as I enjoy playing with the lastest frameworks (especially React), I found it refreshing to make things with plain old vanilla HTML/CSS. It was also rewarding to study the arcane and long-forgotten art of static web development. There's a lot of framework-agnostic knowledge within which will make you a better developer. As a bonus, I get to show off my rad photography skills.

Gotta go fast(er)

December 29, 2015

Programming is also hard. Style is hard. Programming style? Doubly so. What's easy is to ignore style altogether and Move Fast™. But style is one of the most important aspects of writing good code - and it can make you go faster.

Simply put, style is the way code is presented. Indenting, whitespace, variable naming, bracketing, capitalization, and too much to worry about fall under this category. But the simple placement of characters is an oversimplification. A better definition is that style is the intent behind the way code is presented. Style is used to display code in such a way that it's readable, maintainable, and in some cases, more performant.

Luckily for you (and me), style is easily stolen. In fact, it's even encouraged! The linter is an invaluable tool to introduce and maintain style based on what a community of developers feel is correct. Linters vary in their degree of opinion and extremes at which they force their style upon you, and are even available for uncool languges like C#. Good linters can point out silly mistakes or help optimize code - ESLint will point out when you should make use of const (or when you can't), and reminds you when you've accidentally for ined an object. Some linters like ReSharper will even refactor code for you across entire solutions. For Javascript, I use ESLint with Airbnb's styleguide and an additional guide made by a friend of mine. I used to use JSHint, but I recently switched because I wanted more style. For C#, ReSharper is bar none the best.

So how does style make you move fast? At first, it probably doesn't. Switching from JSHint to ESLint introduced 50+ errors across one of my smaller projects (and you shouldn't leave red squiggles alone). But adopting a good style gives your code consistency. Consistency gives you (or anyone reading your code) the ability to infer properties and behavior without having to refer back to initial declaration or scan line by line. Essentially, it gives you a mental code cache. With consistent names, you don't have to peck around for where the variable is actually declared to learn its access modifier. No more scrolling up and down to figure out what a module exports with consistent declaration location. When indentation is consistent, it's much easier to see what object another is encapsulated in. Even seemingly trivial things like whitespace before a bracket makes code more legible. Since programming 90% reading code (and 10% writing), having consistent code makes 90% of your job easier. So if you don't have style - get some 💈.

ManhattanJS

November 17, 2015

Last week was my first visit to the ManhattanJS meetup. And it was awesome. I've been to the AngularJS NYC meetup before but had a mixed experience. In a word, it was sterile - carefully prepared snacks, bouncers at the door, and people standing around awkwardly with hands in pocket. Everyone seemed to know everyone else (but me). The talk was interesting, but I left early.

But ManhattanJS was awesome. Beer, pizza, and a nice communal layout which made it easy to jump into different groups. Everyone was talking. There was music playing. It was loud. I got into discussions about how awesome Ember, microservice fetishes, and developer life in NYC. After the food, we shuffled over to the adjacent room for the main show - battledecks, followed by a tech talk and a 'passion' talk. For the unaware, battledecks is a game played by giving a presentation about a random set of powerpoint slides in front of an audience. I didn't participate but after a few beers I was wishing I had.

The next talk was about hypercard (Apple's 1998 edition of web technology), which humorously mocked the webdev trends with retro tech fads. Soon after was the tech talk. The topic was Mobiledoc, a new way of writing platform-agnostic markup with a bunch of cool features. And then came the 'passion talk'. Each event the organizers choose from a pool of members willing to give a talk about any topic they're passionate about. This event's talk was about YAF - young adult fiction. Animorphs, specifically, and how reading them helped her navigate emotional stress. And how Ellimist, who split into several pieces (each with a different function) when tricked into a black hole, was able to defeat Crayak with his newfound modular nature. Strength over intergalactic beasts - another great benefit of using microservices! Overall, ManhattanJS was a great experience. Next adventure - BrooklynJS!

Uncubed - A live blag

November 3, 2015