Tools: Git and GitBox
When I first started making apps I didn’t care about version control software. I did have my own backup method that consisted of me copying my current code to another directory then add a version number to the end with a short description. This would ensure that I could go back to a previous version of working code if I messed up the current feature I was working on. When my apps started getting bigger and more complex I started to understand the value of true version control software.
Welcome to Git
Git is free software that allows you to take a snapshot of your codebase at anytime. Once you add Git to the directory of your project, then all of your files (including code, images, scripts and even the project settings) are saved and every change or keystroke is recorded, allowing you to revert back anytime. If you accidentally delete a file you can bring it back with Git. If you want to go back in time and review a method that you deleted or changed you can do that. Git is most important when you are working in teams. It allows multiple people to work on the same codebase and check-in a different times, usually automatically merging the code together.
The easiest way to get started on a Mac is to download the install here (again it’s FREE).
To learn all about Git and it’s commands, read the Git Book. It’s a great book on learning the basics and best of all it’s FREE as well. Once you have Git installed, follow the instructions here to create your first repository: Git Basics – Getting a Git Repository
Git can be run locally on your computer, you don’t need to have a hosted environment for it to work. Yet the advantage of having your code hosted allows you to work on it in different locations. Also since it’s hosted remotely it’s safe from your computer hard drive crashing and losing all your code that you worked on for all those hours. The most popular hosted environment is called GitHub. If you work for a company, more often than not they will have an account where all of the code for their apps is kept. GitHub is not free and requires you to pay for the number of code repositories you have. If you are an independent developer you will probably want to use BitBucket, it’s completely FREE and you can setup as many repositories as you need. I’ve been using it for all of my independent apps and it is fantastic!
When I first started using Git I only used the command line as described in the Git Book above. There are a couple good applications that allow you to manage your Git repository using a GUI. You can even use Git within XCode since it has it’s own Source Control built in (File > Source Control). This works fairly well until you start using sub-projects. The tool that I use is called GitBox. It’s a very simple app that organizes your Git repositories, see all your changes and easily commit files and push to a remote hosted environment.
For more information on GitBox checkout their website. It costs $14.99, but it’s worth every penny to ensure your code is managed correctly and keeps you out of the Terminal.
How I Learned Objective-C
I went to school for Computer Programming where I learned C++ but that was over fifteen years ago. Could I learn a new software language now? I got very used to programming for the web using Perl and PHP but those are fairly easy scripting languages, no knowledge of memory management is needed and they are not very object oriented.
The first place I started was Head First iPhone Development. This was the perfect place to begin. The O’Reilly Head First series of books have been good for me in the past when I was working on my PMP. The way they use visual queues really helps the retention of the concept of the material. I also liked how they wrapped up every chapter with a quiz that tested how much you remembered. The book came with a CD that had all of the code for the tutorial programs in the lessons. It was useful a couple of times when I couldn’t get it to compile my way, then referring to a working program helped. I read though the book twice and I was starting to get it, but I needed more instruction.
I had heard about Stanford University putting courses online and checked it out on iTunesU. In the Spring of 2009 they had a course named CS193 iPhone Application Programming taught by instructors Evan Doll (later Co-Founded Flipbook) and Alan Cannistraro. What better way to learn Objective-C then from actual programmers from Apple who helped make the platform and SDK. It was a very long course including 40 lessons that were roughly an hour each. It’s pretty amazing that you can watch all of these lessons for FREE in perfect video. You’re getting a Stanford course and learning Objective-C from the best for no cost! The only difference from me and a Stanford student was they get a credit for it and I only get the knowledge. I think that’s even more valuable as it’s been the basis of my new career as an iOS Developer. At the time the SDK that was covered was 3.0. There is a newer version of the course available now, iPad and iPhone Application Development from Winter (2012-13) instructed by Paul Hegarty.
Stay on Target
After reading a book and taking a course for iOS I was ready to start developing. The best way to learn is to start building your own app. You probably have tons of ideas but start with one that is fairly small with only a couple of views. If you’ve seen the documentary “Indie Game” you’ll know who Tommy Refenes is. If you haven’t, it’s definitely worth watching if you’re a developer. Tommy recently wrote a great article How do I get started programming games???. The greatest takeaway from it is staying motivated. You have to be obsessed about the app you’re building, you have to want to work on it whenever you have free time. The other key tip, you should breakdown your project into small manageable parts that you can develop at a time. If you think of it as a full game you’ll get overwhelmed, but if you build it one feature at a time you will see that you are making progress and feel an accomplishment during the process instead of just at the end.
Below is a list of some of my favourite places to find iOS Development tips and tutorials:
– Stack Overflow
– iPhone Dev SDK
– Ray Wenderlich iPhone Tutorials
– Cocoanetics Blog
As with anything, practice makes perfect. The more code you write, the better you’ll get and build up a useful library of code that you can reuse in all of your future apps.
The Return of the Programmer
It all started in Grade 11, I took my first computer course and there were only four of us in it. Our first language was Turing, then came Turbo Pascal. All I remember now is just a big blank blue screen. We learned the basics of if statements, for and while loops and making super simple programs. The part that interested me the most was the UI. I would spend hours trying to make a good looking interface using ASCII characters for borders.
Soon after I was hooked and I got my first computer, it was a 286. The first day I was cleaning it up because I bought it used. I was removing all the *.bak files because they were useless, only backup files. While doing this I accidentally deleted the autoexec.bat file, after that nothing worked! It was my first major problem to solve. I just bought this computer and managed to make it completely useless in the first day of owning it. Needless to say I did finally fix the problem by learning how to create the autoexec.bat and config.sys files. Good old DOS command line. Nothing is more nostalgia to me now then thinking about playing all those great Sierra games on my old 286. Spending just about every spare hour I had in front of a glowing computer screen I kept learning about how computers worked, the hardware, how networking was possible over phone lines using a modem and connecting with others in local Bulletin Board Systems (BBS). There was a very small BBS community in London, Ontario. It’s where you would find files, play the first online games (Lord of the Red Dragon) and get a copy of Wolfenstein!
In the next year or two the internet was born, and I don’t mean that ancient Gopher system that was in the school library, I mean the World Wide Web. There were not many sites, mainly Webcrawler and Yahoo! was the most popular. I started to learn HTML so I could make websites, it was really basic code and it also fueled my creative side in designing user interfaces. After high school I enrolled at my local college for “Computer Programming”. Despite what my high school teacher said I was going to make it as a programmer! Sure I wasn’t great at math, but I had so much passion for it that I wanted to learn as much as I could. College was great, I was immersed in programming for two years, surrounded with people just like me who loved talking tech and learning code. We learned Visual Basic, Cobol and C++ using MFC. We also learned all about databases and SQL. Little did I know how valuable that would be in the future. I’d spend most of my time in the computer lab working on weekly program assignments in groups or on my own. It wasn’t too difficult for the first three semesters but it got challenging in the last when we had to build 3D objects on the screen and manipulate them, but I got through it and graduated.
It’s now 1998 and I’m 21 and done my education, time to take on the real world, but where am I going to work? I sent over 50 letters to all of the biggest companies I could think of like Microsoft and Nortel and received rejection letters from each one saying they would keep my resume on file for 6 months. I could have worked in London converting Cobal to C++ for London Life but that was not exciting enough, I wanted to work on the web. My first job out of college wasn’t even a programming job, I worked at a local Internet Service Provider (ISP) as a Technical Support Representative. I would answer calls for eight hours a day helping users setup their internet connection. After a while it was so repetitive that I’d have my feet up on the desk with my eyes closed walking a user through their problem. In my first week I lost my voice completely from talking straight all day everyday. I know how to code, why was I doing technical support? One of my college buddies who also worked the same job was starting his own company to build websites for local businesses, so I joined him. He was the business / sales guy and I was the designer and programmer. It was a great experience for 6 months. We would travel all around town meeting with small companies looking to have their first website built. These companies were not used to spending a couple thousand dollars on a website so it was sometimes a hard sell but I was still learning so it was worth making them for little money.
The Big City
Making websites for the small computer and coffee shops around London was ok but I felt I was missing something. I was more confident about my HTML skills while my real C++ programming skills were deteriorating. The only way I would be able to improve is to find a real job. I went back to submitting resumes to every internet company I could think of. My favourite search engine at the time was Yahoo. On the Yahoo.ca website they had a “We’re Hiring” banner. They were just launching the Canadian brand and had lots of positions to fill, one was a “Webmaster / Internet Programmer”. I applied as soon as I saw it. After a couple days I didn’t hear anything, probably normal for them but for me this was the position I really wanted. I called them directly and asked if they were interviewing for the position soon and they said they’ll narrow the resumes and will be calling candidates. The following week I still hadn’t heard anything so I called again. The hiring manager must have liked my determination so he asked me to come to Toronto for an interview. I didn’t have a car so a good friend of mine drove me up. I had only been there a couple of times for school trips but it looked so much bigger as a place to consider living. The interview went pretty well considering it was my first one ever for a programming job. I talked about creating small websites, my schooling and how much I wanted to work at Yahoo! They told me it was between me and one other candidate. The next day I got the call, they chose the another guy. I wanted that job so bad, all my friends knew it as well so we went out that night to try and forget about it. After a late night out on the town I slept in pretty late and was woken up by the phone, it was Yahoo! they needed another programmer and offered me the job! Wow! Talk about highs and lows. I was really excited to move to Toronto to officially start my career working for such a great company as Yahoo!
My first day at Yahoo! Canada was an eye opener. It was in a cool space right downtown with the exposed brick walls in an open concept layout above a couple bars on Front Street. So they hired me, I’ve moved to the big city, now what do they want me to do? The lead programmers asked me if I knew Perl, I had never used it before so they gave me a book and told me to learn it. It was the language that Yahoo ran on for all it’s parsing and mini web applications. After a week or two I was starting to get it so they gave me a couple small projects to build. I made a “Question of the Week” app which was a basic poll. I also made an internal program for sales to enter ad details via a web interface into their custom ad system. After a couple months the biggest project I worked on was parsing a Canadian Press news feed to pull daily hockey scores for the launch of the new Yahoo! Canada Hockey section within Sports. I thought I was doing pretty well but after around eight months I was laid off from Yahoo! Canada. It was a tough blow for me. I had moved to Toronto from London to work here and after not even a year it was over? I had a lease on an apartment and I didn’t know what to do. That night I sent out tons of emails looking for another job. The next morning at 8:30am I got a call from a small web shop named VI Design for a position. I went in for an interview. I was the cockiest kid they have ever seen. “I worked at Yahoo!” “I can program anything in Perl” I would say. They certainly liked my confidence so I was hired. For the next two and a half years I was the Lead Programmer working directly with one designer to build custom websites for small to medium size companies around Toronto. I was so glad Yahoo! had taught me Perl, it was such a useful language to build forms or create dynamic pages for the web, I really enjoyed my time at VI and I made some really great friends. It came to an end shortly after the 2000 dot com crash. Tons of small web shops were closing, the initial spike of companies that needed custom websites were not as great as it had been and the cost was too much to keep the doors open.
Just as fast as it was to find my last position it was again for my next one. I met with a head hunter for the first time and was sent to an interview at GE Canada. Their headquarters was just outside of Toronto in Mississauga, and had their own building right off the 401. GE Information Systems was hiring a UI Lead position. The job was to design layouts in Photoshop and then develop the HTML code once it was approved so the Java developers could develop the back-end. It was a big change from developing Perl, but it was creative and fun. At the time, GE was the #1 company in the world, lead by Jack Welch. GE Information System was the technology division that developed online marketplaces and custom web applications for Fortune 100 clients. This was the big time. My first project was RailMarketplace.com, an online trading marketplace for the top rail companies including Canadian Pacific, CN, Union Pacific etc… It was a multimillion dollar website that I designed and wrote all the HTML code for. It was amazing to be on such a professional team. GE was very strict on following the Software Development Lifecycle (SDLC) process. They would start with gathering requirements from the client, documenting them in a Requirements Definition Document (RDD), then further detail into a Functional Requirements Specification Document (FRS) before starting to build anything. Everything was defined in great detail before any development started and it worked very well. After a couple years I was promoted to a Business Analyst role. GE sent me to a Learning Tree course on “Identifying and Confirming User Requirements”. Now I was the one writing the FRS documents. I would fly all over the US meeting with clients such as Coca-Cola, NBC and General Motors to gather requirements for huge custom web applications GE would build for them. I gained so much experience in usability, defining requirements, communicating with clients, documenting functionality and presenting wireframes. In the same time GE, well known for their process improvement methodology “Six Sigma” was training their entire staff and required everyone to get Green Belt Certified. It really made everyone think about how they did their job, the processes they do everyday and to analyze and improve them to either be more efficient, in the end saving the company and the clients money. I learned how to develop software from start to finish the right way. My highlight of being at GE was meeting Jack Welsh once while he was in Canada. He asked me how I liked working at GE and I had told him “It was a great experience to work at such a great company and that I had learned so much”. They really build people there, they care more about investing in their employees more than any other company I’ve been in.
After working for GE for five years I was feeling that I had learned as much as I could as a Business Analyst and I was ready for the next step in my career. I assumed that Project Management was the obvious one after being mentored by so many great ones. They are truly the owners of the project and know every aspect, from planning to requirements to development to QA and finally User Acceptance Testing. GE didn’t have any PM positions available for someone as young as I was, most were in their thirties or forties while I was only in my mid twenties at the time. I found a position as a Project Manager for a medium company in Markham called RealSuite / BLJC. They are a facilities management company that allow large organizations and even the Ontario government to track and mange their buildings. Everything from rental space to energy costs to maintenance is managed within the web application. My requirements definition and documentation skills was a huge asset and I learned how to use Microsoft Project to track schedules and manage resources. It was the first time I would manage a team of developers as together we deliver enhancements to the product. To save money, BLJC outsourced some of their development offshore to India. It was my job to manage that team. This team would mainly fix defects and QA the product. It took a couple months to get the team trained and to get the process in place to make it effective, but after a while it was smooth and we had a 24 hour development team in place. At General Electric all development followed the SDLC waterfall methodology. Everything would happen in steps, and a step would not start until the previous step was completed. At RealSuite we experimented with Agile for the first time. As the scrum master I would create a backlog of defects or new features that needed to be completed. We would meet every morning for 15 minutes to review yesterdays progress and define tasks for the day. It was a new and different way to work but looking back on it, was very effective for maintaining a product since the core was already built. I worked as a Project Manager for RealSuite for just under two years.
Looking for a change and moving back downtown to Toronto I found a position at Nurun working on the Home Depot Canada account. I had never before been exposed to the agency world. Much like how GE built custom web applications for clients, agencies do all kinds of digital work on behalf of brands. I always assumed that each brand did all of their own work, little did I know. At Nurun I was an Intermediate Project Manager dedicated to the development and maintenance of HomeDepot.ca. I would create schedules, track budgets, provide weekly statuses and document requirements for the design and development teams. It was a great experience to see how one of the largest eCommerce websites in Canada worked. I started to learn all about marketing, analytics and development for eCommerce. At the same time I started my own personal agency called “Peeking Duck Interactive”. I took everything I learned from Home Depot and created my own eCommerce platform for small companies. It was completely built on Perl and integrated with Paypal. After I had a framework that allow the product details to be uploaded from an Excel spreadsheet into the back-end to make it work it was an easy sell. I made about 10 eCommerce websites, mostly for small companies that only sold their products in the One of a Kind show in Toronto.
Home Depot Canada was a great experience in learning everything there was to know about eCommerce but after a year I wanted to work at a more creative agency so I moved to Trapeze in fall 2007. This was a much difference environment, the team was really young, filled with many U of T New Media grads. Social media was taking off with Facebook and Twitter and most of our creative strategies involved Facebook Pages and custom creative websites designed in Flash. Everyone had a passion for what they did, whether it be design or development, everyone was so eager to learn and push the limits on what was possible. Key clients that I worked with were Reebok Hockey where we created a new Flash/HTML hybrid site that was SEO friendly to showcase their latest gear. Another was working with the Walt Disney company in LA to build a web application to allow users to buy movie tickets online. It was a really cool system and right around that time the first iPhone came out so we were experimenting with mobile layouts for movie websites. The biggest win for the agency was acquiring the opportunity to pitch for Canadian Tire as Digital Agency of Record. With my experience at Home Depot Canada I was the perfect person to help with the pitch. I knew everything needed to run a successful eCommerce site. We won the business and I was dedicated to CanadianTire.ca. Retail is a tough business to be in for an agency, there are deadlines each week for promotions and seasonal changes that need to be delivered on time no matter what. All advertising has to be in place and all features have to be completed before launch since there is so much TV and print media driving to it. It was a great experience working with so many talented designers and developers. We created so many stunning campaigns for Canadian Tire including the all important Christmas season.
After dedicated to Canadian Tire for two years I needed a change. I found a position at OgilvyOne. I had never heard of Ogilvy before but when I got there I learned all about their storied past, founded by David Ogilvy on Madison Avenue, the original Mad Man. Ogilvy was a much different agency than the previous two I worked at, they were 100% a creative agency first. It was their job to come up with the creative idea, then we’d worry about development after. They are also an advertising agency compared to a marketing agency. I had managed small banner ad campaigns before but this was another level. Ogilvy creates thought provoking and inspirational brand campaigns. They make the user think about the brand first, then the products. I was assigned to the Winners and American Express accounts. This was also my first Senior Project Manager position. Everyone I worked with at Ogilvy is extremely talented at their craft, including the writers or art directors, they always had great ideas. It was my job to guide their idea into a digital execution and then get it developed. I was used to always having an internal development team but at Ogilvy we mainly used freelance developers to get the work done. The cost of overhead was much less and we could find expert developers in their area of expertise. A highlight was the Digital Canvas Installation and Facebook Contest for American Express. It’s an app that allowed users to paint on a 42″ TV using an iPad as a painters tablet then use a LED paintbrush to splatter paint onto the TV. It was really exciting to see people use it. Another was the Winners Fab Finder app. It’s like Twitter but for clothes. If you found a nice pair of shoes at their store, you could take a photo of it and share it with your friends and people who are following you. In my second year at Ogilvy we had the opportunity to pitch for the Tim Hortons digital account. I was assigned as the Technical Lead to showcase the great digital projects and technical capabilities that Ogilvy could provide. The creative team came up with some stellar digital concepts and we ended up beating Trapeze in the final round to win the business. The agency world is a small one, I’ve bumped into so many people across companies. The one thing about agencies is the talent is spectacular. Everyone who works at a top agency is a hired gun who is a specialist in their field. Put this many specialists together and you get some pretty amazing work.
Over the last three years I have been building iOS apps in my spare time. It was a great challenge to learn how to program Objective-C (a topic for another post) but once I felt comfortable it’s become a great creative outlet. The most amazing thing to me about iOS is the App Store. Never ever has their been a way for a programmer to release their own software directly to a mass amount of consumers and make money doing so. To make money on the web you need to sell products, but for a user to buy your app or game, now that’s fun. I started out with a couple friends making a dynamic storybook for kids called Zoobert’s Big Day. It was a great first app to get my feet wet and learn the process of building apps and releasing to the app store. It did fairly well for it’s time. After Zoobert I made my first game called Bumperrific which was a spin-off of an old game show I used to love, “Bumper Stumpers”. It reached as high as #11 in the Word game category and still gets a couple downloads each day. My next app was a big one. A full feature game, Connect Poker that was designed by a friend. We did a really great job and released it but in the first week only received about 75 downloads. We didn’t know how to get the word out and tell everyone about it, so no one found it but our friends and family. We contacted a Free App a Day service named App-o-Day to see if we could promote it on their app and they liked it so much they offered us a publishing deal through Iddiction. It was an incredible accomplishment for us to get published. We went back to work and polished up the game for a couple more months in preparation for it’s re-release. On July 4th, 2011 Connect Poker launched through Iddiction and was promoted in App-o-Day. It did very well and reached #1 in the Card game category in over 12 countries. The highlight of my iOS career so far has been that week, watching the game that we spent every spare minute making climb the charts all the way to the top. It was a smart game, kind of Bejeweled but with poker hands. People liked it and got addicted.
After the success of Connect Poker, I thought I would love to build apps full time. It was truly my passion and what I loved to do when I wasn’t at work as a Project Manager. So, I left the agency world and changed career paths leaving Project Management and focusing solely on iOS Development. I accepted a position at Rogers working on their publishing iPad apps. They have a great framework for viewing magazines that we are continuing to improve. I thought I was a pretty good programmer when I started, but after meeting some of the other iOS and Android developers I was brought down to earth, I still had a lot to learn. Everyone else was a Computer Science grad from Waterloo and knew object oriented programming like the back of their hand. I’m happy to say after working with these guys for the past seven months I’m finally comfortable and confident that I can build any iOS app proposed. I still work on my own apps in my spare time and will be continuing to release many more this year.
Well that’s how we got to today, originally a programmer who lost his way and then found his was back to his passion in the end. If I was a programmer the entire time I probably would have burnt out. The best thing about learning so many roles has helped me so much as an independent developer. To create apps on your own you need to wear so many hats including UI, design, marketing as well as development. Each app I develop keep getting better and better. Hopefully someday I’ll build a #1 app that will provide me financial freedom, until then I’ll keep enjoying the journey.
Continue to follow this blog as I post my lessons learned, tips and tricks, review iOS frameworks and write about my independent apps that I’ll be releasing throughout the year.
If you have any inquiries or questions I’d love to hear from you, email firstname.lastname@example.org.