Category Archives: geek

On this page:

Reflecting on my growth as a programmer

One of the things I realized from dealing with that programming issue is that I don’t have a mature development workflow for front-end work yet. On previous projects, I focused mostly on back-end development. I had somewhat gotten the hang of test-driven development and code coverage when using Rails before, and I set up an issue tracker for my previous teams. For my main consulting engagement, I shifted to working on mostly HTML, Javascript, and CSS. I’d handled a bit of that before, but we usually worked with designers who did most of the heavy lifting (and the cross-browser fiddliness). Over the past two years,  I picked up more JQuery and Angular, fought with Internet Explorer 7 and then 8, and explored Chrome’s developer tools a bit more.

I didn’t have things quite set up the way I think other people have. I felt mildly guilty about installing programs that were not available from the client’s internal software site, although Emacs was definitely worth the twinge of unease. Even the version control I used was ad-hoc, using Git on my computer to manage snippets for copying and pasting. I still haven’t mastered the Javascript debugger in Google Chrome, much less the tools available for other browsers. (Hence all the grief Internet Explorer gave me.) I didn’t have a test framework set up, so I often committed regression errors and other mistakes. I haven’t yet internalized all the cool development tools in Emacs, like Smartparens and Magit. (I’m slowly getting the hang of multiple-cursors-mode, though!) In terms of workflow maturity, I felt more like someone a few years out of university (or maybe even someone in their final year of classes!), and definitely like someone cobbling things together instead of picking up practices from a well-running team.

My main consulting engagement is coming to a close, but I’m looking forward to learning more about the craft of software development. I have a few personal projects to practise on, and it might be easier to Do The Right Thing when you’re less worried about potentially wasting the client’s time. I’m looking forward to familiarizing myself with more of the nifty features in Emacs. I’m also looking forward to immersing myself in the right ways to do things with popular frameworks, including testing and deployment.

I’d like to become a good programmer someday. What would that be like? For the particular way that I work–a generalist pulling together different things quickly–a good programmer might be one who has a neatly organized library of snippets, and who writes modular code with simple tests that exercise different functionality. Using a debugger, the good programmer would be able to dig into other people’s code, figuring out even things that aren’t documented. That programmer would also be able to quickly prototype and build well-designed interfaces. Things don’t have to win awards, but the interface shouldn’t get in the way. An even better programmer would have the ability to coordinate other programmers, improving people’s results by helping them work on both a tactical and strategic level.

Someday!

2014-09-15 Reflecting on my growth as a programmer

2014-09-15 Reflecting on my growth as a programmer

Thinking about how to make the most of the new Hacklab

The new Hacklab (1266 Queen Street West) will have wood-working tools, a skylight, and more space to set things up (maybe the sewing machine and serger?). There’s a big fabric store nearby, too. In addition to those new capabilities, all the usual tools will probably be easier to use: the laser cutter, the 3D printer, the CNC mill, the electronics equipment…

With that in mind, what would I like to learn more about so that I can make the most of Hacklab? I’ve mostly been treating Hacklab as a place to meet people, with the vegetarian cooking practice and social link building as bonuses. There’s a lot more I could do with it, though, and it might be good to explore.

I’d love to become proficient in making things that fit our life. I like how Norm made custom workbenches and corner tables from lumber. I like how people 3D-print handles and adapters for various things, and how they laser-cut cases, stencils, and jigs. I’m not entirely sure how I’m going to handle transporting lumber and finished goods (bicycle? cab? asking W- for a ride?), but maybe I can learn how to draw up plans, verify those plans with people who have more experience, and work on things at home (since we have many of the tools anyway). So maybe I won’t be making as much use of the tools, but I can practise asking for help.

Although it would be pretty nice to make a better case for my Samsung Galaxy S3 with the Hyperion extended battery I have…

It might be good to use the skylight to start some plants during the winter, too. I’ll need to order seeds for that one, I think.

I could also work on web or Android stuff while I’m there, since those are the sorts of things that other people work on. I could work on writing too, but that’s a little harder because of the background conversations.

So a weekly or bi-weekly trip to Hacklab could be a commitment device for making regular progress on a physical project (wood, sewing, or electronic), a programming project, and vegan cooking adventures. Would that be worth the ~$6 transit fare (+ about 1.5 hours of travel) to get there in winter? Hmm. Probably. If I pre-commit the transit fare so that I don’t have to make lots of little decisions, carving out a part for it from my budget for the year… It makes sense to push myself to go there, since if I stay home, I’m less likely to work on those kinds of things.

We’ll see how this works out!

My path for learning AngularJS

I’d been meaning to learn AngularJS for a while, and rapidly prototyping a data-binding-heavy Javascript application was the perfect excuse. The phonecat tutorial on the AngularJS site was a little too heavy-weight for me, although it would probably have been useful for learning how to Do Things Right. Simpler, from-scratch tutorials like AngularJS in 30 minutes and ng-newsletter were a little more useful for me. After I got the hang of setting things up and using a controller, I browsed through the AngularJS documentation and looked for different modules as I needed them.

Here’s the rough order I learned things in:

  1. Binding data with {{}}
  2. Retrieving data with $http (since I already had JSON handy from the NodeJS site I created)
  3. Iterating over data with ng-repeat
  4. Adding ng-click events
  5. Using ng-class
  6. Dependency injection
  7. Figuring out routing with ui-router
  8. Dividing things into multiple routers
  9. $interval and $timeout
  10. State change functions
  11. Resources (although I didn’t end up really using these)
  12. Directives

I still have to learn about filters, nested views, testing, proper file organization, and all sorts of other goodness. But yeah, AngularJS feels pretty good for my brain… =) Yay!

Programming and creativity

