Research Questions & Answers
Dr. Giselle Reis
1. Why did we move from punch cards to programming languages? What does that tell you about the purpose of programming languages?
Punch cards were physically tedious, prone to human error, and tied directly to low-level hardware instructions. Moving to high-level programming languages allowed us to abstract away machine details so we could write code that mirrors human logic rather than mechanical operations. This shift shows that the primary purpose of a programming language isn't just to instruct a computer—it's to serve as a user-friendly interface that lets humans express complex ideas clearly and efficiently.
2. There are hundreds of different programming languages out there. Why do you think we need so many?
No single language is optimal for every problem domain. Different tasks demand different tradeoffs between memory control, developer velocity, execution speed, and concurrency. For example, Python prioritizes fast prototyping and human readability, C++ focuses on raw hardware performance and memory control, and Rust emphasizes memory safety without sacrifice. We have hundreds of languages because we have hundreds of specialized engineering domains.
3. What are some drawbacks of a programming language you use? How would you like it to be different? Think of specific examples.
In Python, my main frustration is runtime speed and weak type checking during execution. Because types are dynamically interpreted at runtime, simple type mismatches or logical errors often surface late while running the script rather than during a quick build step. While Python 3 introduced type hinting (like def foo(x: int) -> str:), it is only advisory for linters and doesn't actually enforce static type safety when the script runs. If I could tweak it, I’d introduce an optional strict compilation flag that enforces real type safety at launch to catch bugs early without losing Python's clean syntax.
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 defining the core domain and philosophy of the language—what exact problem it solves better than existing options. Technically, I’d begin by defining:
- Syntax & Grammar (EBNF): The formal rules for keywords, symbols, and expressions.
- Type System: Static vs. dynamic typing, strict vs. weak inferencing, and how memory management is handled.
- Execution Pipeline: Building a Lexer (tokenization), a Parser (Abstract Syntax Tree), and deciding between an interpreter or a compiler target (like LLVM bytecode).
Dr. Christos
1. What is a decision problem?
A decision problem is a computational problem formulated as a simple yes-or-no question for a given set of inputs. Given an input string or dataset, the objective is to determine whether a specific property or condition holds true (1) or false (0).
2. What does it mean for a decision problem to be decidable?
A decision problem is decidable if there exists an algorithm (or Turing machine) that can produce a correct "yes" or "no" answer for every valid input in a finite number of execution steps. It guarantees that the program will always halt and deliver a result rather than looping infinitely.
3. What is the class P? What is the class NP?
Class P: The set of all decision problems that can be solved by a deterministic algorithm in polynomial time $O(n^k)$. These are considered tractable or computationally efficient to solve.
Class NP: The set of all decision problems where a proposed "yes" certificate or solution can be verified in polynomial time by a deterministic algorithm (or solved in polynomial time by a non-deterministic machine).
4. What is the intuitive meaning of the "P versus NP" question?
Intuitively, P vs NP asks whether every problem whose solution is easy to check is also easy to solve from scratch. In other words: is finding a needle in a haystack fundamentally harder than recognizing the needle once someone points to it?
5. If you resolve the P versus NP question, how much richer will you be?
You would instantly win $1,000,000 from the Clay Mathematics Institute, as P vs NP is one of the official Millennium Prize Problems. Beyond the immediate cash prize, proving $P = NP$ would revolutionize modern cryptography, optimization, and drug design—making its practical value immeasurable.