A "Good" Letter to Next Years' APCSA Students

This letter was included into the summer packet with minor modifications

for (Student student : APCSA.future.students)
System.out.print("Hello "+ student.name);

You’ll learn about computer science and Java here. You won’t be learning about how to write visually attractive programs for the most of the times, but what you learn will empower you to write those programs with ease. This course is the prerequisites for all other CS courses, but why are you taking it? For me, I was here to learn.

Despite the fact that I love programming, I’m afraid of computer science, especially those abstract algorithms. To prepare for this course, I read Think Java carefully. Mr. Lau suggested to read the first three chapters, I read it entirely. You can download it on your phone, and read it whenever you take your phone out. You don’t need a full time period, except for the exercises at the end of each chapter. You might find yourself unable to complete the exercise questions like me; if you do, just go back and read about that part again. There are no preferred answers to those questions, so any code that generates the same result are correct. But if you ever wonder, mine is on GitHub.

Even with a significant amount of knowledge about programming, you can always find something new here, so don’t just assume you are omniscient. Java is advanced but primitive, stern but nonchalant, expressive yet confusing. Learning Java is like learning a foreign language, you have to practice using it. Thus, I strongly recommend starting the labs early. Similar to those exercises included in Think Java, there are no standard ways to implement them. Therefore, explain to your tutor how you choose to complete the task, don’t let them type the code for you. And you never want your friend to show you their program; it will limit your imagination.

This course requires you to think logically, trace what’s going on. It is a frustrating process, but the good news is, you have a lot of resources. You can ask questions in class, take notes on or annotate important concepts for review. Another option is coming to Mr. Lau’s cougar time. You’ll find a comfortable environment for studying computer science. If you have any questions, you can always ask Mr. Lau or students around you. A lot of “good” students and center tutors come on daily bases. They will always help you IFF you ask. Or join Oakton Computer Science Club, you’ll find many opportunities to practice what you learned in this course, and meet with some really advanced students.

You can be a good student too. It’s very simple: understand what you are doing. Never use a code snippet until you can write it and its variations out without any assistance. I’m definitely talking about plagiarism, but that’s not my focus. I want to emphasis on the importance of solving problems by yourself. If you can’t visualize the process in your head, draw a graph, a table, or a stack to visualize the flow of your program. If your program doesn’t compile, read the error messages. A lot of them doesn’t make any sense to you (and me), but you’ll find the culprit through these traces. If you have a logic error, try break points. They are very easy to learn and convenient to use. You’ll find them handy.

Other than understanding how it works, you need to know why it works. You can achieve this by reading the source code of Java. Written by top developers in the world, Java source code demonstrates the conventions of writing Java code. You can compare your own solutions to theirs, and ask yourself what’s the difference. With a lot of documentations and comments, you can figure out why they choose to do it that way. Of course I’m not asking you to read all 2 billion lines of Java code, that’s neither necessary nor efficient. When Mr. Lau tell you “this is not natural,” it is a good place to start. If you have a professional IDE like Eclipse, just ctrl/command click on that method or class; otherwise, find it in the JAVA_HOME directory.

A quick note for those “good” students. You may use “advanced” stuff – such as regular expressions and lambdas – in your lab. That’s what people use in real life, but make sure you know how to complete the tasks without those language features, fancy methods, and classes.

Remember: ALL are equal before computer science; (to be) || !(to be), that is true.