On being self taught
Posted on Fri Aug 26 2011 13:00:48 GMT+0000 (UTC)
Somewhere in the last month marks 2 years since I quit my last full time job and started working on a development career. The following is a series of short anecdotes/experiences. I hope that developers like myself as well as the veterans and more formally trained can relate to some of these experiences and share their own experiences and suggestions in the comments section.
For convenience, this is a list of the various anecdotes if you only feel like browsing a couple.
- Why I wanted to be a developer
- Established code vs. DIY
- iOS/Objective-C was my game changer
- What might I be missing without a relevant degree?
- My lack of local developer friends
- Why I wanted to join iDevBlogADay
- The ultimate goal?
Why I wanted to be a developer
I say to people sometimes that the developer gene was sleeping inside of me and needed some sort of awakening. That awakening was my first full time job working for a large international market research company. When I joined the company as a project manager, I was warned that a new system was being implemented that was pulling everyone's hair out. It was a system intended to bring together the whole survey process - from a questionnaire builder tool, to a data processing tool, to a industry norms builder.
One major problem with this magical system, however, was that it's technical expectations far surpassed the reality of those who used it day to day. Worse yet, they had poorly organized documentation and training weeks. Those who developed the tool had not come to understand their end users AT ALL. Worse yet, some of the developers had very short tempers and were difficult to deal with when we had problems because they blamed us first - JERKS!
As a result, the new system was highly criticized and openly hated by almost everyone. While working there I realized this system became my opportunity to stand out, because for whatever reason, I just seemed to get it. I had always been a technologically inclined individual, so it wasn't a huge surprise to me that I was better than most in my office at picking it up. It was a bigger surprise though that on a North America basis, I was becoming known as a guy who proved the new system could work.
While I did agree that it COULD work, there were a massive number of issues with the tool that still needed to be addressed to make the system relevant to our day to day process. Due to the slow nature of bureaucracy and change in a large organization, I began to grow impatient and took a dive into Microsoft Office VB Macros in order to automate administrative tasks. Something about making these tiny programs to help work productivity was absolutely exhilarating! This is about the point I realized a growing passion I could no longer ignore.
While the decision to leave my workplace came with a number of reasons, ultimately it was because I realized I wanted to rapidly develop my programming side and the organization's pace would only hold me back.
So I left with 2 big promises to myself which I stand by to this day:
- I will never forget the end user and take a focus on understanding good user experience
- I will never blame an end user or get upset with them
Established code vs. DIY
“If you want to make an apple pie from scratch, you must first create the universe.” - Dr. Carl Sagan
This has become one of my favourite quotes in recent years. I think it captures perfectly the feeling we have sometimes of wanting to do it all ourself. Its a real struggle at times to find the right balance between doing something for yourself, or using something pre-made. I know when I first started development, I thought I was going to have to learn, write and understand everything from just about the root level of a computer if I wanted to take myself seriously. While I'm not saying this wouldn't be a very educational exercise, I had no point of reference for what I needed to know in order to accomplish the things I wanted to do.
I think one book that really helped me get some footing was The Object Oriented Thought Process by Matt Weisfeld , particularly "Interface over Implementation". It really helped me to understand that, as a developer, you are intended to interface with things at times whose inner implementations you don't have to be concerned with. In there I came to realize and accept that there will always be something that precedes you that you just need to be thankful for. It doesn't really make sense to fight frameworks and do it all my way. My own code is more prone to error than an established framework, not to mention all the time I could waste writing something that already exists that could have instead been spent on writing something new or application specific.
The time is better spent studying and understanding the design patterns common to all software so that I can play nicely with them instead. Following 'The Object Oriented Thought Process' I read another book, Cocoa Design Patterns by Erik M. Buck & Donald A. Yacktman which really helped me learn to play nicely with all the power of Cocoa comes as well as implement some of the ideas into my own code.
The last thing to not forget is the learning experience of doing something for myself regardless of what already exists. I think I need to pick my coding battles. I'd rather consciously tackle rewriting something for the learning experience from time to time rather than just doing it all the time blindly.
iOS/Objective-C was my game changer
As I wrote in my first entry for iDevBlogADay, I am infinitely happy that I built a game for iOS and learned Objective-C in the process. The adventure from beginning to end marks the largest evolution of my development skill-set and beefed up my resume. Prior to Objective-C, I was versed in web based languages only so this was something really new. Compared to anything I had build for web, an iOS application was really something alive.
Going back to web development afterward, Objective-C also made approach to web better. Prior to iOS, WordPress was the only framework I had some bare comfort with. I took at look at CakePHP a couple times but gave up quickly, overwhelmed by the structure and documentation. Post iOS development, I LOVE CakePHP. When I revised the framework again months later, it just made sense. The MVC concept translated well across the two platforms and CakePHP's object-oriented approach to the model and stricter naming conventions was the exact sort of thing I wanted more of after working with Apple's Core Data.
Since this is an iOS related blog, I won't continue on about CakePHP too much but the point is that delving into iOS revolutionized the way I looked at everything, even the many web languages I had learned previously.
What might I be missing without a relevant degree?
This is always an ongoing question in my mind. I can't help by feel inferior to anyone with formal education in any sort of computers degree. While I'm not saying that my business degree was a giant mistake, I still wish I had pursued more education in this field earlier. However, it wasn't until I saw software development in application at my first job that I became truly fascinated. Not only did that mark the moment I knew I wanted to get into development, it was also the moment I felt like I really self started on my education and career.
That said, as much as I yearn for learning and advancement, I worry about the educational system's capacity to teach me the way I really learn. After all, if I only _got _it once I had a job that made things relevant, why didn't school ever help me click when I took any beginner web/programming class?
Its a tricky dilemma - I want a well rounded foundation and I do believe that formal education is worth something, but I'm concerned about wasting the time and money on a process that doesn't click for me. For the time being, I am happy to be working and learning in the field. I will continue as I have for the last couple years and learn more about my options for the future before making any decision.
My lack of local developer friends
Maybe its because I didn't get a relevant degree or just the business, but I know very few other developers personally - one in my workplace. I would really like to start making more developer friends. Furthermore, I would really like to collaborate on a larger scale project with a few friends. I've gotten into Twitter, which is a lively space for developers, but it doesn't convert to local friendships really.
I know there are developer communities and code-a-thon opportunities and I am considering these in the future, but, to be completely honest, I think I have been generally shy to introduce myself to other developers.
Not really knowing where I stand relatively, I fear coming off like an amateur or saying something stupid. While I accept that I am a professional now and I feel very proud and capable of the work I do, I'm constantly humbled by all the incredibly smart and hard working people in this industry. It sounds kind of funny to say but, with my developer hat on I feel socially awkward when in every other aspect of life I have no social problems whatsoever. Is this some sort of developer puberty? If so, I'm glad this round comes with less acne!
Why I wanted to join iDevBlogADay
iDevBlogADay is a really awesome opportunity I was fascinated with the first time I heard about it. While I had been following for a little while, I didn't actually sign up for the waiting list until my game's first release in January of this year. My goals were to be as open and frank about my sales and experiences, to meet, relate and connect with other developers and to challenge myself to use this opportunity to grow as a developer myself.
I have to say I'm quite intimidated by all the incredibly smart and experienced developer writing for the community. I hope that my anecdotal approach on a newcomers thoughts and experiences can make some contribution. It has been a great experience for me so far!
The ultimate goal?
While I can't definitively point at where exactly I want to be in 5 - 10 years, I'm doing the best I can right now to develop myself as rapidly as possible. With that in mind, I maintain the following guidelines for the future:
- I want to continuously improve, learn and grow my skill set, never staying idle.
- I want to establish stronger connections with more developers and possibly collaborate on their/my future projects
- I want to grow as a developer without ever forgetting my roots as a frustrated end-user. I always want to stay closely connected to the end user and relate to them as best as possible.
- Working on contract or for an employer, I want to try and continue to always have a personal project.
- I need to find the right balance between development and life. I'm pretty passionate these days such that it sometimes hinders my ability to eat well, exercise and socialize enough. While I'm thrilled to be involved in an industry I am this passionate about compared to what I've experienced historically, there's a correct balance I have yet to find.
So far this has been some of the best and most motivated years of my life. I know I still have a lot to learn though and I'm very open to suggestions and discussion with others.
Next Post - HTML and iOS