d

About

I've always had a deep interest in the science and technology that has enabled the progress we've made as humans. When I entered college, I decided to pursue this interest by studying Biology. Around the end of my junior year, I began to program in my free time. I am fascinated by the design of complex systems and programming allows me to express my ideas through the creation of these systems. I decided to switch to an Inter-Disciplinary degree in Biology and Computer Science to explore programming further. As I went on in my studies, I realized that Computer Science is geared towards problem-solving, while Biology focused more on brute memorization. Careers in software entailed creative engineering, while the careers in Biology followed strict protocols. Further, the progress in Biology is slow while computer technology is progressing at an incredible speed disrupting nearly every industry, something I wanted to be a part of. As I fell in love with software, I decided to get a full degree in Computer Science and pursue a career in software engineering. As I'm progressing in my study of Computer Science I am incredibly grateful that I made that choice and am excited to learn more and gain more experiences in software engineering.

Education

I am currently pursuing a Inter-Disciplinary degree in Computer Science and Biology at the University of Minnesota. I am taking all of the core Computer Science courses, then I will transfer to a Computer Science program and complete the electives. To give an understanding of the Computer Science courses that entail this type of degree, I have outlined below the Computer Science courses in the program. Currently, I have a Cumulative GPA of 3.65. My junior/senior year GPA is 3.88, and my Computer Science GPA is a 4.0.

University Class Description Grade
Metropolitan State University Discrete Mathematics A standard prerequisite mathematics course that introduces mathematical concepts that are common in Computer Science such as permutations, discrete probability, recursive algorithms, symbolic logic, predicate calculus, mathematical proofs, mathematical induction, elementary number theory, functions, relations and directed graphs. A
University of Minnesota (Twin Cities) Introduction to Algorithms and Data Structures Introduced common data structures and algorithms but focused mainly on Object-oriented programming principles using the Java programming language. I skipped the introductory programming course so this course filled the gaps in my knowledge on common programming techniques. A
University of Minnesota (Twin Cities) Advanced Programming principles An advanced programming course on principles for creating correct, robust, and modular programs such as Computing with symbolic data, recursion/induction, functional programming, impact of evaluation strategies, parallelism, Organizing data/computations around types, Search-based programming, concurrency, and modularity. A
University of Minnesota (Twin Cities) Algorithms and Data Structures Purely Algorithms and Data Structures course covering topics such as Algorithm analysis, sorting algorithms, binary trees, heaps, priority queues, Data Structures for Disjoint Sets, Dynamic programming, Greedy Algorithms graphs, Elementary Graph Algorithms, all pairs shortest paths single source shortest path, minimum cost spanning trees. A
University of Minnesota (Twin Cities) Machine Architecture and Organization Course on hardware/software components of computer system. Surveys Data representation, boolean algebra, machine-level programs, instruction set architecture, processor organization, memory hierarchy, virtual memory, compiling, linking and Programming in C. A
University of Minnesota (Twin Cities) Introduction to Operating Systems A classic overview of operating systems covering topics such as Processes/threads, process coordination, inter-process communication, asynchronous events, and memory management/file systems. Includes Systems programming projects using operating system interfaces and program development tools. N/A
University of Minnesota (Twin Cities) Software Engineering A graduate level introduction to software engineering, Software life cycle, development models, software requirements analysis, software design, coding, maintenance, waterfall, and agile scrum. Includes group project in C/C++ N/A
University of Minnesota (Twin Cities) Principles of Database Systems Introductory data management course covering, SQL, database architecture, alternative conceptual data models, foundations of data manipulation/analysis, logical data models, database designs, models of database security/integrity, and current trends. N/A
University of Minnesota (Twin Cities) Functional Genomics, Systems Biology and Bioinformatics A computational biology course covering methods of analyzing biological data such as the Statistical Analysis of Genomic Data, Data Mining and Machine Learning Methods for Genomics, and Biological Network Analysis. N/A

Project

Motivation

One of the first programs I ever wrote was a brickbreaker game. You can see a screenshot of it to the left. It had a very rudimentary architecture and fell apart quickly. However, I'm still nostalgic towards it because it showed me what was possible with even a very basic understanding of programming. It also built my love for software that motivated me to switch my career path. Inspired by it, I recruited a couple of people to build a much larger and more complex version of the game using the newfound programming skills I've been building in my courses.

