I was first exposed to programming in Grade 10. We spent the first two months talking about binary and bitwise operations. When we eventually got into typing on keyboards, we used Java. Aside from writing a Fibonacci program and other introductory programming ideas, we were let loose on this neat project called Robot. In retrospect, Robot’s purpose was to help us think programmatically, something that it definitely achieved. In essence, Robot created a virtual robot that we could see on a grid. Every square on the grid was either an empty
CELL or filled in with a
WALL. When we ran our program the grid would be loaded up and we were given the option to click on squares to toggle them between
CELL. After we were satisfied with our configuration of the “room”, we could click a button that would start the robot executing our file of commands. The Robot had a couple pretty simple commands that we could give it:
MOVE_BACK etc. It also had
PAINT_CELL. Every square on the grid could be blank, or it could be colored in. The Robot had the functionality to check if the cell was painted, or paint it in. In hindsight, I would call this the Robot’s API, but I had no idea what that meant at the time. We were given some fun assignments that had to do with the Robot, such as paint every cell that I could get to. There were some interesting variations, like painting every cell but not being able to walk over any already painted cell. I had quite a lot of fun with Robot.
I decided to continue with computer science and take the follow up course the next year. We continued to work in Java, drawing fractals and building games with a GUI. However, it was entirely a school thing for me. There was an extracurricular Programming Club that I went to once because my friends were in it. I didn’t understand what they were doing and nobody explained anything to me. All I got to do was stand over their shoulder and watch them retype the same line again and again with slight variations. I had no idea what language they were working in, or what was going on period. My time at high school was mainly focused on Mathematics and Volleyball.
Coding was completely absent from my final year of High School, I knew that I loved Math and Volleyball so I spent all my time doing that. I came to UofT and promptly enrolled myself in the Math Specialist Program and made it onto the Varsity Volleyball Team, everything was going to plan. I enjoy being well rounded so I also took a philosophy course and economics course. Half way through first semester, I realized that economics was not for me. Yes I was really good with working with numbers, but this was not that. I made the decision to drop this year long course because staying in it would probably result in my failing, going crazy or both. I now had a spot to fill in my second semester, so I scoured the UofT website looking for a course to fill this gap, when
Computer Science [CSC courses] caught my eye.
The course was
CSC148: Introduction to Computer Science. The course description wasn’t exactly riveting, but I had fond memories from High School so I decided to give it a whirl.
“Abstract data types and data structures for implementing them. Linked data structures. Encapsulation and information-hiding. Object-oriented programming. Specifications. Analyzing the efficiency of programs. Recursion. This course assumes programming experience as provided by CSC108H1. Students who already have this background may consult the Computer Science Undergraduate Office for advice about skipping CSC108H1. Practical (P) sections consist of supervised work in the computing laboratory. These sections are offered when facilities are available, and attendance is required. NOTE: Students may go to their college to drop down from CSC148H1 to CSC108H1. See above for the drop down deadline.”
The course was in Python, a language I had never heard of until then. The course instructor posted a “refresher” on Python on the course website, for anyone that wasn’t familiar with the language. I was curious. I started Googling around. I found Codecademy. They provided a course on Python that was aimed at someone who had never used Python before. Perfect.
I finished the 13 hour course in a single evening. My background of Java from two years previously really helped. I also attacked this problem with a level of focus that I usually reserve for doing math or playing volleyball. I then proceeded to throw myself headlong into this course and enjoyed every moment of it. We made a very dumb artificial intelligence that would always win in a variation on Tic Tac Toe.
The summer after first year I felt so empowered by programming that I started what has become this blog. It started on Wordpress and then migrated to a Jekyll blog that has gone through so many iterations I’ve lost count. I spent a lot of time in coffee shops googling things. I found Exercism which gave me experience working through random problems. It was also my first exposure to testing. Every exercise came with a test file, and you knew you were finished the exercise when all the tests passed. This was very much a hobby as the majority of my time was spent volunteering for the Toronto Pan American Games 2015 and working at Camp Tawingo.
Second year began and I had a change of heart, a Math Specialist was no longer what I desired, I wanted a Double Major in Math and Computer Science. Even though I only had a half credit of CS under my belt, the department was gracious enough to allow me priority entry into the Subject Post. My second year at UofT was the most hectic year I’ve had to date. Aside from 5 very hard courses each semester, I had 4 large extracurricular activities that ranged from being a Head Referee, a Treasurer of a Union, a President of an Organization and a Volleyball Coach. All extracurriculars aside, I finished
CSC207: Software Design,
CSC236: Intro to Computational Theory,
CSC209: Systems Programming and
CSC258: Hardware Organization, along with
STA247: Probability with Computer Applications.
In the grand scheme of things I was still very inexperienced, but had tripled the number of programming languages that I knew! Exposure to hardware changed how I saw computers and writing code in general. Learning the concept of pointers from
CSC209 fundamentally changed how I thought about languages and writing code in general. By the end of the second year, I had fully caught up to my peers. Except for a single half credit, I had all the prerequisites needed to take all the third year courses.
I was not prepared for summer to actually come. My heavy work load kept me focused on short term weekly goals, instead of looking months in advance for summer employment. Suddenly it was March / April and nobody was hiring for the summer. By complete accident I found an email in my inbox from the Department of Computer Science at UofT. It was the weekly email updating all the students to the “goings on” in the department. I skimmed it looking for inspiration and right at the bottom there was a link titled
Summer Employment Opportunities. Awesome!
The job that was being posted was for Markus, an online marking tool that I had used as a student in second year. It was developed by Karen Reid, a professor in DCS (Department of Computer Science) and was looking for students to work on implementing a new feature.
I was given the opportunity to interview and I went in not sure what to expect. The majority of questions were about working in teams and much less to do with technical know-how. I had a ton to talk about because of my experience working as a counsellor at Camp Tawingo and the time I’ve spent playing, officiating and coaching volleyball.
Unfortunately I was not offered the job, but Karen decided to do me a favor and gave my name to a friend of hers in the industry. Later that month I met with Greg Wilson who in turn gave my name to a couple of his contacts who were looking to hire talent. Glenn Archer was one of the people Greg helped connect me with. However The Jonah Group had already hired their interns for the summer months and had no place for me, even though they made it clear that they were interested.
What happened next was a complete blur, but I got a Facebook Message from a close friend of mine, Chris Lessard, with the opening message
Are you still looking for a job this summer?
I responded positively and within the day I was meeting with StockRender. The next Monday I had a job.
In April my initial reaction was to find a YouTube tutorial, because it was the closest thing to a university lecture. At that point, I had only learned to code from lectures so that was the medium I was most comfortable in. In August, if I need to learn something: it’s completely different.
- Skim the documentation
- Find any code snippets in the docs and Copy-Paste them in to see if it works
- Tweak the code snippets until the do what you want OR doesn’t work at all
- Actually go back and reread the docs
- Open up the source code of what you’re dealing with and trace something
- Google the author and look at everything they’ve done
- Try and find the author’s blog to see if they’ve written anything useful
- Skim the author’s twitter, debate whether or not to tweet at them for advice (Thanks Dan)
- Reread the docs
- Figure out how to get a Minimum Viable Product out of what’s available
- Keep trying ad nauseam
This seems to work decently well. The most important thing is that it shouldn’t feel robotic. Experimenting is my favourite way to learn because you tend to learning something new and completely unexpected every single time. Either that or you realize you’re doing something you already know from a different angle and it gives you a more complete understanding of that system.
One of the coolest things about working with technology is that everything was created by humans. All the code that exists was created by someone’s mind. Why do things work as they do? Somebody somewhere wrote it to be like that. That’s the most inspirational thing I learned in the summer of 2016. The solution is always out there because everything that exists has been created. There is a creator for every piece of software in existence, and if someone can write it, then god dammit I can learn it.
Hello and welcome to the present. I have had a single week of classes as I write this. I’m taking some fascinating courses and am super exciting to see where this year goes. I am in
MAT301: Groups and Symmetries
MAT315: Number Theory
CSC318: The Design of Interactive Computational Media, taught by Katie Seaborn
CSC324: Principles of Programming Languages, taught by Ilir Dema
CSC369: Operating Systems, taught by Bogdan Simion
I’m really looking forward to Operating Systems and Programming Languages because it hopefully will provide insight into why certain conventions are the way they are. I want to know why the things I take for granted were created as they were.
On top of those five classes I am continuing to work with the UofT Men’s Volleyball Program as Assistant Coach. I have also started to create websites on the side. My favourite thing about front-end development is the intersection between art and logic. Most of the sites that I have made can be found here on my personal website.
To summarize, my path to this moment in time has not been linear. I have no idea what is going to occur going forward, and I relish the idea that anything could happen. All I can do is soak up information like a sponge and enjoy myself. I’m so fortunate that I really enjoy writing software so that my personal and professional goals overlap. Being happy and advancing my career can both be accomplished by writing code, and for that fact I am so lucky.