CSC207 Software Design Fall 2016 Section L0301 Paul Gries 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 • version control (using git) • aspects of team dynamics • design patterns • tools for designing and analyzing programs • a large Integrated Development Environment (Eclipse) • the Linux command line Object-oriented programming (using Java) • strong typing • lots of inheritance • more unit testing • a memory model for Java • exception handling • floating-point issues 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 Labs next week Because of wildly fluctuating enrolments, we will send an announcement about your Friday lab room on Wednesday next week. The lab rooms are BA2200, BA3175, BA3185, and BA3195. Eclipse, Java, and Git install fest! Monday 4–6pm in SS2117 Leo Ufimtsev earned a UofT CS degree. He now works as a software engineer at Red Hat, a Linux company. Eclipse, Java, and Git can be a bit overwhelming at first, and installation can be a headache. Come see a demo from Leo about working with Eclipse, Java, and Git, and get hands-on help with issues you are having! What do companies want? 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 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. 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: • 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… 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 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_Guid e/s1-managing-directories.html • Java from a Python perspective: http://fpl.cs.depaul.edu/jriely/java4python/java4python.st art.html