UW CSE 391 – System and Software Tools
courses.cs.washington.eduThe first video lecture [1] is titled "Introduction to Linux", yet, ironically, the instructor conducts the entire lecture using macOS. I guess the main purpose of this course is to teach uninitiated kids a thing or two about the *nix CLI, but for some reason the instructor has decided to call it the "Linux CLI". He also teaches some terrible shell scripting practices [2] such as parsing the output of ls [3] and not quoting variables.
[1] https://www.youtube.com/watch?v=hTHAe-m56Vw
I worked at UW CSE from 1990-1994 as a staff member.
At the time, I saw students (at every level) woefully lacking in useful skills, and proposed to the dept. that I ran some sort of course (not necessarily for credit) that would help people understand shell programming, debugging, build processes, and more.
The idea was roundly shot down, with the central claim being that students picked all of this up as they went along, and that the journey was more important than the outcome.
I suppose I feel good that this stupid idea has passed, and that the department acknowledges the importance (for some students, at least) of this skillset.
> The idea was roundly shot down, with the central claim being that students picked all of this up as they went along, and that the journey was more important than the outcome.
That's such a bad position for educators to take! Just picking things up as you go along, you only learn how to accomplish tasks by rote, and you can find yourself 35 years in and still be patching basic holes in your knowledge (ask me how I know this). If you're self-motivated to dive in and teach yourself the theory, you can do that. But if you are that guy, you probably aren't taking CS courses at a university in the first place.
UW CSE student from 2009-2012; there was an optional course that blazed through *NIX and shell fundamentals, and I credit it to kickstarting my ability to use the system well. Using GDB, valgrind and the like were part of a 300-level basic systems programming course.
It's kind of depressing that you need a course to teach those skills, but it's a good thing the need was (eventually) addressed.
Why is that depressing? Genuinely asking.
It's one of those things that I would expect people that age to have naturally picked up by themselves. I certainly had, for instance.
The world has changed, though, so I don't find unreasonable to have a formal course where you learn how to use a CLI.
Noone as naturally picked up CLI.
You tye characters into a terminal and you first get an error message, how do you know to fix that. How do you know what you can do? How do you know ls is what you get to get a file listing? What is a file?
In all these cases you have had to read something that tells you) - which is part of learning.
It is much and quicker to have a course to teach you.
Having courses to teach you is mor efficient otherwise why do we have schools?
However seeing many solutions of code posted on the internet I suspect many have not learnt throughj a course just random reading and picked up bad coding skills. As noted in the first answer here the author of the course is not showing good ideas in some cases, perhaps they shopuld have nbeen on a course to learn CLI.
It is a one-credit seminar, so not as much a formal course but something that can accompany your core classes (that's not clearly apparent from the website though).
Quite surprised to see UW materials on HN. I took the non-major equivalent of this course; it was an introduction to C, Bash, Linux, and assembly. It was quite helpful back then, although the web helped me expand on what I know as with most computer science topics.
I wish I could’ve taken the major version but, alas, I wasn’t offered a spot in UW’s CSE program despite all my passion and effort. I will refrain from turning this comment into a lament of the university’s capacity constrained major system.
CSE 374, good times :)
Very similar to content and structure to MIT Missing Semester:
I took this class back around 2010. Kind of random seeing it on HN. This is a good introduction to getting around a Linux (or any Unix-y) system. As far as I can remember, this was considered an "easy" class for most CS students but relatively important to teach practical industry fundamentals.
It was also somewhat important (but not at all required) since 300/400-level classes used a lot of Linux-based lab machines and this taught you how to get around if you weren't comfortable with them. Before that, most work was done [when I was there] in cross-platform IDEs and just paper/pencil (proofs, maths, and such), so I remember this coming a bit later for that reason.
It also used to be called 303, which made a bit more sense when I was there in the context of being an early 300-level class to get you primed for the later ones. UW CSE went through a big renumbering and restructuring the year I graduated so I don't fully know how it fits in anymore.
Since I took it, it looks like they've added Git and removed a C, gdb, and Make which is a bit sad, but probably more practical...
I'm sure a lot more changed. Fun to see this pop up, though!
I'm currently enrolled in the required CSE 351 (https://cs.uw.edu/351) which is largely in C with some assembly as well (and has gdb/make)!
Cool! It doesn't feel like there was 351 equivalent when I was enrolled. The contents here were split between OS and the 391-predecessor. 351 looks like a great class!
I think this type of course should come very early in a CS program. Yes, many students learn these things on their own, but many don’t, and it’s a good idea to put them on equal footing.
Being able to efficiently use common software tools allows students to learn more effectively in other courses, so a class like this provides a leverage to the other classes. Yes a lot of CS is theory, but it’s pretty hard to learn about that without having a solid grasp of the tools.
Agreed. At my undergraduate we didn't have an equivalent, and a common complaint amongst the TA's was how little concrete devops skills the students had. One of my friends TAing a second year course even went so far as to say almost all of his time in office hours was (watching students fail to do, and then) showing students the basics.
I teach a course at the University of Waterloo targeting psychology undergrads with little to no experience using their computers as research tools.Maybe some of the content would be useful to others looking for beginners' material? The entry page is https://brittanderson.github.io/Intro2Computing4Psychology/b... and the files are all on github and the videos on vimeo.
I think (some of?) this material was formerly covered in CSE 303 (now discontinued), when I took it in 2009: https://courses.cs.washington.edu/courses/cse303/
We may have been in the same class together! At the very least, we were part of the major at the same time for sure. I took 303 either 2009 or 2008.
I was in 303 winter quarter 2009, class of 2012! I don't think we met at the time, but I know Armon.
This seems like quite a lot (but not all) of stuff you should be able to teach yourself; I'd say university classes should focus on more challenging/profound topics.
I was at UW around the time they were thinking of introducing this. I recall someone saying they'd found that there was a gap between the students who had computer experience and those that didn't -- the latter could be equally smart but lacking in the dumb stuff like how to operate git and it would end up impacting their ability to learn the profound topics.
I recall that opinions like yours were the opposition to it, but it looks like it ended up happening, and I think it's a good idea. In principle a motivated person with no previous access to computers ought to be able to study computer science as well as someone who grew up with them.
You can learn it yourself, but when I took a similar course, it opened my eyes to knowing which tools were useful for what and how to apply them productively. (I work with people now - software engineers - that basically see any command line fu to be magic that they couldn't possibly understand.)
It's a 1-credit seminar, so you can take it with the more challenging/profound topics