Pair Programming and becoming a better Software Engineer

Over the past year, there has been many changes in my life, including the start of a new adventure at McGraw Hill Education working within the MHElabs group. With this new adventure, I’ve been exposed to a bunch of new technologies and processes. But the most exciting prospect is pair programming.

Pair programming is crucial to our software development process that has helped me become a better engineer and person. This post is about my personal journey with pair programming within the past 6 months and I hope it gives some insight into what, I believe, is a great advantage in Software Engineering.

Its not easy

Pair programming is an art form, it takes practice and most importantly – time. When I first started pairing it was tiring; for an entire day I listened, spoke and coded. It forced me to think out loud and talk through possible solutions – even though I had no idea what I was actually doing.  Luckily for me, my partner knew what was going on and had more experience and knowledge of the application.

Many times I felt like a noob, but my pairing partner was always reassuring and patient in familiarizing me with the application. It was tough to get going, trying to talk through things and fail. Only to become successful with delivering at the end of the day. This is where pairing is wonderful.

…but it does help

Somehow, pairing helped me efficiently deliver completed software tasks. So although I was wiped when I first started pairing; I also was active in delivering software, learning new technologies and getting to know my fellow co-workers. This was kind of strange, because I was brand new to the company and the application.

But the key was that we were working together, focused on a task and questioning each other as we progressed. Pairing has removed distractions that I would typically see if I was working by myself; including instant messenger, Google Hangout, Facebook, Twitter, etc… With pairing, all of that went away and my mind went straight to delivering stories.

Having partner to be there with you throughout the process also removed many of the double guessing you have when coding; such as wondering whether you did some technically right, or if you should refactor. Your partner is there to guide you, catch mistakes, ask questions and ultimately this partnership makes both persons better at engineering and as a person.

Personally Rewarding

Pairing isn’t just about the software, its also about the relationships you build. I found that I’ve grown closer with my team because I pair with them. The act of pairing has afforded me the opportunity to learn more about my co-workers by collaborate with them and getting to know them better.

The truth is that I’ve taken the time to learn my co-workers personalities, opinions and over thought process. Which has in turned helped me become a much more empathetic individual in my personal life and professionally. I take the time to listen to other members of the team; including project, product and design. Which has in turn helped me ask the right questions so that our team can deliver what is needed for our application(s).

People, not Technology

Software Engineering is about people, not technology. Technology comes and goes, but a well gelled team of people are more important to a products success than your technology stack. As I like to put it, a car is only as good as its driver. Pairing has afforded me to recognize and truly accept this in my professional career, and I look forward to many years of continuing this practice.

HTML5 iPhone Web Application Development – New Book!

If you don’t already know, my book has finally been published! You can purchase the book from Packt PublishingAmazon,  and Barnes & Noble. The book is titled HTML5 iPhone Web Application Development and its purpose is to help you build iOS specific applications using open web standards.

The book took about 9 months of rigorous work. I am thankful to my wife, Janice Smith, my family, friends, coworkers and to the great individuals at Packt. Without these wonderful people in my life, this wouldn’t have happened. There were many times where I felt I couldn’t continue on, either because of the amount of work from my daily job to personal matters of my own life. But having these great people surrounding me helped me to finish it and get it out to you!

I am extremely proud of the work in the book. My goal was to deliver a book on practical programming practices that includes tons of code samples, images and references. That last important point, references, was critical to me because that was how I learned to teach myself programming. My goal was to give you the ability to learn web application development for iOS, but also teach you where this information can be found, read and ultimately understood with practical examples.

The task was not easy. As you advance in your career you become well versed in the paradigms you become familiar with. It is then difficult to break it down in simple terms to help beginner to junior level developers. But I do believe that we struck a balance in the book between beginner and advanced level material.

Enough talk though, go out and get it! I promise you’ll learn a few things and possibly like the writing itself :)

As always let me know what you think in the comments below. I look forward to hearing from you and getting your feedback.

Cheers!

Angular and DOM Manipulation

So it’s been about three months now that I have started my adventures into Angular, and I’m definitely enjoying it. But its also been a bit difficult moving from other frameworks like Backbone where I had full control of the processes. In this article I briefly discuss how Angular lets you focus on the bigger picture using bindings.

If you’re coming from a Backbone background to Angular or even Ember you’ll be surprised with how easy it is to create dynamic applications without having to do all the dynamic DOM manipulation you had to do previously. However, if you’re like me – you might find it frustrating how to achieve this easily – after all Angular doesn’t use the idea of views, instead they’re called directives. Think components and separation of concerns.

But lets start by discussing the scope. Once we get scope down, we’ll move to using directives (what they are, how you use them and what they look like). Finally we’ll go through a simple example that might help you further your understanding of the subject.

Angular Scope

If you’ve worked with Angular recently or are going to soon, then you might have or will see something like this:

Continue reading

Angular.js and MVC :: Part 1 – Models

For the past couple of weeks I’ve been diving into Angular.js, and have found it to be an extremely useful tool. If you’re not familiar with Angular, its essentially another lightweight framework that conforms, or helps you conform, to a certain standard when writing frontend applications. For this post, I’d like to briefly introduced you to some of the key points that I’ve learned thus far and hopefully give you some insight before you leap into creating your own Angular application. Continue reading

Using templates inside a jQuery Plugin

Recently I was tasked with using templates inside of a jQuery plugin I was creating. I had decided to just pass in the id of the template into the initialization of the plugin and having the functionality of templating baked into the plugin. But I came across a very interesting “issue”. Note the quote around the word issue.

Either way, thanks to the jQuery core team for this very helpful write up:

If a string is known to be HTML but may start with arbitrary text that is not an HTML tag, pass it to jQuery.parseHTML()which will return an array of DOM nodes representing the markup. A jQuery collection can be created from this, for example:$($.parseHTML(htmlString)). This would be considered best practice when processing HTML templates for example. Simple uses of literal strings such as $("<p>Testing</p>").appendTo("body") are unaffected by this change.

Bottom line: HTML strings passed to jQuery() that start with something other than a less-than character will be interpreted as a selector. Since the string usually cannot be interpreted as a selector, the most likely result will be an “invalid selector syntax” error thrown by the Sizzle selector engine. Use jQuery.parseHTML() to parse arbitrary HTML.

Source

Here is a simple example demonstrating the proper use of implementing templates into your jQuery plugin(s).

Check out this Pen!

In summary, use the built-in jQuery method parseHTML on your generated templates in order to have the proper DOM object. You may find this useful when you create a memory in object and want to carryover any attached events when appending to the DOM.