I'm a preceptor at Harvard University. I do software development, DevOps, system administration and a little bit of teaching for CS50 (Harvard's introduction to computer science and programming) and a few other courses.
I graduated from Helwan University, in Cairo, Egypt, with a bachelor's degree in accounting in 2017, but I've always had a passion for computers. I started studying computer science and programming from online resources in 2014, made my first contribution to an open source project in July 2015, and officially joined the CS50 team at Harvard in June 2017.
I help design, develop, and maintain the CS50 IDE, a customized version of AWS Cloud9 (a cloud-based IDE) to make it more accessible to students with little or no prior computer science or programming experience. I develop and maintain a set of plugins that customize and simplify the look and feel of the IDE and install and configure the tools used in our courses. Recently, I developed the infrastructure backend for the IDE that runs on Kubernetes, a very popular open source container orchestrator. I also develop and maintain an offline version of the CS50 IDE that uses Docker, a popular containerization technology.
The user experience of Cloud9's graphical remote debugger wasn't pedagogically ideal for us. We encourage students to use the terminal to compile and execute their programs, as opposed to using a graphical user interface, to give them a sense of what the process looks like. We wanted students to be able to start the debugger from the terminal too, but unfortunately this isn't easily possible on Cloud9. I contributed to Debug50, a Cloud9 plugin and gdb interface that makes it possible to start the debugger from the terminal on Cloud9 and provides some useful feedback to students. Recently, I also added support for debugging Python scripts by integrating ikp3db.
An Electron app built on top of technologies such as Bull, FFmpeg, ReactJS, and different AWS and Google APIs that facilitates some of CS50's production team workflows by automating tasks such as video transcoding to different formats and resolutions, generating audio and video assets, quality assurance, and publishing content to CS50's content delivery network in a parallel fashion and using a friendly user interface.