This blog is for software developers by a software developer.
It is my desire to share my knowledge and views with the community and prompt discussion on topics important to software developers.
So who am I anyways?
I graduated from Conestoga College in 2005 with an advanced diploma in Computer Engineering Technology and hold the designation Certified Technologists (C.Tech.) from the Ontario Association of Computer Engineering Technicians and Technologists (OACETT).
I’ve worked as a lead developer with a small team (~10) of software/hardware developers on an industrial electronic product (Class A non-consumer) and am proficient in a number of languages including C# and C++ as well as being well experienced in branch and build management, design patters, software architecture, Agile development practices including SCRUM, and team leadership.
Whats my story?
My love for software development started back in 1996 while I was still in high school.
I remember that I was in my grade 9 computer class, where we learned how to use Windows 3.11 and about word processing, when the grade 10 programming teacher came in at the end of the year; trying to drum up interest in his course I figured. He gave us a demo of what we’d be doing if we elected to take his course the following year. It was teaching the fundamentals of programming and we used a teaching language called Turing . Writing my first Hello World program in that language was all it took for me to be hooked. I remember thinking that this wasn’t that different then algebra, you know variables and all that, and I really liked algebra.
From there I went on to learning Visual Basic 4/5 in grade 11 and 12. I remember going to the mall (we only had one mall and it was 20 minutes out of town) so I could buy a Visual Basic 5 training kit in order to program at home on our Pentium 33Mhz Packard-Bell. I was also introduced to Object Oriented Programming (OOP), being told that procedural programming was like telling a fire truck how to operate where OOP was more like simply describing how a fire truck worked. Complete gibberish to me at the time but now its the only way I think when it comes to programming.
By the time I finished high school I knew the Visual Basic 6 Black Book cover to cover and was proficient in XHTML and PHP. When it was time to pick my post secondary I chose to go down the electrical root vs. Computer Science because at the time if I wanted to show anyone the cool new app I made I would have to bring them to my house and wait while I booted up the old PC (a Pentium III at the time I believe); I wanted to learn how to build something I could take to them. Now the mobile revolution has made that decision moot but at the time it was what directed me to Computer Engineering.
Upon graduate my little brother, who was on Co-Op told me that there was a job opening at the place he was at. He couldn’t tell me what the project was but he did say it had to do with databases. At that time I hadn’t a clue about databases so I pulled up www.w3schools.com and read up on SQL. He wasn’t kidding that job was database heavy.
At this job I worked on a data acquisition system that was being used in the manufacturing of a consumer electronic product, that the customer used to tack the history of each unit along the manufacturing line and the repair centers. I was primarily acting in a support role, going on site to help with installation, upgrades, and troubleshooting issues. Which wasn’t too bad for my first professional job considering the manufacturing sites were all in China, hello AreoPlan SuperElite travel rewards :-).
As the number of stations and site grew these support activities grew in complexity; so that is when I starting developing tools to make supporting the system more efficient. Case in point it use to take 8hrs just to manually run the diagnostics for a single contract manufacturer site, saying nothing about actually responding to any issues found (they were typically handled the next day by another team member). As I disliked spending all day manually running diagnostics, on the days I was not on diagnostics duty I worked on automating the process with batch scripts, VBScript, and SQL scripts that resulted in the diagnostics going completely automated which ran nightly and generated a HTML report outlining the health of the system at each site.
Over my three years there I became proficient at MSSQL, database design, Batch scripts, VBScript, HTA, WiX, and is where I learned C# and the .Net framework.
I was still pretty green when that project ended, but after three years I felt it was time to move on. It was my first professional job out of college and like my Father said about my first car, I’ll miss it, but the project I was on was ending and I wanted to see what else the world had to offer. Namely at the time I still wanted to find a job that would use the skills I learned at college; designing circuits and programming PLDs (Programmable Logic Devices). Since my current employer was a software house if I wanted to get back to building hardware I’d have to move on. My second place of employment had those opportunities; however, I again gravitated to software design and ended up in the Application Software group of this hardware company.
The Application Software group was this companies way of distinguished between the software developers who made user interface software and those who wrote the firmware for our products. I was hired in as a hardware developer for an accessory product to some of our main product lines. The bulk of the IP for this product was however the software not the hardware meaning that there was more software work to be done then hardware. After being at this place for I think only a few months the hardware worked had dyed down and not being one to sit around waiting for work I mentioned to the software lead that I had experience in C# and with no objections from the hardware lead I all of a sudden found my self writing software yet again.
Fast forward 5 years and I was now the team lead for that product; managing the technical aspects of both the hardware and software side of the system.
My education by fire has made me quite proficient at C# and the .Net Framework including the Windows Communication Framework (WCF) and the Windows Presentation Framework (WPF); I also furthered my use of WiX by learning the new Burn bootstrapper that lets me write my installer UI in WPF like the Microsoft Office and VisualStudio installers do (ya they are made with WiX). On top of that I’m now familiar with a wide range of C++ libraries/frameworks including C++/STL, C++/Qt, C++/CLI, QtQuick, and a working knowledge of C++/CX.
Other then learning new software languages I picked up a number of other skills during my tenure at this employer. For one thing when I got here the build system in place was one physical server using the built in Windows Scheduled Task runner to kick off a VisualBuild Pro script that only the build server had a license for. Other then the fact that we often had different software project’s builds interfering with each other the biggest thing for me is that I felt the “bring in donuts if you break the build” rule was grossly unfair considering that the only place that can run the build was the build server so you wouldn’t know if you broke the build until you broke it. I felt that this had to change so in came Jenkins, now we have a small build server farm powered by Jenkins and proper build scripts (my poison of chose is Apache ANT). Other then build management I took owner ship of our branch management too, which made me very familiar with our source repository Apache Subversion (SVN); coming up with different schemes to follow to allow us to work in parallel on different releases.
Team/project management was another area of interest that I focused on. That is how did was manage our day to day, how did was interact with each other, prioritize and assign tasks. This lead me towards improving my soft skills such as communication and team leadership. I really became an advocate for the team and for allowing a team to take ownership of their successes and shortcomings to encourage self improvement and lessen the burden on the project managers.
Well that is my professional story so far in a nutshell. I suppose that is enough shameless self advertisement. I hope you enjoy my blog and find it useful. Feel free to participate by posting comments; I always prefer two way communication.