Dr. Daniel Garbin, Department of Mathematics and Computer Science
Since their introduction in the first part of the twentieth century, computers have seen a tremendous progress. During the early days, a computer used to occupy an entire room and its resources were shared by several people also known as users, each working on a terminal that consisted of a typewriter for writing programs. In those early days, computers had to perform computations for the brunt of it. The computations themselves evolved from working directly with the computer’s circuits to eventually written instructions using a programming language. The reader should be warned that not all things mentioned above, such as terminal or programming language originated at the same time. In turn, they were invented during the various stages in the evolution of computers. As they progressed, their sizes shrunk. Eventually computers received a screen, then a small pointing device resembling a mouse, and various other peripherals. Usage has expanded greatly and, with that, more and more people are using computers and should or need to learn how to program them.

In this short essay, we would like to focus on a particular programming environment. In order to write new programs we need to use a programming environment which itself is a program or in modern language an app. The type of coding environment usually depends on the computer manufacturer, in particular the operating system the computer runs. On most computers, the programming environment must be at least in part upgraded, by installing certain tools which need not be present by default. For example, if I teach an introductory programming class using the language C++ (a very popular programming language), I must provide students with at least 2 pages of instructions on how to setup the environment. Part of the instructions are for those using the Microsoft Windows operating system and part are for Apple’s Mac OS. (On purpose I am leaving out computers running on the Linux operating system as its users are already familiar with programming environments.) These instructions are quite involved and may come with possible surprises not covered in instructions. Installing such programming environment may be rather daunting to the beginner of programming. While we want that eventually students are able to handle installation and upkeep of such environments, it seems better to wait on this as to allow students to focus on writing their first programs. In addition to these, the labs in which programming classes are taught also need to perform regular upkeep of the programming environments.
The alternative to having students handle the programming environment installation “ordeal” is to use an online (or cloud) integrated development environment (IDE). In such an environment, one need not to worry about installations and upkeeping of programs, as such matters are handled by the administrators of the site. In addition to this, security features (such as sandboxing), which prevent users from running malicious programs, is also the responsibility of the owner of the site. While this is not an easy task, one cannot go without it since any time you allow users to run a program on your computer, there is a chance of mal intent. Before using the current online IDE, myself and a few of my colleagues from the Mathematics and Computer Science department thought about hosting our own cloud using the servers at Queensborough Community College. One of the great obstacles that we faced had to do with security. For such reason, we decided to look elsewhere.
For the past few years. I have used Harvard’s ide.cs50io. The choice of CS50 as opposed to others is due to several factors. Despite being cost-free to students and faculty, it has been very reliable and used by many organizations. The CS50 IDE has a rather minimalist design and consist of the main features of an IDE: A file organizer for storing your files, a text editor for writing code, and a terminal pane for running your programs. In addition to writing programs in the text editing pane -- a highly minimalist word processor -- one can use the more advanced (but arguably better) editor called Vim directly in the terminal pane.
Aside from being cost-free and easy to use, the CS50 IDE has many other useful features, in particular the share of one’s workspace. Each time I teach a programming class, from the very beginning of the semester I ask the students to share their workspace with me. This allows me to check on their work as well as download their work. I find this extremely useful when grading assignments as well as during exams. It is mostly due to this cloud-based feature that I have decided to administer all tests and final exams through this platform. Another useful feature is the file revision history. One can use it to see if the a given program was typed by the student or uploaded. The latter one may raise suspicions that the student possibly lifted the code instead of writing it.
By simplifying what one needs to do before writing their first program, CS50 allows beginners to focus on the programming part solely. Additionally, it organizes the work in one place which is easily accessible even from a tablet computer. The codes are safely stored and every time you come back to CS50 you will find in the same state as the last time you used it.
Happy coding!