Mazen Abdelsalam
A personal site for my work, academic plans, profiles, and research updates at CMU.
Research
Time Management · Randy Pausch
1. Who is Randy Pausch?
Randy Pausch was an American professor of computer science at Carnegie Mellon University. He specialized in human-computer interaction and virtual reality and was also one of the founders of CMU's Entertainment Technology Center. He was diagnosed with pancreatic cancer and passed away in 2008 at the age of 47.
2. What was he known for?
Randy Pausch was known for his work in computer science and education, including helping develop Alice, a program designed to teach students computer programming. He became most widely known for his famous “Last Lecture,” which he gave at Carnegie Mellon after learning that his cancer was terminal. The lecture, titled Really Achieving Your Childhood Dreams, became widely popular and was later expanded into the bestselling book The Last Lecture.
3. What are five points you liked from the lecture?
Time should be treated like money.
I liked this point because people are usually very careful about how they spend money, but not as careful with their time. Pausch explains that money can be earned again, but once time is gone, you cannot get it back.
Do important things before they become urgent.
This was probably the point that stood out to me the most. Pausch explains that after finishing tasks that are both important and due soon, we should focus on important tasks that are not due soon yet instead of wasting time on unimportant things just because their deadlines are closer.
Break big tasks into smaller steps.
I liked his example about cleaning a room because it made the idea very simple. A big task can feel overwhelming, but once you divide it into smaller things, it becomes much easier to start and finish.
Do not wait until the last minute.
I liked this because it is something almost every student can relate to. Pausch explains that doing things right before the deadline creates extra stress, and even one small problem can ruin your plan. His idea of creating an earlier personal deadline seems like a useful way to avoid that.
Sometimes you just have to ask.
I really liked the story about the Disney monorail. His father thought there must be some special way to ride in the front, but Pausch simply asked, and they were allowed to do it. It was a simple example, but I liked the message that sometimes opportunities are available if you are willing to ask.
Programming Languages · Giselle Reis
1. Why did we move from punch cards to programming languages? What does that tell you about the purpose of programming languages?
We moved away from punch cards because they made programming very slow and inconvenient. Programming languages allowed people to write instructions in a form that was easier to understand and work with. Instead of focusing on the physical process of giving commands, programmers could use that extra time to focus more on solving problems. This shows that programming languages exist to make it easier for humans to communicate their ideas to computers.
2. There are hundreds of different programming languages out there. Why do you think we need so many?
There are many programming languages because different types of programs have different needs. Different languages are designed to handle different kinds of tasks, so programmers can choose one based on what they are trying to create. New languages are also created as technology changes and better ways of programming are developed. Having different programming languages gives programmers more options when creating programs.
3. What are some drawbacks of a programming language you use? How would you like it to be different? Think of specific examples.
One drawback of Python is that it is not suitable for every field of programming. For example, Python is not used to write operating system kernels because this type of programming requires direct control over hardware and memory. Languages like C are better suited for this because they give programmers the low-level control that Python lacks. I would like Python to offer more low-level control so it could be useful in a wider range of programming fields.
4. If you were going to create a new programming language, how would you start? What do you need to define?
I’d start by deciding what the language is meant to do and what kind of problems it should solve. Then I would define how the code should be written, including its syntax and basic rules. I would also need to decide how the language handles things like variables, functions, data, etc. After that, I could build a compiler or interpreter so the computer can run the code.
Theory of Computation · Christos Kapoutsis
1. What is a decision problem?
A decision problem is a computational problem where there are only two possible answers: yes or no. The computer is given some input and has to decide whether that input satisfies a certain condition. For example, “Is this number prime?” is a decision problem because the answer for any number will always be either yes or no. Decision problems are useful in computer science because they give us a simple way to study how difficult different computational problems are.
2. What does it mean for a decision problem to be decidable?
A decision problem is decidable if there is an algorithm that can always determine the correct answer. The important part is that the algorithm must eventually stop and return either yes or no for every possible input, rather than running forever in some cases. Not every decision problem has this property. For example, the halting problem, which asks whether a program will eventually stop running, has been proven to be undecidable in general.
3. What is the class P? What is the class NP?
P is the class of decision problems that can be solved efficiently, meaning there is an algorithm that solves them in polynomial time as the input gets larger. NP is the class of decision problems where a proposed solution can be checked in polynomial time. Every problem in P is also in NP because if we can solve a problem efficiently, we can also check its solution efficiently. The big question is whether all problems in NP can also be solved that efficiently.
4. What is the intuitive meaning of the “P versus NP” question?
The P versus NP question basically asks: If a solution is easy to check, is it also easy to find? Imagine a problem where finding the correct answer could take an extremely long time, but once somebody gives you an answer, you can quickly check whether it works. P versus NP asks whether there might actually be an efficient way to find those answers too. Nobody has been able to prove whether P = NP or P ≠ NP, making it one of the biggest unanswered questions in computer science.
5. If you resolve the P versus NP question, how much richer will you be?
If you successfully resolve the P versus NP problem and your proof meets the required conditions, you could become $1 million richer. The Clay Mathematics Institute selected P versus NP as one of its seven Millennium Prize Problems, which are some of the most important unsolved problems in mathematics. A prize of $1 million is offered for a valid solution, whether that solution proves that P equals NP or that P does not equal NP.
Human-Computer Interaction · Amy Melniczuk
1. What is human-computer interaction (HCI), and which disciplines contribute to it?
Human-computer interaction, or HCI, is the study of how people use technology and how we can design technology around the people using it. It is not just about whether a program works correctly. It also looks at whether people understand the interface and whether using it feels natural. HCI connects computer science with design, and it also borrows ideas from fields like psychology to understand how people behave when using technology.
2. What is the difference between a system being useful and being usable? Can you give an example of a system that is usable but not useful for a particular person or task?
A system is usable if someone can use it without much difficulty. A system is useful if it actually helps that person do something they need. Something can be very easy to use but still be useless to a certain person. For example, a ski conditions app could have a really simple interface, so it would be usable. However, for someone living in Qatar who does not ski, the app would probably not be useful at all.
3. Find an everyday interface that is confusing to use. What is the person trying to do, and which design decision causes difficulty? Suggest one improvement.
A good example is the control panel on some microwaves. Most of the time, the person just wants to heat their food for a short amount of time. However, some microwaves have lots of buttons for different modes, which can make something simple feel more complicated than it should be. The problem is that the basic controls do not always stand out from the less common ones. I would make the time and start buttons much more obvious, while keeping the extra settings out of the way unless the user needs them.
4. What is a prototype, and how can testing one with users help a designer? What is one thing that asking “Do you like it?” would not tell you?
A prototype is an early version of a product that designers can test before building the final version. It does not have to fully work yet. For example, it could just be a clickable mock-up of an app. Testing it with users lets the designer see where people get confused or struggle to complete a task. Asking someone “Do you like it?” would only tell you their opinion. Someone might say they like the design even though they could not figure out how to use it properly.
5. Find one example of interaction beyond a keyboard and mouse, such as voice input or a tangible interface. Who might benefit, and how would you test whether it helps them?
One example is voice input, such as telling your phone to send a message or search for something. This could be especially helpful for someone who has difficulty using their hands, since they can control the device by speaking instead. To test whether it actually helps, I would give users a few normal tasks and compare how easily they complete them using voice versus the usual controls. I would also pay attention to whether the voice system misunderstands them, since that could make the feature less helpful.
When One Computer Is Not Enough: The Fascinating World of Distributed Systems · Mohammad Hammoud
1. What happens when the problem you want to solve becomes too big for any one computer?
When a problem becomes too large for one computer, we can divide the work among many computers working together. This is called distributed or parallel computing. Each computer, often called a node, handles part of the problem, and the results are then combined. This approach is used for problems that require huge amounts of processing power or data, such as scientific simulations and training large AI models.
2. Suppose 1,000 computers work together. Do you now have one computer that is 1,000 times more powerful? Why or why not?
Not exactly. While 1,000 computers can provide much more computing power, they usually will not make a program exactly 1,000 times faster. Some parts of a problem cannot be divided between computers, and the machines also have to spend time communicating and coordinating their work. Moving data between machines can create additional delays, so adding more computers eventually gives smaller improvements.
3. Can 1,000 computers agree on something if some of them fail or even lie?
Yes, but making them agree reliably is a major challenge in distributed systems. Computers can use consensus algorithms to reach the same decision even when some machines crash. There are also algorithms designed to handle situations where some machines send incorrect or dishonest information, known as Byzantine faults. However, these systems need rules about how many machines can fail before agreement can no longer be guaranteed.
4. When you use ChatGPT, Google, Instagram, or an online game, where is the computation actually happening?
Most of the heavy computation happens on servers in data centers, rather than entirely on your phone or laptop. Your device sends requests over the internet, servers process them, and the results are sent back to you. Some work can also happen locally or at nearby “edge” servers to reduce delays. For example, OpenAI describes its AI infrastructure as spanning data centers, chips, models, and software systems, while Google operates computing infrastructure across data centers and distributed locations.
5. If you could make millions of computers behave like one dependable machine, what could humanity build that we cannot build today?
It could allow us to tackle problems that are currently limited by computing power and reliability. We could potentially create much larger scientific simulations, more capable AI systems, and models of complex systems such as weather or the human body at much greater detail. The difficult part is not simply connecting millions of computers, but making them coordinate efficiently and continue working when individual machines or connections fail.
Robotics and Artificial Intelligence · Gianni Di Caro
Questions will be added when they are assigned.
Multimodal Learning and Embodied AI · Bilal Taha
1. What is a modality in AI? Give three examples of different modalities.
A modality in AI is a specific type of information that a system can process. Different modalities represent information in different forms. Text, for example, includes written language such as messages or articles. Images provide visual information, while audio includes information such as speech or other sounds. AI systems can be designed to work with one modality or combine several of them.
2. What is multimodal learning?
Multimodal learning is an approach where an AI system learns from more than one type of information. Instead of understanding an image or a piece of text on its own, for example, the system can connect the two. This gives it more context and can help it understand situations that would be difficult to interpret from a single source of information.
3. Where is multimodal learning used? Can you find one real application and identify the types of information it combines?
Multimodal learning is useful whenever an AI system needs information from different sources to understand a situation. A real example is the Waymo Driver, which uses multiple types of sensors for autonomous driving. Cameras give the system visual information about its surroundings, while lidar helps it understand the distance and shape of nearby objects. Radar provides additional information about how objects are moving. The system combines these inputs to build a more complete understanding of the road and make driving decisions.
4. What is embodied AI?
Embodied AI refers to AI systems that can perceive and interact with the physical world. Unlike an AI that only processes information and produces an answer, embodied AI can use what it observes to decide how to physically respond. A robot, for example, could recognize an object in front of it, determine where the object is, and then move toward it or pick it up. This means the AI is not only processing information but also using it to act within an environment.
5. How are multimodal learning and embodied AI connected?
The two are connected because embodied AI often depends on several types of information to understand its surroundings. A robot might use a camera to recognize an object while using another sensor to determine how far away it is. Multimodal learning allows the system to connect those inputs instead of treating them separately. That combined understanding can then guide the robot's actions, making multimodal learning an important part of how many embodied AI systems operate.