Skip to main content

CSC 321.01, Class 01: An introduction to CSC 321


  • Preliminaries
    • Notes and news
    • Upcoming work
    • Questions
  • Guest lecture
  • What is software design?
  • What is CSC 321?
  • What do we learn in this course?
  • Why CSC 321?
  • Course structure

An atypical start to class.

  • Welcome back!
  • We have a guest speaker today. I’ll give the class to her when she arrives and then resume when she finishes.

News / Etc.

  • Welcome back! I think I know most of you, and I’m happy to be able to teach you again.
    • But I will still take attendance.
  • As seems to be the case way too often, the course Web site is not quite in the state I’d like. Cross your fingers that it will be working better soon.

Upcoming Work

Good things to do


  • First-year convocation today at 11:00 a.m.
  • CS Table next Tuesday (unknown topic).
  • CS Extras next Thursday (unknown topic).


  • International Real Football club Saturday, 4:30 p.m. in AuxGym. Come play.
  • PALS Dog Wrangle 11-1 by State Farm down town.
  • Be good to yourselves and each other.


Guest lecture

Welcome to Megan Goering!

  • Class of 2008.
  • Getting old.
  • Lives in San Francisco, which is not the same as Topeka Kansas.
  • Megan didn’t know Sam in college. Their lives are worse because of that.
  • But they’ve gotten to know each other since, and their lives are better.
  • Debt is scary, but you can do it.
  • Left Grinnell to investigate fraud. Boy, it was depressing. But she was successful. Wrote a 2000 page paper (using Grinnell skills, that took only two days) (no not really). Saw the evil of Wall Street.
  • Wanted to do tech, but worried that she did not have a tech background. Amazingly, other skill sets are necessary at big tech companies, and people who are just code monkeys are, well, just code monkeys.
  • Grinnellian != Code Monkey
  • Technology is cool because you build things and enact change.
  • And it requires people with wide varieties of backgrounds.
  • So she told all of this to her short course prof, who said “go for it”.
  • The prof decided to hire her for his venture capital firm.
  • They like to get returns on some rolls of the dice. It requires lots of analyzing people.
  • Funding people who change the world is not nearly as good as changing the world. (Sam notes that teaching people who will change the world can be fulfilling.)
  • Went to Google. Spent four years there. Started at tech support. Thought she would deal with feedback and do something about it.
  • Most of what you believe breaks down in the physics of reality.
  • Made bet - All these folks want to do tech. Google will need someone with other skills to work them. Ran TC teams in El Salvador, Montreal, other countries. Grew them all.
  • Google does “smart phone routing” based on your role, your language, the time of day, your level of experience. Certainly beats stupid phone trees.
    • “There is so much computing, even in the non-technical side of computing.”
  • Learned a bunch. Ran the biggest TC corps her little Grinnell heart could imagine.
  • Detour: Stopped union busting in one job.
  • In 2015 decided to start her own business. Human-centered design, design thinking, etc.
  • Thinking about working with folks: Who, What do they bring, What do they do or experience, what do they leave with, what are their core needs, core benefits
  • Breaking into groups brings insights.
  • Functional and problem solving models can make a big difference.
  • We can use it on political issues, too.
  • Helps us address complex problems.
  • It all comes from Design Thinking and Human-Centered Design
  • Time to play in a really short format.