Description

I worked with a team of two other people to build the game using javascript. I made a plan and roadmap and divided out work among teammates. We held regular meetings where I would come up with revisions to our plans based on our current progress and issues. I would help teammates when they had trouble figuring out what to do, share my screen to help debug code, and explain algorithms that need to be implemented. We ran into multiple roadblocks and fundamental issues, but it was still a valuable experience in working on a codebase with a team simultaneously and scaling it up to build more functionality. We did not rely on any game engines but we did use a library called paper.js that allowed us to avoid accessing javascript directly to produce shapes and rely on a couple built in functions to focus our efforts on the actual game logic.

How To Access it

The finished product is shipbreaker. The codebase is available here, and a website dedicated to the game is here. Otherwise scroll down to play the game. The iframe element I used to embed the project can be a little buggy (though refreshing usually fixes things) so I recommend accessing it through the website. Click through the Instructions to get an idea of how to play.

Issues

There is some sort of memory leak associated with paper.js that results in a gradual slowdown of the program as more objects are created. It seems that paper.js holds all created objects in a data structure that is never cleaned out. This data structure is likely iterated through when drawing objects on the screen. Thus, if you take snapshots of the heap as the program runs, you can see it grow despite objects being removed from the project. Unfortunately, this problem is in the library and cannot be fixed on my end. However, as a next step, I plan to start digging into paper.js and see if it can be fixed. Then, I can send a pull request and hopefully have the problem fixed for everybody as I have seen a number of complaints on the web. The issue is not extreme and the game is still enjoyable if you have a higher-end machine. Refreshing the browser frees the memory and raises performance again. Further, development of the game had to be cut short as the new semester started and teammates no longer wanted to continue to build the game. I did what I could to complete the game, but there were a few bugs that crept into the final build, and a few features that had to be removed from the game before completion. Still, I accomplished what I wanted through building the game which was to see what happens when developing a relatively large program with a number of people, have a chance to be creative and build something cool outside of the constraints of a school setting, and pay respects to my first ever program using my new programming skills.

Helper Application

While designing our project we found that it was very tedious to design objects using paper.js in a text editor. It involved a lot of guess and check and I wanted to automate that process. So I volunteered to design a program that allows you to draw objects with your cursor and print out a class that that can be inserted into the codebase. The class contains helper functions that allow you to move and remove the object. It also comes with a save key that allows you to reload and edit the drawing at a later time. I would’ve liked to add more features, but I decided its best to keep it relatively simple so that I could continue building the actual game. The UI isn't very easy to use but it was built to only be used in house. The codebase is here and you can access the application here. I embedded the Application below, but I would recommend accessing it directly through the webpage because iframe is very buggy. Click to add points to create a shape. You can drag any point around but remember that clicking on a different shape selects it and any new points or features added are inserted to that shape. Use the toolbar on the left to add another shape or add features to your current shape. It takes some time to get used to but it is much easier to use than paper.js in a text editor.

Work experience

Though I have yet to attain experience developing software in a work environment I have experience working a number of jobs that involve teamwork, collaboration, and chain of command. Below I have outlined some of my major work experiences and some skills I have built by working them.

Job Description Transferable Skills Date
Referee I worked with a variable group of three people to referee soccer. Ability to communicate and work with a team under pressure. Accountability and confidence in making decisions in high-stress situations. May 2013 - May 2015
Cashier/Server Panera Bread I would take orders and serve food at Panera Bread Ability to communicate with a manager. Experience with team meetings and division of labor. Ability to provide customer satisfaction. March 2017 - January 2018
Parking Attendant The majority of the process is automated so my main job was to help customers, deal with issues, and assist machines when demand is high. Quick problem solving and adaptability. Understanding of a hierarchial information flow and teamwork. Ability to communicate with frustrated or angry people. February 2019 - current

Contact

If you'd like to talk feel free to email me at essaw007@umn.edu.
If you just want to start a conversation connect with me on linkedin at www.linkedin.com/in/mo-essawy
If you would like a quicker repsonse you may message me at 952-923-4912.