Thoughts of Geoff

Some writing by Geoff Petrie

On the Problems of Education in a Developer’s World

or,

How the Learning Voice Needs to Roundhouse Kick the Work Voice in the Face

N.Y. schools opening

Preface:

As a little background, I wrote the post below about a week or two ago. I’ve been sitting on it since.

The gist of the post is about my frustration in trying to get better or even keep up with skills and tools. I was blaming my deadlines and commitments for getting in the way.

While I was writing this post I came to the realization that only I could really make a difference in the jammed feeling I had. Deadlines will never go away. Commitments will never end. If I really wanted to pick up and understand something, then I had to make that happen for myself. No one else would do that for me.

So in the past couple of weeks I started to look at Twitter Bootstrap and then I rebuilt my personal site on it. (Bootstrap is amazing. I can’t recommend it more highly.) I took a couple of hours and got Octopress in place and moved my more substantial writing from my old Tumblr and put it in place right here. Additionally, I have started to take a more serious look at Python again. I also started to build and put up on GitHub a little Day One journal service pack that I’m having a ball building. Finally, I’m also seriously looking at Canvas and I am trying to figure out a way to prototype a Canvas web app that uses WebSockets.

This effort has significantly improved my spirit. I’m feeling creative and rejuvenated. While the deadlines haven’t gone away, I feel like I’m not deadline bound in my day any more. There are tons of new project possibilities out there now. It’s invigorating.

I had considered dumping this post entirely, but I thought it might be worth posting just to see where my head was at when I wrote this a few weeks back. I know I’m not the only person who gets in these sorts of ruts. Maybe this will resonate with someone else and they’ll be able to pull themselves into their creative zone like I seem to be doing now.

TL; DR

I have a long list of things I want to learn or get better at but I’m worried about taking time away from my current deadlines and obligations to really learn this stuff well. I know I’m not alone here, but I don’t have a good solution to this. The real take-away for me has been to accept that while thrashing and coming up with a solution for the moment may potentially take less time initially, the better, and less overall time intensive solution, is to take more time on the front end to really learn the tool and solution you want to implement.

Full Text

I’m frustrated. Here’s why:

This is an abbreviated list of stuff I currently want to learn or get deeper into:

Objective-C, Ruby and the Rails framework, Python and Django, JavaScript (JS data structures, jQuery), Twitter Bootstrap, HTML Boilerplate, Unity, PhoneGap, Sass, Vim, Sublime Text 2, CodeKit, CoffeeScript, Canvas, Web Sockets, Zen-Coding, CSS3, HTML5, Git, Wordpress and Jekyll.

Three points I need to make:

  1. As I said, this is an abbreviated list.
  2. I know a some of this stuff already. Some of it I know quite well, actually. I’ll touch on this point in a bit.
  3. This is only my development interests. This doesn’t cover the dozens of other hobbies I have as well.

So this is my dilemma: There is so much stuff to learn and so many things I want to learn so that I can maintain a positive forward direction in my development skill set, but I’m finding myself increasingly jammed for time. This jammed for time has less to do with needing better time management skills, and more to do with the fact that deadlines (some reasonable, others not so much) are giving me a feeling that there is no opportunity to stop and properly capture a skill.

So what do you do?

In the time you make for yourself you read blogs, and stack overflow, and documentation, and you network, and you read Twitter. But you have to limit the amount of time you do spend on those resources because while you’re doing that, there is a little voice in the back of your head that is screaming at you to be doing something.

CODE, < < EXPLETIVE > >!” is what mine usually says.

SPEND TIME WITH YOUR FAMILY” is another good one that comes up when it is 6:30 on a Friday evening.

What’s worse, is that while you’re reading about these awesome things that these people have already done, or about the solution so elegant that it brings a tear to your eye, you’re wondering about how the hell they found the time to work out such an awesome solution. How did they get so far ahead of their field that you’re reading about their work when you should be the one talking about a cool solution to some challenge?

So you stop reading about this amazing shit and get back to “work.”

If you’re unlucky[1], then you have a supervisor (a manager, director, whatever) who doesn’t really get what you do for a living. They count work by bug fixes or new features produced in the week.

The better situation is that your supervisor isn’t so much fixated on the bug fixes and so-called features produced, but they are focused on the deadline. This can make sense. An example would be that you really do need to clean up that thing that broke IE8 so that you can release code on production. I get that and that doesn’t make them a bad boss, it just means they hold themselves accountable to making a deadline[2].

If you’re lucky, you have a supervisor who understands what it means to be a developer. Perhaps they’re one as well. Maybe they’re competent enough to bounce ideas off of and get better direction. They understand that research and learning is part of the job.