My client had been bringing me a constant stream of little technical challenges to solve. I pulled together different tools to make things happen: AutoHotkey, NodeJS, shared files, optical mark recognition, and so on. He said it was fun watching me figuring things out. It got me thinking about how programming can involve many different types of creativity. If you can tell the different types apart, you might be able to focus on improving some of those aspects.

2014-09-10 Programming - What does it mean to be creative?

2014-09-10 Programming – What does it mean to be creative?

Here’s a rough first pass:

  • Design: Probably the most obvious form of creativity in development, whether we’re talking about interfaces or architecture.
  • Imagining or anticipating needs: When people don’t even know what they’re missing
  • Imagining practical applications: Starting from the solution or from an available tool
  • Seeing gaps and being curious about possibilities: Maybe related to anticipating needs? More like, “Hmm, what if?”
  • Collecting components/capabilities and combining them: API functions, tools, etc. Like collecting puzzle pieces and then being able to dig up the right combination later on.
  • Making adapters: Smooshing different systems together.
  • Generating variants and other ideas: Coming up with different approaches, or coming up with variations on a theme.
  • Incorporating feedback and iterating effectively: Probably related to generating variants or shaping requirements, but also related to getting beyond vague requirements or too-concrete requirements.
  • Breaking things down and building a plan: Seeing the components and figuring out a good order.
  • Shaping requirements: Translating vague requirements/feedback or seeing past what people think they want.

Hmm…

Back to drawing digitally, thanks to Wacom drivers

I upgraded to Microsoft Windows 8 in January 2013 mainly primarily because I noticed myself resisting the change. For the most part, I adapted easily. I liked using Win-q to launch applications, and I even got the hang of the complicated procedure for shutting down.

Still, the upgrade was a step backwards in terms of drawing on my tablet PC. On Windows 7, I had disabled the touchscreen in order to make stylus use easier; on Windows 8 (and later 8.1), I couldn’t reliably disable the touchscreen. The option had disappeared from the built-in Pen & Touch configuration dialog, and disabling it through the hardware devices list sometimes didn’t work.

This meant that I either had to wear something to insulate my palm from the screen in order to avoid accidental touches (even my thinnest glove was still warm and unwieldy), or I had to occasionally erase stray dots. Both got in the way of drawing on my computer, so I didn’t do much of either.

While upgrading various pieces of software (Autodesk Sketchbook Pro, Dragon Naturally Speaking), I thought to check if Lenovo or Wacom had released new drivers yet. Wacom had! Woohoo. I insntalled the Wacom Feel driver, rebooted my computer, and found the Wacom Pen & Touch dialog had a checkbox for disabling touch.

It’s funny how these little inconveniences can add just enough friction to make something feel annoying, and how smoothening those inconveniences over can make a big difference in how you work and how you feel about it. I’m looking forward to playing around with the new features in Sketchbook Pro now. Glad I checked for updates!

Becoming the sort of person I want to be

There are three major shifts that I’m struggling with:

  • becoming a person who can tolerate more pain in order to achieve certain goals, such as fitness
  • becoming a person who can easily enjoy people’s company and appreciate what’s interesting about them
  • becoming a person who can make longer-term commitments, trusting that things will work out

Sometimes I wonder if it’s worth making these changes. Maybe I should just go with how I bend, building on strengths instead of fiddling with weaknesses. If I follow that principle, I might instead:

  • look for ways to make the most of the things that come easily to me
  • explore the shifting connections around ideas and conversations instead of focusing on specific people
  • maximize freedom, flexibility, and agility

The first set of paths seems harder than the second, but will it work out for me better? Taking the easy way still leads to lots of interesting possibilities and less wasted energy. On the other hand, trying difficult things can expand my confidence and help me challenge artificial limits. Also, I tend to over-estimate how difficult things are, and I tend to be more adaptable than I expect. So if the first set of changes is better for me (based on the reasons given by philosophers and learned from other people’s lives), it might make sense to give those a good try–at least for a number of years.

Let me take a closer look at each of those shifts to see if I can puzzle out what I’m struggling with and how to transform that.

Becoming a person who can tolerate more pain in order to achieve certain goals, such as fitness

I still feel anxious at the prospect of combined pain and stress, like the way I seized up after spraining my ankle in a krav maga class. On the other hand, I feel okay with the slight discomfort of the gentle running program that W- is helping me with and the Hacker’s Diet exercise ladder I’m doing. I’ve dealt with some pain along the way to working on other things. Most things are not supposed to hurt a lot (otherwise you’re doing it wrong), but a little wobbliness is understandable.

Taking the long view helps. I remind myself that pain has so far been temporary and that memory is thankfully fuzzy about stuff like that. Gradually, as my strength and tolerance improves, I should be able to take on more and more.

Becoming a person who can easily enjoy people’s company and appreciate what’s interesting about them

I’m okay with people. I like them as an abstract idea, and I get along with people online and in real life. I probably just have to get out more, ask more questions, share a little more of myself in conversation, and become more comfortable with having people over.

Becoming a person who can make longer-term commitments, trusting that things will work out

Seeing the difficulty that people have in transferring leadership roles and knowing my own inconstancy of interests, I hesitate to take on longer-term commitments or bigger roles. Maybe this is something I can learn, though. I’m surrounded by opportunities and role models, so it’s as good a time as any to pick this up. For some of the bigger decisions, I find it helpful to learn from other people who have dealt with similar things before.

What would be some triggers for switching strategy and following what’s more natural for me? If I’m not making any progress or if I notice myself being consistently unhappy, that might be a good sign that I need to reconsider my plans. In the meantime, I’m making very slow progress, but it does seem to get easier and less scary each time I try this.