6 ms·
I was happy to see my alma mater introduce a class called "CS 193 Tools" that is taken by all freshmen. I never took it, but it started when I was a junior or s
by austinl 5y ago
I was happy to see my alma mater introduce a class called "CS 193 Tools" that is taken by all freshmen. I never took it, but it started when I was a junior or so (~2014). A friend of mine pushed to create the course and helped TA it for a few semesters. Here's the course description:
Learning Outcomes:
1. Understand Unix/Linux commands for navigating directories and files and manipulating files and folders.
2. Understand terminal commands for searching and input/output redirection.
3. Understand shells such as sh, csh, ksh, tcsh, bash, zsh.
4. Understand debugging via print statements and general debugger concepts.
5. Understand version control via Git and Github, source control, workflow, commit, collaboration, pull, push, create and pushing a new repository, cloning, branches, merging, and conflicts.
6. Understand vim including mouseless navigation, normal/insert mode, copy/paste, search/replace, and saving/quitting.
https://selfservice.mypurdue.purdue.edu/prod/bwckctlg.p_disp_catalog_syllabus?cat_term_in=202010&subj_code_in=CS&crse_numb_in=19300 https://selfservice.mypurdue.purdue.edu/prod/bwckctlg.p_disp...
- devoutsalsa 5y agoLearning the basics of shell scripting has been super valuable to my career. The only time I found it to be a liability was when I was pair programming. My pair couldn't read a shell script to save their life & had very little interest in learning. When I tried explaining it line by line, they stopped wanting to pair because I was apparently making them feel stupid. They actually reported me to management for being an arrogant mansplainer. I'm pretty sure that was the beginning of the company deciding I was not a culture fit :P I had to learn how to, and how not to, work with someone less experienced in a certain topic after that.
- ecshafer 5y agoThis seems like its more of a hacker vs non-hacker mindset. Those of us that grew up with messing with computers and such daily, if we didn't know what the script did, would probably really appreciate someone giving an in depth explanation of the script line by line. People that want to just be hand held, and are not interested in how things actually work, wouldn't appreciate that. Sounds like the pair programmer was the latter.
- tomcam 5y agoI would love to hear how that resolved ultimately. And yet I am also a little bit scared as well. I feel like there are at least two or three stories simmering under the surface of that incident.
- devoutsalsa 5y agoLike any story like this, you needed to be there to get the context. One of the downsides of pair programming is that it's great when you both have complimentary skillsets. It's less productive when no one knows what the heck is going on. In this case, the task was to benchmark how many writes one could make to Kafka using our monolith. They wanted to see at least 10K/writes per second. The only problem was no one knew how to use Kafka (well), including the person who was asking for it. So I wrote some gnarly looking Bash code to fire up Kafka, Zookeeper, the app, etc. Some people wanted to use Docker, but I didn't see the value in using a slower VM w/ limited resources. I wanted to use as much CPU as possible. My pair didn't know Docker, Bash, or Kafka. I lost my pair somewhere around talking about having to clean up zombie processes. It went downhill from there.
- tomcam 5y agoThanks for sharing. Man I always love working with people smarter than I am, although I always feel a little bad for them. But it’s like leaving money on the table to not learn these things.
- HarryHirsch 5y agoThere was that incident when my students marched off to the Dean, complaining that I learned them too much. The kids have been screwed over by persistent underfunding of public schools and insist that they continue to be screwed further - what they want isn't an education but a degree certificate. Yes, cultural fit is real, and it isn't always about white men drinking craft beer.
- burnished 5y agoCould be more about how you communicate rather than what you are communicating. I love it when people explain difficult or unknown things to me, but if some one sounds like I'm burdening them or that they are incredibly displeased then it becomes a different experience. I'm aware that the other person in your story could easily be the 'difficult one', but your post doesn't make it clear that you understand the way you communicate can be super important too. Not trying to accuse you of anything, just want to point out a super easy avenue of mistake.
- boojing 5y agoCan you opt out of the course if you manage to enter a valid tar command on your first try?
- FillardMillmore 5y agoPerhaps they can opt out if they know how to fork bomb without looking it up
- narwally 5y agotar --help
- blaser-waffle 5y agoman tar
- SAI_Peregrinus 5y agoThat's not a `tar` command, that's a `man` command about tar.
- jimbob45 5y agoThat class would have been super useful. Would’ve been good to add Make or CMake to that list too.
- MaxBarraclough 5y agoI agree that build systems like CMake should be taught, but I'd put them in a course on C/C++ programming, not on a general course about Unix and the command line. Builds work quite different in Java, for instance.
- mxcrossr 5y agoThe trick is to find a CS professor who actually knows how to write makefiles instead of just copying and pasting his last one!
- MaxBarraclough 5y agoI broadly agree with having courses to teach the topics listed, but: > Understand shells such as sh, csh, ksh, tcsh, bash, zsh. I was taught csh as an undergrad. A complete waste of time, in my opinion, akin to teaching BCPL rather than C. Just teach bash, and perhaps sh. To my knowledge, just about nobody writes scripts in csh, ksh, tcsh, or zsh. You use bash for portability across Unix systems, sh for even better portability across Unix systems, or you use a modern scripting language like Python3. Students may benefit from learning zsh for interactive use, but I don't think there's enough benefit there to justify spending time teaching it.
- bootwoot 5y agoI'm guessing the csh curriculum was just old. csh was developed as an improvement to sh (just like bash) that some circles coalesced around before everyone chose bash. I doubt it was that they saw everyone using today and said, fuck that, let's use csh. My company still does intro lessons with ksh because it's set as the default shell on all of our servers.
- ufo 5y agoIf I had to guess, putting all those shells in the same basket sounds like they're focusing on the universal functionality. Such as pipes and redirection.
- narwally 5y agoThat's what I would imagine. I think think shells other than sh or bash are listed more to make students aware of their existence and to reinforce that, in unix, even something as seemingly fundamental as your shell is a self contained tool that can be swapped out for a variety of alternatives.
- jyounker 5y agoTo extend to your comment, lightly examining a number of shells could also serve a few additional pedagogical functions: * Showing students that there are many shells that they could encounter. * Highlighting the differences. * Showing that there is a long history. * Showing that the history is still alive. * Showing that there is no one right way.
- arduinomancer 5y agoUnpopular opinion but I as a student wouldn’t be interested in a course like that since everything listed is easily Google-able. IMO it’s better to focus on fundamentals like math/algorithms that can be applied in multiple areas rather than specific tools.
- sjg007 5y agoIt's worth having it in a central place especially with respect to tools needed to meet academic objectives.
- HarryHirsch 5y agoI think it's more suited for informal study groups. To learn glue scripting and debugging you need playtime. What happened to MIT, students are too overworked to play?
- quesera 5y ago> everything listed is easily Google-able Everything in a CS curriculum is easily Google-able. Being functionally illiterate at the command line is harmful for productivity, so I think it's deserving of some in-class attention.
- HarryHirsch 5y agoTo become a mature mathematician you need interaction with other mathematicians. To become a passable bash programmer a book and a jar of aspirin is enough.
- dfabulich 5y agoI think that's right if you already know how to use a shell, but if you don't yet know how to use any shell, or even know what a shell is, the bash book is not going to do you any favors. Imagine handing this to a person who's never heard of a shell, doesn't know how to `cd` or `ls`: https://www.gnu.org/software/bash/manual/html_node/What-is-a-shell_003f.html https://www.gnu.org/software/bash/manual/html_node/What-is-a... > 1.2 What is a shell? > At its base, a shell is simply a macro processor that executes commands. The term macro processor means functionality where text and symbols are expanded to create larger expressions. > A Unix shell is both a command interpreter and a programming language. As a command interpreter, the shell provides the user interface to the rich set of GNU utilities. The programming language features allow these utilities to be combined. Files containing commands can be created, and become commands themselves. These new commands have the same status as system commands in directories such as /bin, allowing users or groups to establish custom environments to automate their common tasks. "Macro processor?" "Expressions?" "Unix?" "Command interpreter?" "GNU utilities?" "Directories?" (you mean folders?) "/bin?" "Environments?"
- gregmac 5y agoI've heard some courses require submitting assignments via git, and that's something that makes a lot of sense. I wish everywhere would do that. Even if (at first) students just do a single `git add --all && git commit -m "finished project"` it goes a long way to just exposing people to the concepts. Provided the infrastructure is in place (eg GitHub or gitlab instance), it really isn't much different than dealing with a zip file, but provides 10x the educational value. Bonus points to the prof that builds assignments that involve git branching from an earlier assignment.
- sokoloff 5y agoAll freshmen? Or only CS candidates? If it's the former, that seems like a giant waste for most of the people in the class and requiring any additional basic sciences or math course would likely be more beneficial.
- toomanybeersies 5y agoMaybe it's my smug sense of intellectual superiority, but if I could go back and do university again, I'd still rather learn language theory and discrete algebra than how to use vim and tmux (neither of which I use more than once a month). I didn't study Computer Science to learn how to write bash scripts.
- 908B64B197 5y agoI've seen it in Software Engineering programs. The good ones are really CS + one extra year worth of projects and practical coursework, like learning what Agile is, Source Control, Build Systems and so on.
- kritr 5y agoSo I actually took this class in 2018. Unfortunately I don’t think it’s good enough just yet. CS 193 was a very low effort class (1cr), where you could follow the command by command instructions and perform all the tasks necessary to pass. Unfortunately tools like git, vim, and shells all possess philosophies and concepts that are very hard to grasp without context, and constant use. We were on multiple occasions told the mantra, add-commit-push, which I will say is enough for basic git usage, but since pretty much none of the subsequent classes used git to any capacity, I would assume many students lost all familiarity within the next semester (Makefiles that automatically git added and pushed code were used for submitting code). I also think most people were hindered by vim, lacking sufficient instruction but still being presented it as the primary option. I think if you’re going to implement a similar class / program, the tools really have to have uptake beyond a single course. Sidenote, the different shell types weren’t covered in my semester, we just used bash / dash.
- austinl 5y agoThat’s interesting (and definitely unsurprising) to hear! I think freshman year might be a bit too early to appreciate the curriculum, before students have seen how ubiquitous some of these tools are in engineering jobs. Maybe it would be better spread out over time. I think the trade-off on timing here is with internships during the summer after freshman year. I think you’ll have a much better chance of success if you’re at least roughly familiar with these workflows vs. interns who are totally unfamiliar with version control systems, for example. And perhaps that’s all the course is meant to accomplish at 1cr.