James Skon
Spring 2017
Location: Hayes 311, Time: 1:10-2:00, Days: MWF
Office Hours: 10-11 M-F.
Tutoring: Sundays 7:00-9:00 pm, Hayes 303, outer office (Bring laptop)
| There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. C. A. R. Hoare (1980 Turing Award Lecture) |
Overview
This course gives students experience designing, implementing, testing and debugging moderately complex systems of software components that collectively form a multilayer application. There will be an emphasis on crafting quality code, designing and implementing effective user interfaces, and building multicomponent architectures using a mix of off-the-self and custom code.Topics will include inner process and inter-system communication, multi-threading, and the synchronization of shared resources, web interfaces, and working with large data sets. Students will primarily use C++, but also will learn Javascript and other languages as needed. Prerequisite: SCMP 118 or permission of instructor.
Text
| Code Complete, Second Edition; Steve McConnell; Microsoft Press; 2nd edition (June 19, 2004) | ![]() |
Technical Topics
- Using the Linux Server
- C++ Iterators and algorithms
- Text Parsing
- Haspmap and building an inverted index
- Interprocess communication using FIFO class
- Multi-threaded C++
- Client/Server architectures
- JavaScript, HTML and CSS
- JavaScript with timing intervals.
- AJAX and CGI communication
- XML Processing
- JQuery?
Projects
| Type | Project | Concepts | Demo |
|---|---|---|---|
| Individual | Inverted index for Shakespeare | hashmap, structures | Census Name Data index and lookup |
| Individual | Web Version of word index for Shakespeare | inverted index | Web based Census Name Data |
| Group | Text Chat or Tick Tack Toe | fifo | Message sending Program |
| Group | Enhanced Threaded Text Chat or Tick Tack Toe | Threads | Thread demo |
| Group | Web Text Chat or Tick Tack Toe | Integration of previous features | None |
| Individual | Text Display of Shakespeare from XML in c++ | XML with c++ | Bible XML Lookup |
| Individual | Web Display of Shakespeare from XML | XL with Javascript and c++ | Bible XML display in browser |
| Group | Full Word Index Project Gutenberg | Create new index design | sequential search |
| Group | Project Gutenberg Word Web lookup | User Interface design | |
| Group | Project Gutenberg Author and Subject Interface | Parsing of HTML, creation of index | |
| Group | Project Gutenberg multi threaded for performance | User threaded sessions |
Tools
- cygwin – This is a tool to give you Linux software on a Windows system. A good way to get SSH.
- NetBeans
- Linux
- Notepad++ (Windows)
- TextWrangler (Mac – use this instead of Notepad++ on MAC)
- PuTTY (Windows), ssh (Windows with cygwin)
- X Windows for Mac
- TightVNC – X for WIndows
- ssh
- Make
- Git, Github
- Emacs
calab.kenyon.edu links
- Monitor Active Processes (Enter filter like “cgi” to see matching processes)
Languages/Libraries
Tutorials/Reference
- Using PuTTY to log in on from Windows
- Using SSH to log in on from Mac
- Using Notepad++ to edit and transfer files on Windows
- Using TextWrangler to edit and transfer files on Mac
- html & css
- Introduction to HTML
- Information on XMLHttpRequest Object
- AJAX introduction
- AJAX programming hints and suggestions
- POSIX Threads Programming
- XML Parser for C++, Documentation
Links
- Goverment Datasets
- What does this code do?
- Daily WTF – a how-not-to guide for developing software
Schedule
| Date | Topic | Reading / Info | Quiz | Slides | Assignment Due |
|---|---|---|---|---|---|
| 01-16 | Software Construction Project 0: Programming in the Linux environment | Chapter 1 Census Name Information Demo Linux Introduction Emacs Cheat Sheet VIM Check Sheet PuTTY Project 0 | 1._Software_Construction.ppt Introduction-to-Linux.pptx | ||
| 01-18 | Software Metaphors Name Data Demo | Chapter 2 Notepad++HTTP & CSS | Link | 2._Metaphors.ppt Linux Slides | |
| 01-20 | Preparation for coding, Inverted Index Project 1: Shakespeare Index | Chapter 3, Map STL c++ namesdemo.cpp Web Names Lookup Name Data Files – From US Census Data | Link | Chapter 3 | |
| 01-23 | Key Construction Decisions HTML | Chapter 4, HTML Tutorial Project 1 Review | Link | Chapter 4 | Project 0 |
| 01-25 | Design in Construction Make Files | Chapter 5 Make Files, The Make Command | Link | Chapter 5 Make Files | |
| 01-27 | Project 2: Web Shakespeare Web Programming with Ajax | Make Files , The Make Command The Demo code for Name program The English stemmer example. C++ Web ProgrammingAjax Tutorial for Beginners | Link | CGI and AJAX | HTTP & CSS |
| 01-30 | Design in Construction Javascript | Chapter 5 Make Files CGI and AJAX | Chapter 5 | ||
| 02-1 | Project 2 Overview | ||||
| 02-3 | Collaborative Construction Group Formation | Chapter 21 Questioneer | Link | Chapter 21 CGI and AJAX | Project 1 |
| 02-6 | User Interface design Group Project 3: Text Chat or Tick Tack Toe | User Interface Design Basics Principles of User Interface Design User Interface Design Tips, Techniques, and Principles Interface Hall of Shame | User Interface Design | ||
| 02-8 | Group Project 3: Web Chat or Tick Tack Toe User Interface and Program Design Brainstorming | LucidChart | |||
| 02-10 | Project 2 discussion | ||||
| 02-13 | Introduction to GITHub | GIT Video – View for quiz GIT HW | Link | GIT Slides | Project 3 UI design |
| 02-15 | Group Work – Architecture and Protocol Design | Protocol Oveview GIT HW | Project 2 | ||
| 02-17 | Working Classes | Chapter 6 | Link | Chapter 6 | GIT HW Project 3 Arch Design |
| 02-20 | Demonstration of GIT and creating a program that actively updates a list of processes. | ||||
| 02-22 | Demo Project 3 risk mitigation milestone. Group Work – | Teams will explain and demonstrate work done to mitigate risks. | Project 3 Risk Mitigation | ||
| 02-24 | High-Quality Routines | Chapter 7 | Link | 7._High-QualityRoutines.ppt | |
| 02-27 | Defensive Programming | Chapter 8 | Link | 8._DefensiveProgramming.ppt | |
| 03-1 | Demo complete project 3. Group work – Project 4. Brain Storm Features. | Project 3 | |||
| 03-3 | Midterm Exam – Study Guide | Chapters 1-8,21, User Interface Design, GIT | Link | ||
| 03-4 – 03-19 | Spring Break | ||||
| 03-20 | Project 4 Overview, Team meetings | Project 4, Schedule Meeting | |||
| 03-22 | General Issues in Using Variables | Chapter 10 | link | 10.Variables.ppt | |
| 03-24 | The Power of Variable Names | Chapter 11 | link | 11.Variables.ppt | Project 4-1 |
| 03-27 | Team work on project 4-2 and 4-3 | Split into teams in class | Project 4-2 | ||
| 03-29 | Introduction to XML | XML Introduction, MathML, Shakespeare, Bible, Quran | XML Overview | Project 4-3 | |
| 03-31 | Project 5: XML Project | Project 5 – Individual Project | Bible Example | ||
| 04-03 | Project 5: XML Project, continued | Project 5 – Individual Project | Bible Example | ||
| 04-05 | Project 4 presentation | Be prepared to make a 6 minute well prepared presentation with demonstration. All team members should participate. | Project 4-4 Project 5 Proposal | ||
| 04-07 | Project 4 presentation Continue | Be prepared to make a 6 minute well prepared presentation with demonstration. All team members should participate. | |||
| 04-10 | Multi-threaded Coding, timers, Drop downs. | POSIX Threads Programming | |||
| 04-12 | Project 5 Work and information | Tutorial: Parsing XML with JQuery | |||
| 04-14 | Project 5 Work and information | XML Parser for C++, Documentation Demo Software: /home/class/SoftDev/cppXMLAJAX/ | |||
| 04-17 | Project 6: Massive Word Search | Demo Program Demo Software: /home/class/SoftDev/SearchBooks Project 6 | |||
| 04-19 | Project 5 Presentations | Be prepared to demonstrate and talk about your project | Project 5 Complete | ||
| 04-21 | Using Conditionals | Chapter 15 | Chapter 15 | ||
| 04-24 | Controlling Loops | Chapter 16 | Chapter 16 | Project 5 Design | |
| 04-26 | Binary IO | Good Reference: Link /home/class/SoftDev/binaryFiles | RecordFieldsBinaryIO.ppt | Project 6 – Algorithm Design | |
| 04-28 | Unusual Control Structures, Table-Driven Methods | Chapter 17, 18 | Chapter 17 Chapter 18 | Project 6 – Code proving design | |
| 05-1 | Personal Character | Chapter 33 | Chapter 33 | ||
| 05-3 | The Software-Quality Landscape | Chapter 20 | Chapter 20 | Project 6 – Complete System | |
| 05-5 | Developer Testing | Chapter 22 | Chapter 22 | ||
| 05-9 | 6:30-9:30pm | Final Presentation Project 6 | Evaluation Form | Moodle Link for Final Presentation Moodle Link Complete Project |
Software project grading rubric
| Criteria | Excellent | Acceptable | Unacceptable |
|---|---|---|---|
| Documented & Maintainable (The program is well-documented with appropriate names and comments making it easy to understand.) | all naming conventions are followedboth in-line and header comments are included and clearly explain the what the code accomplishes and howwhite space is used well | most naming conventions are followedsome comments are confusing or missingwhite space is used well in most places | poor or no use of naming conventionstoo few or too many comments are used and they are unclear or inaccuratepoor use of white space |
| Adaptable & Reusable (The program is modular, using abstraction well and any limitations are clearly specified.) | all interfaces between objects are clearappropriate utility functions are used and well-documentedmost code can be reused | most object interfaces are clearsome appropriate utility functions are used and documentedsome code can be reused | poor object interface definitionsfew or no utility functionsno code can be reused |
| Robust & Correct (The program provides the correct output for all possible input.) | the program works completely as expectedthe output is displayed to specification for all valid inputthe program responds appropriately for all invalid input | the program works as expected for most inputthere may be minor errors in output formatting for valid inputnot all invalid input is handled reasonably | the program does not produce correct output for even the sample inputthe program fails to handle invalid inputexceptions are not caught |
| Efficient & Elegant (The program uses both time and space on the computer effectively, without losing source code clarity.) | no extra variables or definitions are usedthe code is small, efficient yet still easily understood | extra variables do not make the code harder to understandbrute-force problem solving approach | extra variables are pervasive and confusingthe code is unnecessarily long and patched together |
| 25-20% | 19-11% | 10-0% |
Email: SCMP39100S17@kenyon.edu
Jessie Alperin <alperinj@kenyon.edu>, Ghada Bakbouk <bakboukg@kenyon.edu>, Preston Basting <bastingp@kenyon.edu>, Miku Fukuyama <fukuyamam@kenyon.edu>, gavinhannerc@kenyon.edu, grigullb@kenyon.edu, Elizabeth Iduma <iduma1@kenyon.edu>, khanm@kenyon.edu, murphy1@kenyon.edu, Tess Neau <neaut@kenyon.edu>, ogilviethompsonh@kenyon.edu, Daniel Olivieri <olivierid@kenyon.edu>, riveraj@kenyon.edu, Joseph Schutz <schutzj@kenyon.edu>, seavera@kenyon.edu, solorioc@kenyon.edu, twitchelln@kenyon.edu, vances@kenyon.edu, John Wilhelm <wilhelmj@kenyon.edu>, Yanqi Xu <xuy@kenyon.edu>

