CSC207 Fall 2016
Software Design “An introduction to software design and development concepts, methods, and tools using a statically-typed object-oriented programming language such as Java. Topics from: version control, unit testing, refactoring, object-oriented design and development, design patterns, advanced IDE usage, regular expressions, and reflection. Representation of floating-point numbers and introduction to numerical computation.” — The Arts and Science Calendar
The Main Project You will incorporate the contents from lectures and labs into your assignments. The main project for this course is: develop a program that allows for finding, tagging, and renaming of image files to include the tags in the file names.
What we assume you already know CSC108, CSC148, and CSC165 material: lists, dictionaries, functions, classes, stacks, queues, trees, recursion, unit testing, logical notation and reasoning, the basics of computational complexity (big-Oh), and an approach to developing functions (the function design recipe).
What we want you to learn Fundamental code development techniques used professionally Object-oriented programming (using Java) version control (using git) strong typing aspects of team dynamics lots of inheritance design patterns more unit testing tools for designing and analyzing programs a memory model for Java exception handling a large Integrated Development Environment (Eclipse) floating-point issues the Linux command line This isn’t “the Java course”. The programming language features we teach appear in many other programming languages, we just happen to teach them using Java.
How we’re going to teach 2 lecture hours / week 7 1-hour labs 2 45-minute midterms (in lecture room, but at lab time, bring your TCard!) 2 individual assignments 2 pair assignments (no teams of 4, unlike in previous offerings) 1 final exam
One way to help your learn: Recognized Study Groups By joining or coordinating a study group, you will: Guarantee regular study time Gain motivation and understanding Meet your peers Get quick access resources and supports Receive Co-Curricular credit for participating and leading Visit http://studygroups.artsci.utoronto.ca Do the People Search here! Things to say: What’s the most common thing that companies complain about when they hire our students? Let them guess. The answer is “communication skills”. Tell them after a few guesses. “Here’s a chance for you to practice this, as well as to get to know other people in the course.” Hand out the People Search. Let them go for 10 minutes. Collect them and ask them how many people had at least 8 answers.
Marking scheme
Resources Course website (readings, links) Discussion board Office hours (see syllabus; you are encouraged to attend the office hours of all instructors, not just mine) Lectures and labs! Anonymous feedback: please give us constructive suggestions!
First topics of the course: the file system and version control Two related issues: How to organize files (using your file system) In a multi-user environment, how to track and share changes (using a version control system) You need to thoroughly understand your file system to understand version control. When you are working on your paired assignments…
Managing files Your OS provides a view of your file system. The Linux command line provides another equivalent view. Some of this will seem really basic to many of you, but we want to make sure everyone understands the terminology we are going to use.
Tree Structure for File System Files and folders/directories on any server are arranged in a tree structure: People use “folder” and “directory” interchangeably
Directories can contain some combination of: 0 or more files 0 or more directories
Moving Within the File System To access a particular file, you have to first navigate to the directory that directly contains that file (not contains a directory that contains a directory that contains the file) We do this by changing the current working directory to the next closest folder on the tree
We start at the root directory
We now have access to two files…
and the ability to open two directories:
To access this file, we need to first open… New topic
This directory…
Which lets us open this directory…
Which then lets us open the file we want
A GUI vs. the command line You are used to using a GUI such as the OS X Finder or Windows Explorer to navigate your file system. There’s another way: using the Unix/Linux command line. We’ll expect you to become familiar with the command line. You’ll need it for Git, and CSC209H expects you to know how to use it.
Command line tutorial Red Hat is a company that manages a Linux distribution. They have a tutorial that introduces the command line. We suggest you start here. “Nautilus” is their graphical user interface; ignore it. Follow along through section 4.9. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-managing-directories.html
Time spent on task Version control and Git: Assuming that being a full-time student is a full-time job, that means 8–10 hours/week on each of your courses. This includes week 1. Version control and Git: https://www.atlassian.com/git/tutorials/what-is-version- control Learning the command line: https://access.redhat.com/documentation/en- US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Gui de/s1-managing-directories.html Java from a Python perspective: http://fpl.cs.depaul.edu/jriely/java4python/java4python.sta rt.html 8-10 hours including lectures and lab! So start a study group and do these together!