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 ten years, was well experienced with Python and had some experience in other languages – why go back to school? Well, I was entirely 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 mainly covered the basics I was already familiar with, but there were still some excellent takeaways from the lessons.
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 refreshing and opened my eyes in many 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 might talk more about in the future.
Well-known design acronyms, SOLID and DRY, were covered in the course. There was an entire class dedicated to going over each letter and thoroughly explaining them, with examples. Dry material for some, I’m sure, but a solid topic not likely to come up in self-taught adventures.
Business Analysis and Systems Design
This course was excellent. 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. Many developers might prefer to skip these things and get straight to the fun stuff, but it is super important and can make the fun stuff more fun.
Focus and effort here will lead to higher quality solutions, better communication and shared understanding. I would even argue reduced development costs as an outcome in some cases for having less confusion in the development cycle.
Agile Methods and the Scrum Framework
I thought this course was outstanding, 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. 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. Nicely thought-out artifacts and practices, done for specific reasons, all make essential contributions to an enjoyable and effective 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 Swift has matured, it’s super nice to work with. The course covered a large amount of content, and it was almost like a language immersion school. Deadlines and critical dates for different things were staggered every week, meaning there was rarely a day off from studying in some capacity. It helped a lot 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 married to Perforce, I hadn’t had the opportunity to experience Git in a proper collaborative environment. This class was now 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 great language. It feels very polished today, and Apple has significantly reduced the number of language gaps needing Objective-C syntax to come to the rescue. Swift might be my favourite language, from an appreciation standpoint, although it is difficult for me to dethrone Python since I use it 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 benefit 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, I give 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. I plan to spend my free time at home doing this, so there might be some posts appearing on here regarding Swift and app development soon, as I continue.
I feel accomplished in strengthening my foundational knowledge, and I’m pleased I decided to dedicate my time toward this. To anyone else who is self-taught and considering pursuing something similar – I 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 at least get started with a course or two to start finding out what you don’t know you don’t know.