Software Development in this Course

One of the goals of this class is to provide you with some experience developing software in a Unix-like environment. I invite you to experiment with the possibilities. Because access tp Unix/Linux on campus is limited — and because Java is itself platform-independent — I will not require you to use Unix/Linux, but I will give you several avenues for exploration. In class, my lectures/demonstrations will use MacOS (which is part of the broad Unix family), relying mainly on the Terminal/command-line and the vim editor (which dates back to 1976 but remains a remarkably popular development environment). This is the only development environment in which I guarantee I will be able to help you with technical problems.

Accessing and Using vim

There are essentially three ways to get access to vim:

  1. It is part of the base system on almost all Unix/Linux systems, including MacOS. You can run it by typing vi or vim at the command prompt. If you have a machine running MacOS or GNU/Linux, you already have vim; you may also choose to install MacVim, a version of vim especially designed for MacOS.
  2. If you have a machine running Windows, you can download and install vim from https://www.vim.org/download.php#pc. Be sure you download a version that is appropriate for your particular machine!
  3. You may also prefer to work on the machines in the ITS Linux Lab. You can do that (and use vim) either by visiting the lab in person or by connecting over the internet. More information about those options is available here.

vim is quite different from other editing tools you may have used: that's mainly because it is organized on the idea that the main thing programmers do is change existing text rather than enter new text. this 36-minute video is a nice introduction to this way of thinking (even if you don't watch the whole thing). Here is a guide for learning how to be an effective vim user (it also links to the video, at the end). In particular, the recommendation about spending some time with the vimtutor application is a good one. If you prefer a book-like introduction, A Byte of Vim is well-done (and free).

Once you have a basic idea of how vim works, this quick reference (from the official documentation) is a condensed listing of the many things you can do; here is another, more mobile-friendly cheat sheet.

Developing with Java

If you've already taken a course in Java (which is a prerequisite for this course), you should be familiar with the Java Development Kit (JDK); if you have access to a computer, you probably have already installed a JDK on it. In order to make sure we're all using the same version of the language, please go to this page to install the latest version of Java SE 11.

For this class, we will mainly be using three Java-related commands: javac to compile Java programs, java to run programs, and, perhaps, jdb to debug programs. If you are using a GUI-based Java IDE like DrJava, that's fine, but please note I will not be able to help you with anything related to those tools.

Here is a short tutorial on using Java on the Windows command line; if you're using a Mac, watch this short video instead.

Other ways to use Linux

If you have access to a computer, you can fairly easily use Linux on it. If you want to explore this, you have about three choices:
  1. Install GNU/Linux on it directly. This will wipe out whatever was there before, so this only works if you want to dedicate the machine solely to GNU/Linux
  2. Set up your machine as a "dual boot" system, allowing you to start in either GNU/Linux or (say) Windows. This is a slightly risky operation, so be careful! Here is one guide to setting up dual-boot on a Windows machine; here's one for Mac.
  3. Run Linux as a "virtual machine" that is "hosted" by your current operating system. This is fairly easy to set up, with little risk, but the "hosted" machine will not run quite as quickly. The power of your computer's hardware will also have a big impact on how well Linux runs. Here is a video on setting this up on a Mac; here's one for Windows.