COMP 170-400 Fall 2017 Syllabus

Compressed Introduction to Computer Science In Python/Java

Home page: http://anh.cs.luc.edu/170

Contacting Your Course Instructor

Dr. Andrew N. Harrington
  • 207 Doyle Center (Hall on sign), 1052 E Loyola Ave (Lakeshore campus)
  • location for office hours before class at Watertower not yet set
  • Email: aharrin@luc.edu
  • Up to date office hours are at my online office hours schedule.
The phone number is fine for talking to me when I am there, but please leave personal messages for me on email, not voicemail.

Your Thursday lab class instructor and course TA is John O'Sullivan, Loyola ID: josullivan1

Textbooks

We are starting off with http://runestone.academy/runestone/static/thinkcspy/index.html. This is a wonderful free (creative commons licensed) online text that I have been contributing updates to. You can get started programming and test yourself entirely in the browser. Do be sure to log in so a history of your work is kept for you.

We will finish with a transition to Java in another text on that same site: http://runestone.academy/runestone/static/java4python/index.html

You can use these texts and their server support for free, but they are not free to the server support and development team. Think what you pay for commercial texts for computer science, or particularly biology! Please encourage this sort of a system by making a small contribution, like $10 or more. There is a Donate link of the page https://runestone.academy/runestone/default/user/login. Creative Commons licenses are great! AND they need support.

Prerequisite

This accelerated class is designed for people who already have a Bachelors degree. You should have had the equivalent of Math 117 (algebra/trig) or Comp 163 (discrete math) or Comp 150 (a bit of simple programming) with a B grade or better. No prior programming experience is required if you are comfortable with a math prerequisite option. We will do simple arithmetical calculations. The logical mindset of mathematics is very useful, and a comfort with symbols, not a head full of formulas.

Overview/Outcomes

This is a new version of Comp 170, which ends up in Java. We will see how much easier it is to start with Python. Most of the desired outcomes are language independent, and you will get them from Python more easily than from Java. The transition at the end of the course will also put them in terms of Java. The ending goals and outcomes are summarized in the top 10 topics. If you already studied introductory Object-Oriented Programming, and think you may not need this course, be sure to examine the the top 10 topics, and consult with me.

Piazza

Piazza is an online learning community - social media for a course. It has been used very successfully by tens of thousands of students.

You encouraged to pose questions and offer answers to others there.

Entries in Piazza come in several forms: general comments, questions, answers, discussion on an issue with a problem, edits to previous entries (this is a wiki), and polls. Entries can be directed privately to instructors (the TA and me) or to everyone.

It is a wiki which means it as a shared, editable space: If you think you can improve something posted by anyone, change/edit it.

Be careful with questions and comments that would help with a homework problem: If you post for everyone to see, the entry needs to be general or conceptual enough not to give away solution details. Do look early at the homework, think, and post such questions, to get early help! If you have a question that is directly related to a solution you are thinking of, it should be a private communication for instructors.

Here are most suggestions on using the individual types of Piazza contribution:

General Comments

Here are some ideas:

  • If they are not giving away a part of a homework/lab problem, they can be anything useful to the general community.
  • Requests for special emphasis in the next class make sense to go out to the whole class, too. After an initial request, "me, too!" additions are very helpful for me to plan how to make class time best support you!
  • If you found a good web site that addresses a course topic in a way that you like, post the URL with a comment.
  • Of course you can always give your own direct comments!
Questions
Other than the restrictions around specific assigned problems, use this community for help. We will discover more ways as we go along! Do organize your materials so you know where to look first for resources. Be aware of the recent course reading and topics. Go to the community second.
Answers
This is a wiki. One latest version appears directly, though the earlier wiki history can be viewed. Be helpful. It is particularly important in your learning to read critically. If you can improve an answer, edit it!
Discussion on a question
There is a provision for discussion of issues separate from answers. If the issue is resolved, the issue can be marked closed (but it is a wiki - it could be reopened by someone else).

Suggestions for optimizing the use of our class Piazza site are highly encouraged.

Communication

Communication is encouraged through Piazza, particularly for content that might resonate with others in the course. Make sure you log in and give it your preferred email address. I will generally send announcements through Piazza, so I strongly suggest you set up Piazza for frequent updates via email. I may occasionally send a very important note and override your email preferences, so you get notified immediately.

Be careful with public questions and comments that would help with a homework problem: The entry needs to be general or conceptual enough not to give away solution details. Do look early at the homework, think, and post such questions, to get early help! If you have a question that is directly related to a solution you are thinking of, it should be a private email communication for instructors.

I will use this group for general announcement/corrections for the class.

Feedback and Questions

Please let me know, in person or via email to me, when you need something from the course that I have not thought to include, or not included in sufficient detail for you, or not presented from a point of view that you can follow. We are in this together. For me to succeed, I need you to succeed. Students come in with enormously different backgrounds. I routinely give each person individual attention.

