Recently, I completed the Applied Software Development part-time studies program at BCIT. It has been a three year journey, and so I thought I would do a quick write up about some of my favourite courses and my takeaways.
Why go back to school?
I was already established in the industry for more than 10 years, was well experienced with Python and had some experience in other languages, but I was completely self-taught through my years on the job.
I came to the point in my career where I started viewing my self-teachings as only forming an opinion, to put it bluntly. Imagine reading the pages of a novel in a random order, absorbing small, disconnected plot points, trying to piece together the bigger story. I wanted to make sure I was understanding the story correctly and hadn’t skipped any critical early pages.
What if I didn’t learn anything new? Well, I didn’t know what I didn’t know. If it turned out there was nothing new to learn, at least now I’d know that and my “opinions” would be validated and reinforced by formal education. I saw it as a no-lose decision.
Introduction to Software Development 1 & 2
These were the first courses I took, naturally. They were mostly covering the basics I was already familiar with, but there were still some nice takeaways from the courses.
I got exposure to a new language with Java. While it probably won’t be my first choice of language to use for anything in the future, it was great to see familiar concepts in yet another language.
The more restrictive nature of Java was actually refreshing and opened my eyes in a lot of ways, making me more critical of my beloved Python. Going through exercises for public/private access with inheritance helped me realize problematic design scenarios in Python that you can’t even create in Java. The beauty of Python’s openness is a double edged sword, and is something I’ll probably talk more about in the future.
Touching on other commonplace design principle acronyms was also welcomed in these courses: SOLID, DRY. This was an entire lesson two dedicated to going over each letter and thoroughly explaining them, with examples. Basic stuff for some, I’m sure, but not something you’re likely to come across through self-taught adventures.
Business Analysis and Systems Design
This course was great. Systems Engineering is something I had stumbled across a year or so earlier and was doing a deep dive into, so this course was right up my alley at the time.
For anyone unfamiliar, this is all about discovering requirements and designing a solution for said requirements. There are lots of tools, processes, and diagrams to help with this. It is one of those areas that I think most developers will prefer to skip over, but is super important.
Attention here will lead to higher quality solutions, better communication and shared understanding, and I would argue reduced development costs in some cases for having less confusion in the development cycle.
Agile Methods and the Scrum Framework
I thought this course was excellent and it might have been my favourite course from the program. It featured many lectures, thoroughly covering Agile concepts and tackling many of the misunderstandings about Agile, then it continued with a multi-week role play in a team that featured oft-changing requirements and a final class multi-sprint simulation.
The teacher was super knowledgeable and passionate and made the entire course very engaging. Coming out of the 12 weeks, I felt I had a great handle on Agile and Scrum and came to love them as a way of working. All the artifacts and practices are well thought out, done for specific reasons, and all make important contributions to what is a very nice way of working.
iOS Mobile App Development
This course was fun. I had been looking forward to taking it since I started the program. I had done some app development many years ago when Swift was still in its infancy, being at version 1. I loved making my own app, but dealing with the quirks of a brand new language was too tedious.
Now that the language has matured, it’s super nice to work with. The course covered a large amount of content, and the way the course was set up to work it felt almost like a language immersion school. Deadlines and key dates for different things were staggered throughout every week, meaning there was rarely a day off where you weren’t studying in some capacity. It really helped with the absorption of course material.
The course also incorporated several other platforms into its tech stack and way of working, which none of the other courses had done. It was refreshing. The most mentionable being GitHub Classroom. Git has been my VCS of choice for a long time at home, but having worked somewhere for nearly a decade that is married to Perforce, I’ve not had the opportunity to experience Git in a true collaborative environment. This was that opportunity, and it was a great experience. Combine this with more learnings and experience with Git since the course finished, and it is hands down the winning VCS in my eyes.
Back to Swift, it is such a nice language. It feels very polished today, and the areas with lack of support where you need to fill in the gaps with Objective-C syntax are greatly reduced. Swift might be my favourite language, from an appreciation standpoint, although it is difficult for me to dethrone Python when I use it literally every day. It’s just, Swift has the similar niceties and simplicity of Python, but also addresses several of the weak points of Python, such as being a strongly typed language. Maybe it is just the benefits of being a more modern language. If you watch the WWDC presentation on SwiftUI, the new GUI framework for Swift, you’ll see how exciting the future of Swift is looking.
All in all, top marks for this course. I had high hopes going in, and it met all of them. I felt confident coming out of it with my ability to create an app. There is little mystery to me now, and I am excited to create one. This will be what I spend my spare time at home doing, so there might be some posts appearing on here regarding Swift and app development in the near future, as I continue.
I feel accomplished in my goal of strengthening my foundational knowledge and I’m really happy I decided to dedicate my time toward this. To anyone else who is self-taught and considering pursuing something similar – I definitely recommend going after it. You don’t need to complete an entire program like I did (after all, at the end of the day it’s just a piece of paper), but certainly at least get started with a course or two to start finding out what you don’t know you don’t know.