Freshman CS Student @ CMU-Q

Abdelrahman Abdelmoneem

Hi! I am Abdelrahman and I'm a freshman CS student @ CMU-Q. I like building small projects and automating tasks, and I will be updating this website as I work towards getting my degree!

Doha, Qatar

/01

About

I love coding and working on mini projects that take more time to complete than they save.

Outside of academics, I love playing chess (and losing most of the time,) watching TV, and going on walks. If you ever see me, feel free to say hi or challenge me to a chess match (if you dare :) )

  • Currently

    Freshman year at CMU-Q

  • Studying

    Computer Science

  • Hobbies

    Chess, TV, and walking

/02

Research

Update 01 — Dr. Giselle Reis

Prepared for CS 07-129 ahead of the guest talk by Dr. Giselle Reis.

01Why did we move from punch cards to programming languages? What does that tell you about the purpose of programming languages?

(Sourced from Codefinity.) Early programs were written directly in machine code (ones and zeros), and punch cards were used to physically encode those instructions. Every hole on a card represented a specific binary instruction, and the process was extremely error-prone, and people would sometimes drop the stacks of physical cards they were carrying and then need to resort them manually, since operators fed the cards into readers that translated the hole patterns into commands. This changed in the 1950s when FORTRAN introduced syntax people could actually read. It's clear programming languages exist to shift software design toward high-level abstraction instead of low-level manipulation.

02There are hundreds of different programming languages out there. Why do you think we need so many?

Technology just keeps moving forward, and a lot of older languages weren't built to handle the problems that come with newer tech, so instead of trying to force an old language to do something it was never meant for, people build a new one. C was built to run Unix, and Go came out because the languages being used at the time felt too slow for developers' needs. It also comes down to what kind of work someone is doing. Developers pick languages suited to their field, like C++ for games or Python for data work. Even within the same field, people prioritize different things: some want speed, some want to ship fast, and some just want something that's readable.

03What are some drawbacks of a programming language you use? How would you like it to be different? Think of specific examples.

Python is the language I use the most, but it's not perfect. It's interpreted instead of compiled, so it runs line by line instead of being translated into optimized instructions ahead of time, and since it's dynamically typed, every variable's type gets checked at runtime instead of once during compilation. If I could change one thing, I'd want type checking to happen before the program runs instead of only showing up as a runtime error, since that's the bug I run into the most, but I realize it's not that simple.

04If you were going to create a new programming language, how would you start? What do you need to define?

Well first, I would check if an existing programming language can work for my purpose, because usually the answer to that question is a resounding "yes," but if I truly needed to create a new programming language, I'd first review the actual problem it's looking to solve, since that shapes everything else that comes after. From there I'd need to define the syntax, whether it's compiled or interpreted, and whether it's statically or dynamically typed. I'd probably start tiny, with just variables and print statements, and add features one at a time instead of trying to design the whole thing up front.

Update 02 — Dr. Christos

Prepared for CS 07-129 ahead of the guest talk by Dr. Christos.

01What is a decision problem?

A decision problem is a question to which the answer is either yes or no. It usually takes some input and asks whether that input has some specific property. Something like "is this number prime" or "does this graph have a path between these two nodes" counts as a decision problem because the answer is a simple yes or no.

02What does it mean for a decision problem to be decidable?

A decision problem is decidable if there's an algorithm that can always figure out the correct yes or no answer for every possible input, and it has to finish calculating that answer in a finite amount of time. If no algorithm like that exists, the problem is called undecidable.

03What is the class P? What is the class NP?

P is the class of decision problems that can be solved by an algorithm in polynomial time, meaning the time it takes to solve grows at a reasonable rate as the input gets bigger. NP is the class of decision problems where, if someone hands you a proposed answer, you can check whether it's correct in polynomial time, even if actually finding that answer from scratch could take way longer. Every problem in P is also in NP, since if you can solve something quickly you can obviously also check a solution quickly, but whether every NP problem is also in P is the big unanswered question.

04What is the intuitive meaning of the "P versus NP" question?

It's asking whether problems that are easy to check are also easy to solve. If someone shows me a checkmate on a chess board, I can check pretty fast whether it's actually correct, but finding a checkmate from my initial position will take much longer. P versus NP is asking whether that gap is real, or whether there's secretly a fast way to solve every problem we can currently only check quickly.

05If you resolve the P versus NP question, how much richer will you be?

It's one of the Millennium Prize Problems, so technically it comes with a million dollar prize from the Clay Mathematics Institute. Though if someone actually proved P equals NP in a way that gave a real algorithm, they'd probably end up way richer than that, since it would break most modern cryptography and reshape a bunch of industries overnight.

Update 03 — Dr. Amy Melniczuk

Prepared for CS 07-129 ahead of the guest talk by Dr. Amy Melniczuk.

01What is HCI, and which disciplines contribute to it?

Human-computer interaction is the study of how people interact with technology. It utilizes insights from computer science, cognitive science, and human factors engineering to guide how that technology gets designed in order to make its use more intuitive. HCI typically comes down to four things: the user, the specific goal they're trying to accomplish, the interface itself, and the context they're using it in, like their location. People interact with technology in many ways such as sight, touch, sound, voice, and spatial movement, and combining a few of those is usually what makes an interaction feel more natural and intuitive.

02What is the difference between a system being useful and being usable? Give an example.

For something to be useful, it has to address a real need or help someone accomplish a specific task. Usability, on the other hand, is about how easy that thing is to figure out and operate once someone's using it. A good example of usable but not useful is a super simple note taking app on my phone. It's easy to open and easy to type into, so it's usable. But if what I actually need is to organize my class notes by course and search through weeks of them quickly, that same app becomes pretty useless for that task, since it just gives me one long list with no structure. It's usable in general, but not useful for the purpose I have in mind.

03Find a confusing everyday interface. What is the person trying to do, what design decision causes difficulty, and what's one improvement?

A classic one is the Apple Magic Mouse. The charging port is on the bottom, so if you want to charge it you have to flip it upside down, which means you can't use the mouse at all while it's charging. The person's goal is simple, they just want to keep working while the mouse charges, but the placement of the port makes that impossible to do so. A better design would put the charging port on the front or back edge instead, so the mouse could stay right side up and usable while it's plugged in.

04What is a prototype, and how does testing one with users help? What wouldn't "Do you like it?" tell you?

A prototype is an iteration of a product built before the final version, and it lets designers see how something will look and get used before committing real time and money to it. Once a prototype comes to life, the process usually moves into a testing and refining stage, where it gets tested and adjusted based on feedback until it meets the original goals. This process is where usability issues get caught early instead of after launch. Asking someone if they like a product gets you a surface-level reaction, but it wouldn't tell you whether they could actually complete the task they needed to do with it, or exactly where they got stuck along the way, since people can say they like something while still struggling to use it correctly.

05Find an example of interaction beyond keyboard and mouse. Who benefits, and how would you test it?

One example is voice interfaces, like the voice assistants built into phones and computers, which let people interact with technology just by talking instead of typing or clicking. People with visual impairments or limited hand mobility probably benefit the most, since it removes the need to see a screen or physically operate small buttons. To actually test whether it helps them, I'd have that group try to complete specific everyday tasks using only voice, like setting a reminder or sending a message, and compare how successfully and quickly they finish compared to using a touchscreen, while watching for points where the assistant misunderstands them or they get stuck.