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.
Workstation setup
You will need a Linux workstation for your work in this course. If you already have one you like and are used to: that's great, go ahead and use it. If you don't have one: you need to set it up this week, so that it's ready for next week's Lab 1.
The distribution you use doesn't matter much. The screenshots in the wiki are from a professor's Linux Mint machine. Linux mint is a friendly desktop most people don't have trouble with, so if you don't have your own preference: you might as well use that. You can either:
- Install it on a dedicated computer directly, or
- Dual-boot with Windows on a computer you already have set up, or
- Install it in a VirtualBox Workstation virtual machine.
If you've done my version of OPS345: you can reuse the workstation from that course.
Go ahead and set that up now. Download the ISO file for the latest Cinnamon edition from a mirror here. No special setup is required for storage configuration, a 50GB virtual drive will be plenty enough, and 8GB of RAM will allow you to use it without headaches. Do use a username which is the same as your myseneca ID. That will make your life easier in the labs.
Once it's installed: configure the interface as you like it. You will be expected to use it for the rest of the course, so make it as comfortable for yourself as you can.
Don't leave this setup for next week even if your professor doesn't give you marks for the lab prep. You'll have lots to do and learn in Lab 1 and you won't need extra distractions.
You're going to need to use an editor to work on your code. It can be any plain text editor, but you're likely going to want a plain text editor specialized for editing code.
If you already have a preference: by all means use your preferred editor, assuming it works on Linux.
If you don't have a preference, I suggest Geany: it's a simple application that should serve all your needs for this course. You can install this using the Software Manager.
Submit evidence of your work
There is nothing to submit for this week, but please get your setup done so that you don't have to do it next week.