If you have it made, you have a boss who understands that learning is the job! The code comes second. They definitely care about your product, but they absolutely understand the necessity of learning. They view that the success of the product comes from your own quality of education.

I feel that most of us don’t have that “made in the shade” situation. I believe that most of us have way too much stuff to do, way too many deadlines and feel way too stressed to even consider finding the time to check out that cool new thing, let alone spending time to work with it and understand it.

So what you do is you stick with the toolset you’ve cobbled together over the years and hope that it’ll be enough to get you through this current project. If it isn’t then you try to find a quick solution to the challenge you’re working on and find a way to implement that.

And this is the crazy part. This becomes the education process. You bump into a problem you don’t know how to solve in your current project and solve it due to desperation and hope that something sticks. And, really, you better hope something does. Because in three weeks to two months from now you’re going to need to revisit this quick fix solution you came up with and if nothing has stuck you’re going to need to relearn that solution all over again. Maybe this time it’ll stick better. Maybe not.

Let me describe my typical scenario:

I’m working on something and I know there must be a better way to do it. If I had time to research how to do it, I would know how to implement that better change. The problem is that I don’t have the luxury of that time while I’m working on this problem. But I’m almost certain that if I spent the time studying and understanding the solution, the time I spent on this problem would diminish as well and I would have this cool new skill in my toolkit. But there’s the rub. The work voice in the back of my head is asking me whether it would be a commensurate exchange on the time. Meaning: Will the time that I spend on learning this new thing be less than or equal to the time I would spend thrashing on this problem and coming up with the surface level understanding of a solution? I almost never feel like I can risk the better of the two options.

This sucks[3]. And it is always wrong[4]

Of course, when you take the lesser approach, this isn’t a real education process. When I do this, I just won’t fully comprehend what the solution entails. I have to understand it enough to be able to implement it, but beyond that I’m pretty much on to the next thing that’s on my list as soon as I deem it working. Like I say, it sucks.[5]

And this is where the second point from above comes into place. A lot of the stuff that’s on my list of things to learn are things I already have some or, in some cases, a lot of experience in, I just don’t feel like I have as deep of an understanding as I want, or it is a subject that I really want to be more proficient in.

I’ll use an easy example: Vim. God, I love using Vim. I think it is by far the best editor I have ever used. But when I got started on it, I spent a couple of weeks reading and practicing the first few chapters of O’Reilly’s Learning Vi and Vim and watching videos on Derek Wyatt’s Blog and really dove into Vim. I even wrote a Vim cheat sheet for myself.

But now, after Vim has been a part of my daily work for hours and hours, I’ve lost a lot of that thoughtfulness that went into it before. Sure my muscle memory is ridiculous when it comes to its use, but several times each day I bump into something while using it where I know there is a better way to do it but I feel that I don’t have time to research and learn it so I push on.

The insane thing for me about getting a better understanding of Vim is that it absolutely will have a time payoff benefit. Vim may be my most important tool. It’s how I do anything with code. The more I know about how to make Vim bend to my will, the more efficient I will become. Why haven’t I spent the time on this?

Now eventually, the learning voice does overwhelm the work voice because it just starts screaming at me.

STUDY, STUPID!” is usually what it sounds like.

So then I break away from my coding routine and take some time to look at something. But it isn’t long before the voice of getting back to work is screaming at me again and there’s just no way I have had a chance to get any real depth. The cycle is appalling.

I don’t have a clear solution here, unfortunately. This is reason the title states that this is about the problems of education. The way I figure, I have to find a way to silence the “work” voice by proving that the “study” voice makes me a better worker, even if the time spent studying doesn’t come out as a one to one correlation to the time spent thrashing.

UPDATE:

So as the bit before the cut mentions, for the moment I have found a way to get past this. Interestingly, it wasn’t by silencing the work voice, it was by changing that voice’s message.


  1. If you’re really unlucky, and I’ve lived this in the past, you have a boss who doesn’t understand development at all. All they want from you is product and it better not have a bug in it. You can do research on your own time. When you’re on “the clock” you better be writing lines of code, because that’s real work.  ↩

  2. Being totally deadline driven can be a major problem as well, but that discussion it outside the scope of this article.  ↩

  3. Truthfully, this sucks.  ↩

  4. The reality is that even if the time doesn’t even out, the time spent learning something new has so many more benefits than just getting the job done faster does. But this is outside the scope of this article.  ↩

  5. Seriously, this sucks.  ↩

Image “N.Y. schools opening” from the Library of Congress Flickr Page