Syllabus, CCS Computing 1L, Fall 2019

Basic Facts

About the Course

This course is designed to give you an opportunity to explore a software development project, with the support of a community that is also working on their own projects.

There is a great deal of freedom, including:

  • The freedom to choose almost any goal
  • The freedom to choose any programming language (provided the tools are freely available so that others can build on your work.)
  • The freedom to work alone, in a pair, or in a small team

Each project proposal is subject to the approval of the instructor, but I intend to be very open to almost anything you want to do that can feasible be done within a minimal number of rules and constraints.

Here are the rules / constraints imposed on your projects, which also constitute the requirements of the course:

  • Software Development: Your project must be a software development project, or at the very least have a signficant software development component.

  • Specific goal: You should must have a specific goal to build something useful.

  • Specific End User: “Useful” implies a specific kind of end user in mind: you must be clear about who this end user is, and that end user must be “plausible”.

And, as discussed below, the set of such end users must include someone other than just you.

There are also three expectations of you as you work on your project:

  • You are expected to set weekly goals, make incremental weekly progress.

  • You are expected to report weekly on your goals and progress both through online tools, and with weekly oral status reports in class, and periodic demos.

  • Finally, you are expected to contribute to the community by

    • attending to the status reports of other class participants,
    • periodically trying out and testing their software when invited to do so by the instructor or your classmates
    • providing appropriate, helpful and respectful feedback on their efforts.

Discussion of the rules/constraints/expectations

Why do we insist on a software development project?

This course has at least two purposes in the curriculum:

  • To provide an opportunity for your to explore your creativity and prepare something that you can present at your mid-residency review
  • To provide an opportunity to meet or exceed the core learning objectives of CS48 and CS56 from the College of Engineering CS curriculum. Those courses stress software development and software engineering practices.

Computer Science is indeed far broader than just software development, and we will encourage you to explore the mathematical aspects of CS during your career as a CCS Computing Student and beyond. However, the name of this course is “Programming Lab”, and the goal of this course (spread over two quarters, Fall and Winter), is to give you an opportunity for creative exploring in the context of software development.

Specific Goal, Something Useful, Specific End User

We require you to have a specific goal for your project. That goal should be to deliver something useful to a specific end user that is not you.

It is not sufficient to have a vague learning goal such as “I want to learn Haskell” or “I want to learn how to use TensorFlow (a machine learning framework).”.

It’s fine if “learning Haskell” or “learning TensorFlow” is a secondary goal of your project.

But instead of “learn Haskell”, or “learn TensorFlow” your goal should be something like:

  • “I want to build a compiler for a subset of Python, and build it in Haskell”.
  • “I want to build a system that can translate speech from Air Traffic Recordings into text using TensorFlow”

Secondly, you must have an “end user” in mind for your project. One of the learning goals of the course is to learn how to understand what a user of a piece of software needs, and how to build a piece of software that someone else can use.

When Bruce Tiffney, long-time past Dean of CCS and current interim Dean of CCS discusses the CCS mission, one of his main themes is both the creation and dissemniation of creative activity. In the context of software development, this means

Therefore it is important to learn how to build software that can be used by at least one person in the universe other than you. This requires you to have, for example, a README.md file in your project that provides:

  • The pre-requisite software that must be installed to be able to build your system
  • How to compile/build the system (as appropriate to the programming environment)
  • How to run it and get something useful out of it

Weekly incremental progress

Your goal can be ambitious, and might be one that you cannot complete in the space of a single ten-week quarter. It might not even be acheivable in the time-frame of both Fall and Winter quarters of 1L.

But it should be specific enough that each week, you can show some tangible progress towards the goal; that is something that would be of value to the end user of the project.

You are expected to set weekly goals, make incremental weekly progress.

Reporting on your progress

You are expected to report on your progress through

  • Online tools, more specifically, the CCS-1L-F19 github organization
  • Weekly Oral Status Reports
  • Periodic Demos

More detail on the format of the weekly reporting will be provided as the course progresses; I’m not putting too much detail of that in the syllabus, because we may want to experiment with different ways of tracking our progress.

I will provide more specifics on the expectations on the course web site, including any ways in which those may evolve over the course of the quarter.

Contibuting to the Community

During class meetings, I’ll ask that you mostly keep your laptops closed, except when you are referring to them to deliver your status report, or to look up some information that may be helpful to the person presenting.

The Thursday class meeting time is a time to offer updates, and get updates from others. We may set up community working hours as well, but the Thursday slot is not the time for that.

When offering feedback to fellow classmates, I’ll ask that you be helpful and respectful.

A widely publicized study by Google (see New York Times article found that the most important factor for high-performing teams was a high degree of what they called “psychological safety”. I would like to ask that each of you read that article, and try to identify and embody the traits that promote positive outcomes both in terms of quality work, and how individuals feel about being a part of that community.

I will also ask that you give one another helpful but candid feedback on the usability of one anothers systems, and the clarity and readability of one another’s code.

Final Course Units

The formal course meeting for this course is only two hours per week, accordingly the “nominal” units are two. We hope, however, that you will put in the same amount of effort that you would apply to a four unit course, i.e. around 8-16 hours per week outside of class meeting times.

If you set weekly goals, and make weekly progress, you can expect to earn four units for the course. If your progress slips

Accommodations for disabilities

Students with disabilities may request academic accommodations for exams online through the UCSB Disabled Students Program at http://dsp.sa.ucsb.edu/. Please make your requests for exam accommodations through the online system as early in the quarter as possible to ensure proper arrangement.

Managing stress

Personal concerns such as stress, anxiety, relationships, depression, cultural differences, can interfere with the ability of students to succeed and thrive. For helpful resources, please contact UCSB Counseling & Psychological Services (CAPS) at 805-893-4411 or visit http://counseling.sa.ucsb.edu/ .

Responsible scholarship

Honesty and integrity in all academic work is essential for a valuable educational experience. The Office of Judicial Affairs has policies, tips, and resources for proper citation use, recognizing actions considered to be cheating or other forms of academic theft, and students’ responsibilities, available on their website at: http://judicialaffairs.sa.ucsb.edu. Students are responsible for educating themselves on the policies and to abide by them.

Furthermore, for general academic support, students are encouraged to visit Campus Learning Assistance Services (CLAS) early and often. CLAS offers instructional groups, drop-in tutoring, writing and ESL services, skills workshops and one-on-one consultations. CLAS is located on the third floor of the Student Resource Building, or visit http://clas.sa.ucsb.edu

Standard Disclaimer

This syllabus is as accurate as possible, but is subject to change at the instructor’s discretion, within the bounds of UC policy.

(end of syllabus)