I chose the Software Engineering program in the department of Engineering. Both Computer Science and Engineering schools offer a Software Engineering program. They both emphasize on software development, but the Engineering program includes courses about the engineering profession and the program is also recognized by the Canadian Engineering Accreditation Board. In the Engineering program, students have very similar core software courses and more required courses (112 credits versus 90 credits), including electrical and computer engineering courses.
The curriculum has slightly changed over my three years at Mcgill University (see both pdf: 2008 [pdf] vs 2011 [pdf]). For example, the video game project (COMP-361) has been replaced by a robot project (ECSE-211) with other Engineering students rather than other Computer Science students, and there are more credits given to the final design project. Overall, the courseload is intense if students want to finish in 3.5 years. I chose to reduce the number of courses per semester to five, with an additional summer course in order to finish in four years.
Discussing with other students from other universities, such as Université de Sherbrooke, Université de Montréal (Polytechnique) and École de Technologie Supérieure, McGill's program seems more theoretical. Other universities seems to have programs that emphasize more on projects and allow for specialization in certain domains (security, management, video games, etc.) within the bachelor's program. At McGill, maybe as in other popular american universities, theory is central to learning about thinking problems and solutions, as opposed to practicing using projects. For this reason, I heard career advisors and recruitment specialists say that universities don't want to teach all the programming languages to students, nor teach them how to be proficient in technical aspects of software development, but rather emphasize on giving students ways to think as engineers and computer scientists. This reasoning seems fair, but as my programming skills before university were very close to zero, I would have liked to get more practical (maybe useful laboratory) courses as found in those other Quebec universities, and particularly those applying Problem-Based Learning. Moreover, a program similar to the 2011 Software Engineering curriculum (pdf), with more programming courses in the first semesters and organized internships in the industry would make McGill's program more attractive. Assisting to technology career fairs organized by the McGill Career Centre was not enough to get programming internships in my first two years.
The different courses in my Software Engineering undergrad are below, along with some comments.
Last semester in my Bachelor's degree!
AI will be particularly interesting for video games.
Networking-Android application to be continued
Arts general complementary
General complementary
Basic science complementary
Less courses, harder projects
The most difficult theory in my four years of Software Engineering. Solving flow network problems did not prove to be easy, and the analysis of NP-complete problems, and approximation and randomization algorithms was quite challenging. To successfully solve problems in this course, it requires concentration, creativity, and always more practice. There are not many textbook or online resources, to help grasp the material from different perspectives neither, and references and course notes explains solutions at different levels of abstraction.
If you are not satisfied with your average number of lines of code in your different projects, then take this course. The two compiler projects for WIG (20 000 lines) and JOOS (7000 lines) applied the material covered in classes every week. Time management and team coordination for these project milestones every week was most important. In the course, it was interesting to review regular expressions and see the different compiler phases. The optimization techniques were also briefly introduced and quite interesting. See also the WIG project page.
Threads and parallelism with programming frameworks are much clearer now. The decomposition and mapping techniques help understand how good computation performance using parallelism can be achieved. The parallel project consisted of "A Turbocharged Web Crawler built on V8" (pdf). The web crawler implementation used Node.js v0.6.0 (November 2011 release) platform and the MongoDB (NoSQL) database. The achieved performance was outstanding and relatively easy to code.
This project continues in the next semester. Iain, Guillaume and I did a very good job in our reports and oral presentation.
Basic science complementary course; I can better follow my brother-father discussions on animal and human health and some diagnostics in the House tv show.
Less courses, more projects
Unfortunately, this extra course was not enough challenging to really have significant experience at practicing what was presented in class. Important concepts about abstract classes and multiple inheritance, major differences with C and Java, and topics about exceptions, references and pointers gave me an overview of important concepts of this language.
Prof. Bettina Kemme covered relational databases with the ER language, SQL queries, indexing topics, and database design and tuning with schema refinements and normal forms. With Simon and Guillaume, I created a store database for the course project. This work was enough to review a subset of concepts covered in class.
One of the most difficult course in my undergrad! The number of topics covered in this course was extensive, and the course project, one of the hardest. Choosing the right problematic and working prototypes required a lot of energy. It was the course where I learned the most, and probably the one I invested the most time in it.
Operating systems touch a very wide range of topics: processors, memory management, disk management, synchronization, etc. The material was interesting.
We had colorful instructor who is actually consulting software development firms. There was an emphasis on test-driven and agile development (SCRUM). The instructor's experience in the field was most valuable and speakers also added deepness to the course.
Average courseload, part-time job
The various topics of this course were applied directly in other projects during the semester. I felt that I was arming myself with new tools against problems. The assignments were useful to see how practical and theoretical analysis have different interpretations for the complexity of certain problems.
One of the most difficult course in my undergrad! You can't get out by learning patterns or definitions by heart; you need to think. In most math courses, you can practice problems and copy patterns that match the questions. In this probability course, you need to really understand the question and creatively use the tools to evaluate the outcomes. If I would take this course back, I would probably do better knowing that the patterns trick don't apply.
This technical complementary course revealed the engineering behind the Internet. We saw protocols and main algorithms used by the application, transport, network and link layers. The research project aimed at evaluating the engineering choices behind media streaming and file download technologies.
No comments.
Engineering projects require planning and revenues. I better understand headlines about shares with technology companies and movies with some economy.
Prepare for design projects
After the communication course, I started my summer job at BBA. I was in charge of integrating an inventory tracking system to help the IT infrastructure team keep record of hardware and software equipment more efficiently upon delivery and installation. I continued working at BBA during the Fall semester, mostly helping with updating equipment records and moving computer equipments at the Montreal office. See BBA for more information.
This course was about improving writing skills and oral presentation skills. As opposed to regular semester classes, the workload was more difficult to handle because I was used to giving a hundred percent during school time.
Coolest project
Harder programming
Math, electrical, and computers
First semester
Preparing for English courses
last updated: January 2012