1 of 32

Course Overview

CSCI 338, Fall 2024�Software Engineering

2 of 32

Outline

  1. Introductions
  2. Overview of the course
  3. Logistics
  4. Activity

3 of 32

About Sarah

  • Majored in Economics, transitioned into tech in my early 20s
  • Worked professionally as a software engineer for 10 years before grad school (environmental modeling & collaborative decision-making tools)
  • Went to graduate school to research the societal applications and impacts of tech
  • My current research & professional interests include:
    • Broadening participation in computing
    • Examining the societal impacts of emerging technologies & business models
    • Building data tools (for modeling, analysis, visualization, and dissemination) for civic initiatives

4 of 32

Co-Designer of the Course: Semmy Purewal

  • Taught at UNCA from 2011-2013
  • Worked at Netflix from 2013-2017
  • Worked at Facebook from 2017-2021
  • Worked at Roku from 2021-2023

Semmy taught CSCI 338 with me last year (Fall) in solo in the Spring. This course has benefited tremendously from his expertise, including the course structure, assignments, and selection of tools / technologies.

5 of 32

Let’s Talk!

Break into groups of 3-4. Introduce yourself (go around):

  1. Name, pronouns, something about you – fun fact, what you did this summer, favorite places in Asheville
  2. Would you rather have the ability to see 10 minutes into the future or 150 years into the future?
  3. Would you rather have everyone you know be able to read your thoughts or for everyone you know to have access to your Internet history?
  4. Would you rather commute two hours a day and have the career of your dreams or walk to work and have a job you like OK?
  5. Would you rather have universal respect or unlimited power?
  6. Would you rather repeat CSCI 202 or CSCI 235?

6 of 32

Formal Introductions

Let’s all go around the room and briefly introduce ourselves.

  1. Your name
  2. Your pronouns
  3. Something you like doing that’s not related to computer science

7 of 32

Outline

  1. Introductions
  2. Overview of the course
  3. Logistics
  4. Activity

8 of 32

Overview of the course

  1. Why should I take this course?
  2. What am I going to learn?
  3. How am I going to learn it?

9 of 32

Why should I take this course?

This course will give you some practical and conceptual tools for thinking about how to design, build, deploy, scale up, and maintain systems over time – as tools and technologies change.

10 of 32

What am I going to learn?

You are going to explore three broad categories of ideas:

  • Culture – How people on teams can work well together to produce high-quality software (in a respectful, healthy way).
  • Process – How to actually go about writing code. This includes: style guides, code reviews, documentation, writing tests, deprecating features, and breaking down ideas into concrete features and tasks.
  • Tools – How various tools can improve how your team manages their codebase. This includes: version control, build systems, managing dependencies, and continuous integration.

11 of 32

What am I going to learn?

You are also going to learn some techniques, frameworks, and potentially a few new programming languages as we instantiate these ideas in code.

In other words, we’re going to be building a distributed web application as a way of practicing the ideas we’re learning about.

  • Think of the application that we’re building as the means.
  • Think of the tools and strategies for approaching software development as the end goal.

12 of 32

How am I going to learn it?

  1. Attending class
  2. Doing the assigned readings / video tutorials / supplementary exercises
  3. Practicing via hands-on labs
  4. Setting aside dedicated time to work on homework assignments and practice the skills you learn in the labs
  5. Asking questions and getting help when you need it
  6. Being savvy about using online resources (Google, Stack Overflow, ChatGPT)

13 of 32

Some Other Thoughts…

  1. This course requires that you are proactive and resourceful
  2. Let’s build a healthy, productive class culture

14 of 32

1. You’re going to have to be resourceful

In this course, you are going to have to configure libraries and packages on your local computer, and learn new tools, frameworks, and languages on your own. Some thoughts:

  1. Navigating laptop configuration challenges and teaching yourself new things on your own is part of what it means to be a software developer.
  2. Learning how to do “systems troubleshooting” is important – this is something that you will be expected to know how to do in your careers (even though these skills are rarely taught).
  3. Please be proactive – if you’re stuck, come to office hours (or ask for help in class).

15 of 32

2. Let’s build a healthy class culture

  • We all want to be on a healthy, productive software team in our careers.
  • It’s up to us to create that space for one another.
  • Please bring your unique expertise, perspectives, and experiences to class and share them with others, so that we might all gain from your perspectives.
  • Please respect and seek to understand the unique perspectives and experiences of others.
  • You will give your classmates the benefit of the doubt – about their competence and intentions – and can expect the same from them.

16 of 32

Outline

  1. Introductions
  2. Overview of the course
  3. Logistics
  4. Activity

17 of 32

