Friday, July 8, 2016

Rubber ducky

I like unicorns.

It comes from childhood, when I would watch and re-watch The Last Unicorn every time I stayed home sick from school. The movie is DEEPLY ingrained in my brain, and I refer to it regularly for thematic inspiration in my every day life. It says some very interesting things about the living experience.

Recently one of my students learned about "rubber ducky" programming from the class TA. The phrase is a recognition that often when we are stuck on a problem, we just need SOMEONE to talk it out to. That someone doesn't actually have to answer a question, but just be a patient ear while we work it out aloud. In fact that someone doesn't even have to be a someone - they could instead be a something. Like a rubber ducky.

It's such a pervasive concept that developers often have rubber duckies on their desks in testament to it. Sometimes just explaining your problem aloud for someone else to grok is all it takes to get to the bottom of it.

As a gift to the class, this student bought rubber duckies for all of us. And for me, a special ducky indeed.

Saturday, July 2, 2016

Build tools

I was not too long ago talking to a fellow instructor (of back-end engineering in Ruby) when I casually mentioned build tools. He looked at me like I had two heads and said, "what's a build tool??"

Surely, I thought, I must have misspoken. "You know, build tools... like, for building your application for development or publication... Gulp, Grunt, Broccoli, npm scripts..."

He laughed. "Oh, of course. Yeah in Ruby we just use the asset pipeline. There's nothing to it."

A little shudder of jealousy ran through me. Or perhaps masochistic joy.

As a front-end developer, the complicated landscape of build tools is all I've ever known. Yes, some of the more robust frameworks come with their own CLI that make the build process significantly simpler, but there is still no agreed upon, universal way to build an application. And there is not likely to be one, at least for a long time. Because web development is such a fast changing and open source based community, our world is full to overflowing with opinions galore.

I am thinking this over as I prepare to introduce my current cohort of students to this mess of a situation. I have in the past taught Gulp, and webpack, and this time around I'm settling on plain old npm scripts. The scaffolding and build process 'tool' I've created is available on GitHub for all to use.

While I don't know that the world truly needs another basic build tool added to the list, it's nice to build something simple, not magical, and without a lot of fan fare. Beginners need easy access to development, so they can get their feet wet building and learning and building some more. I hope this project can ease the way a little for any devs out there who just need a place to build and practice.

Tuesday, June 28, 2016

Words matter

Words matter.

That's a lot to say for me; I often feel like a character from the Goonies, often saying common phrases just flat out wrong. "That's what I said, booty traps"...

But bad at phrases tho I may be, I recognize the importance of words. I recently saw a great talk by Kyle Simpson talking about readable code; one of his salient points was that readability most strongly correlates to previous exposure. The implication is that what really makes us good, efficient, effective at reading code is whether we're already used to reading that code. Whether we're in the 'in' crowd. You know, the secret society of code mongers. The private club of developers who already know.

Learning to code is like learning  a new language. In addition to training your brain to think like a stupid computer (yes, computers are stupid), you must also learn, no, memorize, intense amounts of vocabulary that have very little use outside of the field of development, sometimes even being relegated to the particular language you learn. I have met developers who say they study how people in different camps (Ruby, JavaScript, Java, etc), talk about common features, just so they can adopt the nuanced speech and not be found out as an interloper.

This is non-sense. Interloper. WHAT!? After years of working in the medical industry, I learned that the best healthcare professionals were those with the ability to talk about health issues to anyone, by using language that anyone could understand. And shouldn't our goal be to break down the barriers that keep people from accessing this industry? Given the prevalence of technology in our daily lives, the more and greater the variety of minds contributing to it, the better.

While common language and vocabulary are important, they are never as important as being able to get your idea across, regardless of the words you use. Work on communicating your ideas well, regardless of what your particular words say about your experience in the community.


Friday, June 17, 2016

Why I run red lights on my bike

Perhaps I'll be inviting unnecessary criticism.

But I admit that I often run red lights when I'm on my bike.

Sorry, moms. Before you get super freaked out, let me qualify. I don't advocate being reckless. I always wear a helmet, and I think you should too. I always STOP at red lights. I always look both ways before crossing the street. And I always wash the meat contaminated dishes in the dishwasher... I'm not a fool.

