Considerations for Course Success:

  1. Your Resources:

    To assist with your success in this course, a number of resources will be made available to you in order to facilitate your learning and application of the material taught. Different students will pick up the material with varying speed and facility. There is likely to be a handful who grasp it easily and quickly, a handful who struggle considerably, and everywhere in between. Students who grasp the material easily may only need to use a few of the resources, whereas others may need to work harder, longer, and delve deeper into the resources in order to achieve similar results.

    The grades I assign will be based upon completion of course requirements, but it is ultimately up to you to make decisions about how much time and effort you put into things. Some may choose to put in lots of time and effort, where as others may not, for any number of reasons. Regardless of what you choose, when I evaluate your work, I will do so keeping in mind that you had available to you a considerable range of resources, such as the following:

  2. Grades and Work Quality:

    The following table is not a guarantee of any particular grade for any student. Rather, it serves as a rough guide to the quality of work that would be typical of students passing the class with a particular grade.

    A
    B
    C
    D
    F
  3. Avoid Compiler Errors:

    Recall that your programs can have at least three different types of errors: compiler, runtime, and logic. Of these three, the one most important to avoid is the first -- compiler errors -- for multiple reasons:

    Fortunately, there are a number of things you can do to either avoid compiler errors entirely or make it easier to find and fix them, when they do arise:

  4. Syntax and Semantics:
    Syntax:    How you put together the different language elements (idenifiers, symbols, etc.) together in order to write your program
    Semantics: What the different parts mean (e.g., operation or data type)

    In order to write programs that not only compile but also run and give correct results, you need to be very aware of -- and meticulous about -- the specificities of Java syntax and semantics. If you have no experience with programming, it may not even occur to you that certain details would matter, and you might not think about such things or even be tempted to ignore them. However, that would be a grave mistake because it will impede your learning and take a toll on your performance in the course. Instead, you should be mindful about things such as the following:
  5. How Code Fits Together:

    This is largely about learning how to "think like a computer," which is -- in many cases -- very different from how humans think. For example, you will want to think of a program as a structured set of steps executed in order to accomplish a particular goal. In many cases, those steps will consist of multiple "sub-steps", which may -- in turn -- consist of their own "sub-steps." (This is particularly so in the case of steps that entail the evaulation of complex expressions.) In addition, a program can also be thought of as a collection of components...that may operate more or less independently of one another. As such, those components can often be assembled in different ways to produce different programs.

  6. Be Strategic:
    The general idea here is expressed in the adage "An ounce of prevention is worth a pound of cure". In other words, I am encouraging you to work smarter so that you do not have to work harder:
  7. Checklists:

    Different assignments may have multiple and varied requirements and expectations. Some of these may be spelled out in a particular location in list form, but others may not. (This is to reflect real-world scenarios where specifications may not be spelled out as clearly as you would always like.) In this case, if you find it difficult to keep up with different aspects, you may find it helpful, upon beginning an assignment, to read through it from start to finish, writing your own checklist as you go along.

    Furthermore, you may also wish to make more general checklists that you can reference as needed when doing your work. For example, for writing a Java class, you may want to make a list of things to check on (correct file name, matching class name, good code indentation and formatting, etc.). Or, for a statement, you might check and make sure that you have all the parts, of the right types, in the right order, etc.

  8. Problem-Solving Mode:

    Computer Science and Information Technology, like most technological and engineering fields, centers around one primary goal: Problem Solving. We will be doing plenty of that in this class. Though much of the class will involve the acquisition of facts and information, evaluation (for grading purposes) will usually require the application of that knowledge. To that end, given topic X, you will of course need to know it conceptually, but then there will be a deeper question:

    Given what I know about X ... and given how I have seen X applied successfully in situations A, B, and C ... how can I now apply X to situation D? (Where situation D is similar to A, B, and C in some ways but also different from them in other ways.)
    Imagine that this is a baking class, and I am teaching you how to write cake recipes. As the instructor, I would...
    ...teach you about the components: flour, sugar, butter, eggs, baking soda, baking powder, etc.
    ...explain how they work individually and in combination.
    ...show you multiple examples of how they are used successfully in other recipes.
    After all that, your task would be to invent a cake recipe of your own -- one that would bake successfully and meet certain specifications. Your job would be to take what you have been given before (both general knowledge about the components and previous examples of their concrete applications) and apply them towards novel problems.

    And, so it will be with our material in this class. As such, your best bet is to get yourself into a problem-solving mindset, which will entail a number of things:

  9. Second Chances:

    In many cases, throughout this class, you will have various opportunities to compensate for a less-than-desirable performance earlier in the semester. For example, the homework component may be set up so that you can do more than the required number (for example, 8) but only have the best 8 count towards that portion of your grade. Also, there may be an extra exam at the end of the semester that would allow you to make up for earlier deficits (grade-wise) in the semester.

    For students who have a rough start but are able to improve and catch up, these are good opportunities to reduce (or even cancel out) any negative impact on your grade by the earlier performance. However, this only works if you accomplish sincere and meaningful improvements in (1) your understanding of the material and (2) the quality of your work. If you do make these improvements, then the opportunities will provide a good chance to bring up your grade. On the other hand, if you partake of the opportunties without providing higher quality work, it likely will not help you.

  10. Personal Inventory:

    As mentioned earlier, different people will experience different levels of comfort and ease with the material we are covering this semester. Some will pick it up quickly and easily, while others may require more time and effort to accomplish the same. At the same time, because people are so diverse, you may be able to leverage your individual qualities to your advantage in learning the material. To that end, consider asking yourself questions such as the following:

  11. Common Pitfalls:

    There are a number of issues I see arising repeatedly among beginning programming students, and they do not necessary mean that anyone is at fault -- though we all have a responsibility to try to avoid them. I will list some of those here so that you can be aware of them and possibly recognize them before they happen. Titles should be taken figuratively, not literally:

  12. Have Fun!

    This is important for two reasons. First, the topic -- no matter your level of interest -- will sometimes feel very dry and boring; as such, anything you can do to make the task more pleasant and enjoyable will give you a better experience in the moment. Second, there is the "positive reinforcement" (read more here) angle to consider. In short, that means that if a behavior is met with a reward (even a psychological reward), it is more likely to be repeated in the future. And so it is with your studies in programming. If you find ways to make studying more fun, amusing, and otherwise enjoyable, then you will have a greater motivation to study more. It is a way of training yourself to do better.