OPS445 Prep
Learning outcomes
Once upon a time people read books in order to learn things. At one point a particular type of learning book became popular "XYZ for dummies", or "Learn XYZ in 21 days". It was the time when learning was particularly important to me, because I was at the beginning of choosing my career (which turned out to be programming and system administration) and I knew I had a lot to learn.
I read a number of such books, and despite my insecurities: it became apparent that:
- No useful skill can be mastered by a dummy.
- You're not going to actually learn a programming language in 21 days, unless you're already a programmer.
Times have changed. Books were replaced by the internet, and now it's hard to find anything on the internet that wasn't AI-generated. But the bullets above are still my position today. As a professional in the field who worked with many technologies and hundreds of people (including some unbelievable geniuses): I assure you that if this is your first course in programming: you will not be able to honestly call yourself a programmer by the end of it. That doesn't necessarily mean it's useless, it can be a good start on a decade-long self-development journey.
Here's what you can hope to get out this course:
- Understand that a computer is a tool, like a hammer. It's more complicated than a hammer, but it's a tool, and it will do whatever you can make it do.
- Hopefully start to distance yourself from the idea that a computer will do your thinking for you, despite how impressive you might think ChatGPT is.
- Learn how to get a computer to do what you want it to do, rather than you doing what the computer tells you to do.
- Become familiar with universal concepts understood and used by all programmers:
- Values
- Variables
- References
- Flow control statements (conditions, loops)
- Functions
- Data structures
- Classes
- Libraries
- Write simple programs in Python using those concepts.
- Maybe even read someone else's Python code.
Prerequisite skills
Even though this is your forth semester, given what it takes to get a passing grade in a course: I'll teach OPS445 assuming that you know nearly nothing about anything.
If you do hope to learn something here: you should have at least these basic prerequisite skills:
- Use a graphical Linux workstation.
- Using the terminal for various tasks, including:
- Using an ssh client
- Editing text files (ideally with vi)
- File and permission management
- Reading and monitoring system/serivce logs
- Using and writing simple shell scripts
- Reading, writing, and oral communication.
That last bullet is so important that many people can BS their way past the fact that they have no useful technical skills at all. But people who are both technically competent and can communicate well are rare, incredibly useful, and therefore expensive. Strive for that no matter what your natural inclination is.
Every skill requires practice. Many short applications of a small skill are more valuable than one heavy application. Run as many commands as you can, just because you can. Read as many explanations as your patience will allow. Put some effort into writing well-formed questions in your emails. Question everything you read and everything you write.
Course structure
Delivery mode
The most effective way to learn in this course is a combination of attending labs in person and doing your homework outside of class to solidify what you've learned.
Unfortunately this option is not automatically available these days, so we might have to make due with online learning. Each professor does this differently, they will tell you how labs and lectures will work in their sections.
Passing the course
There are two ways to get through this course: get a passing grade, or learn something and get a passing grade.
Get a passing grade
The passing requiements are here.
Learn something, and get a passing grade.
What you'll get out of this course will be proportional with what you put into it.
Being an excellent programmer requires changing how you think about problems, which is really how you think about the world. Changing how you think about the world is no easy proposition. It takes much time and determination.
In a way computers are really simple, completely dumb devices. The hardware does what the software tells it to do, and nothing else. These days even in the event of an exceptionally rare hardware failure (e.g. a cosmic ray went through your RAM and flipped one bit at just the wrong moment): the system will crash before it tells you that 2+2 is 5. But you can easily program it to tell other people that 2+2 is 5. Ponder that for a bit.
Most people feel computers are some kind of magic because:
- They perform basic operations incomprehensibly quickly: billions of times per second.
- The engineers who designed and built the hardware/firmware/software have created useful solutions, based on each other's work, that no one engineer could have created alone.
Because of this reality: computers seem like magic even to many beginner programmers. In order to do something useful: you have to rely on the work of countless other people you'll never meet. Those libraries/modules/services will be combined in ways which are sometimes incompatible, and it's not always obvious in advance that will be the case.
If you approach your work with the right attitude: you will eventually be able to write software in any programming language, on any platform, using any libraries, connecting to any services, without being afraid of the task.
Just understand that getting there is a long, difficult process which doesn't have any shortcuts.
- Two ways to go through the course:
- Easy way to get your mark
- Hard way to learn something
- Workstation setup