Recently, I came to the realization that I’ve been writing computer programs in one form or another since I was about 6 or 7 years old.
Along the way, I’ve had plenty of people to influence the way I think about code, and how I write it. Sure, there have been plenty of textbooks along the way too, but I want to give some thanks to the people who have directly affected my abilities to do what I do.
And what better way of doing that then by listing them?
A Chronological List of People Who Have Influenced My Coding
- My parents, for bringing home our first family computer. It was an 8088XT IBM Clone – no hard drive, 640K of RAM, dual 5 1/4 floppies…it was awesome. This is the computer I started coding on – but I couldn’t have started without…
- My Uncle Mark and my Aunt Soo. Both have degrees in Computer Science from the University of Waterloo (that’s where they met). My recollection is pretty vague, but I’m pretty sure that a lot of the programming texts in my house (a big blue QuickBasic manual comes to mind) surely didn’t come from my parents – must have been those two. With the book in one hand, and the 8088 in the other, I cranked out stupid little programs, little text adventure games, quizzes, etc.
- The online QB community from the late 1990’s to the early 2000’s. When my family got online, I soon found myself hanging out at NeoZones, in the #quickbasic IRC channel on EFNet… actually, a lot of crazy stuff was being done with QuickBasic back then – I remember when DirectQB came out, and somebody was able to code a raytracer…in BASIC. It was awesome. I’d say these were my foundation years, when I learned all of my programming fundamentals.
- My friends Nick Braun, Joel Beck, and Doug McQuiggan – these three guys and I used to come up with crazy ideas for games, and I’d try to program them. I’d come home from school, and pound out code for a computer game for a few hours in the basement. More often then not, these projects would simply be abandoned, but still, a lot was learned here.
- After highschool, I went into Electrical and Computer Engineering at the University of Toronto. I didn’t do too well at the Electrical bits, but I could handle myself at the Computer bits. I learned OOP, Java, and basic design patterns from Prof. James McLean.
- I also learned a great deal from Prof. McLean’s course text – Introduction to Computer Science Using Java by Prof. John Carter. I know I said I wasn’t going to mention textbooks, but I also got taught Discrete Mathematics from Prof. Carter, so I thought I’d toss him in too.
- My second (and last) semester in ECE had me taking Programming Fundamentals with Prof. Tarak Abdelrahman. I learned basic C++ from Prof. Abdelrahman, and how to deal with large systems of code.
- After my move to the Arts & Science Faculty, I took my first Computer Science course with Dr. Jim Clarke. I learned about Unit Testing, and more design patterns. I also eventually learned some basic Python from him, but I think it was in another course.
- I took CSC258 with Prof. Eric Hehner, and learned about the structure of computer processors. Physically, this was a low-level as I’d ever gotten to computers. I was familiar with writing Assembly from my QB days, but Prof. Hehner’s Opcode exercises were really quite challenging – in a pleasant way. Also, check out his concept of Quote Notation…
- After that year, I spent the first of three summers working for the District School Board of Niagara. Ken Pidgen was my manager, Mila Shostak was my supervisor. Ken gave me incredible freedom to work, and soon I was developing web applications, as opposed to just fixing up department websites (as I originally thought I would be doing). Mila gave me guidance, and showed me how to use CSS to style a website. She also got me started using PHP and MySQL to create basic web applications.
- While working at the Board, I had the pleasure of sitting across from Jong Lee. Jong and I would bounce ideas off of one another when we’d get stuck on a programming problem. He was very experienced, and I learned lots of practical programming techniques from him.
- Michael Langlois and Ken Redekop acted as my clients at the Board, and always gave me interesting jobs and challenges to perform.Everyone at the Board was always very positive with me, and I’ll always be grateful that they took a newbie undergrad under their wing! I was given a ridiculous amount of freedom at the Board, and was allowed to experiment with various technologies to get the job done. Through my three summers there, I learned bits about Rails, CakePHP, MVC, network security, how to deploy an application remotely, how to run a local server, how to develop locally and post to remote, ORM, Flash, web security…so many things. The list is huge.
- Karen Reid and Greg Wilson have been the latest influences on me. The MarkUs Project was the first project I’ve ever worked on with a team. It was my first time seriously using version control, my first time using a project management portal (Dr. Project), my first time learning Ruby, and my first time working on an open source project. I’ve also learned plenty about time management, people, the business of software, and how to get things done. Again, I’ve been given lots of freedom to learn, experiment, and hone my craft.
Anyhow, these are the people who come to mind. I might add to this list if I remember anyone else.
But in the mean time, for the people listed above: thank you.
With summer coming to a close, my upcoming school year is starting to piece itself together. I’ve been assigned my research supervisor, and I just selected my courses:
- CSC2125F: Topics in Software Engineering: Government 2.0
- CSC2526F: HCI: Topics in Ubiquitous Computing
- CSC2431S: Topics in Computational Molecular Biology
- CSC2511S: Natural Language Computing
I just finished my first week of work, and it finished with a long weekend. Not bad.
And I’ve got a great team – I’m working with Severin Gehwolf and Nelle Varoquaux, both excellent thinkers, programmers, and collaborators. Severin is a UofT student like myself, and Nelle has flown in specially from France (!) to work with us. They’re great, and we’re going to get a lot done.
So what have we to show for our first week of work?
Well for starters, we’ve gutted the entire database schema of OLM. We started right from the bottom, and worked our way through every component of the database, trying to figure out what we could cut, trim, expand, and refactor.
I, myself, came into this project with no Rails experience whatsoever, and while I think I now more or less get the drift, I’m still by no means an expert. Anyhow, I’m looking at my old code too, and kind of grimacing.
But the ideas are all there. It’s like a big hunk of marble that a whole lot of people gnawed and chiseled at for a little bit, trying to make a sculpture. After the big DB schema refactor, I think the whole team can sort of see the rough form of what this thing is trying to become, and now we just need to carve it out. Luckily, instead of a few hours per week like the last few semesters, we get a full summer to focus on it.
So, with the DB refactor done, the first thing has been to redesign the models/controllers to play nice with our new database tables. It was scary, because after the refactor, everything broke – but we’re working on it, and it’s slowly starting to come back.
We’ve also decided to switch the file storage back-end. Up until now, we were using Ruby to organize a file system back-end to do simple versioning of submitted files. One of our goals this summer, is to build an abstraction layer that will allow us to choose different options for this versioned storage back-end. In particular, we aim to support Subversion. That’s right – a web-based Subversion front-end that supports commits, and catches (but doesn’t resolve) conflicts. It’s a fun thought.
I have a feeling this is going to be a very interesting part of our project, and I’ll probably report on it more as it develops – but as it stands, it’s still being conceived on wipe-boards and scrap paper.
Anyhow, I’ll try to keep this blog up to date with what we’re doing. Or maybe I’ll keep this blog up to date. I’m conflicted.
Who knows, maybe this will be my last blog post of the summer. I won’t lie – after working 8 hours on a computer, the last thing I want to do is come home and write a blog post. If anything, my posts will probably wait until the weekends.
But we’ll see.
Today, I wrote my first and last final exam for this semester.
So my undergraduate career appears to be finished. I’ve gotten confirmations of program completion from both the Computer Science and Drama departments. New College is holding out on me with their blessing, but I think it’ll arrive in the mail soon.
I won’t be going to convocation – I’ll be in Poland. I’m not that upset about it – Poland is totally worth it.
Besides, I have a Masters degree to complete now – my parents can go to THAT convocation.
Now For Celebration Rituals…
I’ve completed many a school year with my friends, and over time, rituals have formed to celebrate the end of the work.
In grade school and high school, it usually consisted of a symbolic “note toast” (the burning of our most hated assignments) along with a barbeque, and camp-out party.
Somewhere along the line, things changed for University. Now, when one of us completes their last final exam, we’re given license to crank Sisqo’s Thong Song (usually restricted in our household for just this event) and dance up and down the halls.
If you’d like to celebrate with me, feel free to crank this wherever you are (NSFW):
Alternatively, the Thong Song can be replaced with either:
MOP’s Ante Up (NSFW):
Or Michael Jackson’s Don’t Stop ‘Till You Get Enough:
Since I’m finishing my undergrad degree, I’m totally going to rock out to all three.
Feel free to join me, remotely.