CSE-30332 Programming Paradigms

This Is Not The Course Website You Are Looking For

This course website is from a previous semester. If you are currently in the class, please make sure you are viewing the latest course website instead of this old one.

  • Lecture: M/W/F - 2:00-2:50PM (DeBartolo Hall 138)
  • Instructor: Joanna C. S. Santos
    • Office: 382 Fitzpatrick Hall
    • Office Hours: Check the Google Calendar link for the most up-to-date information.
    • We will be using Piazza for class discussion. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza.
  • Teaching Assistants (TAs):

      TAs (Graders)

      • Amrit Poudel - apoudel@nd.edu
      • Pedro Alarcon Granadeno - palarcon@nd.edu
      • Luke Siela - lsiela@nd.edu

      TAs (For Office Hours)

      • Vincent Goyette - vgoyette@nd.edu
      • Emily Hieatt - ehieatt@nd.edu
      • Rafael Mendizabal - rmendiza@nd.edu
      • Gehrig Chao - gchao2@nd.edu

      See this Google Calendar link for most up-to-date information on the office hours of the TAs and the instructor.

  • Dropbox HW Submission Directory: /escnfs/courses/fa21-cse-30332.01/dropbox/your-net-id
  • GitHub: https://github.com/joannacss/cse30332-programming-paradigms
Course Objectives:

Upon successful completion of this course, you will be able to:

  • Comprehend the differences and commonalities across functional, imperative, declarative, and object-oriented programming paradigms and their principles.
  • Develop a greater understanding of the issues involved in programming language design and implementation, such as static vs dynamic typing, data manipulation, strong vs weak typing, passing by value vs reference, callback, currying, and syntactic sugar.
  • Develop an understanding of how different paradigms manifest in different architectures, such as client-server architecture, RESTful web services, and multithreaded architecture and languages.
  • Implement several programs in languages other than the one emphasized in the core curriculum (Java/Python/Clojure/JavaScript/CoffeeScript/Ruby).
  • Develop an understanding of the compilation and interpretation processes.
  • Be able to compose abstractions for each studied programming paradigm and critically evaluate and recommend the most appropriate paradigm and language for a new problem.
ABET Outcomes
Analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions. Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline. Communicate effectively in a variety of professional contexts. Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline.
Text Books

All necessary materials will be provided in the lecture notes, code samples, and through weekly readings. However, some course materials have been taken from the following book, which students may choose to purchase:

  • Toal, R., Rivera, Rachel, Schneider, Alexander, & Choe, Eileen. (2017). Programming language explorations. CRC Press. eBook Online

This is the approximate schedule for the course; however, the schedule will be adapted if needed. Slide decks are linked in advance but will be modified up until the lecture.

