Second Year
This tier list assumes you passed all classes and applying the knowledge you learned from first year.
S-Tier
EECS 2030: Advanced OOP
This is the predecessor course for EECS 1021. You will touch on advanced (also very important) OOP principles such as inheritance, polymorphism, aggregation and composition, shallow copy and deep copy, interfaces, abstract classes, etc. I would take this course ASAP because it unlocks many courses in 2nd year and beyond, that require EECS 2030 as a prerequisite.
EECS 2101: Fundamentals of Data Structures
Previously known as EECS 2011, this is the most important and my favourite course in 2nd year. You will learn about data structures that you'll need for coding interviews or online coding assessments (arrays, stacks, queues, linked lists, hashmaps, heaps, trees and graphs), as well learning the best usage for these data structures in problems. You will also touch a bit on algorithms, like sorting, tree and graph traversals (e.g., Djikstra). The course is manageable in the first half, but it gets a little tough when you get to trees and graphs.
EECS 2101 will go into more theory than actually implementing them in coding problems from my experience (it could be different with other professors). I recommend doing LeetCode problems utilizing data structures to expand your understanding on them. I also rarely did any proofs in the course, but again it can depend on the professor, so I'd maybe brush up on discrete math knowledge as well.
EECS 2311: Software Development Project
You will be put into a group throughout the semester of this course, developing a software project mostly in Java and the stuff you learned from EECS 2030. Make sure you find a group that is willing to do above the minimum. I also recommend learning, most importantly, Git and Github, along with databases with SQL before taking this course, don't wait until the class covers them (I made this mistake).
It also covers common and important SWE practices in the industry like testing, code reviews, user stories, agile software development, etc. I wish I learned Git and databases ahead of time, my team could've had a better project with an organized github repository, and possibly a better grade. It doesn't hurt to learn content ahead for courses, especially technologies you will have to master and frequently use in the SWE industry.
ENG 2003: Effective Engineering Communication
I took this course during the summer after my first year along with another course. So, I had fun taking this course and I found it definitely better than ENG 2001. This is a communications course, which involves giving pitches, presentations, interviews and writing communication through giving feedback, a technical report, etc. Communication skills are crucial life skills people need to grasp looking for jobs or networking.
Writing technical reports are common among mechanical, electrical, civil and electrical engineers. Pick a topic you're interested or passionate about for your technical report, so it can feel less tedious (my technical report was 20 pages long).
This class was also the reason I created my LinkedIn page, which I highly recommend to create an account to look for jobs and build a network.
A-Tier
MATH 2930: Introduction to Probability & Statistics
Disclaimer: I did not take this course, but I did take an equivalent course to this at another university. This will be one of the easier math courses to take in your degree. If you've taken Data Management in an Ontario high school, this course should be easy; otherwise, it's not bad. This course is useful if you plan on doing ML and Big Data courses, as they rely heavily on statistics.
ENG 2001: Engineering Projects: Management, Economics, and Safety
ENG 2001 is your engineering economics course where you also learn about project management and safety. I really wish I took this course sometime in the summer because I found it to be in the way at times. I also didn't like this course for several reasons. I wasn't really interested in project management and the assignments were basically "fill-in-the-charts". Project management might be useful down the line if you plan to advance your career as a Lead Engineer for software projects.
Understanding economics and how the market works is worthwhile as someone job hunting for internships. However, you can do the same thing by self-learning in your spare time (YouTube, LinkedIn, etc.) or take an economics course.
B-Tier
EECS 2021: Computer Organization
One of my favourite 2nd year courses. In this course, you will learn topics related to both hardware, such as gates, memory, and number systems (binary, octal, decimal, hexadecimal), cache, pipelining. You will also learn assembly programming, using RISC-V and hardware description languages like Verilog. It's a vital course if you want to look into fields like embedded systems, firmware design, FPGAs, etc.
Be warned that this course is time-consuming, and I would recommend spending a good amount of time for this course. Verilog will come back in third-year courses like EECS 3201 and EECS 3216 (though they will assume you know nothing), so I would at least have an idea of the basics of Verilog. Verilog is important to learn for Electrical and Computer Engineers, and less applicable for Software Engineers unless if you want to invest yourself in hardware.
EECS 2032: Introduction to Embedded Systems
Despite the course name, this is your typical C + UNIX/Bash course, you don't learn about embedded systems until the end (which is only 30% of the course). Bash is an important skill to pick up in development, where you'd have to navigate and interact with a terminal. Moreover, if you plan on going into DevOps/Infrastructure, you will need to know Linux and shell scripting, which are essential skills.
You also learn C, which might be a learning curve only coming from Java. The syntaxes of both languages are similar, however, you'll need to understand how memory works under the hood in a computer. In fields like embedded systems, you need to highly prioritize code safety and program optimization using memory management and pointers. C is also the mother of all programming languages, which largely influenced the creation of today's operating systems: Windows, MacOS, and Linux. In general, you may rarely or never use C, unless probably if you'll be working in semiconductor and hardware companies like AMD, NVIDIA, or Qualcomm.
The embedded systems part of the course is just programming a microcontroller using C and learning how to read microcontroller schematics. This course, when I took it, contained lab tests of Bash and C, so make sure you practice both to pass the lab tests (it's also 4 credits too, so keep that in mind). Meanwhile, with other professors, the course is C + Embedded Systems with no Linux, which isn't substantial.
MATH 2015: Applied Multivariate & Vector Calculus
The final calculus course. I found this to be significantly easier than integral calculus because of the heavy overlap between differential calculus, integral calculus, and linear algebra. Coming from MATH 1014 to MATH 2015 is easier than going from MATH 1013 to MATH 1014. However, you will have to know your linear algebra well from MATH 1025 since you will work in 3D or multi-dimensions.
90% of the course is differential and integral calculus in multiple dimensions, which also involves some linear algebra. The last 10% of the class is vector calculus (which some consider as Calculus 4), which includes topics like Green's Theorem, Curl, Divergence Theorem, etc.
C-Tier
MATH 1090: Introduction to Logic for Computer Science
Imagine if EECS 1028 (or EECS 1019) is a bag of potato chips. Then you have this other bag of chips with a weird and unique flavor (like shrimp), that is MATH 1090. You will learn about boolean and first-order logic in a completely new abstract syntax as opposed to EECS 1028. Keep in mind that it's also a unique course offered by York, so universities don't cover this particular course content (even other professors like to roast it or despise teaching it).
Though the content in the course seems useless, it's however essential to have a decent understanding of this course for third-year courses like EECS 3342 and EECS 4315, which are for high-level control systems like aircraft, medical equipment, etc. Otherwise, I see it as a filler course for CE and CS students. One important thing to note that EECS 1028 is not a prerequisite to MATH 1090. However, EECS 1019, which is discrete math for CS, is indeed a prerequisite for MATH 1090. In this case, I personally recommend taking EECS 1028 first, so MATH 1090 has an easier learning curve for you.
PHYS 2211: Experimental Magnetism
This is supposed to be the lab component for PHYS 2020 (similar to PHYS 1801), but it's split into a 1.0 credit course. The only work you have to do are pre-lab quizzes before the lab and the experiments in the lab. The experiments are similar to the ones done in PHYS 1801 labs. Very easy to pass if you work with your group mates.
F-Tier
EECS 2200: Electrical Circuits
I have never been so glad to pass a course and never have to retake ever again. This course is all about analyzing and solving electrical circuits, beyond what you learned in PHYS 1801. I personally think this is the hardest course in second year because you need to have a unique approach to solving circuit problems. You have to understand HOW a circuit works to be able to solve problems, before throwing formulas all around then perform computations. Moreover, you have to master the basics of circuits: how voltage, current, and resistance work, Kirchhoff's Laws, how to tell if resistors are in series, parallel, or neither, etc.
The good news is it's not a prerequisite to required classes in Software Engineering (except for EECS 3452 if you decide to go into the General Stream), so you may take it later. I found this course with little purpose for Software Engineers, but this would be how our program would be accredited by the CEAB. I highly recommend not pairing this with heavy classes, taking it in the summer might be a good idea. Here is a good playlist of videos covering topics of the course.
PHYS 2020: Electricity & Magnetism
The concepts are mostly the same from the E&M you learned in PHYS 1801. However, you will be solving more complex problems with calculus and deriving equations from PHYS 1801.
Note that I was fortunate enough to have an amazing professor in the class, so I did not have a rough time. With anybody else however, this course can be difficult and challenging. Even though this class isn't useful, I really enjoyed taking this class and learned a lot. This is just to show that the professor plays a huge role into whether you will love or hate the class.
This will also be the last mandatory physics class you will take in SE, unless if you decide to take another physics class for your science credit in your third year.