Human centered design activity

  • Five steps
    • Empathize
    • Define
    • Ideate (separately in parallel) about 60-90 seconds
      • I bet this frustrates JDS
      • We do this in parallel to stop group think
    • Prototype - Simple model; can be sketchy (but not sketchy like Grinnell alums can be sketchy). Quick and dirty.
    • Test - Get in front of people to get information.
  • We will do these really fast to understand.
  • Note: The process does well at both good and bad ideas.
  • Look for best (B), craziest (C), impossible (I).
  • Brainstorm ideas of things you might want to build.
  • Each group chooses an idea that they like.
    • Sample idea: Chopsticks for people who did not grow up with chopsticks. “How do I pick up that damn rice at the hot new Asian Fusion restaurant without looking like a total idiot?”
  • Identify a user group (for your idea).
    • Sample user group: People who need cuddling.
  • If someone in your user group identifies with that group, share as much as you know about that user. Otherwise come up with things you know and what questions you have.
  • Fast forward (we would normally go back and empathize and defie and gain).
    • Sample revision: Those folks who are eating at Asian Fusion restaurants are pretentious and engaging in cultural appropriation in any case, so we want to educate them.
    • Sample revision: Really, what we’re thinking about is making it fun to wait for your food at the restaurant
  • By empathising with your user you better create something that they will like.
  • Prototyping. Think about where your thing will arrive in their life. At what moment in time will the person you are serving encounter your innovation? What would they discover? What would you send in to that moment? (E.g., ad pops up, server hands them, friend mentions it.)
  • Insert arbitrary constraints: Choose something!
  • Then build a prototype.
  • Reference: Ontological Designing (more details forthcoming)

What is CSC 321?

  • A course in software design - How you build medium to large-scale
    projects in a team using some consistent methodologies and approaches
  • An introduction to or extension of a variety of tools you will use as you build software.
    • Ruby on Rails
      • Ruby is a programming language designed to be convenient for quickly writing useful programs
      • Rails is a framework for building Web applications, most typically with Ruby
      • “Convention over configuration”
    • Version control software (Git)
    • Task management (Trello)
    • Cloud development (c9)
    • Application deployment (Heroku)
    • Basic things CS students should know, but don’t necessary (HTML, CSS)
  • Preparation for CSC 322, the practicum part of our software design curriculum

What do we learn in this course?

Modified think->pair->share.

  • Make a list of five topics that you would expect to see in “A course in software design - How you build medium to large-scale
    projects in a team using some consistent methodologies and approaches.”
  • In groups of three, share your answers with each other.
    • This is an opportunity to make sure that all of you talk.
    • This is an opportunity to make sure that we get a variety of ideas heard.
  • Share your answers with the broader group.
  • I will record the answers as best I can.


  • Documentation
  • Testing
    • Test Driven Design
    • Behavior Driven Development
    • Unit testing
    • Integration testing
    • Testing frameworks
  • Core methodologies
    • Agile programming
    • Waterfall programming

Design Principles

  • Core OOD
    • Make things more readable and more reusable (maybe more efficient).
    • Encapsulation
      • Limit access to certain parts of the system to make it easier to change those parts
      • Group related things together to make it easier to cooperate.
    • Inheritance
      • Define one class in terms of another (e.g., “Dogs are a type of animal, so we can automatically inherit all of the key methods of animal, such as move.”)
    • Polymorphism, Parametric
      • When two objects or classes provide the same operations, you can write functions that use either.
      • public interface Addable { Addable add(Addable other); }
      • Addable double(Addable a) { return a.add(a); }
    • Polymorphism, Structural
      • E.g. generic types public class List<T>
  • Design patterns - MVC

Group work

  • Assessing group strengths and opportunities (and weaknesses) [May happen more in CSC 322]
  • Roles that we have in a project team. (information)
  • Delegation - How do I get my teammates to do the work for me? (a bit)
  • Clients - Assessing needs
    • User stories - a semi-formal way to document the needs your client has.

Problems (or Opportunities)

  • Legacy code
  • Planning for the long term


  • Some database stuff

Why CSC 321?

That is, why are you here?

Course structure

“Could you please explain the hour this class meets and what the workload is?”

  • First half of the semester, CSC 321 meets 8:00-9:50 a.m. TuTh
  • Second half of the semester, CSC 321 does not meet
  • First half of the semester, CSC 322 meets 10:00-10:50 a.m. TuTh
  • Second half of the semester, CSC 322 meets 8:00-10:50 a.m. TuTh

A half semester, two credit class is supposed to consume approximately twelve hours per week. Four hours per week in class; eight hours per week out of class on homework and reading.

Homework is timeboxed. If you work the eight hours and document it, you get at least 90% on the homework.