Welcome to CS 139 - Programming Fundamentals (4 CR)

Will you be mastered by your machinery (computers specifically) or will you become the master? Have you ever wondered what computer programmers do? This course will help you to see how computing professionals solve problems and you will use the high level programming language, Java, to control what your computer will do. We will work together to master basic constructs of computer algorithms, have a little fun with graphical applications, solve problems in small groups, program some simple games and tools, and gain confidence in controlling the machines that have become ubiquitous in our modern society.  
We know that you come in with varied experiences with computing, and that all of you have some experience with programming. We provide many help sources to guide your way through this material and for those with more extensive experience, you will have the opportunity to take on additional challenges. In addition to your textbook, which you will find to be a valuable resource in this course, you will have access to video tutorials, which demonstrate concepts and code development throughout the course, as well as instructor office hours and colleague teaching assistant consultation times.

The official catalog description: Students learn fundamental problem-solving techniques using a modern programming language. Students may not receive credit for both CS 139 and CS 149. 

Important Course and Contact Information

N. Harris

Students in Computer Lab

Nancy Harris - Contact information

Office ISAT/CS 217
Phone: 540-568-8771
E-mail: harrisnl (with the usual jmu extension)
Piazza: piazza.com - all students should enroll.
Web: users.cs.jmu.edu/harrisnl
Course Material: canvas.jmu.edu

The best way to reach me is via e-mail or during office hours. I generally respond within a couple of hours or less during normal business hours and evenings. Weekends may be a bit longer.

Course information

All sections meet for lecture: M/W 10:10 - 11:00 in ISAT/CS 136

Labs meet as follows:

Section 1: T/Th 9:30 - 10:45 in ISAT/CS 250

Section 2: T/Th 11:00 - 12:15 in ISAT/CS 250

Section 3: T/Th 2:00 - 3:15 in ISAT/CS 250

You will find that we do not do a lot of lecturing in this class; instead we will do a lot of lab work and in class activities. We will rely on you to do the required reading from the text and/or video tutorials and other supplemental material before the class in which we will discuss the material. The schedule is organized with preparation activities in one column and the corresponding class activity in the next. Class attendance is mandatory and will be taken.

We will use Piazza as a blogging, question tool and we generally monitor activity on that site each day.

We will use pair programming in this class as a way to help you help one another through the difficult assignments. It is a commonly used technique both in the classroom and in some software engineering environments (see Extreme Programming for one application).

There is no prerequisite to this class.


Professor Harris Office hours
M/W: 11am - noon

Tues: 5 - 7pm

Th: 3:30 - 4:30

Full schedule

I am generally accessible even during times that are not my stated office hours. If I am available, you will find me in my office with the door open or via online communication.


Nancy Harris Bio

I received my first BA degree in Psychology from SUNY at Stony Brook in 1978. Shortly after moving to Southern Illinois and working in food service and retail, I saw the light and received my CS BA degree from Southern Illinois University in Carbondale, IL in 1981. I received my MS degree in CS from James Madison University in 1993.

Following 16 years working in software development and deployment and several before that working in technology support, I joined the faculty of JMU CS in 2002 where I frequently teach the introductory course sequence. I also teach software engineering and database design and work with JMU's faculty development center, The Center for Faculty Innovation.  I am passionate about increasing the number of women in computing fields and advise the Women in Technology club here on campus. See me if you are interested in doing outreach for both boys and girls in middle and high school.

I am married to a former professor in CS at JMU and we have two grown sons.  I enjoy quilting and outdoor pursuits.
Our Graduate Assistants: Matt Muller

Contact information: mullermp@dukes.jmu.edu

Office hours: Monday 3-5pm in the Grad Lounge

Our Undergraduate consultants: TBD

Themes:

  1. Object-Oriented Paradigm—The OO paradigm models computing as the collaboration of objects rather than the decomposition of operations.
  2. UML—The Universal Modeling Language should be used for diagramming.
  3. Coding Practice—Computing professionals are comfortable with code; comfort comes from practice reading, writing, and debugging code.
  4. Software Engineering Approach—programming is part of a disciplined development effort that requires thoughtful design and coding, desk-checking, and thorough unit and integration testing.
  5. Professional Ethics—Intellectual property is owned by its creators and cannot be appropriated without permission. Even when used with permission, its creator must be cited. Turning in someone else’s intellectual property as one’s own is a violation of professional ethics as well as the JMU Honor Code.
  6. Reading Specifications--Precise specification of requirements, designs, and so forth, are basic documents in computing. Students must develop skills in reading specifications carefully and understanding exactly what they state.
  7. Professional Conduct -- Computer scientists must become adept at "figuring stuff out".  Passive absorption of "lecture" material is not the way to learn in this fast changing environment.  Students should be prepared to spend time engaging with the material in a variety of ways including but not limited to lab work, code walk throughs with fellow students, search for elegant solutions, and practice with programs outside of the class environment.

Objectives: The mission of this course is to make you better problem solvers. While controlling the computer is fun, the way we solve problems for the computer can be applied to many other kinds of problems in life. You will learn how to break a problem down into its component parts, determine the best solution to each of those parts, implement that solution in Java, test and correct the solution, and put the components together to form a whole application.

More specifically, during this course you will:

We will do this by:

This course meets the CS department objectives of:

These objectives were developed through collaboration with the department and other people that are teaching the course.

Course Practices

This class meets four days per week, twice in the lab and twice in a classroom.

