Syllabus

Table of contents

  1. Instructors and Class Meetings
  2. Topics and Exams
  3. Assignments
    1. Assignment Schedule
  4. Examinations
  5. Grading
  6. Textbook
  7. Lecture and Discussion Sections
  8. 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 Email
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