CSCI 1111, Fall 2014:
Introduction to Software Development

Professor: Gabriel Parmer (gparmer at gwu)
Office hours: Wednesday 2-4, Philips 720E
Research interests: Embedded systems, component-based OSes (see Composite), multi-core OSes

Class Schedule: Tuesday/Thursday 11:10AM - 12:25PM
Lab (required attendance): Tuesday 02:10PM - 04:00PM and 04:10PM - 06:00PM Tompkins 211, 410, 411

TAs:
James Marshall and Claudiu Cosma, Office Hours: Monday 12-2 (James) and Thursday 2-4 (Claudiu), Philips Hall 725

Software runs the world. From our cars, to our power plants, to the Internet and your phones, software is irreplaceable. Though it is not easy to become a master in all that is software development, in this class we will take the first steps down the path toward software nirvana, or at least (as a back-up plan) a prosperous career. News:
  • 8/26: First day of class. Your TODO list:
    1. Sign up for the Piazza message board.
    2. Read the first message on Piazza about accessing the online textbook for the course.
    3. Please fill out our course survey
    4. Note, you have homework in the "Schedule" section
    5. Gear up for a challenging, but satisfying semester!
  • If interested, please see the DrawTool.java and a test program for it, TestDraw.java.

Please click on any section below to see its contents.

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 work assigned therein.
  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, 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.

Schedule

Events are in bold. Note that this schedule is subject to change. All references to Sections X.Y refer to the sections in the ZyBook, and you must include all Activities and Challenge Homework Activities.

DateTopicReading and ExercisesHomework
8/26 Introduction to CSCI1111, Why CS is awesome! Sections 1.1-1.3. Do all Activities and Challenge homework activities. Due by next class.
8/28 Syntax Sections 1.4-1.8, and Sections 2.1-2.2. All Activities and Challenge Homework Activities. Due by next class.
9/2 Variables Go back over Modules 1 & 2, and make sure you understand each Exercise, even if we didn't do it in class.
9/4 Variables, Math, and More! Sections 2.3-2.9, and 3.1. Due by next class.
9/9 Now we're really starting to program: Conditionals Sections 3.2-3.4 and 3.6. Due by next class. Ongoing Homework: see tech reading below, due every Sunday at midnight.
9/11 Conditionals++ Please go over Modules 3 & 4 and make sure you understand each Exercise, even if we didn't do it in class. Part of your exams will be based on this material! Sections 2.11 and 6.1-6.3. Due by next class. Don't forget about the tech reading homework! See blackboard for the submission link.
9/16 Methods and Testing Please review Module 5 and make sure you understand each Exercise. Sections 2.6, 3.5, and 6.4. Due by next class.
9/18 Methods, Testing, and Strings Sections 2.12, 3.7-3.9. 6.6-6.8, 6.10-6.11. Due by next class.
9/23 Strings and Javadocs
9/25 Strings and Javadocs; more practice! Sections 4.1 and 4.2. Due by next class. Find homework one on the homework page. It is due in a week and a few days, at midnight on Sunday, Oct 5th. You will still have zyante homeworks for the next class, so please manage your time well.
9/30 Strings and Javadocs ++. Intro to loops! Sections 4.3 and 4.4. Due by next class.
10/2 Strings, Javadocs, Loops; more practice! Sections 4.5-4.8. Due by next class. Find homework two on the homework page. It is due at midnight on Sunday, Oct 12th. You will still have zyante homeworks for the next class, so please manage your time well.
10/7 Loop practice! Sections 5.1-5.2. Due by next class. Don't forget about the homework due on Sunday!
10/9 Loops and Arrays Sections 5.3-5.5. Due by next class.
10/14 Loops and Arrays continued. Sections 5.6-5.7. Due by next class. Find homework three in the homework page. It is due at midnight on Tuesday, Oct 21st. You will still have zyante homeworks, so please manage your time well.
10/16 More arrays, and 2d Arrays. Sections 5.6-5.10. Due by Thursday, 10/23.
10/21 More 2d Arrays. See 10/16. Repeated here: Sections 5.6-5.10. Sections 7.1 and 7.2. Due by next class.
10/23 Reading and designing code.
10/28 Scope and Encapsulation 7.3-7.5. Due next class. See Piazza: Homework 4 is out. Due at midnight on Tuesday 11/4.
10/30 Scope and Encapsulation II 7.6-7.10. Due next class.
11/4 Classes and Objects 7.11-7.12. Due next class. See Piazza: Homework 5 is out. Due midnight on Wednesday 11/12.
11/6 Classes and Objects II 7.13, 7.14 and 7.16. Due next class.
11/11 Classes and Objects III
11/13 Zombies. ...and brains. Homework 6 is out. Due on Monday 11/24. However, please look at the optional deadlines in the homework. One is on 11/16, and another is on 11/23.
11/20 Generics and data-structures.
* The course topics will continue through 2d arrays, Classes, and Objects. Throughout all of this, you will continue to progress on your 2048 and GWMaps implementations.
Thanksgiving Break
Final Exam

Technology Reading Weekly Homeworks: Starting the week of 9/8, you will have additional weekly homework. You must read two articles on arstechnica, and write two very brief reviews. These reviews are due every Sunday at midnight. You can not choose articles that are product reviews. Please turn in a simple .txt file (no word documents will be accepted). You can use Wordpad or an equivalent program to create the file (or even JGrasp!)

The review should be around four sentences addressing:

  • What is the title of the article, and the URL/link to the article?
  • Provide a one-sentence summary of the article.
  • Did what you learn anything from the article? (Note: if you didn't learn anything from the article, then you should choose your articles in the future to be those that will broaden your knowledge.)
  • How does the article relate to programming, if it does?

You can and are recommended to discuss articles with classmates. The only part of these homeworks that you must do independently is to write the reviews.

The learning objective from these reviews is to get additional context to understand the broader placement of software development in our society. How is it enabling innovation? How is it creating cultural difficulties (e.g. privacy concerns)? How is it related to many other facets of our lives?

Lectures

Significant portions of this lecture material are derived from Prof. Simha's material, with some selected content also derived from Megan Olsen's class.

Grading

Grades will be assigned with the following proportions:

Homework and Textbook Exercises: 65%
Class and Lab Participation and Attendance: 20%
Final: 15%

If needs be, there will be short quizzes at the beginning of classes.

Late Policy:

  • Assignments cannot be handed in late for credit.
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 homeworks and the lab assignments unless explicitly told to. Group assignments require collaboration amidst 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 you're having significant trouble with an assignment, please contact me.
Academic Integrity Policy
Credit: I'd like to thank Prof. Narahari for the first versions of this academic honesty 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!