I am currently in my Senior year of College. That being said, I have taken many Computer-Science courses. Here I will go a bit in detail describing each course which involves coding skills, as I find those are the most relevant. At the bottom of the page I have also included a brief list of other courses I have taken at WPI which do not include any coding skills.
Completed Courses
-
This course introduces students to an object-oriented model of programming. Students are taught how programs can be decomposed into classes and objects. By emphasizing design, this course shows how to implement small defect-free programs and evaluate design decisions to select an optimal design under specific assumptions. Topics include inheritance, exceptions, interface, design by contract, basic design patterns, and reuse. Students were expected to design, implement, and debug object-oriented programs composed of multiple classes and over a variety of data structures in the Java programming language. The course included a total of 6 Homeworks. For a full description of each homework and my own solutions to the problems, please visit my GitHub repository. I have completed this course in term B of my freshman year.
-
This course introduces students to a model of programming where the programming language exposes details of how the hardware stores and executes software. Students are taught the concepts of manual memory management, pointers, the machine stack, and input/ output mechanisms. The course involves large-scale programming exercises and is designed to help students confront issues of safe programming with system-level constructs. Students were taught to construct sequence diagrams and use test-driven development for producing functional and maintainable code in C++ and C. The course included a total of 6 Homeworks. For a full description and my own solution to each Homework assignment please visit my GitHub Repository. I have completed this course in term C of my freshman year.
-
The Algorithms course built upon the fundamental knowledge of data structures, data abstraction techniques, and mathematical tools, in order to develop a number of examples of algorithm design and worst and average case performance analysis. Topics included greedy algorithms, divide-and-conquer algorithms, dynamic programming, heuristics, and probabilistic algorithms. Problems were drawn from areas such as sorting, graph theory, and string processing. Students were expected to perform analysis on a variety of algorithms. The course included a total of 4 Homework assignments and a final Group Project. For a full description and my own solution to the homework assignments please visit my GitHub Repository. For a description of the Group Project, please visit the Projects page. I have completed the Algorithms course in term D of my freshman year.
-
This course provided a broad view of computer networks. The course exposed students to all seven layers of OSI Reference Model while providing an introduction into newer topics such as wireless networking and Internet traffic concerns. Topics covered include: physical layer considerations, network protocols, wide area networks, local area networks, wireless networks, switches and routing, congestion, Internet traffic and network security. Students were expected to do extensive systems/network programming and were expected to make use of simulation and measurement tools to gain an appreciation of current network design and performance issues. There were a total of 3 Homeworks in which students were asked to implement a low level HTTP client and server; an Alternating Bit Protocol for error checking and a distance-vector routing protocol among other things. For a detailed description of each assignment, as well as my own code solutions please visit my GitHub Repository. I have completed this course in term A of my Sophomore year.
-
This course introduced students to the structure and behavior of modern digital computers and the way they execute programs. Machine organization topics include the Von Neumann model of execution, functional organization of computer hardware, the memory hierarchy, caching performance, and pipelining. Assembly language topics include representations of numbers in computers, basic instruction sets, addressing modes, stacks and procedures, low-level I/O, and the functions of compilers, assemblers, linkers, and loaders. The course also presented how code and data structures of higher-level languages are mapped into the assembly language and machine representations of a modern processor. Programming projects were be carried out in the C language and the assembly language of a modern processor. There were a total of 3 Homework assignments for the class. For a detailed description of each assignment and my own code solutions please visit my GitHub Repository. I have completed this course in term B of my Sophomore year.
-
This course introduced the fundamental principles of software engineering. Modern software development techniques and life cycles were emphasized. Topics included requirements analysis and specification, analysis and design, architecture, implementation, testing and quality, configuration management, and project management. Students were expected to complete a project that employs techniques from the topics studied. The course included a smaller 2 week Individual Project, and a larger 5 Week Team Project. To see the full description of the Group Project please visit the Projects page. For the actual code (and original description) of both the Individual and Group Project, please visit my GitHub Repository. I have completed this course in term B of my Sophomore year.
-
This course introduced the student to the design, use, and application of database management systems. Topics included the relational data model, relational query languages, design theory, and conceptual data design and modeling for relational database design. Techniques that provide for data independence, and minimal redundancy were discussed. Students were expected to design and implement database system applications, as well as perform SQL queries on them. The course included 6 Homework assignments and a small Group Project. For a detailed description, and my own solutions to the Homework and Group Assignments please visit my GitHub repository. I have completed this course in term C of my Sophomore year.
-
This course provided the student with an understanding of the basic components of a general-purpose operating system. Topics included processes, process management, synchronization, input/output devices and their programming, interrupts, memory management, resource allocation, and an introduction to file systems. Students were expected to design and implement a large piece of system software in the C programming language. The course included 4 Homeworks in which the student developed solutions to challenging synchronization and concurrency problems using mutexes and semaphores, developed own memory (malloc) allocation method using system calls and developed own scheduling policies for process execution. To see a more detailed description of each Homework assignment as well as my own code solutions, please visit my GitHub Repository. I have completed this course in term C of my Sophomore year.
-
This course extended the study of the design and implementation of operating systems begun in the operating systems course to distributed and advanced computer systems. Topics included principles and theories of resource allocation, file systems, protection schemes, and performance evaluation as they relate to distributed and advanced computer systems. Students were expected to design and implement programs that emphasize the concepts of file systems and distributed computing systems using current tools and languages. The course included 3 Homework assignments, in which students were asked to implement their own file system in C, as well as the MapReduce library in Go. For a full description of the Homework assignments, as well as my own code solutions, please visit my GitHub Repository. I have completed this course in term D of my Sophomore year.
-
This course explored the computational aspects of network information systems as embodied by the World Wide Web (WWW). Topics included: languages for document design, programming languages for executable content, scripting languages, design of WWW based human/computer interfaces, client/server network architecture models, high level network protocols (e.g., http), WWW network resource discovery and network security issues. The course included 4 Individual Projects, of which most notable was Project “a3” which included authentication and persistent storage using MongoDB. The course also included a single Group Project on the level of Project “a3” however, with significantly less time. For a full description and code solutions to each project please visit my GitHub repository. For an overview of the Group Project, please visit the Projects page. I have completed this course in term A of my Junior year.
-
This course explored both theoretical and practical aspects of machine learning, including algorithms for regression, classification, dimensionality reduction, clustering, and density estimation. Specific topics included neural networks and deep learning, Bayesian networks and probabilistic graphical models, principal component analysis, k-means clustering, decision trees and random forests, support vector machines, and kernel methods. The course included 6 Homework and 1 Group Project assignment in which the student used different machine learning techniques on a variety of real and simulated data sets. To see a more detailed description of each Homework assignment as well as my own code solutions, please visit my GitHub Repository. I have completed this course in term B of my Junior year.
-
This course introduced students with fundamental concepts and state-of-the-art computer science literature in mobile and ubiquitous computing. Topics which were covered include mobile systems issues, human activity and emotion sensing, location sensing, mobile human-computer interaction, mobile social networking, mobile health, power saving techniques, energy and mobile performance measurement studies and mobile security. The course will introduce the programming of mobile devices such as smartphones running the Android operating system. As part of the final project for the course, I have designed a user-friendly prototype of the “WiFi Device X-ray Finder” personal project I worked on a year before. I completed this course in the Spring Semester of my Junior year (2023).
-
This course gave a broad survey of artificial intelligence. The course covered different graph search algorithms including breadth and depth-first search, iterative-deepening and A* search. Optimization techniques such as genetic algorithms, hill climbing with simulated annealing, feature manufacturing and heuristic generation using machine learning were discussed. Grid worlds and Markov decision processes were introduced. Reinforcement learning paradigms such as SARSA and Q-learning were developed . Finally, I created an AI for playing my “Sedmica” card game, which you can read about under the Projects module. All programming was done in Python3.0 and in groups of 3 to 5 team members. I have completed this course in the Spring Semester of my Junior Year (2022).
-
This course explored the current state of brain sensing and its application to human-computer interaction research. Topics on brain function, sensing technology, machine learning methods, and applications of brain-computer interfaces in various domains were covered. The course included reading as well as weekly presentations on the latest scientific literature covering BCI and HCI. Brain activity sensing technology was discussed with a focus on functional near-infrared spectroscopy (fNIRS). Steps required to use real-time brain sensing data as input to an interactive system were introduced. The domains and contexts in which brain-computer interfaces may be effective were discussed. For the final project I attempted to recreate the results of the Brain2Image paper, where researchers were able to use deep learning to reconstruct visual stimuli from brain data. I completed this course in the Spring Semester of my Junior year (2022).
-
Studied the process and tools for implementing a compiler for a recursive programming language. Topics included lexical analysis, syntax analysis, symbol tables, semantic analysis, intermediate code representations and code generation. Tools used include ANTLR4 for front-end, C++ and LLVM for back-end. As a final project for the course, I implemented a new recursive programming language from scratch called “WPL” or “WPI Programming Language”.
Currently and Future Enrolled Courses
Since I have yet to complete these courses I have simply included WPI’s description of each.
-
This course introduces students to modern network security concepts, tools, and techniques. The course covers security threats, attacks and mitigations at the operating system and network levels (as opposed to the software level). Topics include: authentication, authorization, confidentiality, integrity, anonymity, privacy, intrusion detection and response, and cryptographic applications. Students will become familiar with modern security protocols and tools. Assignments will involve using security testing software to uncover vulnerabilities, network packet analyzers, and existing security applications to create secure network implementations. The course requires enough programming and systems background to understand attacks and use systems tools, but does not involve significant programming projects. Assignments and projects will use a Linux base for implementation. I will be completing this course in December of 2022.
-
Graduate-level course focused on design, analysis and proof of correctness of algorithms. Analysis techniques include asymptotic worst case and average case, as well as amortized analysis. Average case analysis includes the development of a probability model. Techniques for proving lower bounds on complexity are discussed, along with NP-completeness. I will complete this course in December of 2022.
-
This course gives a comprehensive introduction to the field of cryptography and data security. The course begins with the introduction of the concepts of data security, where classical algorithms serve as an example. Different attacks on cryptographic systems are classified. Some pseudo-random generators are introduced. The concepts of public and private key cryptography are developed. As important representatives for secret key schemes, DES and AES are described. The public key schemes RSA and ElGamal, and systems based on elliptic curves are then developed. Signature algorithms, hash functions, key distribution and identification schemes are treated as advanced topics. Some advanced mathematical algorithms for attacking cryptographic schemes are discussed. Application examples will include a protocol for security in a LAN and a secure smart card system for electronic banking. Special consideration will be given to schemes which are relevant for network environments. For all schemes, implementation aspects and up-to-date security estimations will be discussed. I will complete this course in December 2022.
-
This course will offer a mathematical and practical perspective on artificial neural networks for machine learning. Students will learn about the most prominent network architectures including multi-layer feed-forward neural networks, convolutional neural networks (CNNs), auto-encoders, recurrent neural networks (RNNs), and generative-adversarial networks (GANs). This course will also teach students optimization and regularization techniques used to train them — such as back-propagation, stochastic gradient descent, dropout, pooling, and batch normalization. Connections to related machine learning techniques and algorithms, such as probabilistic graphical models,will be explored. In addition to understanding the mathematics behind deep learning, students will also engage in hands-on course projects. Students will have the opportunity to train neural networks for a wide range of applications, such as object detection, facial expression recognition, handwriting analysis, and natural language processing. I will complete this course in May 2023.
-
This course provides an introduction to the pitfalls and practices of building secure software applications. Topics will include threat modeling, secure software development, defensive programming, web security and the interaction between security and usability. The course focuses on the application level with minor attention to operating-system level security; network-level security is not covered. Assignments involve designing and implementing secure software, evaluating designs and systems for security-related flaws, and presentations on security issues or tools. All students will be required to sign a pledge of responsible conduct at the start of the course. The course assumes nontrivial experience with C and Unix, familiarity with operating systems, filesystems, and databases, and experience with technologies for building web applications. I will be completing this course in May 2023.
Other Completed Courses
- Introduction to Program Design (CS 1101)
- Discrete Mathematics (CS 2022)
- Social Implications of Information Processing (CS 304#)
- Foundations of Computer Science (CS 3133)
- Introduction to Engineering Problems (ES 1020)
- Introduction to Static Systems (ES 2501)
- Intermediate Mechanics (PH 2201)
- Calculus IV (MA 1024)
- Ordinary Differential Equations (MA 2051)
- Matrices and Linear Algebra I (MA 2071)
- Applied Statistics (MA 2611)
- Probability for Applications (MA 2621)
- Elementary German I (GN 1511)
- Elementary German II (GN 1512)
- Intermediate German I (GN 2511)
- Intermediate German II (GN 2512)
- Advanced German I (GN 3511)
- Advanced German II (GN 3512)
- Introductory Macroeconomics (ECON 1120)