In preparation for the lecture and lab, students will have a variety of homework involving video tutorials, reading assignments, or homework practice problems. On the lecture day, students will work in small groups to solve problems related to the homework and take weekly quizzes. Lab days will permit students to practice with the new concepts or techniques and to implement the problem solutions developed during the lecture activity. All course materials will be posted on the course schedule and Canvas, typically before the class period.

Assessment

(10%) Classroom Activity will include in class quizzes, group learning activities, attendance, and homework. The classroom activities will prepare you for the labs and exams and homework will prepare you for the classroom activities or labs.
(10%) Labs will generally be due before the next scheduled class period. Labs will be done in pairs. The top 90% of your lab grades will be used for grading.
(20%) Programming Assignments (PAs) are longer term projects which synthesize a number of individual skills. PAs require you to solve a new problem and follow precise specifications. These may be scaffolded in that one PA may encompass multiple due dates.
(10%) Weekly quizzes - The top 10 quizzes will be used in grading.
(10%) Midterm 1 - February 19 in lab
(15%) Midterm 2 - March 26 in lab
(25%) Final Exam - Thursday - April 30 during lab AND Monday May 4, 8am - 10am in the classroom. 

The relative percentages of exams are increasing since the material accumulates through the semester and we want you to be able to practice answering the kinds of questions we ask on exams. Therefore, more weight is given at the end of the course than the beginning.

Course grading – I use a 10 point scale for final grades. 90% and above is in the A range, 80% is B range etc. I will award +- grades for the final grade for work at the top and bottom of the scale. You need to earn a B- or better to continue on to CS 159 and you must pass the final exam with 60% or better to receive a B- or better in this class. I do not give WP or WF grades except under extraordinary circumstances.

Note: Pursuant to the JMU Honor Code, “Each examination, paper and other written or electronically submitted assignment is submitted pursuant to the Honor Code…” (from the Honor Code site).  

We use pair programming in this class. That means that most out of class assignments will be done with your partner. Other collaboration will be described in more detail with each type of assignment. We use a tool from Stanford University called Moss to detect inappropriate collaboration on programming assignments. All programming assignments are subject to evaluation using this tool.

Course Resources

Gaddis5E

Textbook – Starting Out with Java: From Control Structures through Objects, 4/E Tony Gaddis, Haywood Community College  ISBN-10: 0136080200 OR Starting Out with Java: From Control Structures through Objects, 5/E Tony Gaddis, Haywood Community College  ISBN-10: 0132855836  | ISBN-13: 978-0132855839. This textbook will be used extensively through the semester and into next semester. Used copies are fine. There is an option to buy the electronic text which gives you full access to the on-line materials. 

 Storage - You will need to have some means of storing your programs and other work in progress. We recommend that you set up an account with DropBox.com or GoogleDocs(Google Drive) or some other cloud facility. You can also use a removable device if preferred. All students in this class will also get an account on the departmental Linux server.

Java APIs – Oracle (the vendor of Java) provides an extensive library of tools that you will be able to use in your code. Documentation for these tools is available through this link.
Java Tutorials – Oracle also provides tutorials for java code. These can supplement your understanding of concepts in this course or to let you explore topics that we may not cover directly in class.
CS 139 Tutorials – These are video tutorials that will be available in Canvas to help you with new material. As we approach each new topic, these tutorials will introduce you to the material. They will remain available throughout the semester.
CodeBat – CodeBat is a web site which provides practice problems and feedback. When you don’t have a specific assignment to work on and you would like more practice, this site provides a great way to gain more skill. I will post specific examples to go with appropriate lessons. 
IDE, Compiler, and other software tools – Links to software tools are available through Canvas. These are all open source, freely available resources.
JAC Card – Put some flex money on your JAC card to use for printing. Printing from the lab or other printers around campus costs about $.05/page. There may be times when you need to print from the lab.

Student Success

How do you learn to program well? First, it does not come by sitting in a classroom listening to an instructor talk. Think about sports you have played or an instrument or tool that you have learned to use. You need to practice to become better and better. You will be successful in this class if:

We will help you do this by:

The fine print:

Students with Disabilities: If you are a student with a documented disability, who will be requesting accommodations in my class, please make sure you are registered with the Office of Disability Services, Student Success Center, 1202 (540-568-6705) and provide me with a copy of your Access Plan letter outlining your accommodations. I will be glad to meet with you privately during my office hours to discuss your special needs. The sooner you can do this, the better I can assist you in meeting your learning goals in this course. More information: http://www.jmu.edu/syllabus/#Disability

Attendance: Since this class is based on the process of engaging with other students and the material in class, attendance is mandatory. I will take attendance each day through a check off sheet (and turning in activity materials). The attendance will be counted in with the class activity section.

"Excused" absences: Students who are unable to attend class due to JMU sponsored activities (such as sports, band, academic competition, academic field trips, etc) or personal religious observance may request deadline extensions BEFORE the expected absence. I will do my best to accommodate your special circumstances. Students with an excused absence will not be counted as present/nor absent for the excused day(s). 

School closing for weather or other unexpected circumstances: Watch our Canvas and/or Piazza site for announcements related to make up work. Generally, if it is a lab day, we will conduct lab using Blackboard Collaborate or other online tools. If it is a class day, there may be an alternate individual assignment unless we can make up the work during the rest of the semester. Program and exam dates will be adjusted as needed. For online make-up, I will make provision for students who do not have access to the internet or Canvas. See me on the first class day after the missed class.

Dates and deadlines: http://www.jmu.edu/syllabus/#AddingDropping You are responsible for knowing and abiding by the registration dates and deadlines in effect for this and all other classes. See the link to those deadlines here.