Syllabus

Instructor

Course details

  •   Tuesday, Wednesday and Thursday
  •   Feb–April 2024
  •   Check Timetable
  •   EPD150 MSM Conference Hall
  •   Discord

Course Objectives

The primary objective of this course is to learn how to construct software, rather than merely writing code. Throughout this course, you will learn to model real-world scenarios using object-oriented principles and tools, such as the Unified Modeling Language (UML). Additionally, you will learn how to reuse existing solutions to solve high-level design problems by leveraging tools like design patterns.

Specifically, you’ll be able to:

  • Articulate the principles and practices of object-oriented programming, emphasizing design and analysis aspects.

  • Critically assess and decompose complex real-world problems into manageable components using object-oriented modeling techniques.

  • Evaluate and select the most appropriate object-oriented modeling techniques, design patterns, and principles for various software development scenarios.

  • Justify and document design choices in object-oriented software development, creating a traceable record of the decision-making process.

  • Reflect on the completed software designs and implementations to identify areas for improvement and potential refinements.

  • Design and implement a small software component or system using a chosen object-oriented design paradigm.

  • Select and adapt suitable components for inclusion in object-oriented software designs. Understand how these components may need to be modified to fit the specific requirements of the design.

Course Philosophy

Up until now, you have learned how to use programming as a tool to solve a given problem. In Intro to CS, you wrote small pieces of code to create new block types in the game and to plant the flag at the end. In both programming courses, you learned how to use different constructs of programming (such as Arrays and Classes) to solve specific problems. This knowledge was then also applied in your Project 1.1 to tackle larger problems in groups.

I am sure you must have noticed that transitioning from small chunks of code (what you have done in individual courses) to a software (think about your Project 1.1) is not as trivial as it may seem. In this course, my intent is to help you think not only about writing (better) functional code but also to think critically about the overall design of your software. Thus, this course will touch on several different topics ranging from understanding requirements (what needs to be built), designing software (how to best meet those requirements), to implementation.

Important pep talk!

I promise you can succeed in this class.

This is a bit trickier than your Intro to CS class, as now you have to both learn new things and also implement them. While I acknowledge the increased level of difficulty, I also think this is an opportunity for you to transition from knowing how Java works to actually taking a step towards becoming a software engineer. Wayne Throop made this wise observation:

If you’ve been pounding nails with your forehead for years, it may feel strange the first time somebody hands you a hammer. But that doesn’t mean that you should strap the hammer to a headband just to give your skull that old familiar jolt.

I am going to hand over an arsenal of hammers (design ideas) to you throughout this period, but you don’t need to know everything inside out. If you find yourself taking way too long, hitting your head against a wall (stop), and not understanding, take a break, talk to classmates, email me, etc.

Course materials

Most of the readings in this class are free.

Books

There is no official textbook for the class but we do roughly follow material from few sources including:

Textbook (no need to buy the book, we will cover most of the things in the lecture):

  • Larman Craig, Applying UML and Patterns, Pearson

This book may be a bit too advanced for you, as it contains a lot of very useful information but is presented in a somewhat dry (almost graduate-level) manner. The book offers a comprehensive introduction to object-oriented design, enriched with detailed discussions on UML (Unified Modeling Language) and design patterns. While it serves as an invaluable resource, especially for those delving into object-oriented programming, you should primarily focus on understanding what I cover during lectures.

I will occasionally also use two other texts for some of the material. Both are excellent resources for the specific topics; however, I would not recommend that you purchase these either, specifically for this course.

  • Erich Gamma et al Design Patterns: Elements of Reusable Object-Oriented Software
  • Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship

Articles, book chapters, and other materials

There will also occasionally be additional videos to watch and articles to read and watch. When this happens, links to these other resources will be included on the reading page for that week (both on here and on Canvas).

Java and VSCode

We piggyback on your Procedural programming and Objects in Programming course for your programming assignment. You will work with source code written in Java programming language for the project in this course. You may use any IDE1 to do the project, however we would officially only support configaration in VS Code.

Online help

Every student has a slightly different learning style. If some of my explanations are unclear to you, feel free to seek help from me or look for information online. My only suggestion here is to be aware of the reliability of these sources. You should not trust the information you find online without due diligence. If there is any difference between my explanation or the notations I use and the information you find online, in (almost) all cases, what I cover is what you should learn and use in class. This is done primarily to maintain consistency within the class but also to help you avoid consulting non-standardized sources.

Just like in Intro to CS, there are tons of online resources to help you with Objects in Modelling. Two of the most important are StackOverflow (a Q&A site with hundreds of thousands of answers to all sorts of programming questions) and maybe ChatGPT (a tool that you can ask for help with understanding concepts 2).

Searching for help with computing concepts on Google can sometimes be tricky because of different notations used to express the same concept.

