CS2113 Course Review¶
Introduction¶
- Full name: CG2113 Software Engineering & Object-Oriented Programming
- Target audience: NUS Year 2 CEG Students
- Purpose of the course: To teach students how to use Java for real-world software engineering projects, using industry-standard tools such as Git, JUnit, and UML diagrams.
- Notes Structure: View the CS2113 Lecture Notes.
- CS2113-CheatSheet: A concise summary of key concepts and commands for quick reference.
I took this course in AY25/26 Semester 1 to fulfill my degree requirement.
Course Content¶
Overview of Topics Covered¶
The entire course revolves around two major projects: the Individual Project (iP) and the Team Project (tP). To support students in completing these two software engineering projects, the course focuses mainly on:
- OOP Programming Java
- Software Engineering Tools: Git, UML diagrams, JUnit testing, documentation, etc.
Depth and Balance of Coverage¶
Theoretical Understanding¶
This course places much greater emphasis on practical implementation, making it an excellent follow-up to CS2030S (although CS2030S is not a requirement for CEG students). Most of the tools introduced in CS2113 are taught from a usage-oriented perspective, focusing on how to apply them effectively in real projects rather than on their theoretical foundations.
Application and real-world examples¶
In this course, students complete two software engineering projects using a modern industry workflow, including Git, IntelliJ IDEA, JUnit testing, UML diagrams, and documentation. As a result, nearly all the object-oriented programming skills learned in the first half of the course -- or the OOP and functional programming knowledge from CS2030S -- are directly applied in these projects.
One concrete example of functional programming in CS2113 is the use of Java Streams to process collections of data. If you are a CS student taking CS2103, you will most likely also encounter and practise concepts such as Optional (Maybe) in greater depth.
Challenging or Unique Aspects¶
To be honest, this course does not contain a single, clearly defined technical "bottleneck." One area that I personally found slightly troublesome was the use of UML diagrams, as I need to become familiar with a variety of diagram types and notations.
Beyond technical content, the most significant challenge is often team dynamics. In this course, students are allowed to choose their own group members. I strongly recommend forming your group in advance with people you trust, rather than relying on random assignment, as group performance plays a crucial role in the team project.
Teaching Style and Materials¶
Teaching Style¶
Lecture¶
The lectures are conducted in person by Prof. Akashay. He is a very engaging and humorous lecturer, and many of his lectures are filled with memorable and entertaining moments. His teaching style is highly interactive, and he frequently asks questions during lectures to encourage student participation.
Tutorial¶
My tutor is Ms. Wong Yen Theng. She is very kind and patient, and she consistently goes through the required discussion points and clarifies key concepts during each tutorial.
Assessments¶
- Individual Project (iP): The iP is relatively manageable. As mentioned by Prof. Akashay, it functions largely as a pass/fail assignment. As long as your implementation is free of obvious bugs, you should be on safe ground.
- Team Project (tP): The tP is significantly more demanding. Strong collaboration among group members is essential. Otherwise, the workload can become overwhelming for individuals. Team dynamics play a critical role in this module.
- Final: The final exam is quite manageable. From what I heard, the search function in Examplify worked reasonably well for my cohort (although I personally did not rely heavily on it).
Course Book¶
There is no designated physical textbook for this course. All official learning materials are hosted directly on the course website.
Learning Experience¶
Personal Insights¶
As I had taken CS2030S previously, I found the theoretical content of this course to be relatively less challenging, since most of the OOP-related theory had already been covered in CS2030S. However, what CS2113 offers in return is something equally important: exposure to real-world software development workflows, especially through the GitHub-based collaboration process used in the team project.
The GitHub workflow required for the tP closely resembles that of large open-source projects, which makes this experience especially valuable.
In addition, even if you find yourself in a less-than-ideal team, do not feel discouraged. Learning how to work with different personalities and skill levels is an inevitable part of your future career. Embracing these challenges and learning from them is, in itself, a very meaningful takeaway from this course.
Skills Developed¶
As this course overlaps significantly with CS2030S in terms of programming fundamentals, the main new skills I gained or further strengthened include:
- Modern GitHub workflow: Pull requests, branching, merging, and conflict resolution
- JUnit Testing: Proper testing of software systems using automated test frameworks, like JUnit
- UML Diagrams: These diagrams are useful in a big project (can be not software engineering as well), or a team meeting. I have heard that they are used quite often in companies as well.
Workload and Time Management¶
- Level of Difficulty: 6/10
- Tips for future cohort: Try to form a reliable and cooperative group early. With a good team, the rest of the course will feel much more manageable.
Conclusion¶
Finally, I would like to thank Prof. Akashay and my tutor Ms. Wong Yen Theng for their patience and guidance throughout the semester. This course is not particularly difficult (Prof. Akashay said aroudn 40% will get an A-), and I believe most students will find it both enjoyable and valuable.