Week # Monday Wednesday Friday
Week 1 Aug 23
Introduction to Paradigms
Slides Activity #1 Due: 08/23 @ 3PM
Aug 25
JavaScript-1 (Overview)
Slides Activity #2 Due: 08/27 @ 2:00PM 11:59PM Reading
Aug 27
JavaScript-2 (Functions)
Slides
Week 2 Aug 30
JavaScript-3 (Map,Filter,Reduce)
Slides Activity #3 Due: 09/01 @ 2PM HW1 Due: 09/03 @ 11:59PM
Sep 01
JavaScript-4 (Objects)
Slides
Sep 03
JavaScript-5 (OOP Review & Closures)
Slides Activity #4 Due: 09/06 @ 2PM HW2 Due: 09/10 @ 11:59PM
Week 3 Sep 06
JavaScript-6 (Concept Review)
Slides Activity #5 Due: 09/08 @ 2PM
Sep 08
JavaScript-7 Data Structures, Promises, Q&A
Slides
Sep 10
CoffeeScript-1 (Overview)
Slides HW3 Due: 09/17 @ 11:59PM
Week 4 Sep 13
CoffeeScript-2 (Extras)
Slides Activity #6 Due: 09/15 @ 2PM
Sep 15
Unit Tests with Mocha
Slides
Sep 17
Front-End Development-1
Slides HW4 Due: 09/25 @ 11:59PM
Week 5 Sep 20
Front-End Development-2
Slides
Sep 22
EXAM 1
Sep 24
Front-End Development-3 & Exam 1 Discussion
Slides Activity #7 Due: 09/27 @ 2PM HW5 Due: 10/01 @ 11:59PM
Week 6 Sep 27
Python-1 (Overview)
Slides Activity #8 Due: 09/29 @ 2PM
Sep 29
Python-2 (Functions, Scope, OOP-1)
Slides Activity #9 Due: 10/01 @ 2PM
Oct 01
Python-3 (OOP-2)
Slides HW6 Due: 10/08 @ 11:59PM
Week 7 Oct 04
Python-4 (TkInter - Part 1)
Slides Activity #10 Due: 10/06 @ 2PM
Oct 06
Python-5 (TkInter - Part 2)
Slides
Oct 08
Python-6 (Developing a Game)
Slides HW7 Due: 10/15 @ 11:59PM
Week 8 Oct 11
Python-7 (Django - Part 1)
Slides
Oct 13
Python-8 (Django - Part 2)
Slides Activity #11 Due: 10/15 @ 2PM
Oct 15
Python-9 (REST & Django)
No HW today, enjoy the break
Slides
Week 9 Oct 18
No Class - Mid-Term break
Oct 20
No Class - Mid-Term break
Oct 22
No Class - Mid-Term break
Week 10 Oct 25
Ruby-1 (Basics)
Project Release
Slides Activity #12 Due: 10/27 @ 2PM
Oct 27
Ruby-2 (Symbols, OOP, Scopes)
Slides Activity #13 Due: 10/29 @ 2PM
Oct 29
Java-1 (Basics & OOP-1)
Slides HW8 Due: 11/05 @ 11:59PM
Week 11 Nov 01
Java-2 (OOP-2 & Packages)
Slides
Nov 03
Java-3 (Packages, Data Structures)
Slides Activity #14 Due: 11/05 @ 2PM
Nov 05
Java-4 (Generics & Special Methods)
Slides HW9 Due: 11/12 @ 11:59PM
Week 12 Nov 08
Java-5 (Exception Handling, Multithreading-1)
Slides
Nov 10
Java-6 (Multithreading-2)
Slides
Nov 12
Java-7 (Multithreading-3)
Slides HW10 Due: 11/19 @ 11:59PM11/20 @ 11:59AM
Week 13 Nov 15
EXAM 2
Checklist
Nov 17
Clojure-1 (Functional Prog. & Basics)
Slides
Nov 19
Clojure-2 (Functions & Collections)
Slides
Week 14 Nov 22
Clojure-3 (Persistent Dt Structures & Transient)
Project Phase 1 Due (11:59PM)
Slides HW11 Due: 12/01 @ 11:59PM
Nov 24
No Class - Thanksgiving Holiday
Nov 26
No Class - Thanksgiving Holiday
Week 15 Nov 29
In-class Hackacthon-1
Dec 01
In-class Hackacthon-2
Dec 03
In-class Hackacthon-3
Week 16 Dec 06
Course Wrap Up + Q&A
Project Phase 2 Due (11:59PM)
Slides
Dec 10
FINAL EXAM
4:15-6:15pm in 138 DeBartolo Hall
Checklist
Coursework:

This class includes the following graded components:

  • Exams 1 and 2 covering topics from each unit
  • Final Exam covering all topics covered in this course
  • Weekly Homeworks
  • Course Project
  • In-Class Participation & Attendance (which is graded based on smaller class activities that involve answering a few questions related with topics covered in class or readings as well as formal attendance)

Your final course grade is computed according to the following breakdown:

