Syllabus
Table of contents
- Instructors and Class Meetings
- Topics and Exams
- Assignments
- Examinations
- Grading
- Textbook
- Lecture and Discussion Sections
- Acceptable Collaboration/Academic Integrity
Please sign up for Campuswire using this verification code: 9994
Instructors and Class Meetings
See also: staff, weekly schedule.
Instructor: Carey Nachenberg
Office: Engineering VI 299
Class times: M/W 4-6pm
Course Location: Dodd Hall 147
Instructor Office Hours: Mon/Wed 2:30-3:30pm @ Eng VI 472
Alternate Instructor Office Hours: by appointment @ Eng VI 299
TA | Section | Discussion | Office Hours | |
---|---|---|---|---|
Matthew Wang | 1A | Fri 12 PM - 1:50 PM | Thu 9:30-11:30, Boelter 3256-S |
matt@matthewwang.me |
Ruining Ding | 1B | Fri 2 PM - 3:50 PM | Mon 10:30-11:30 and Tues 12:30-1:30, Boelter 3256-S | rding1507@g.ucla.edu |
Ashwin Ranade | 1C | Fri 2 PM - 3:50 PM | Tues 2:00 PM - 4:00 PM, Boelter 3256-S | ashwin.ranade@cs.ucla.edu |
Siddarth Krishnamoorthy | 1D | Fri 4 PM - 5:50 PM | Wed 10:30 - 12:30, Boelter 3256-S | siddarthk@cs.ucla.edu |
Topics and Exams
See also: course calendar.
Toggle Course Topics and Exams
Week 1: 4/3 and 4/5
- Course Introduction
- History, course methodology, compilers/interpreters/linkers, intro to functional programming
- Functional Programming, part 1
- Haskell Intro, Haskell data types, list deep-dive, comprehensions
Week 2: 4/10 and 4/12
- Functional Programming, part 2
- Haskell functions, local bindings, control flow, pattern matching, 1st-class and higher order functions
- Functional Programming, part 3
- Map/filter/reduce, lambdas/closures, currying, partial application, algebraic data types, immutable data structures
Week 3: 4/17 and 4/19
- Python, part 1
- The Python shell, program execution, functions,types/variables, looping, classes/inheritance, objects and references
- Python, part 2
- Garbage collection, duck typing exception handling, modules, functional influences, composite types (strings, lists, tuples, dictionaries, sets), parameter passing
Week 4: 4/24 and 4/26
- Data palooza, part 1
- Data: Variables vs values, types, typing strategies (static vs. dynamic)
- Data palooza, part 2
- Typing strategies, cont. (weak vs. strong), supertypes and subtypes, casting and conversion, scoping strategies (lexical vs. dynamic)
Week 5: 5/1, 5/3 and 5/4
- Data palooza, part 3
- Binding semantics (value, reference, object reference, name/need), memory safety (garbage collection, object destruction/finalization), mutability
- Function palooza, part 1
- Parameter passing (pass-by-…, variadics, named parameters, etc)
- Midterm exam, 6-8PM
Week 6: 5/8 and 5/10
- Function palooza, part 2
- Returning values and error handling (error objects, optionals, assertions/invariants, exceptions, panics)
- Function palooza, part 3
- [Guest host: Robert Griesemer, co-inventor of Go]
- First-class functions (lambdas/closures across languages), polymorphism (subtype, ad hoc, parametric - generics vs. templates)
Week 7: 5/15 and 5/17
- OOP palooza, part 1
- OOP intro, OOP history, encapsulation, classes (class fields/methods, construction ordering)
- OOP palooza, part 2
- Classes cont. (this and self, properties, accessors/mutators), inheritance approaches (interface, subclassing)
Week 8: 5/22 and 5/24
- OOP palooza, part 3
- Inheritance approaches cont. (implementation, prototypal), inheritance topics (construction ordering, method overriding, abstract classes/methods)
- OOP palooza, part 4
- Inheritance topics cont. (inheritance and typing), subtype polymorphism, dynamic dispatch, design patterns, OOP design patterns (SOLID)
Week 9: 5/29 and 5/31
- Memorial day Holiday
- Control palooza, part 1
- Expression evaluation (associativity, order of evaluation), short circuiting, control statements (conditionals, iteration), iterators (objects, generators, via 1st-class functions)
Week 10: 6/5 and 6/7
- Control palooza, part 2
- Concurrency (multi-threading, event loop), multithreading (fork-join), (events, chaining background operations - callbacks, promises, async/await)
- Logical programming
- History, language overview, statements (facts, rules, goals), resolution, unification
Finals Week
- 6/15 Final exam on Thursday, June 15th, from 8am-11am
Assignments
Assignments will take the form of homework and larger class projects. Homework will be graded on effort only. By “effort” we mean that you have attempted/solved all of the problems, provided solutions or partial solutions for each, and have documented where you got stuck on problems that you could not figure out. Class projects will be fully graded for correctness. All assignments will be due at 11:59pm on their due date. Homework and assignments that are turned in late will be penalized at the rate of 5% per hour past the deadline.
Project and homework extensions will ONLY be granted for health issues and family emergencies.
Assignment Schedule
See also: course calendar.
Toggle Assignment Schedule
Week 1:
- 4/5 Homework 1 posted
Week 2:
- 4/12 Homework 1 due at 11:59PM
- 4/12 Homework 2 posted
Week 3:
- 4/18 Project 1 posted (due 5/7)
- 4/19 Homework 2 due at 11:59PM
- 4/19 Homework 3 posted
Week 4:
- 4/26 Homework 3 due at 11:59PM
- 4/26 Homework 4 posted (on pt. 1/2 of data palooza; which is on midterm)
Week 5:
- 5/3 Homework 4 due at 11:59PM
- 5/3 Homework 5 posted
- 5/4 Midterm exam (covers all material discussed through the end of Week 4)
- 5/7 Project 1 due
- 5/7 Project 2 posted (due 5/21)
Week 6:
- 5/10 Homework 5 due at 11:59PM
- 5/10 Homework 6 posted
Week 7:
- 5/17 Homework 6 due at 11:59PM
- 5/17 Homework 7 posted
- 5/21 Project 2 due Sunday
- 5/21 Project #3 assigned Sunday (due 6/4)
Week 8:
- 5/24 Homework 7 due at 11:59PM
- 5/24 Homework 8 posted
Week 9:
- 5/31 Homework 8 due at 11:59PM
- 5/31 Homework 9 posted
Week 10:
- 6/9 Homework 9 due
Examinations
The midterm will cover material from the first four weeks of lectures and discussion sections. The final examination will cover material from the entire course. Missing the final for any reason will result in a final exam score of zero. If you miss the midterm due to a health reason or family emergency, your final exam score will be used to replace your missing score on the midterm. Missing the midterm for any other reason will result in a grade of zero on the midterm.
Note that the midterm is on 5/4 from 6pm-8pm, NOT DURING CLASS! IT’S ON THURSDAY NIGHT! The midterm will cover all material discussed through the end of Week 4.
Grading
Your grade in the course will be determined from your total score, although a final exam score below 40 may subject you to a failing grade regardless of your total score. This course will be “curved” as follows:
- 90% or higher always earns an A- or higher, 80% or higher always earns a B- or higher, etc. - this is regardless of the class median
- If the class’s median point total is lower than 80%, then the thresholds for earning each grade will be normalized downward as necessary
The total score is determined from the graded materials as follows:
Item | % of Grade |
---|---|
Project # 1 | 10% (graded on correctness) |
Project # 2 | 10% (graded on correctness) |
Project # 3 | 10% (graded on correctness) |
Homework | 10% (graded on effort only) |
Midterm | 25% |
Final Exam | 35% |
Textbook
There is no required textbook for this class (I couldn’t find any that I liked). The class powerpoint slides will serve as our canonical source.
Lecture and Discussion Sections
You will be responsible for all material covered in both lecture and discussion sections. There will be new material covered in discussion sections, not just review of class material. You are STRONGLY encouraged to attend discussion sections.
Acceptable Collaboration/Academic Integrity
Homework: Since your homework is graded only based on effort, you may collaborate in any reasonable way you like that best enables you to learn the course material (simply copying solutions would not be a reasonable way to collaborate). Use the homework as means to prepare for exams and solidify your understanding.
Projects: You may discuss general approaches/ideas, but refrain from sharing source code or pseudocode. Also, it is not acceptable to debug a classmate’s code for them or identify problems in their solution.
Tools: So long as you add a citation to your project solutions, you may leverage limited amounts of code generated by tools such as Copilot, ChatGPT or Bing in your project solutions (up to 20% of your solution). You may also incorporate simple functions (e.g., ~10 lines of code) found on sites like StackOverflow, with appropriate citations. When possible, you should include both the prompt and the response. So, for example, if you used ChatGPT to generate a ten-line helper function called foo, you MUST include the following comments in your code:
# The following code was generated by ChatGPT, with some modifications that I made
# prompt: give me a foo that ...
# response: def bar(...)
def foo(...)
…
# End of ChatGPT code