Additionally, we have a class chatroom at Discord where anyone in the class can ask questions and anyone can answer. I will monitor Discord regularly and will respond quickly. (It’s one of the rare Discord channels where I actually have notifications enabled!) Ask questions about the lectures, tutorials, and project. You’ll likely have similar questions as your peers, and you’ll likely be able to answer other peoples’ questions too.

Course Structure

We meet weekly for our lectures and lab in EPD150 MSM Conference Hall and PHS1. However, you need to frequently check UM Timetable for most up-to-date information on location and time.

We will have lectures during our regularly scheduled class time, these lectures will not be recorded or streamed.

Attendance and participation

You’re expected to come to class each Tuesday, Wednesday 3 to attend the lectures for the week. You will then be expected to attend your Lab, for your lab, we expect that you come prepared—having read any required material—and ready to work on your project with Java.

Attendance and participation are important to your success in this course. However, if you are sick or are incapable of participating meaningfully in class (e.g. you have stayed up all night and are going to fall asleep in class), please stay home. Please be mindful that these lectures and labs cannot be attended online anymore, you must be present in-person as there is no recording to review later. I often cover quite a few things that do not end up in my class notes or presentations, so please do plan to attend as many lectures as you can.

If you are sick, or unable to come to the class for any other reason (e.g. childcare situations), you do not need to send me a confirmation. You are all adults now—I trust you.

Support

I’m fully committed to making sure that you learn everything you were hoping to learn from this class! I will make whatever accommodations I can to help you finish your tutorials, do well on your project, and learn and understand the class material. Under ordinary conditions, I am flexible and lenient with grading and course expectations when students face difficult challenges.

If you tell me you’re having trouble, I will not judge you or think less of you. I hope you’ll extend me the same grace.

You never owe me personal information about your health (mental or physical). You are always welcome to talk to me about things that you’re going through, though. If I can’t help you, I usually know somebody who can.

If you need extra help, or if you need more time with something, or if you feel like you’re behind or not understanding everything, do not suffer in silence! Talk to me! I will work with you. I promise.

Please sign up for a time to meet with me during student hours at https://calendly.com/ashish_sai/. I’m also available through e-mail and Discord. I’ve enabled notifications on my Discord account, so I’ll see your messages quickly!

I want you to learn lots of things from this class, but I primarily want you to stay healthy and balanced.

Course policies

Be nice. Be honest. Don’t cheat.

We will also follow Maastricht University’s Code of Conduct.

This syllabus reflects a plan for the semester. Deviations may become necessary as the semester progresses.

Student hours

Please watch this video:

Student hours are set times dedicated to all of you (most professors call these “office hours”; I don’t).4 This means that I will be in my office at waiting for you to come by talk to me with whatever questions you have. This is the best and easiest way to find me and the best chance for discussing class material and concerns.

If I am not in my office, it is easiest to meet with me online via Zoom for student hours. Make an appointment with me here—the confirmation e-mail will contain a link for a Zoom meeting. You can also find me through e-mail and Discord

Late work

You will lose 2 point per day for each day your submission is late. This is designed to not be a huge penalty (2 days late = 26/30 points), but instead is a commitment device to help you stay on schedule.

Academic honesty

Violation of UM’s Policy on Academic Honesty will result in an Fail in the course and possible disciplinary action.5 All violations will be formally reported to the department.

Special needs

Students who wish to request accommodation for a disability may do so by talking to your study advisers. Students may only be accommodated if they have already talked to the study advisers.

Students with special needs should then make an appointment with me during the first week of class to discuss any accommodations that need to be made.

Assignments and grades

You can find descriptions for all the assignments on the assignments page.

Assignment Points Percent
Project 30 30%
Final Exam 70 70%
Total 100
Grade Range
10 96–100%
9 90–95%
8 80–89%
7 70–79%
6 60–69%
F <60

Class DJ

Oh, you’ve had the, um, pleasure of experiencing my music taste during Intro to CS—yeah, that was a journey, wasn’t it? Clearly I need your help. I need a really good class DJ to select both the music that is played before the class starts and music that can help both me and your fellow classmates work/study. Once you have read this entire syllabus and the assignments page, please send me your candidate Spotify or Apple Music playlist.6 Extra brownie points are up for grabs if you manage to sneak in some Star Wars tracks—because nothing says “ready to code” like a bit of the Imperial March.

Yoda Enjoying the music curated by the class DJ

Footnotes

  1. Integrated Development Environment (IDE) provide you with a suite of tools to develop source code more efficiently.↩︎

  2. You need to be very mindful of the information you get form ChatGPT as it may contain inaccurate information.↩︎

  3. The schedule for Week 1 is a bit different so please check UM’s official timetable.↩︎

  4. There’s fairly widespread misunderstanding about what office hours actually are! Many students often think that they are the times I shouldn’t be disturbed, which is the exact opposite of what they’re for!↩︎

  5. So seriously, just don’t cheat or plagiarize!↩︎

  6. You can and should update this playlist throughout the semester.↩︎