For course content questions that you do not address in person, and might get help from someone else in class, feel free to post to Piazza.

Course Materials Locations

Beyond the text, there are three locations used by the course:

  • The basic public course materials will all be posted directly on the web under http://anh.cs.luc.edu/170.
  • Announcements, comments and question supporting your learning will appear in the Piazza.
  • Some private information between professor/TA and individual students will be handled through the University Sakai system. It will mostly be used for grades and homework submissions.

Exams

Philosophy

I am looking to run this as a mastery learning class. To keep on schedule, you will want to be ready for exams on the days listed below, but let me know if you are not clearly ready at those times: I want everyone to have their exams as a way of displaying mastery -- we need to work out together when you are ready to show it off! We will finesse the allocation of time for a final project if necessary.

Schedule

See the course schedule.

Tentative exam dates are shown in the course schedule and also below.

Thursdays Sept 21, Oct 12

These may to switched to take-home exams.

The last class, Thursday Oct 19 will be used for presentation of your final project, not an exam. Comp 271-400 starts the following Monday.

Exam coverage

Exams will cover material discussed in class, reading material in the text and on the web, and assignments. Exams will always be cumulative.

Grading

Do not write down things on exams that you can see are incomplete or incorrect without making some comment acknowledging this -- it is better to know you are wrong than to be wrong and think you are right.

Class periods

I will tend to take questions (immediate, or earlier entered in Piazza), to address issues, present a context for the next reading/viewing assignment and emphasize learning to use the new concepts creatively. The main way for you to use the new ideas creatively is to do your written work! Most class time will be spent letting you engage with the work while getting individual help as needed. Information and activities in class that are not in the book will be on exams and used in homework. I do not formally count class attendance, but I strongly recommend that you be there to start your path in computer science well. Always check in with your partner or other classmate if you miss class.

Your TA will do basically the same thing in your Thursday classes.

I am very happy to give extensive help outside class to people who attend class. If my first pass on an idea was not enough for you, we can do better together in pass 2, and maybe pass 3 if needed, .... I am much less enthusiastic explaining what has already happened in class to a person who is frequently absent.

Sometime outside life may intervene, so you are not prepared ahead far enough on the reading/viewing to continue on your written creations. You can generally use the time in what ever way is most helpful to you at the moment, and that may be to catch up on reading/viewing, with the advantage of help right there if you have questions. This is not in general the highest value use of class time, but may make sense in special instances. If you plan to view videos, be sure to have and use earphones, so not to interfere with classmates.

Pair Programming

A recent paradigm shift in professional programming has been Pair Programming: two people collaborating on one problem on one computer. This has proven to be more efficient than each doing separate parts independently and merging them, particularly when error fixing time is included. More recently this approach has also been used in classes with completely new student programmers. Not only have the individual projects been done better with more confidence, but also students have learned at least as well and had more enjoyment in the process. You are encouraged to do pair programming in this course for labs and homework assignments, and you are encouraged to work in pairs on your parts of the final group project within overall teams of around 4 students. (Your exams will NOT be in pairs however!) Read the page on how to make pair programming work. Things do not always go as planned: Also see administrative guidelines for pair programming.

Programming Environment

We will be programming first in Python and later in Java. Python is a great first language. It lets us see and understand the central concepts in programming without a lot of distraction from boilerplate and complicated syntax. It is particularly easy to start with Python, totally in a browser, using http://runestone.academy/runestone/static/thinkcspy/index.html

For later more advanced work, after you are used to Python, you will probably use a free development environment like PyCharm CE (Community Edition), https://www.jetbrains.com/pycharm/download -- Choose the free community edition, which includes the latest version of Python: 3.6.

Amazingly Python is simultaneously a great starting language AND also one of the most used languages by professional programmers, but it is not always the most useful paradigm. Another much used language, with a few distinctly different design considerations, is Java. Most general programming concepts will correspond directly. Much syntax will be almost identical; some will require more translation, and we will emphasize the few new ideas in that paradigm.

Initially you can write code directly into the online text http://runestone.academy/runestone/static/java4python/index.html and run it there, but we will soon switch to a free full development environment like IntelliJ IDEA, https://www.jetbrains.com/idea/download -- Choose the free community edition. This needs the latest version of Java, choose JDK (not JRE) download button and then select the version for your machine. Be sure to accept their license agreement.

At this point I am planning to allow your final project to be in either language. Java will be the language of instruction for the following course, Comp 271.

Campus Network, Rights and Responsibilities: As a user of the campus network, you should be aware of your rights and responsibilities in at ITS Acceptable Use Policies

Programming and homework assignments

Your go-to page for administration during the course is the course schedule showing reading and programming assignments, and class activities. Be sure to keep checking it.