But here's the thing. Red lights are meant for cars. The sensor that triggers a light cycle is often not capable of registering me and my bike. If I'm the only person waiting at the light, I can end up waiting FOREVER. Or at least until a car pulls up behind me, and isn't shy about pulling close enough (far enough forward) to trigger the sensor buried under the road. In the past I have waited through several back to back full intersection cycles, with MY light never switching, before another car pulled up behind me.

And thus we arrive at the metaphorical nature of this point. This morning as I was riding into work, I started putting together the bigger implications of waiting at the red light for the mythical car to pull up behind me. I believe strongly in the existential philosophy of living our lives in the moment. What comes in our future is unknown, and the greatest happiness and satisfaction we can achieve in life comes from knowing and acting within our sphere of influence. We cannot live our lives fully if we expect others to solve our problems for us. We cannot wait forever for the car to pull up behind.

Sometimes this means shunning norms; sometimes it means going against the grain; sometimes it means breaking the rules.

Ultimately, we have to do what we believe is right. Change only comes from effort. Act with the intent of positive change; don't just wait for the change to come.

Thursday, June 9, 2016

Be Prepared

I start a new cohort of students on Monday. I've been busy preparing lecture notes, assignments, updating curriculum, and general planning. And all the while, I'm singing this:

Of course, it feels inappropriate to harken the evil villain plotting selfishly for the demise of his rival when thinking about my work as a teacher and mentor. Scar is evil. He doesn't have the interests of his charges at heart, ever, despite enlisting their help and depending on their service. And while real life motives are rarely so blatantly, one-sidedly evil, there's no lack of transparency in his vileness. Disney makes no effort to cast him as a character of ambiguous morals.

As a relevant analogy for the journey we (my students and I) are about to embark upon, it might be more appropriate to think about Simba's naiveté.

Pride (pun intended, I'm sure) is a strong theme in The Lion King. It's a great topic to focus on, especially in an industry so ripe with imposter syndrome, which is in large part driven by a fear of appearing incompetent. It's easy to get caught up in, and to think from time to time, like Simba, that all we need is this next bit of knowledge and then we'll be the king pin master.

Tempting tho it may be, that idea is false. We never know everything, and we never truly arrive. And while it's easy to stand in front of a class of students at the beginning of a learning journey and say this, it's much harder to remember it as someone in the leadership role of teacher. I am on a learning journey, just as are my students. And I am as subject to not knowing, and needing to seek mentorship as they.

It is humbling to feel the nerves of starting a new cohort, and beginning again on this crazy journey. I know that preparation can only take me so far. I'm excited, not just to see how much my students will learn and grow over the next 12 weeks, but also to see how much I will grow and learn from them. We move from unknowing to competence, and then discover deeper levels of unknowing. The journey is like a cycle... a circle, if you will.

And it moves us all.

Wednesday, May 25, 2016

Wobbly Circle

Lately I have been using Headspace as a meditation assistant, and I super love the app. In addition to the app's great content, they also have a super cute and enjoyable style that I really enjoy.

The audio player in the app is a circle that morphs slightly over time, growing and shrinking seemingly at random. If you watch the clock, tho, it is actually just an animation that repeats itself, and after a time begins to feel repetitive. For their application it's just fine, as you're not meant to be watching the player for long; you'll soon be meditating with your eyes closed. But, nonetheless, once I noticed that the animation was on repeat, I got to thinking how much cooler it would be if it were actually random.

There it is, written in vanilla JS onto a canvas element. You can find the code here on codepen.

I tried to add quite a bit of random to the circle as it morphs. The circle itself is 8 bezier curves, and its proportions are set based on the size of the canvas it renders into. The length of time the circle takes to change shape is chosen randomly but limited to 1-2 seconds. 2 anchor coordinates from the 8 curves are chosen at random for each move cycle. The distance and direction of the moves is also random, somewhere between -5-5%.



Monday, May 23, 2016

Rules (for interacting with people)


  • Ask for what you want, and then be OK with not getting it.
  • If you hurt someone, say you're sorry, and mean it.
  • If someone hurts you, tell them.
  • Take responsibility for your own needs.
  • Don't use your feelings to cast blame, even on yourself.
  • Cultivate happiness for other people when they are happy.
  • Cultivate kindness, always.  
  • Believe other people, especially when they are talking about themselves.
  • Don't expect them to change.
  • Be honest.
  • Request consent but don't push for it.
  • Talk to all interested parties if you want to change the rules.
  • Obey the rules you have agreed to follow.