Lecture 00 | Next Lecture |
Lecture 00, Tue 03/29
Introduction to CS156
Please sit with your team:
Announcement from one of your classmates:
My special passion: Teaching real world software practice
Why is this course different from all other courses?
Because as a young software developer I saw a gap between what I learned in school, and what i needed in industry.
What’s this course about?
Helping prepare you for transition from “Computer Science Student” to “Professional Software Dev”
What’s different?
Dimension | CS Student | Professional SW Dev |
---|---|---|
What: Differences in Scope | well-defined, fixed scope | vague, open-ended, evolving scope |
When: Short vs. Long Time Spans | short time spans (days, weeks) | long time spans (months, years) |
Who: Individual vs. Large Team | individuals, pairs, small groups | larger teams |
Why: Learning vs. User Needs | to learn something | to address a user need |
How: Ad-Hoc vs. Professional | ad-hoc tools and practices | professional tools and formal practices |
How Big: Small vs. Large Codebases | small programs | large complex systems |
How the course runs
- First half: Traditional hwk and coding assignments (more like the CS student column)
- Second half: Legacy Code projects (more like the Professional SW dev column)
Format: Not so much lecture
- “Lectures” (75 minute classes on MW)
- Typically try to keep the lecture material to between 15-30 minutes, max 45
- Usually between 30-60 minutes of group, hands on work in your teams
- “Discussion” (50 minute classes on T)
- Typically try to keep instructions to 5-15 minutes
- 35-45 minutes with your teams
The course website
Here: https://ucsb-cs156.github.io
Note the two parts:
- Permanent part for CS156
- The part for /s22/ specifically
Also note the Calendar where you can keep track of things that are due: https://ucsb-cs156.github.io/s22/info/calendar/
Where is the syllabus?
Here:
A few items from syllabus
Grade breakdown:
- Note that you must get an “A” in all five categories to get an A.
- For grades of A-,B+,B,B-,C+,C,C-
- You need your average to be that grade
- Lowest component should be at least: B-,C+,C,C-,D+,D,D-, respectively.
- For a D+,D or D-, you just need your average to be at least a D+, D or D-.
How the project grade works:
- 25% of your course grade
- It’s a team grade, with a peer-review adjustment (via CATME.org peer reviews).
Getting Started With Java Programming
The first programming assignment is here: https://ucsb-cs156.github.io/s22/lab/jpa00/
jpa00
stands for “Java Programming Assignment 00”.- We’ll also have some JavaScript programming assignments; they will be numbered starting from
jspa00
jpa00
is an autograded assignment; you’ll submit it via Gradescope.- It’s pretty straightforward; you should be able to complete it by the end of the week, even if you’ve never programming in Java before; it’s pretty much just a “Hello, World” type assignment.
- If you already joined the GitHub org, you should have a private repo already created for you in the github organization https://github.com/ucsb-cs156-s22 for this assignment.
- The name of the repo is
jpa00-yourGithubId
- If you didn’t join the GitHub org yet, or joined it very recently, then your repo might not exist yet; you can ask for help with getting it created on the
#help-jpa00
channel on the slack. This is also where you can ask for help with anything else pertaining to this assignment.
The second programming assignment, jpa01 is a bit more challenging, since it deals with something called “mutation testing” that may be new to you. I’ll cover some of that in lecture on Wednesday.
It is available now as well and on Gradescope. It is due at the end of next week, but I encourage you to start it sooner.
If you haven’t joined the GitHub organization yet, DO IT NOW.
Literally, right now, during class.
- Login at https://ucsb-cs-github-linker.herokuapp.com with your GitHub id
- Navigate to the home page.
- Click to join
ucsb-cs156-s22
. This generates an invitation - THEN… click at the top of the page to accept the invitation
If you get the message that your “email didn’t match anyone on the course roster”, then:
- Add your ucsb email (i.e.
youremail@ucsb.edu
oryouremail@umail.ucsb.edu
) to your GitHub account. - Note: you can have more than one email associated with your GitHub account.
- Then try again. If it still doesn’t work, you may need to make an appointment with Prof. Conrad to troubleshoot what is wrong.
The first two programming assignments, plus our in-class work for Tuesday, depend on having everyone in the GitHub org, so please do that now.
Homework
For tomorrow (Wednesday discussion)
- Before tomorrow night’s discussion seciton, skim this article: https://pconrad.github.io/files/paper028.pdf
- For tomorrow night, Read all of the “abstract” and Section 1 (about 1 page), and skim through Section 4 (about 5 pages)
- During discussion section tomorrow, you’ll be dividing up the six parts of section 4 among the team members, and then doing a more detailed read for a homework assignment due on Monday (https://ucsb-cs156.github.io/s21/hwk/h01/)
-
As you read, be prepared to discuss the ways in which developers felt unprepared, and what experiences they wish they had during their courses at University.
The point of reading this paper is to try to understand why this course is structured the way it is.
Reading in the Textbook (reading for H00 due Friday).
This homework assignment due Friday is based on:
- Chapters 1 and 2 of Head First Java 2nd Edition (HFJ2), and Chapter 1 on Java in a Nutshell, 7th Edition (JN7).
-
We also have one question about material on pages 372-373 on JN7, the section titled “Slow Adoption Rates”. Please read that one short section as well.
- Limited Online Access to these textbooks is free if you connect through the UCSB Library website
- Start here: https://www.oreilly.com/library/view/temporary-access/, and select UC Santa Barbara from the dropdown menu.
- Then, search for “Head First Java, 2nd edition” or “Java in a Nutshell, 7th Edition” once you are online.
- We may make use of other online books available through this resource.
Homework H00 due Friday
https://ucsb-cs156.github.io/s22/hwk/h00
What will we learn in this class:
- How real world sofware is put together
- Coding to build applications, not just to learn a data structure, algorithm or language feature
- Working with legacy code
- Full stack web applications
- Java backend
- JavaScript/React front end
- Databases and APIs
Two halves:
- First half: More traditional homework/programming assignments.
- Second half: Teams, working on three or four big applications
Legacy Applications: They existed before this course started, and will continue to exist in the future.
Logistics
- Check website for software to install https://ucsb-cs156.github.io/s22/info/software/
- Check email for:
- Research survey invitation (coming soon)
- Slack invitation
- Join ucsb-cs156-s22 github org
- Create account at github.com
- Add your @ucsb.edu or @umail.ucsb.edu email address (either one)
- Visit https://ucsb-cs-github-linker.herokuapp.com and login with your github username/password
- On home page of app, click to join cs156 s22
- Click link to accept the invite to the org
Where can you find info in this class?
- Textbooks
- Website: https://ucsb-cs156.github.io
- Especially under https://ucsb-cs156.github.io/topics
Now we meet our first team
We’ll now separate into teams, (and/or go into breakout rooms if online) and you’ll meet the first team you’ll be working with during the course.
Teams are by discussion section; there are three discussion sections, and 4 teams per discussion section.
Team assignments, and the mapping from teams to staff (LAs/TAs) is listed here:
- https://ucsb-cs156.github.io/s22/info/teams/
- You can find this link on the course website, https://ucsb-cs156.github.io/s22 under “More…” then Teams.
Note that while the instructor, or a TA or LA might drop in on your Breakout Room, they are not the discussion leader. You need to self-organize to run your own breakout room discussion.
What to do in your breakout room
This part is 40% of your participation grade for today (P00 on Gauchospace)
-
Please choose someone to be the discussion leader, and someone else to be the scribe. Note that you’ll be asked to rotate these roles each time we have a session, so that everyone gets a chance to practice their leadership skills and their writing skills.
You could also choose to rotate the scribe during the session; that’s up to you. Stick with one discussion leader for today though, to make things less confusing. (of course if your discussion leader loses their internet connection half way through class, you’ll have to improvise.)
-
Everyone log in to the Slack in another window (Zoom open in one window, slack in another.)
Everyone find the Slack channel for your team. It will have a name such as
s22-5pm-3
. Everyone on the team join that channel, and introduce yourself with a post.The post should include
- (a) The name you like to be called
- (b) Your pronouns (e.g. she/her/hers, he/him/his, they/them/theirs)
- (c) Your computing platform(s): Windows, Mac, Linux, or WSL (Windows Subsystem for Linux)
- (d) Optional: Something interesting about yourself (this may be unrelated to Computing)
- (e) Optional: Something you are hoping to learn in this course
Completing this step earn you 60% of the participation points for today’s class, and you earn those as an individual. (This part can be made up later.)
The remaining 40% comes as a “group grade” when your group completes the questions below (note that you must be present in class to earn this part.)
- The person who is the scribe should:
- Find the Slack channel for the team
- “share their screen”, so that everyone else can see what they are typing.
The scribe should record who the discussion leader is for the group, and whether you are sticking with one scribe, or rotating for each question. Just make a post in your group’s slack channel with this information.
-
The discussion leader should give everyone time to find the slack channel, and make their first post.
Then, ask the following questions of the group. The scribe can record the group’s answers.
Each of these is worth 10% towards your group’s particpation grade for today’s activity. The discussion leader should note that there are five questions, so be sure to allocate the time appropriately, and move on to the next question as needed.
-
Question 1: Every team is a group of people, but not every group of people functions as a team.
Think about when you’ve been part of a successful team. As a group, identify at least three things that are true of a team that functions well. You could probably identify many more, but for today, stop at three so you have time for the remaining questions.
-
Question 2: There are a variety of dimensions of “success” for a team.
One dimension is the “outcome” of what they produce, e.g. do they win the game, or make the product, etc.
Another dimension is the “process” by which they accomplish that. That dimension includes aspects such as:
- the way in which the team members work together either in harmony, or in conflict,
- whether there is an equitable sharing of the workload or one that feels inequitable
- whether team members feel safe and respected, or unsafe and disrespected
Identify three things that your team in this course might do to ensure good process, without sacrificing the quality of the “outcome”. (These might or might not overlap with your answers to question 1; it’s ok if they do, but try to think about it from a different perspective. Question 1 is more about memories of past successful teams, while this question is more about looking forward to what you’ll do with this team and any other temas are you are part of in CMPSC 156.)
-
Question 3: On a team, there are often people with different levels of prior experience and knowledge for the given task. Your team likely has different levels of prior experience, knowledge, and current skill level with in a variety of areas, such as Java, JavaScript, git, GitHub, databases, HTML, CSS, and Agile just to name a few topics.
Those varying levels of experience can be a stumbling block, but they don’t have to be.
Think of three challenges that might arise because of differnet levels of experience.
-
Question 4: Now, for each of the challenges you listed above, come up with a strategy that a team could use to address that challenge, and put the team on the path to success.
-
If time remains, here’s what to do with it
If you complete these four questions, with the time remaining, you are invited to discuss with one another your prior experience with these technologies, and record some of that discussion in your Slack channel.
It’s totally fine if you have no experience with any of these things. Success in this course is defined by learning, which is the change between where you start and where you end up at the end of the course. So, don’t worry about comparing yourself to others and feeling like you don’t belong.
We ask because the staff can construct a better learning experience for everyone if we know where people are starting.
Which of these areas are ones where you have some prior experience, and which are areas where you are a complete beginner?
What are you most interested to learn in this course?
- Java
- JavaScript
- Basic HTML/CSS
- Working with RESTFul APIs
- Web app programming in any framework (the idea of a Web backend vs. frontend)
- Spring or Spring Boot, specifically
- React, specifically
- Testing with a test framework such a JUnit, Jest, Mocha, Cypress, etc.
- Test Coverage
- basic git (
git add
,git commit
,git push
) - advanced GitHub (multiple branches, pull requests, rebasing branches)
- Kanban boards (e.g. Trello, or Projects inside GitHub)
- User Stories (“As an X i can Y so that Z”)
Record as much of your conversation as you are able in the Slack channel