Checklist before starting the course

This checklist comprises four sections: Do, Know, Demonstrate, and Read. It is important that you work through this checklist before the first class meeting.

Do

  • Review the course policies and expectations.

  • Install IntelliJ on your computer. If you still have access to your virtual machine from COMP 170 you can use that. At this course level, however, it is a good idea to have your own installation of IntelliJ. With your LUC email address you can apply and obtain a license for the high-end version of IntelliJ. If you need a virtual machine for the course, please let me know.

  • Write three items you found most challenging in COMP 170 (or equivalent introductory course you took to make it to COMP 271). These should be specific items (e..g., “It took me a while to understand constructors”). You will be asked to share these items with the rest of the class, during the first meeting.

  • Write two items you found intuitive in COMP 170 (or any other introductory course you took to make it to COMP 271). These should be specific items (e..g., “Strings are awesome”). You will be asked to share these items with the rest of the class, during the first meeting.

  • Bookmark this site.

  • Bookmark and review Google’s code style guide for Java.

  • Bookmark and review (but don’t expect to grasp everything right away) the Collections Framework Overview from Oracle’s Java Documentation.

  • Download, install, and configure Microsoft Teams on your computer (if it is not already installed). Use your LUC UVID to log in to Teams. Contacting me through Teams may be faster than email.

  • Optionally, sign up for a GitHub account. It’s free and it’s cool. You can sign up for GitHub with your personal email address, i.e., an address you expect to use even after you graduate from LUC. Once you establish your GitHub account, you can always receive the student benefits the site offers, by adding your LUC email address to the account.

Know

Demonstrate

Understanding basic elements of the language

🔹 What is scope? Can you explain why the following code is wrong?

int a = 5;
int b = 6;
if (a>b) {
  String s = "a";
} else {
  String s = "b";
}
System.out.println(s);

🔹 Do you know how to use the printf method? (You can review the Java Documentation tutorial).

🔹 Can you write a method that returns true is a string is composed only of letters? E.g., hasLetters("COMP170") will return false but hasLetters("polymorphism") shall return true.

Understanding of loops

📖 Reading material on the Java Documentation site: The while and do-while Statements and The for Statement

🔹 Can you write a method that returns a given string in reverse? Using the for-loop? Using the while-loop?

🔹 Can you write a method that prints multiples of a given number, over a range of numbers? For example, printMultiples(5,20,50); prints all multiples of 5 from 20 to 50.

Understanding of arrays

📖 Reading material on the Java Documentation site: Arrays

🔹 Can you write a method that swaps two elements of an int array?

🔹 Can you write a method to copy one String array into another?

Understanding of Conditional Execution

📖 Reading material on the Java Documentation site: If-then statements, and switch statement

🔹 Do you know how to use the ternary operator? (This may not have been covered in COMP 170 but it’s quite useful and straightforward to explore).

🔹 Can you explain the difference between

if (a>10) {
  // Code block A
} else {
  // Code block B
}

and

if (a>10) {
  // Code block C
} else if (a<10) {
  // Code block D
}

Read

In addition to the reading material referenced above, read as much of the following as you can.

  • From time-to-time browse Oracle’s Java Magazine.

  • Ilya Suzdalnitski’s spirited article about the shortcomings of OOP. The article is harsh on Java and OOP in general; however it presents some good ideas about resilient programming frameworks. It is a well-written opinion. Part of the article’s polemic is based on an originalist’s interpretation of what OOP means. Suzdalnitski goes back to Alan Kay’s definition of OOP and concludes that based on that definition, OOP has failed. Maybe. At the same time, OOP is one of the best programming paradigms available to us. And with all its shortcomings – many of which are described in Suzdalnitski’s article – OOP has solved more problems than it has created.

  • In 1971, Niklaus Wirth published his influential paper about Program development by stepwise refinement. The paper is quite technical but readable with a bit of effort. Its main point is that sometimes (well, frequently) we get distracted by the features and the syntax of a language and we don’t spend enough time working on understanding and internalizing the design process for new programs.