At the end of April, I finished all my final exams and, hence, my first academic year at the University McGill. It was a fun year where I had the chance to meet awesome people and, for the first time, embrace the full power of pure and applied science. Indeed, with five classes per semester concentrated on quantitative subjects, it was a full learning experience and I am glad I survived. I took 4 computer classes, 4 mathematics courses and 2 economics. Here are my thoughts on the science classes I took (so omitting economics).
COMP202 Foundations of Programming
As an introduction course, it was the most basic class a computer science student can take. We used the programming language Java and coded with Doctor Java or Eclipse editors. The semester covered pretty much all fundamental topics: classes, methods/functions, loops, if-statements, arrays, strings, modular software, input/output using scanner, libraries, exception handling, etc. The strongest skill it gives you is the skill to debug, to learn how to use the Java debugger and find the errors in your code. The key to do well in that class is to do the assignment as soon as you receive it and give yourself enough time to finish it. Do the practice/exercises (worth no point) also help a lot to really understand the material. The point is to a 100% understand what you are coding in your assignments and you will be golden.
COMP250 Intro to Computer Science
As the continuation course to COMP202, Introduction to Computer Science will cover the most fundamental algorithms of computer science world. It will make you use your programming skills as a tool to do bigger and more complex problems where you need to think outside the box. Various topics included grade school algorithms, sorting (Insertion Sort, MergeSort, QuickSort, Counting sort, etc) and searching algorithms (BFS, DFS, Binary Search, etc) as well as to learn to analyze space efficiency and running time. Most algorithms were given in pseudo-code so it is definitely a good idea to learn to write them again using Java (or any other programming language).
COMP206 Intro to Software Systems
Another great class to a computer science major, the understanding of software systems is a must if you want to do bigger and better projects. The class will teach you to use the operating system LINUX (all the theory behind how systems work), teach you to code in Bash, C and Python and start web development using HTML. It teaches how to change characteristics of your computer (or any other system) using the terminal and the command-line, how to use the GNU tools, and much more. It is an introduction class so I definitely recommend applying those new skills on a side projects to practice.
COMP273 Intro to Computer Systems
Introduction to Computer Systems was a class I enjoyed a little bit less. I see why it is such an important class as it teaches you how computer memory works as well as how each of the external devices/peripherals are connected to the CPU, main memory and hard disk. This is not a class to take lightly as there is a lot of material to learn. Practice using the teacher’s webpage and don’t be behind on the material. The programming in this class is easy (using Logisim and MIPS), but you should still start your assignment in advance as these software are very different to Java, C, Python, etc.
MATH223 Linear Algebra
I found this class extremly similar to the class MATH133 Linear Algebra and Geometry. I guess the point of this class was to reinforce the material previously learned because linear algebra is one of these fields that is important for many many aspects of computer science and mathematics. It reviews complex numbers, matrices, determinants, systems of linear algebra, and the concept of kernel/image/rank/vector space. I think the harder part of the class was to get the proofs right so I recommend going back over those as practice.
MATH235 Algebra 1
A whole different level compared to Linear Algebra in my opinion. This was a difficult class for me as I didn’t expect the material to be so dry, theoretical and abstract. The class goes over a lot of theories:
Sets, functions and relations. Methods of proof. Complex numbers. Divisibility theory for integers and modular arithmetic. Divisibility theory for polynomials. Rings, ideals and quotient rings. Fields and construction of fields from polynomial rings. Groups, subgroups and cosets; group actions on sets.
This is another class where you should definitely do all your exercises, practice a lot and learn as the class goes on. Reread your notes when you get back home. Material builds up quickly so you definitely can’t afford to be late on your studies.
MATH314 Advanced Calculus
This was an easy class as it is pretty similar to Calculus III. Just do all the exercises in the textbook and understand the assignments and you will be good. In general, I like doing calculus so it was fun. The teacher made it a bit harder to understand, but since it was nothing new, I just had to adapt my past knowledge with the teacher’s way of teaching.
This is like an introduction class that teachers you the most fundamental concepts of probability. It goes from general probability to more complicated (multivariate distributions) and pretty much teaches you all the important distributions you need to know for statistical analysis. It covers:
Sample space, events, conditional probability, independence of events, Bayes’ Theorem. Basic combinatorial probability, random variables, discrete and continuous univariate and multivariate distributions. Independence of random variables. Inequalities, weak law of large numbers, central limit theorem.
Get the textbook and practice a lot. The concepts aren’t too hard to understand. A continuation from this exam could be to do the first exam of the Actuarial Profession (Exam P).