Topics
  - 
    Agile—A Software Development Methodology
   
 
  
  - 
    Agile: Standups—A timeboxed standing meeting to help team make progress
   
 
  
  - 
    Agile: Team Norms—Groundrules set by a team that promote effective and harmonious teamwork and productivty
   
 
  
  - 
    Agile: User Stories—As a (who?) I can (what?) so that (why?)
   
 
  
  - 
    Ant—Apache Ant, a build tool for Java (similar to Make/Makefiles)
   
 
  
  - 
    Antipatterns: —Things to avoid in your code
   
 
  
  - 
    Antipatterns: inheritance—When NOT to use inheritance
   
 
  
  - 
    APIs: —Application Programming Intefaces
   
 
  
  - 
    APIs: Free—Some APIs that offer free access
   
 
  
  - 
    Applications Programming—A compendium of knowledge and skills applications programmers (software developers) need
   
 
  
  - 
    Bug Reports—The typical format: STR, observed, desired
   
 
  
  - 
    Changelog—A Software Development Methodology
   
 
  
  - 
    CI: —Continuous Integration--automatically testing after every commit
   
 
  
  - 
    Code Review—A team activity to improve the code base and the product
   
 
  
  - 
    Code Smells—Common problems that arise in code
   
 
  
  - 
    Code Style—formatting, indenting, names, and much more
   
 
  
  - 
    Code Style: astyle—automatic code indenting tool available on CSIL
   
 
  
  - 
    Course Policies—Explanations of why certain instructors do things they way they do them.
   
 
  
  - 
    Course Policies: Answer Keys—Why do you not provide answer keys for all your old exams?
   
 
  
  - 
    CSIL—Computer Science Instructional Lab machines
   
 
  
  - 
    CSIL: browser from command line—How to open a browser from the command line
   
 
  
  - 
    CSIL: disk quota and file quota issues—How to diagnose and fix
   
 
  
  - 
    CSIL: git configuration—Configuring your CSIL account to use git
   
 
  
  - 
    CSIL: Remote Host Id Changed—The scary REMOTE HOST ID CHANGED message with mention of SOMETHING NASTY
   
 
  
  - 
    CSIL: ssh port forwarding—How to access webapps running on CSIL from your local machine
   
 
  
  - 
    CSIL: via ssh from Linux—Connecting via ssh from the command line
   
 
  
  - 
    CSIL: Via MacOS—Accessing CSIL from your MacOS system
   
 
  
  - 
    CSIL: via ssh from Windows—Connecting via PuTTY/XMing or MobaXterm
   
 
  
  - 
    Data—Various sources for datasets to build applications with
   
 
  
  - 
    Design: —Waterfall, Agile, Rational Unified Process, etc.
   
 
  
  - 
    Design Patterns—software structures that are easier to change
   
 
  
  - 
    Design Patterns: Strategy—Define multiple algorithms and let client application pass the algorithm to be used as a parameter.
   
 
  
  - 
    Eclipse—One of several choices for a Java IDE
   
 
  
  - 
    Enviroment Variables—Reading them from Java code
   
 
  
  - 
    Firebase—A Google sponsored app development platform
   
 
  
  - 
    Frameworks—Software that helps you write other software
   
 
  
  - 
    Game Programming—How to make Java work for Games
   
 
  
  - 
    Gauchospace: Clickable URLs—In assignment submissions, urls should be clickable
   
 
  
  - 
    git and github—version control, source code configuration and project collaboration tools
   
 
  
  - 
    git: basic workflow—The basics: git add..., git commit..., git push ... 
   
 
  
  - 
    git: cloning your first repo—A guide for those new to git
   
 
  
  - 
    git: commit messages—How to write clear and helpful commit messages
   
 
  
  - 
    git: feature branch workflow—One branch per feature/issue/story
   
 
  
  - 
    git: git/github troubleshooting—Various problems and their solution
   
 
  
  - 
    git: .gitignore files—What they are for and what to put in them
   
 
  
  - 
    git: merge conflicts—Not nearly as scary as you may have been told
   
 
  
  - 
    git: overview—An introduction. git vs. github.com vs. github.ucsb.edu, repos, etc.
   
 
  
  - 
    git: throwaway untracked files—how to clean up untracked files easily
   
 
  
  - 
    github: adding collaborators—giving individual users access to a private repo
   
 
  
  - 
    github: api—Java Api for Github
   
 
  
  - 
    github: branch protection—making sure PRs to master get code reviewed, for example
   
 
  
  - 
    github.com: creating private repos under an organization—for closed source class assignments
   
 
  
  - 
    github: issues—working with issues in github
   
 
  
  - 
    github: keyboard shortcuts—making the github web UI easier to use
   
 
  
  - 
    github: pro tips—A few extras to help you work with GitHub more effectively
   
 
  
  - 
    github: using ssh keys—generating public/private key pair, uploading public key to github
   
 
  
  - 
    github: ucsb-cs-github-linker—Using the local tool to join a course organization
   
 
  
  - 
    github.ucsb.edu: creating private repos under an organization—for closed source class assignments
   
 
  
  - 
    github: verified badge on commits—adding extra security to your commit messages
   
 
  
  - 
    Google:—Using Google Products in CS48
   
 
  
  - 
    Google: Cloud Credits—What they are good for, and how you can get them
   
 
  
  - 
    Google: Developer Console—The place you configure OAuth, APIs, etc.
   
 
  
  - 
    Gradescope—System for homework grading, feedback and submission
   
 
  
  - 
    Gradescope: Organization Access—How to enable access to organization repos
   
 
  
  - 
    Gradescope: Regrade Requests—What to do if you have questions about the grading of a problem (e.g. you think there was a grading error)
   
 
  
  - 
    Gradescope: Student Self-Submission—Scanning your assignment to PDF
   
 
  
  - 
    Heroku—A cloud computing platform
   
 
  
  - 
    Heroku: Troubleshooting—Solutions to common problems and errors
   
 
  
  - 
    IDEs for Java—Integrated Development Environments for Java (IntelliJ, Eclipse, Netbeans, etc.)
   
 
  
  - 
    JDBC—Java Database Connectivity--a way to use SQL-based databases with Java
   
 
  
  - 
    Jekyll—Creating web sites (like this one) on github-pages using Markdown
   
 
  
  - 
    JSON: —JavaScript Object Notation
   
 
  
  - 
    JSON: Jackson—A Java Package for processing JSON
   
 
  
  - 
    Kanban: —visualization of work in progress
   
 
  
  - 
    localhost—What does it mean to run a web server on localhost?
   
 
  
  - 
    Lombok: —Automatic generation of getters/setters, etc.
   
 
  
  - 
    MacOS—Setting up an environment to do CS56 work on your own Mac (not ssh'ing into CSIL)
   
 
  
  - 
    MacOS: Homebrew—Package installer for Mac OS
   
 
  
  - 
    Markdown—A simplified syntax to create formatted documents
   
 
  
  - 
    Maven—A build tool for Java plus a package manager
   
 
  
  - 
    Minimum Viable Product (MVP)—Simplest thing that a customer would actually use
   
 
  
  - 
    MongoDB—A particular NoSQL database platform
   
 
  
  - 
    MongoDB: Cloud Atlas Setup—Setting up MongoDB Cloud Atlas (for new users)
   
 
  
  - 
    MongoDB: Cloud Atlas Sharing—Sharing a Cloud Atlas Setup
   
 
  
  - 
    MongoDB: Mlab—A cloud provider of MongoDB databases with a free tier
   
 
  
  - 
    MongoDB: NextJS Guide—How database operations in NextJS differ from examples in standard node
   
 
  
  - 
    MongoDB: NextJS Setup—Configurig your NextJS app for MongoDB
   
 
  
  - 
    MongoDB: Spring Properties—How to set properties for connecting to MongoDB when using Spring
   
 
  
  - 
    Node—A JavaScript based backend web framework
   
 
  
  - 
    OAuth—The way we implement the 'login with Google, Facebook, or Github' thing you see on some websites
   
 
  
  - 
    OAuth: Authorizing GitHub Third Party Apps—Gradescope, and GitHub OAuth Apps you build yourself
   
 
  
  - 
    OAuth: GitHub Setup—Setting up a GitHub OAuth App to obtain client id and client secret
   
 
  
  - 
    OAuth: Google Setup—Setting up a Google OAuth App to obtain client id and client secret
   
 
  
  - 
    OOP—Object Oriented Programming
   
 
  
  - 
    Personas—Ficticious users of our product that help us develop our stories
   
 
  
  - 
    PL: —Programming Languages (comparisons, analysis)
   
 
  
  - 
    Port Numbers—Those numbers such as 8080, 12345 that show up when doing networking things
   
 
  
  - 
    Postgres—An implementation of an SQL relational database, available on Heroku
   
 
  
  - 
    Postman—A tool for testing HTTP based APIs
   
 
  
  - 
    Python: OpenCV—Installing OpenCV for Python
   
 
  
  - 
    React—A front-end framework for webapps and native apps
   
 
  
  - 
    Refactoring—
   
 
  
  - 
    REST—RESTful APIs, etc (Representational State Transfer)
   
 
  
  - 
    Retros: —The heart of agile is inspect and adapt; retrospective meetings ('retros') help make sure we do that
   
 
  
  - 
    Retros: Darby/Larsen Five Step Retro—(1) Set Stage, (2) Gather Data, (3) Generate Insights, (4) Decide What To Do, (5) Close Retro
   
 
  
  - 
    Retros: Stop-Start-Continue—A three step formula for running a retro
   
 
  
  - 
    Scrum—A Software Development Methodology
   
 
  
  - 
    Selenium—Remote Control of a Browser (e.g. for end-to-end testing of webapps, web scraping)
   
 
  
  - 
    Selenium: Driver Setup—Setting up your driver
   
 
  
  - 
    Semantic Versioning—A set of rules for assigning meaningful version numbers
   
 
  
  - 
    Slack—A chat-based communication tool for teams
   
 
  
  - 
    Sockets—An abstraction used in networking
   
 
  
  - 
    Software Engineering—What is meant by this term?
   
 
  
  - 
    Spring Boot: —A Java web application framework
   
 
  
  - 
    SQL—SQL-based relational databases (sqlite3, Postgres, MySQL, etc.)
   
 
  
  - 
    Style—Standards and Tools for Code Style
   
 
  
  - 
    $T and $B—Using environment variables to make navigating a src tree less painful
   
 
  
  - 
    TDD: (Test Driven Development)—General information about best practices
   
 
  
  - 
    Teams: —Information about working in teams
   
 
  
  - 
    Teamwork—Practices for setting up a harmonious and productive team
   
 
  
  - 
    Test Driven Development (TDD)—General information about best practices
   
 
  
  - 
    Testing—Everything having to do with testing: Unit testing, Integration Testing, Test Coverage
   
 
  
  - 
    Testing: Acceptance Testing—Criteria for being 'done' with an issue
   
 
  
  - 
    Testing: Agile Testing (Crispin and Gregory)—Material from the book by Lisa Crispin and Janet Gregory, Agile Testing: A Practical Guide for Testers and Agile Teams
   
 
  
  - 
    Testing: Automation—How to make testing an automatic part of your process
   
 
  
  - 
    Testing: End to End Testing—Intro to End to End Testing, and Framework Specific Examples
   
 
  
  - 
    Testing: Jacoco Reports—How to interpret the reports (red, yellow, green)
   
 
  
  - 
    Testing: Jacoco via Maven—Setting up Jacoco test coverage, using Maven
   
 
  
  - 
    Testing: Unit Testing with Jest—Setting up Jest for Next.JS projects
   
 
  
  - 
    Testing: Mocking—Intro to Mocking in Tests, and Framework-specific Examples
   
 
  
  - 
    UML—Unified Modeling Language: A graphical language for software design
   
 
  
  - 
    Unix (and Linux)—A variety of resources related to Unix and Linux, esp. command line tools
   
 
  
  - 
    Unix: Misc tools—Various useful command line tools you may not know about
   
 
  
  - 
    Unix: Search/Replace across multiple files—from the command line, using grep, sed, etc.
   
 
  
  - 
    User Stories: —As a (who?) I can (what?) so that (why?)
   
 
  
  - 
    User Stories: INVEST—Good user stories are: Indepenent, Negotiable, Valuable, Estimatable, Small and Testable
   
 
  
  - 
    vim—a widely used text editor among Unix users
   
 
  
  - 
    vim: basic eight—eight things you need to know how to do for your survival
   
 
  
  - 
    vim: customization—customizing vim for your purposes
   
 
  
  - 
    vscode—Visual Studio Code, a lightweight free editor from Microsoft with many IDE features
   
 
  
  - 
    Waterfall—A model of the Software Design Life Cycle (SDLC) from the 1970s
   
 
  
  - 
    Windows—Setting up an environment to do CS56 work on your own Windows machine (not ssh'ing into CSIL)
   
 
  
  - 
    Windows: WSL—Setting up the Windows Subsystem for Linux (WSL)
   
 
  
  - 
    X11—Dealing with X11 DISPLAY issues
   
 
  
  - 
    YAML—An alternative to XML and JSON for representing structured data in a machine and human readable format
   
 
  
  - 
    Zoom—Teleconferencing tool