Other Course Expectations

  • You will come to class prepared and ready to engage in an intellectual discussion about the readings and concepts.
    • There are assigned readings. I expect you to complete them before class on the day they are due.
  • You will complete all assignments – labs and homework – on time and with interest, engagement, and intellectual curiosity.
  • All work that you submit will be your own original work:
    • You will cite online references, tutorials, and/or ChatGPT where appropriate.

18 of 32

Course Technologies

  • In this class, you will need a laptop and will be installing various software packages (you will probably need ~5GB of hard drive space).
  • We recommend that you use Visual Studio Code as your primary code editor. You may use whatever code editor you like, but we’ll be officially supporting VS Code.
  • We will be hosting our code on GitHub.
  • We will be using Fast API (a Python Module) as our web server, and will be taking advantage of many different python libraries.
  • We will be using React to create our front-end client.
  • We will be using Docker to manage our system configurations
  • We will also be using various cloud services and platforms (TBD)

19 of 32

Books

  • We will be reading from the Software Engineering at Google Book, which is a wonderful resource.
  • You will also be assigned individual readings and articles.

20 of 32

Grading

Projects

30%

Labs

30%

Participation

10%

Midterm

15%

Final

15%

21 of 32

Labs

  • Labs make up 30% of your grade, and are due on Sunday at midnight unless otherwise specified.
  • Each lab will be graded as follows:

0pts

Not attempted

Assignment not submitted.

1pt

Check Minus

Less than half of the assignment was completed correctly.

2pts

Check

Most of the assignment was completed correctly.

3pts

Check Plus

Assignment completed. Works as expected.

22 of 32

Projects

  • Projects are approximately 30% of your grade.
  • Whereas labs involve practice with various tools and methods, projects involve building part of a larger system.
  • Graded according to a rubric

23 of 32

Coding Exercises

If you are interested in pursuing a software engineering type career, code interviews are – for better or for worse – the currency of the realm. Given this, we will dedicate some time in the class to doing practice problems. Useful resources:

24 of 32

Attendance & Participation

  • We will meet together every Tuesday and Thursday in person.
  • We will use class time to collectively understand and discuss the readings and concepts we are learning about, and engage in in-class activities.
  • Your timely and engaged attendance at every class is thus very important – both for you and for your classmates.
  • You are allowed two unexcused absences during the semester, no questions asked. You should reserve these absences for the occasional emergency or illness. After two absences, your participation grade will be impacted.

25 of 32

Late policy

  • No late labs will be accepted.
  • Late project submissions will be penalized 15%.

26 of 32

Accommodations

Any student requesting accommodations related to a disability or other condition should let me know, and/or make an appointment to meet with the Office of Academic Accessibility as soon as possible (preferably within the first two weeks of class). To make an appointment, call 828.232.5050; email academicaccess@unca.edu; visit https://oaa.unca.edu/

All information will remain confidential.

27 of 32

Your Physical and Mental Health

Sometimes, life happens. If you are struggling with any health issues (mental, physical, etc.), please reach out to me (Sarah), your advisor, the Dean of Students, and/or the Health and Counseling Center (https://www.unca.edu/life/health-counseling/).

Being proactive about managing the issues you are facing – early on – makes it easier to come up with a plan and help you to be successful.

We can help you connect to resources on campus.

28 of 32

Academic Integrity and Honesty

I want you to use Stack Overflow, ChatGPT, online tutorials, plugins, etc. to enhance your understanding of the material. Be curious, and explore different approaches to solving problems and achieving functionality. Just make sure that:

  • You cite your sources in the comments
  • You understand how that code / approach / technique you’ve found works (and that you can explain it to me if I ask about it)

Passing off code that you found on the Internet as your own in a university class is not permissible. That said, making a note of the websites and sources you borrowed from is welcomed and encouraged.

29 of 32

Thoughts on Chat GPT

  • Give credit to AI tools whenever used, even if only to generate ideas rather than usable text or code.
  • When using AI tools on assignments, add an appendix that includes:
    • A description of precisely which AI tools were used
    • An explanation of how the AI tools were used (e.g. to generate ideas, understand functions or coding ideas, etc.)
    • an account of why AI tools were used (e.g. to save time, to to stimulate thinking, to handle mounting stress, to experiment for fun, etc.).
  • You may not use AI tools during in-class quizzes

30 of 32

Outline

  1. Introductions
  2. Overview of the course
  3. Logistics
  4. Activity

31 of 32

Activity

In-class written exercise (just an exercise – I’m not grading you)

32 of 32

For Thursday

  1. Discussion: Intro to Software Engineering Readings
  2. Lab 1: Code Editors & the Command Line