Skip to content

Class Information

Objectives and Structure

Objectives - In completing this class, students will...

  • Demonstrate familiarity with key concepts in a procedural programming language such as: variables, data types, control structures, methods, input and output.
  • Demonstrate the ability to use programming to solve problems appropriate to a beginning class in programming and software development.
  • Acquire familiarity with rudimentary processes of software development that include: design, coding, testing, and debugging.

Structure - This class is broken into two main activities: lectures and lab.

  • Lectures will discuss the main concepts of software development in the Java language, but will include significant portions of programming. Everyone should bring their laptops if possible (if you have one, that is).
  • Labs will help you jump into more significant programming projects. You will program in lab, and be responsible for deliverables.

Students are assessed through a combination of individual homework, textbook exercises, lab assignments, and exams. Attendance of both labs and lectures is mandatory.

Course Prerequisites and Student Responsibilities

Prerequisites:

  • None! All are welcome and capable.

Responsibilities - Students must

  1. Attend all classes unless you are sick or there is an emergency. In these cases, please contact the professor.
  2. Interact, ask questions, and generally participate in class discussions.
  3. Attend all labs, and do all the work assigned there.
  4. Complete programming problems individually unless working in a group as specified on the assignment in which case you can work only with those group members.
  5. When working with a group, you must report the collaboration either as comments in the top code section or on the written report.
  6. When working with a group, it is essential that each group member pull their own, but also that other group members let
    them
    do so!

Course Philosophies

Throughout the class, students should focus on adhering to the following general tenets:

  • Try it! -- A common question is "will this work", or "what will happen in this case". The only reasonable answer is "try it and see!" Your system will not blow up if you program incorrectly, and it is _essential_ to learn to harness trial and error as one
    of the most effective ways to learn programming.
  • Know your sources, and use them! -- The Javadocs webpage is invaluable to find utility methods to use. The syntax of Java is documented well in your textbook, and in online tutorials.
    Learn to use your sources productively to help to make progress.
  • Be proud of your code! -- Properly indent it, simplify it where you can to make it more understandable, and comment it where
    appropriate. You're taking part in an art that most often is shared, and it matters if others can understand your code!
  • Planning is the best debugging! -- You should never jump into code before thinking about it thoroughly. Design your programs
    by breaking them into independently implementable chunks, and write + debug them one by one.
  • Practice methodical debugging! -- Spend time "stepping though" your program, statement by statement to understand the logic behind it, and why it is ending up in a buggy state. Do _not_ take a program that doesn't work, and modify smaller parts of it until it works. Understand why it doesn't work, and use that knowledge to change or even rewrite your program!

Course Material

Required Text:

  • Online text book by Zyante: Programming in Java.
    Please find the details for signing up for this book on Piazza.

Grading

Grades will be assigned with the following proportions:

Homework Assignments 40%
Lab Assignments 15%
ZyBook Exercises: 10%
Weekly Readings 5%
Class Attendance: 10%
Participation: 5% [10%]
FinalExam: 15%

If needs be, there will be short quizzes at the beginning of classes and labs. You start with 5% in Participation and lose points for missed classes or consistently failing to contribute, ask questions, or collaborate in any group projects. On the other hand, if you consistently participate and/or complete optional work, your participation grade can increase up to 5%.

Late Policy:

  • Assignments cannot be handed in late for credit. If you miss a deadline, for whatever reason, don't panic and keep submitting all other homework. We'll work with you in the end (as long as you don't miss any more deadlines). That said, if you have a medical (or other reasonable) justification, bring it and allowances might be made.

You cannot fall behind on assignments as they strongly build on each other in this class. Therefore, we will adhere to a strict policy that disallows late submissions. If you have a medical emergency or equivalent event, please contact the professor as early as possible.

Academic Honesty

Just as you can do a google search for code online, it is trivial for us to do the same. We have caught numerous people cheating in the past in this way. If you feel pressured about an assignment, please come see me instead of cheating.

You are not allowed to collaborate on the homework and lab assignments unless explicitly told to. Group assignments require collaboration within each group, but no collaboration between groups is permitted. Please refer to the academic integrity policy linked from the course web page. This policy will be strictly enforced.

If teams are allowed and your team is not working well, please contact me.
If you're having significant trouble with an assignment, please contact me.

Academic Integrity Policy

Additional Material

In addition to the contents of the class, what follows is a list of resources that will allow you to go beyond what you've learned. This material is not mandatory for the class and is meant to give you a springboard if you wish to pursue the ideas further. Many of these are blog posts or articles for easy reading. However, because of the informal format, please take the contents with a grain of salt. I can point you to more thorough content if you want it.
If you find an website/article/tool that you think is worthy of being in this list, let me know.

Websites geared toward programming topics (or that have subsections on systems):

  • Arstechnica: tech
    news, often with a high-level overview of systems/architectural
    topics.
  • Proggit: the
    reddit for programming. Mostly blogs and informal content, so
    it should be read with a grain of salt.
  • Hacker News: same
    as above, but with more of an entrepreneurial slant.
  • Linux Weekly News:
    Free content is that which is at least a week old (see the
    Archives).
  • From low-level embedded system hacking, to robotics, to
    hacking! Hackaday!