Introduction

Course Description: Development of individual skills necessary for designing, implementing, testing and modifying larger programs, including: use of integrated design environments, design strategies and patterns, testing, working with large code bases and libraries, code refactoring, and use of debuggers and tools for version control.

We have revamped CS220 Programming Methodology this year. We are going to study all the concepts above, but in the context of a modern programming language: Scala. Scala lets you write exactly the same kind of object-oriented code that you’ve seen in Java. In fact, Scala code and Java code can seamlessly co-exist and interoperate in the same program; we’ll leverage this feature later in the course. So, design strategies and patterns that you will learn in this course will be applicable to Java and Scala. However, you will find that programs in Scala are typically much shorter than their Java counterparts. With a little experience, we think you’ll find Scala enjoyable to read and write. In addition, by learning a new programming language you will increase your understanding of Java and programming languages in general.

An important reason we’re using Scala is to expose you to programming techniques and language features that are beyond the scope of Java. The truth is that modern software systems are written in a plethora of languages. Moreover, large systems tend to use several programming languages. Therefore, to succeed in your computing career, you have to be familiar with several languages and be able to learn new languages on your own. New programming languages are constantly invented and it is impossible to predict the next big language that everyone will use or the language you’ll need to learn for an exciting internship or job.

Scala is a big language with many unique features and we are not going to learn to use them all. Instead, we are going to focus on ideas that Scala shares with other modern programming languages. Here are some of the key ideas that we will cover in this course that go beyond Java:

The main themes of the course are not language-specific. We will emphasize the following broad ideas that are applicable in all software development:

Additional Reading

Read Chapter 1, “A Scalable Language” from Programming in Scala.