CSE 374, Lecture 1: Intro
Welcome to CSE 374, I'm Melissa Winstanley, the instructor. Today I'll be spending a little bit of time talking about the themes of the class and a few bits of administrivia, then we'll start to get oriented to linux and the terminal.
Intros
Your lecturer
- Graduate of UW CSE
- Professional software engineer
- Work on infrastructure systems, mostly in C++, Java, PHP, and JavaScript
- Passionate about turning novice programmers into good engineers (what the class is about)
- Passionate about teaching and mentoring
- Still working full-time while teaching, so my office hours will be early.
NO LAPTOPS!
At my company, the policy is that unless you are dealing with an emergency, you should NOT be on your laptop during the meeting. If you will be on your laptop during a meeting, you shouldn't be in the meeting. A similar policy will apply in this class. Close your laptops now. You will learn better if you are mentally present; if you want to take notes, studies have shown that physically writing things down is more effective for learning than typing them. And you are far less likely to be distracted by the infinitity of the Internet if you don't have your laptop open at all. I'll post my lecture notes each day for you as well. If you think there should be an exception for you, let me know privately via email.
The course
We have 10 weeks to move to a level well above novice programmer.
- Command-line tools/scripts to automate tasks
- We're used to GUIs (graphical user interfaces) but this is a different concept
- Text-based manipulation of the environment
- Automating tasks in this environment (scripting)
- Using utility programs
- We'll use linux (OS) and bash (shell) - but concepts are not limited to those
- C programming (lower level than Java; higher than assembly)
- THE programming language for embedded systems
- Manual resource management (unlike Java) (trust the programmer)
- View of programming: code and data are together as a big array of bits
- You have to think before you write
- Tools for programming
- You may not have thought about these before, but important in the real world
- Compilers
- Debuggers
- Linkers
- Recompilation managers
- Version-control systems
- Profilers
- and more
- Basic software-engineering concepts
- What do you need to know to write a million lines of code? (we will not write a million lines of code this quarter)
- Testing strategies
- Team-programming concepts
- Software specifications and their limits
- and more
- Basics of concurrency
- Most computers have more than one processor
- How do we keep all those processors busy?
- What happens when more than one thing can happen at once in a program?
- New type of bugs ("races")
Focus on exposure, not immersion.
- Lectures are NOT enough to really learn the material.
- Homeworks will be less structured (no sample solution or "magic oracle").
- How to figure out what you need to know:
- Documentation
- Books
- Online documents (Google is your friend but you MUST still understand and be able to explain what it does and how it works, not just copy/paste. Stack Overflow is NOT a substitute for documentation - people often don't really understand what they are doing).
- Try things. Learn by doing
You
Why are you taking this class?
- Required for my major
- Interested in the subject
- Will help me get a job
- Other
How long has it been since you took another computer science class?
- Less than two quarters (Autumn 2017 or more recently)
- Less than one year (Spring 2017 or more recently)
- Less than two years (Spring 2016 or more recently)
- More than two years
- Who has used Linux before?
- Who has written a C program before?
- Beyond "hello world"?
- Who has used git/github?
If you're trying to add the course,
- Watch for positions to open up over the next couple of days as people adjust their schedules.
- Send us a message on Friday if you're still trying to add.
- Do hw0 anyway - email the course staff (cse374-staff) so we can set up an account for you.
Course Website
- Homepage
- Four TAs - Soumya, Bruce, Jeannette, Thai
- Office hours daily - meet either me or the TAs
- No sections for this course - seek help when you need it.
- Discussion board moderated by myself and the TAs
- Syllabus
- Integrity policy
- This course and other higher-level courses are based on trust
- No sympathy for trust violations
- You don't see other students' code
- No powerpoint - I'll post my lecture notes
- Calendar
- HW0 due wednesday
- Prove that you've figured out how to log in to your shell on Linux
- Course feedback - much appreciated! Anonymous!
- Links
- Linux options
- Problem: everyone in the class has a different type of computer, and each computer has different built-in capabilities of the shell. Windows computers have very different conventions than Mac computers. Mac computers have similar capabilities to Linux systems but aren't 100% the same (slightly different commands, slightly different C/C++ implementations).
- For this class, we'll all use Linux to solve this problem. While the concepts are translatable to any modern operating system, we'll be grading your assignments in a standard Linux environment. You can develop on whatever system you like, but it is your responsibility to verify that your solutions work on our standard Linux system. We're giving you two ways to use Linux.
- You can use a Linux Virtual Machine that we are providing to everyone in the class for free.
- 64-bit CentOS 7 with CSE configuration and all the right things installed for our course.
- Runs on Windows, Mac, or other Linux systems.
- You must also download an application to run the virtual machine (ex VMware Player).
- 3-5GB download
- The course website has more information about how to set this up.
- Advantage of this option: you don't need Internet access to work on the system.
- I gave a demo of the system and how to access the terminal.
- You can log in to a shared Linux server that is run by the course staff ("klaatu").
- Same operating system as the virtual machine.
- You use a tool called "ssh" to log in to the machine with your username and password.
- If you're on Windows, you'll use a tool called Putty to use ssh.
- The course website has more details.
- The advantage of this option: you don't need to download anything (if you have Mac or Linux) or just something small (Windows)
- I gave a demo of ssh'ing into klaatu.