Component Points
Exams 40% (10% Exam 1 // 10% Exam 2 // 20% Final Exam)
Project 25%
Homeworks 30%
In-Class Participation & Attendance 5%
Grading:

Grades are assigned as follows:

Grade Points Grade Points
Grade Points A >=93 A- >=90 and <93
B+ >=87 and <90 B >=83 and <87 B- >=80 and <83
C+ >=77 and <80 C >=73 and <77 C- >=70 and <73
D >=65 and <70 F <65

Any re-grade request shall be made no more than 5 days after the grades are posted (unless specified otherwise in class, via piazza, or on feedback notes).

In-Class Activities & Attendance:
Students are expected to come to class and actively participate on discussion, asking questions as well as helping peers when appropriate (see Honor Code Below). Many classes will include short hands-on activities/exercises that must be submitted during class. These may be used as points towards attendance.
Late Policy:

Deadlines are strictly enforced. [NEW as of October 11th, 2021] The class will now start accepting late submissions. However, there is a penalty of 10% for submissions up to 24hrs past the deadline. Submissions made more than 24hrs past the deadline are not accepted (i.e., they will be assigned 0). Late submissions are accepted if (a) the student make prior arrangments with the instructor, or (b) the student has a university-approved reason (and notified the instructor in advance). Please plan ahead your assignments. In case of justifiable exceptional circunstances (ex: sickness, interviews, etc -- as listed in Section 3.1 of the Undergraduate Academic Code), please communicate with the instructor as soon as possible (and prior the deadline if humanly feasible) to make arrangements. Please fill in this ABSENCE REQUEST FORM if you are going to miss a class or request permission to submit an assignment late.

HOWEVER...
Life Happens. We all lead densely-layered lives; therefore, one of my core values is leading with grace. As a result, I institute a “Life Clause:” should you need it, you may invoke the “Life Clause” on ONE TWO assignments, and get 3-day extension: no explanation required. To invoke a life clause, please send a message to the instructor via Piazza.

[NEW as of October 11th, 2021] The life-clause counter has been "reset". Effectively, this means students can invoke the life clause up to 2 times.

To maintain fairness, the instructor DOES NOT grant extensions on a case-by-case basis (i.e., the rules laid out in here applies to all students -- without exceptions).

Honor Code:
Students are expected to abide by the principles of intellectual honesty and academic integrity.

It is cheating to copy, to allow another person to copy, all or part of an exam or an assignment, or to fake program output. It is also a violation of the Undergraduate Academic Code of Honor to observe and then fail to report academic dishonesty. You are responsible for the security and integrity of your own work.

For the individual assignments in this class, you may discuss with other students and consult printed and online resources. You may quote from books and online sources as long as you cite them properly. However, you may not look at another student's solution, and you may not copy any significant portions of other's solutions.

For the group project, the same rules applies. The main difference is that you are allowed -- and expected -- to discuss specifics of the solution for the project with your team members (i.e., students in your group). However, the group may not copy a solution from elsewhere (i.e., another team, book, tutorial, etc). Any honor code violation to the project will be reported as a major violation.

The following table summarizes how you may work with other students and use print/online sources:

Resources Solutions
Consulting Allowed Not Allowed
Copying ⚠️ Cite Not Allowed

See the CSE Guide to the Honor Code for definitions of the above terms.

The "Pencils Down" Rule: You may communicate about homework with your classmates at a high-level, give general advice, and chat about common problems. You may not communicate specific knowledge such as problem solutions or steps or planning documents. A good litmus test is if you would need to write it down to communicate or remember something, it is off limits. Seek homework help from the Professor or the TAs instead.

Per stated in Section 2.4.1 in the Undergraduate Academic Code of Honor "Faculty and anyone else responsible for teaching or assisting in a course will not tolerate academic dishonesty.". Therefore, if an instructor sees behavior that is academically dishonest, that professor is required to file either an Honor Code Violation Report (HCVR) or a formal report to the College of Engineering Honesty Committee.

This course will be recorded using Panopto. This system allows us to automatically record and distribute lectures in a secure environment. You can watch these recordings anytime, anywhere, on any device. In Sakai, look for the "Panopto" tool on the left hand side of the course. These recordings are jointly copyrighted by the University of Notre Dame and your instructor. Posting them to other websites (including YouTube, Facebook, SnapChat, etc.) or elsewhere without express, written permission may result in disciplinary action and possible civil prosecution.