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?
My name is Brad van der Laan I’ve been a professional software developer for 16 years but have been writing code for 25 years.
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), have been certified as a Professional Scrum Master level 1 (PSM I) and as a Professional Scrum Developer level 1 (PSD I) by Scrum.org as well as designated as an Officially Certified Qt Developer by the Qt Company.
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.
Most recently I transitioned over to a new job as a full stack web developer working with Angular and Node.js
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.
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.
So I did learn how to design and build circuits but wouldn’t you know it I still gravitated to writing software; only now it was Assembly, VHDL, Verilog, and C. Programming micro-controllers and microprocessors was quite rewarding for me. Because of this I was the software guy in our group and picked up MFC so I could write the software that went along with our final project; even though I had a chip on my shoulder about C++ being a C fan-boy and all :-).
Upon graduating 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 do we manage our day to day, how do we interact with each other, and how do we 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.
In 2013 I had a bit of an epiphany around how I was going about my career development. I was leaning on my employer to much and realized that I needed to take ownership of my own career path. Basically if there was a certification or training I felt would make me a better developer I should just do it instead of jumping through hoops to get my employers permission. With that I attended workshops and webinars, read many many books started attending local Meetups, looked into new tools such as Docker and git, and studied my craft with new found vigor.
Some time later as much as I appreciated my current employer for all the opportunities they gave me I felt it was time to move on. Like Journeymen of days past I needed to find a new master to learn from in order to grow; With that I moved on to becoming a full stack web developer with a new employer.
Well that is my professional story so far in a nutshell, you can see my up-to-date career timeline here. 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.