Instructor
- Dr. Ashish Sai
- C4.005, Paul-Henri Spaaklaan 1
- 📧 ashish.sai@maastrichtuniversity.nl
- Discord: ashish_sai
- Schedule an appointment
Course details
- Monday, Thursday and Friday
- Sept–Oct, 2025
- Check Timetable
- EPD150
- Discord
Course objectives
The primary goal of Introduction to Computer Science is to introduce fundamental concepts and foster critical skills found throughout the field of computer science. Fundamental concepts include algorithms, computer architecture and hardware, models of computation, computer networks, and information security. Critical skills include abstraction, decomposition, pattern recognition, and algorithmic thinking. All concepts and skills are introduced in a lecture setting and explored further in the lab. At the end of this course, you will appreciate the depth of the field and be prepared for subsequent research and educational activities.
Specifically, you'll be able to:
- Explain the fundamental concepts and how they relate to the broader field of Computer Science
- Demonstrate awareness of the current trends and developments in Computer Science
- Analyze and decompose a given computational problem and identify appropriate methods and tools to design a solution
- Apply the fundamental concepts and critical skills to a practical problem requiring a solution that touches on various subfields of Computer Science
- Able to recognize and compare different approaches and techniques available within computer science to solve a given problem
- Communicate about different aspects of computer science using appropriate terminology and format such as pseudo-code and UML diagrams
- Describe solutions to abstract computational problems verbally and in writing
- Able to justify your design choices and document them in a traceable manner
Course philosophy
Introductory computer science classes often start with fundamentals of programming and work towards attaining some proficiency in a chosen programming language by the end of the course. These classes can be programming and logic-heavy while paying little to no (explicit) attention to computational thinking.
In this class, we will take a different approach. We begin with a fully functional computing system (JavaCraft) and decompose its components as we dive into various aspects of computer science. While doing this, we attempt to highlight how computer science is at a beautiful intersection of logic, creativity, of structure and chaos, of concreteness and abstraction.
In other words, there's way less of this:
public static int add(int number, int num){
int sum = number + num;
System.out.println(sum);
return sum;
}
And way more of this:
This is not to say that there is no programming involved, but the focus would be more on the conceptual aspects of CS rather than just programming. We will use Java in-line with your procedural programming course.
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):
- G. Michael Schneider & Judith L. Gersting, An invitation to computer science, 8th ed. (Cengage Learning, 2018)
This book is written as a more holistic introduction to computer science while also focusing on programming. You do not need to understand all notations and concepts.
I will occasionally also use two other texts for some of the material, both are really good resources for the specific topics however I would not recommend that you buy these either (specifically for this course):
- David Riley & Kenny A. Hunt, Computational Thinking for the Modern Problem Solver (Chapman and Hall/CRC)
- Nell Dale & John Lewis, Computer Science Illuminated, 7th ed. (Jones & Bartlett Learning)
Articles, book chapters, and other materials
There will also occasionally be additional articles to read. 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 VS Code
We piggyback on your procedural 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 IDE to do the project, however we would officially only support configuration in VS Code.
Java is free, but it can sometimes be a pain to install and configure. To make life easier, you may also use the free Replit service, which lets you run a full instance of Java in your web browser. This means you won't have to install anything on your computer to get started with Java! (but you will likely need to do this for other courses!).
Replit is convenient, but it can be slow and it is not designed to be able to handle a large number of students (for free). Over the course of the semester, you'll probably want to get around to installing Java, VS Code, and other packages on your computer and wean yourself off of Replit.
Instructions for installing Java and VS Code
Important pep talk!
I promise you can succeed in this class.
Starting with computer science can be difficult at first—it's almost like learning (real) magic, you learn to build new things with nothing but your own creativity. Charles M Strauss made this wise observation:
Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head.
Even experienced programmers and computer scientists find themselves bashing their heads against seemingly intractable errors. If you're finding yourself taking way too long, hitting your head against a wall and not understanding, take a break, talk to classmates, e-mail me, etc.
Online help
Understanding computational problems can be challenging and time consuming. Computers are stupid and little errors in your code can cause hours of headache (even if you've been doing this stuff for years!).
Fortunately there are tons of online resources to help you with this. 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).
Searching for help with computing concepts on Google can sometimes be tricky because of different notations used to express the same concept. Google is generally smart enough to figure out what you mean when you search for "fsa", but if it does struggle, try searching for "finite state automata" instead (e.g. "finite state automata for regular grammar").
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 servers where I actually have notifications enabled!) Ask questions about the lectures, tutorial sheets, 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 (EPD150) and lab in 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 Monday and Thursday 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 attempted the tutorial sheet—and ready to discuss the content and work with the project.
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), you may stay home. Please be mindful that these lectures and labs cannot be attended online, 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 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 tutorial sheets, do well on your assignment, and learn and understand the class material. Under ordinary conditions, I am flexible and lenient 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://cal.com/ashishsai. 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). This means that I will be in my office at C4.005, 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 must submit both the project deliverable on time however if you miss the project submission deadline, you will lose 1 point per day for each day a submission is late. This is designed to not be a huge penalty (3 days late means your project grade - 3), 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 a Fail in the course and possible disciplinary action. 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 | 25 | 25% |
| Final Exam | 75 | 75% |
| Total | 100 | — |
Grade scale
- 10 = 95–100%
- 9 = 85–94%
- 8 = 75–84%
- 7 = 65–74%
- 6 = 55–65%
- F = <55
Star Wars
Once you have read this entire syllabus and the assignments page, please click here and send me a picture of a cute Star Wars character on Discord (username: ashish_sai). Brownie points if it's animated.
