CS2340 Program Design Paradigms
Instructor
- Christopher Simpkins, simpkins@cc.gatech.edu
IMPORTANT:
- You must email me from your official Georgia Tech email address, that is, the email address listed for you in the official course roster in Canvas. I use your official email address to create email filters.
- Include context in your email – which class you’re in, etc.
- Include all of your IDs, e.g., 9-digit GTID, Buzzport login ID, official name. Every system at GT uses a different ID and if I can’t easily look up relevant information about your request because you didn’t give me enough identifying information, I may ignore your email.
- Please understand that professors are slow or unresponsive to email because we are drowning in email. If I don’t respond within 48 hours just send me a gentle reminder.
- Do not send me messages in Canvas.
Course Description
CS2340 takes students who know an object-oriented language and basic object-oriented programming principles, and builds on that knowledge with more advanced design principles and techniques.
Learning Outcomes
- (Movement - Synthesis) Improve existing programming skills by developing much larger and more complex programs than in previous classes.
- (Accomplishment - Synthesis) Given a requirements list, work with a small team to complete a semester-long software development project that realizes those requirements. The project will require several thousand lines of code in dozens of source files, third-party libraries, and frameworks as used in professional software development.
- (Experience - Analysis) Reflect on the difficulties of team membership and the challenges of developing software in a team environment.
- (Competency - Application) Demonstrate the ability to use a version control system to manage team code.
- (Competency - Application) Demonstrate the ability to use standard tools to help with large-scale projects such as automated build scripts, automated code checking and professional development environments.
- (Movement - Synthesis) Improve object-oriented development skills by learning to think in objects when faced with a design problem. This is evidenced by minimal use of class methods and data and proper use of abstraction, information hiding and encapsulation.
- (Competency - Synthesis) Given a specification of requirements, analyze those requirements to create a domain model using appropriate candidate objects representing the problem domain.
- (Competency - Synthesis) Given a domain model representing a customer problem, design an object-oriented solution and document that solution using the Unified Modeling Language (UML).
- (Competency - Analysis) Apply standard design principles and patterns to a problem specification. Analyze a proposed design to determine its compliance with the standard principles (like open-closed, dependency inversion, law of Demeter) and make corrections as necessary.
- (Achievement - Synthesis) Given a problem specification, design, document and implement a software solution as a development team.
- (Competency - Analysis) Demonstrate the ability to derive whitebox and blackbox tests from code or specifications. Document those tests in a basic test plan and implement those tests using an automated test framework.
Requirements
Grading
- Homework: 20%
- Exams: 20%
- Project: 60%
Grade Cutoffs: A: 90, B: 80, C: 70, D: 60, No rounding
Assignments
Two or three in-class written exams, 2-5 homework assignments, and a semester-long project. Your last homework assignment may be due the week preceding final exams. The final project deliverable will be due at the beginning of finals week. Assignments must be turned in before the date and time indicated as the assignment’s due date.
Class Participation
In-class exercises cannot be made up if you do not attend the class. It’s a violation of the Academic Honor Code to submit work or sign in for other students.
Academic Integrity and Collaboration
We expect academic honor and integrity from students. Please study and follow the academic honor code of Georgia Tech: http://www.honor.gatech.edu/content/2/the-honor-code. You may collaborate on homework assignments, but your submissions must be your own. You may not collaborate on in-class programming exercises or exams.
Due Dates, Late Work, and Missed Work
-
Homework assignments are due on the day and time listed on Canvas. Multiple resubmissions are allowed, so submit early and often so you aren’t in a rush on the due date. Absolutely no late submissions will be accepted. There is no grace period, so submit your assignments well before the deadline.
-
Make-up exams are held at 11:00 on the Tuesday following the exam, unless otherwise announced. If the make-up exam room is not announced before the make-up day, report to the TA lab. Make-up exams are only given to students with special circumstances such as serious illness, hospitalization, death in the family, judicial procedures, military service, or official school functions. Provide us with a copy of your letter from the registrar in advance for official school functions. For other excused absences you must provide documentation to the Dean of Students’s office (in the “flag” building near the ice cream cone statue) within one week of your return from illness/activity. The Dean of Students’s office will verify your excuse and send your instructors a notice. The Dean of Student’s office will also send instructors a request for flexibility in cases which don’t fall within the official excused absences listed above but warrant consideration. An any case, if you believe you should be excused from a scheduled exam and don’t have an excuse from the Registrar, see someone in the Dean of Students’s office. Excuse from coursework or make-up opportunities are granted at the sole discretion of your instructor.
Regrades
To contest any grade you must submit an official regrade form to the Head TA within one week of the assignment’s original return date. The original return date is the date the exam was first made available for students to pick up or the grade was posted online in the case of homework assignments and programming exercises. Note that a regrade means just that – we will regrade your assignment from scratch, which means you may end up with a lower score after the regrade.
Course Outline
This outline applies to Fall and Spring semesters. Summer schedule is compressed into 11 instructional weeks.
- Weeks 1 - 2: Scala basics
- Weeks 3 - 4: Software engineering
- Weeks 5 - 8: Object-oriented design
- Weeks 9 - 10: Advanced Scala
- Weeks 12 - 15: Functional programming
Prerequisites
At least one of:
- Undergraduate Semester level CS 1331 Minimum Grade of C
NOTE: we recommend that you take CS1332 prior to taking CS2340. Top graduates of CS1331 will have no trouble with CS2340, and C-level students from CS1331 are more than capable of passing CS2340, but you will get more out of CS2340 if you have more than (the equivalent of) two semesters of programming experience.
Course Materials
All of these books are available as DRM-free PDFs from the web sites linked below. The required books are $30 and $35 and are often discounted.
-
Required books. By “required” we mean that you will have a hard time keeping up with the course if you don’t have these books.
- Programming in Scala, 3rd Edition, by Martin Odersky, Lex Spoon and Bill Venners, https://www.artima.com/shop/programming_in_scala_3ed
- Essential Scala, by Noel Welsh and Dave Gurnell, https://underscore.io/books/essential-scala/ (Free)
- Functional Programming in Scala, by Paul Chiusano and Rúnar Bjarnason, https://www.manning.com/books/functional-programming-in-scala
-
Recommended books. The first three books provide essential course material and are highly recommended for this course and your future career, but we will provide all of the material on agile development design you need for this course.
- Essential Scrum: A Practical Guide to the Most Popular Agile Process, by Kenneth Rubin, http://www.informit.com/store/essential-scrum-a-practical-guide-to-the-most-popular-9780137043293
- Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (the “Gang of Four”), http://www.informit.com/store/design-patterns-elements-of-reusable-object-oriented-9780201633610
- Domain-Driven Design: Tackling Complexity in the Heart of Software, by Eric Evans http://www.informit.com/store/domain-driven-design-tackling-complexity-in-the-heart-9780321125217
- Designing Software Architectures: A Practical Approach, by Humberto Cervantes and Rick Kazman, http://www.informit.com/store/designing-software-architectures-a-practical-approach-9780134390789
- Clean Architecture, by Robert C. Martin, http://www.informit.com/store/clean-architecture-a-craftsmans-guide-to-software-structure-9780134494166
- Domain-Driven Design Distilled, by Vaughn Vernon, http://www.informit.com/store/domain-driven-design-distilled-9780134434421. This book is much shorter and less expensive than Eric Evans book, but you may find it too terse to learn DDD for the first time and it doesn’t cover as much as Evans’s book.
- Programming Scala, 2ed, by Dean Wampler and Alex Payne, http://shop.oreilly.com/product/0636920033073.do
- Scala for the Impatient, 2nd Edition, by Cay Horstmann, http://www.informit.com/store/scala-for-the-impatient-9780134540566
-
Additional resources for further study:
- Designing Fast Data Application Architectures, by Sean Glover, Gerard Maas, Stavros Kontopoulous, https://info.lightbend.com/collateral-designing-fast-data-app-architectures-register.html
- Fast Data Architectures for Streaming Applications, by Dean Wampler, https://info.lightbend.com/COLL-20XX-Fast-Data-Architectures-for-Streaming-Apps_LP.html
- Serving Machine Learning Models, by Boris Lublinsky, https://info.lightbend.com/ebook-serving-machine-learning-models-register.html
- Scala with Cats, by Noel Welsh and Dave Gurnell, https://underscore.io/books/scala-with-cats/
Non-Discrimination
The Institute does not discriminate against individuals on the basis of race, color, religion, sex, national origin, age, disability, sexual orientation, gender identity, or veteran status in the administration of admissions policies, educational policies, employment policies, or any other Institute governed programs and activities. The Institute’s equal opportunity and non-discrimination policy applies to every member of the Institute community.
For more details see http://www.policylibrary.gatech.edu/policy-nondiscrimination-and-affirmative-action