The assignments will be based on material discussed in class, assigned reading material. The questions embedded in the main flow of the text (not in specific sections named Exercises), usually related to what was just introduced, and are best done right away, as you read, to see that you are getting the basic ideas. These are not listed in the homework directly -- they are assumed as part of the reading assignments. I also list assigned problems, many for the Exercise sections, mostly at the ends of chapters. Some of those are more elaborate, and may take longer to sink your teeth into. Do generally make sure you have first gone through the chapter contents that come beforehand, including the embedded questions.

In this small class you can generally show your completed homework to me or the TA during class, and if we find problems, you can fix them on the spot, or take more time if you need, and then show it off again. We will also give feedback on style. I will likely expect some of the more major exercises turned in to Sakai as a final record of your work AFTER you have agreed with me or the TA that they are complete. Follow this approach so you have full understanding and never make a final submission that does not work correctly!

To keep up with this fast-moving class, please start early enough to have time for all this before the due date, if possible. You will have major problems later in the course if you get much behind. You may work with your pair partner on the details of the assignment. Working on programming problems is essential to your understanding of the course material, preparing for exams. (If you have the time and energy and speed of understanding to be ahead of the schedule, that is great but not required -- then a bigger project at the end will help you get even better used to using applying all you have been exposed to, and hopefully create something really neat.)

Final Group Project

You will also be assigned to groups of 3-6 for a large open-ended project (for instance writing a game and its instructions and other documentation), that should be assigned after the second exam and should mostly consume the last third of the course, in class and lab and out of class. This will provide quite a different experience from the more highly specified individual assignments earlier in the course. Your group will be expected to turn in an intermediate version part way through the project, and you can use the feedback you get to make sure you are on a successful track for a final submission. Each team will present their project in part of the final Thursday class, and then we can all test other teams' projects! This is in lieu of a final exam on the last day.

Extra help

Learning is a spiral process, and different people need to take different sized steps at different times. Self dependence and stretching yourself are great, but this only goes so far. Take advantage of the resources provided when you need them.

  1. Please take advantage of the Pair Programming. You and your partner may complement each other very well.
  2. I welcome questions inside class, in regular office hours, or by arrangement at other times.
  3. Use Piazza.
  4. When I am not available, and you want face-to-face help, please visit the Computer Science Department tutors. They have scheduled times all through much of the week. Also, you might try visiting several tutors: Some may fit you better than others. See the tutoring schedule. Hopefully this is set up by the second week of classes. We also hope to get tutors into Piazza.

Grading

I want you working and challenging yourself and going at the rate you can to prepare yourself for later grad courses. Grades are not the main idea - preparation is. I would prefer to do this pass/fail, but it is not clear the grad school will allow it; stay tuned. I am not looking to mess up anyone's graduate GPA.

Academic Dishonesty

With the setup of this class I am not expecting issues here, but for the record:

The penalty for cheating may be anywhere from a 0 on an assignment to a grade of "F" in this course. The appropriate dean will be informed in writing of all cheating incidents.

I expect you to work on the questions embedded in the text by yourself or with a partner. These are not included here, partly since answers are generally already given! This is more about separately assigned, bigger assignments and exams.

Cheating consists of, but is not limited to:

If you are working on a pair or group project, an "outside person" only refers to people other than your assigned partner or team. Note that cheating goes both ways: both giving and receiving.

Consultation is allowed with me, the TA, or official Computer Science department tutors. If you consult with any of these people, still make a comment at the top of your work about the substance and depth of the help. Hiding such help is also academic dishonesty.

Help from any source is fine concerning

Cell Phones

I assume that my class is not the most important thing in your life. Only you know the relative importance of any particular connection through your cell phone, and whether it is important for you to answer a call immediately rather than later. I do want you (and me!) to be respectful of my class and disrupt it as little as is practical. If you get cell phone calls with fair frequency, be sure to have the ring muted (use vibrate mode) before coming to class. If you rarely get calls, you might not mute it ahead, and your cell phone may happen to ring. Get rid of the noise as soon as possible, and do not get flustered. I assume you will move outside the classroom for a conversation. If you get fairly frequent calls that you are likely to consider important answering, sit in a place where your exit and re-entrance are as unobtrusive as possible.

Questions and Feedback

Please contact me if you have questions about these ground rules or about anything else in the course. After class, by email, in my office, by phone, all work for me. I am here to help. On account of my GPD work, I generally have Skype running, ID: gpd.cs.luc This also allows screen sharing.

With the great speed of the course, it is very important that you keep up. Let me know when you need help!

Also for MY benefit and the students that come after you: Colleagues have done classes like this, going from Python to Java, but this is my first time with these texts and this transition (as an official part of class). I really want honest feedback on how it is working, and what should be changed. (I will not fight hearing about the parts that go great, either.) In the past students in this 8-week intro have panned some things that I have written or set up, and on reflection I gratefully did a major rewrite, very rapidly. Eighteen-year-olds are not generally so comfortable with themselves that they can give this sort of feedback. I look forward to working with you.