EECS 183 WN 2026
Welcome! Are you interested in EECS 183 for WN 2026? You’ve come to the right place! There are some changes you should be aware of before deciding which section you’d like to sign up for.
Briefly, there will be some Python sections and some C++ sections. These are essentially two different courses, though they will have many similarities:
- Completely open to everyone with no prerequisites or prior knowledge expected
- Relaxed, welcoming, and encouraging atmosphere
- Great preparation for future work in computer science and leveraging programming in any discipline
- Count for the same university requirements
- Same target grade distributions
- Same number of exams and projects
- Same expected workload and level of challenge
- Mostly the same course policies
- Combined final EECS 183 Final Project Showcase
Please note: There are Python lecture sections with Python labs, and C++ lecture sections with C++ labs. You must sign up for a lecture and lab section that match (Python lecture with Python lab, or C++ lecture with C++ lab). If you try to have a Python lecture with a C++ lab, or vice versa, you will be required to drop/add to fix this, or drop the course entirely if this doesn’t work with your schedule. Exceptions are not possible.
C++ Version
Bill Arthur and Ben Torralva
The C++ version of EECS 183 will be similar to recent semesters. For more details, please visit the current course page. By choosing the C++ version, you will learn core problem-solving and computational thinking skills, and apply them to tackle meaningful, real-world problems. The C++ version will be taught in all sections run by William Arthur and Ben Torralva.
By the end of this course, you will be able to:
- Use modern professional tools to write, debug, and test code confidently
- Design algorithms to solve a variety of problems
- Develop substantial programs to address complex challenges
- Collaborate effectively with peers on technical projects
- Read technical documentation and translate it into working code
- Write programs incrementally, building one part at a time
- Apply systematic problem-solving strategies
- Establish a strong foundation for success in future computing courses
Completing the C++ version of EECS 183 is an excellent and proven first step toward studies in Computer Science, Data Science, Engineering, and many other disciplines.
Python Version
Steven Bogaerts
The Python version will be taught in all sections run by Steven Bogaerts. If you choose to take the Python version, you will learn to apply computational thinking in a variety of contexts, using Python as the means of expression and with AI as the focus.
- Broad Applicability: If you’re not planning on further CS study, the course will provide vital experience in data handling and leveraging of software libraries for AI, enhancing your adaptability to the computational demands of your primary discipline.
- Solid CS Foundation: If you do decide to study CS further, then the course will lay a strong foundation for EECS 280 and beyond.
As a result of taking the Python version of EECS 183, you will be able to:
- Write programs without AI tools to solve problems and facilitate computational work in computer science and in other disciplines.
- Apply understanding of fundamental computational techniques to critically evaluate, debug, and enhance AI-generated code as part of an efficient programming workflow.
- Use AI tools to more quickly apply software libraries to problems of interest.
- Explain certain key concepts of the field of AI and write programs related to these concepts.
Topics include the following:
- Introductory programming concepts (variables, functions, conditional statements, loops, strings, lists, dictionaries, classes…)
- Iteration patterns including for-each and comprehensions
- The NumPy library for efficient computation
- The Pandas library for data manipulation
- Key ideas in machine learning and neural networks
Steve, will the Python course prepare me for EECS 280, EECS 281, and beyond?
tl;dr:
-
Preparation: Yes, EECS 183 Python fully prepares you for these courses.
-
C++ Transition: EECS 280 no longer assumes prior C++ knowledge, and we include a C++ “bridge” at the end of this course.
-
Rigor: Both versions of 183 cover the same core logic and problem-solving standards.
Will you have an easier or harder time in those later courses, compared to someone who takes EECS 183 in C++, or ENGR 101 (Matlab and C++)? I’ll do my best to lay out various considerations below.
I’ve taught 183 in C++, I am designing 183 in Python, and I’ve also taught 280, so I understand well how these courses connect. My perspective is also shaped by having taught CS1 in various languages (C++, Python, Java) at other institutions over many years, giving me a front-row seat to how students internalize logic differently depending on their first language.
EECS 280 Does Not Assume Prior C++ Experience
As of the 2024-2025 academic year, EECS 280 is now intentionally structured to support students arriving from various language backgrounds, including Python and Java. Note, though, that many students currently in 280 still arrive with C++ experience. Because of this, the 280 instructors are actively monitoring and refining the early weeks of the course to ensure everyone can succeed. The course is very carefully designed to accommodate students with background in any language, and the instructors are extremely dedicated and talented.
What Student Backgrounds Succeed in EECS 280?
-
AP students - The historical strong success of AP students (who transition from Java) in EECS 280 provides a strong precedent for learning C++ as a second language in that course.
-
Transfer students - These students arrive with experience in a variety of languages. They succeed as well, perhaps after an adjustment period – even more so now that 280 has been changed to not expect prior C++ experience.
-
ENGR 101 students - This course is specifically tailored for the diverse needs of the College of Engineering, balancing Matlab and C++. While its C++ footprint differs from EECS 183, it has a long track record of successfully preparing students for EECS 280.
-
EECS 183 C++ students - This course prepares students very well for 280. It’s an extremely well-designed course taught by excellent instructors.
EECS 183 Python for non-CS Majors
In many professional fields outside of CS, Python has become the dominant tool for data analysis, visualization, and automation. Python has a huge ecosystem of libraries for data science, machine learning, scientific computing, web development, automation, and more. C++ is not commonly used for these tasks in most fields. Therefore, learning Python gives non-CS majors a more practical skill set that aligns with their most likely needs.
EECS 183 Python for CS Majors
The design of the Python programming language allows students to focus more deeply on algorithmic thinking and program structure without as high of a cognitive load from language features that are necessarily exposed earlier in C++. CS students must learn these complexities eventually, but in an introductory context, the pedagogical approach of this course prioritizes a deeper dive in computational logic and problem-solving patterns.
What Prior Experience Means for EECS 280
When I’ve taught EECS 280 in the past, I’ve seen students from different backgrounds have different early experiences. Any gap based on prior language experience typically narrows significantly within the first few weeks. After that, the challenge of EECS 280 comes from ideas that are new to everyone. I expect this trend to continue with the addition of 183 Python students into 280. The ‘Python-first’ path provides students with an early fluency in a language dominant in industry and data science, which complements the systems-level depth they will gain later in C++.
EECS 280 is Always a Transition
I’ll also mention that 280 is and has always been a step up in difficulty from the prerequisite options (e.g., EECS 183, ENGR 101) for everyone. But don’t let that stop you! You can and will succeed if you choose to pursue this, and EECS 183 Python is a solid choice.
EECS 183 Python Students Will Learn Some C++ As Well
I will spend a couple lectures at the end of the semester teaching C++ for Python programmers. This will not result in the same depth of C++-specific knowledge as in the C++ version of 183, but rather will show you how the logic you’ve already mastered in Python translates into C++ syntax. Your understanding of programming logic will allow you to focus on C++ syntax alone, making this transition very efficient. For students motivated to learn this material, in preparation for 280, I am confident they will be on solid ground for EECS 280.
In Conclusion
Regardless of the programming language used, both versions of EECS 183 are designed to meet the same rigorous standard of computational thinking required for the U-M CS curriculum. While EECS 183 Python is new at U-M, this approach has successful models at other top-tier institutions, and is rooted in my own experience in the classroom. I am committed to monitoring student outcomes closely and ensuring that my students have the foundation they need to thrive in 280 and beyond.
I hope that’s helpful! My goal isn’t to convince every student that Python is the ‘right’ path for them, but to ensure that those who choose it feel confident, prepared, and excited for what comes next. Whether I see you in class or not, best wishes to you!