21 ms·
The Missing Semester of Your CS Education (2020)
- rnx 4y agoThere was a course, Software Development Environments, on the CS degree programme I studied that taught a lot of these things. I was very grateful for it.
- spicyramen_ 4y ago[dead]
- utopcell 4y agoThe course seems to advocate for vi, but when I Google: "vi", the response is: "Did you mean: emacs" I don't know what to make of this. :-)
- racedude 4y agoPurdue also had a CS190 tools course when I was enrolled that was pretty similar, surprisingly the course website is still up! https://courses.cs.purdue.edu/cs19000:fall13:lecture_1 https://courses.cs.purdue.edu/cs19000:fall13:lecture_1 (see lectures in sidebar). This course is actually how I found out about Hacker News!
- tyhoff 4y agoHope you liked the course! I was the one who first made and taught the course. To my knowledge, it’s still a required course for all CS freshman and is still taught by students.
- aio2 4y agothis was posted here a few weeks back
- lizknope 4y agoI posted already in the thread but when I started college in 1993 we had a mandatory intro to computing environment class. At the time everything on campus was Unix based with a mix of Sun, DEC, HP, and IBM workstations. The class is still called E115 and I found the online text book. It has definitely changed in the last 30 years and the MIT course is probably a lot more in depth but the concept is the same. You have students coming from high school that may have only used Windows or Macs. I've heard that a lot of students have got used to iPads and cloud storage don't even understand the concepts of files or file systems. https://e115.engr.ncsu.edu/online-textbook/ https://e115.engr.ncsu.edu/online-textbook/
- 2OEH8eoCRo0 4y agoI'm torn on this. As somebody who is too stupid to goto MIT, I chuckle thinking of spoon-feeding how to use Git or a terminal to MIT students. It's useful information but not everything useful needs a sit-down, by-the-numbers, "this is how you branch" discussion. I also wonder if it does more harm than good teaching these topics so matter-of-factly since it's only the current programming zeitgeist anyway. It only further entrenches the "way things are". Like depriving children of that impactful exploratory phase and sticking them into a rigid box. In any case- won't these topics propagate natually from good professors using them themselves? What do I know, I'm too stupid to attend MIT.
- bordercases 4y agoThe field has grown to the point that if you don't teach it top down no one will have the skills to be dangerous until the end of their degree. And projects that shorten the size of that stack still come out of MIT.
- llanowarelves 4y agoIf MIT students are really so smart then they can probably learn what to learn on their own. If they can't, then they aren't so smart.
- MacroChip 4y agoMy university had Dijkstra's quote "Computer science is no more about computers than astronomy is about telescopes". They made us aware of tools and we were free to use them as little or as much as possible to do the science. I always assumed that software engineering degrees focused on tools more than computer science degrees (among other differences).
- _dain_ 4y agoThe following isn't aimed at you in particular, but in HN threads about the Missing Semester there will always be someone who earnestly repeats this stinking turd of a Dijkstra quote, so I'll put my rant here: Dijkstra was full of it. He wanted CS to be just a branch of abstract mathematics but that's never been the case. That's a retconning of history by people with math envy. Before Alan Turing had ever heard of the Entscheidungsproblem, he had already built simple mechanical computers with his bare hands. It's cousin to a stupid mindset you see in software engineering, that you can somehow be a good engineer while not knowing what your hardware is actually doing. That's how you get complicated architecture-astronaut systems with good theoretical big-O characteristics, that get crushed by a simple for loop written by the guy who ran a profiler and knows what a cache line is. We live in a world made of atoms, not lemmas. Research fields go rotten when they don't come into contact with reality enough: quantum computing, string theory, etc. And as for astronomy: knowing how telescopes are constructed, how they work, their optical characteristics, limitations, failure modes, all of that is essential to observational astronomy. And if you study astronomy, you sure as fuck are taught how to use a telescope!!! Astronomy as we know it didn't exist until we had good telescopes. Cosmological theories have risen and fallen on the advances in optical theory and engineering. Astronomy is very much about telescopes. What other field is so ashamed of its own tools? Like, art isn't about pencils, but art students are taught how to hold a pencil! Stop repeating this thought-terminating cliche.
- bazoom42 4y agoThanks for calling this out. I belive Knuth remarked that Dijkstra himself didn’t program the way he thougth CS students should.
- 4y ago
- mindcrime 4y agoA thought occurred to me when I read this bit. Two thoughts, actually. But they're related. We’ve also shared this class beyond MIT in the hopes that others may benefit from these resources. Thought one: they should make this an official OCW thing Thought two: OCW class resources should be a two way street, like open source development, not just a "throw it over the wall" model. Not that I'm criticizing MIT for making any content freely available, mind you. Any free, high quality, educational content makes the world an overall better place IMO. No, it's just that I saw this bit: Editors (Vim) and couldn't help but think "Great, but what about Emacs?" Which got me thinking something like "Well, why couldn't I, or somebody else (preferably somebody actually qualified) create a corresponding 'Editors (Emacs)' section and contribute it back?" I dunno, maybe it's a nutty idea. And certainly for the stuff that is released by OCW under corresponding open licenses, I suppose one could "fork" the class somewhere else and run it on a model where outside contributions are accepted. Anyway, this just got me thinking about this concept. EDIT: never mind, I actually just noticed that this particular course actually is on Github[1], and they do accept pull requests! Very cool. Would still be cool to see that approach become even more widespread for OCW courses (both from MIT and elsewhere). [1]: https://github.com/missing-semester/missing-semester/pulls https://github.com/missing-semester/missing-semester/pulls
- mrcsno 4y agoI studied motion graphics and learning Adobe AfterEffects was predominantly left up to the students. Nothing like fighting the software for hours the night before to animate something and, the next day, have my professor show me how it could be done in 15 minutes using a property or tool I didn't know existed. It was not only assumed but explicitly stated that AfterEffects and, Illustrator, which is commonly used alongside, were too time consuming to teach and we would just have to dive in on our own. In the interest of saving others from that pain: https://youtube.com/playlist?list=PLjNI3J96cKVKmujglFYJEkHzZwpwJ45LV https://youtube.com/playlist?list=PLjNI3J96cKVKmujglFYJEkHzZ... A YouTuber (Jake in Motion) made a series of videos demonstrating every effect and tool in AfterEffects. They aren't deep but it's a fantastic resource to get you started. I just wish this had been around when I needed it. Hats off to MIT for providing the same to others.
- mliker 4y agoWent through the syllabus. The content is really useful since I spent most of my post-graduate years reading man pages for various debugging tools.
- iamEAP 4y agoWhen I was at University of Denver, this was exactly the kind of thing covered in a course called “Unix Tools” and it was hands-down the most valuable quarter I spent there. I had assumed it was a standard thing across CS programs.
- marcbernstein 4y agoSame thing at my state uni. We used https://www.oreilly.com/library/view/unix-power-tools/0596003307/ https://www.oreilly.com/library/view/unix-power-tools/059600... as our textbook, and I still keep it on my shelf 20 years later.
- SunghoYahng 4y agoLooking through the links, I noticed most of the course was video, so I immediately turned it off. Compared to text, videos are an inefficient learning tool, and I think a lot of people aren't aware of that. Actually, I hate video learning materials. Though it's better than going to a classroom.
- feydaykyn 4y agoI love the content, and I'd like to add another semester in the same tone about people and communication : - how our brains work (in particular, emotions !) - group behavior theory - non violent communication - scientific method - design/ergonomy 101 - written communication (how to reach an understanding with someone through slack?)
- mettamage 4y agoI've learned most of this stuff at VUSEC. VUSEC: learn about systems security! In your own time figure out: - git - vim (you wanna be cool right? Btw, use vimtutor in the commandline ;-) ) - C (okay okay, it was a prerequisite, I didn't have it, haha, so learned some basic C in a week to do the assignments. I knew Java only at that point) - ssh - Many other things
- dcchambers 4y agoI've wanted to write a "what your comp sci program didn't teach you" book fit so long, based on what I've learned and found useful only after graduating and working professionally.
- ChrisMarshallNY 4y agoMy education was at an EET (technical school -redneck-dirty-hands-technician) school. A trade school. Very practical, and vocational, so they had stuff like this (but for E Techs). Universities tend to be less "vocational," so may skip some of the more practical stuff. Also, developing a curriculum is a huge pain in the butt, and keeping it updated, is even worse. Stuff like this tends to be highly topical, so it needs to be kept up to date, with almost no lag. But this is great.
- phamilton 4y agoThis feels like the things I learned from the Gentoo Wiki in the early 2000s. (The wiki crashed without backups and all was lost.) It was a very meaningful foundation to my career and this page similarly will help people a ton.
- thdespou 4y agoAlthough I commend the idea of practical learning, I wouldn't want to be graded for learning about bash or makefiles sorry. Those things should be self-taught.
- cosmojg 4y agoIt's actually kinda horrifying how many professional software engineers have almost zero working knowledge of these tools.
- amai 4y agoI think they should add a lecture on test driven development and CI/CD pipelines (e.g. Github actions). And I think after such a course people should be capable of using Github, but for that it also lacks a discussion of issues (or ticket systems in general) and pull requests. Instead of a whole lecture on Vim they should rather teach a modern editor like VS Code or how to use a real IDE like IntelliJ. With these modern editors you also get refactoring and a Gui for Git, which makes it much less painful to use. So all in all its a good start, but already outdated on several topics.
- westurner 4y agoThe course videos: "Missing Semester IAP 2020" https://youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J https://youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e2... Software Carpentry has some similar, OER lessons: https://software-carpentry.org/lessons/ https://software-carpentry.org/lessons/
- rldjbpin 4y agofrom reading the comments here, i get a sense that most people on hn assume that a cs degree is just for entering the software industry. not to discount the initiative itself, but bachelors in cs is more about the core cs theory that will be valid decades from now, unless the entire paradigm changes.
- adarshaj 4y agoThe content similar to this is being taught at Indian Institute of Technology Kanpur for well over a decade. It runs as 3 different courses seperated in different semesters depending on complexity and prerequisites: * CS251 - Computing Laboratory - 1 - https://www.cse.iitk.ac.in/pages/CS251.html https://www.cse.iitk.ac.in/pages/CS251.html * CS252 - Computing Laboratory - 2 - https://www.cse.iitk.ac.in/pages/CS252.html https://www.cse.iitk.ac.in/pages/CS252.html , and * CS253 - Software Development And Operations - https://www.cse.iitk.ac.in/pages/CS253.html https://www.cse.iitk.ac.in/pages/CS253.html
- xupybd 4y agoWow I wish I had been taught any of that before my first job.
- danmur 4y agoAll of mine are missing bar the first one
- dfee 4y agoThe content taught here is the highest payout thing you can learn, in my opinion. Certainly more important than actually writing code or learning algos. What this content covers should unlock iteration speed, which is the single greatest lever in learning and growing faster (on a computer). Thus it gives you more cycles to go back to improving your code, experimenting with algos, etc. Probably also highly correlated with upwards mobility in the software job market. Great seeing this under a common umbrella I can hand to students and new grads.
- whateveracct 4y agoI went to Purdue over a decade ago and we had a 1 credit hour lab that taught this stuff. Unix command line, git, bash, and finally some python. Like you said, it's been a complete game changer. I feel these skills continue to differentiate me from my peers in terms of how I can attack arbitrary problems bravely to this day.
- animal_spirits 4y agoThey still teach this stuff at Purdue. I graduated a few years ago and by far the most important class was about how unix works, moving around the command line and finally introducing us to vim
- tyhoff 4y ago<3 Me and a few others created this course in 2014. Glad you found it useful! I got so much joy out of the content creating the content for the lectures and labs.
- 6LLvveMx2koXfwn 4y agoI sat with a talented developer whilst we wrestled with a threading issue this past week. I wanted to inspect the value of a variable within a method during execution and asked him to set a breakpoint. He didn't know how to do that in the IDE, which he'd been using for over a year. Debugging is indeed a skill which needs learning.
- mydriasis 4y agoI love vim, it's great to know how to navigate it, but I have met very few people who use it professionally. I'd love to hear others' experiences, there.
- danmur 4y agoLots of people at my work use it, but I don't know if I'd consider it essential. If you can use any editor/IDE very fluently that's good; probably doesn't hurt to learn with vim if you don't already have that.
- justizin 4y agoif you ever find yourself needing to modify files at the shell on any sort of remotely modern unix/linux system, you're probably going to have vi or vim available. it's worth knowing an editor that doesn't require 6GB of RAM and a graphical environment, but it's probably not going to be most folks' primary editor. ;d
- IIsi50MHz 4y ago<6 GB RAM? Sooo many choices. I started[1] programming on a 5 MB machine with ~4 MB free.[2] But I'm not allowed a GUI? Ok… then, I'll choose an editor with a keyboard-driven menubar across the top (keyboard shortcuts appearing in the menus), a status line on bottom, and as many keycombos that match my preferred GUI as possible. Failing that, I can muddle along with Nano. Until some once-in-20-years task actually requires using an arcane 'editor' that assumes I live in PDP-11. (^: [1] Wellll… I sometimes forget typing BASIC from magazines into an Apple II and making small changes. [2] And it was luxurious…until I tried to fit 8 MB of a CD-ROM app into compressed RAM.
- deleted 4y ago[deleted]
- anthomtb 4y agoOf the 10 developers I work with the most, 9 are vim users and one is VSCode. The VSCode guy won’t shut up about it but then he is also the proselytizing type. Honest, I’m not that attached to vim and mainly keep using it because it’s what my colleagues use. If everyone suddenly switched to VSCode I would follow the herd. The only thing about vim that I love, and would not give up, is the keybindings and I am sure I could find a decent plug-in for that.
- grogenaut 4y agoman I forever wanted to have a class like this... but also know it would have gone way over my head, I learn by solving problems I actually have. But having known version control would have saved me so much time. I got by with judicious use of tar -gz
- ggm 4y agoOdd. We got taught how to use either teco or sos on tops-10 and it was in our first term (british university term based not semester based) in 1979. They taught command scripting and code management later. Debugging was a black art.
- oconnor663 4y agoAs far as cryptography is concerned, I think one of the best options these days is to teach the libsodium API. It's very rationally structured and well documented, and also available on every platform and in every language. Most importantly of all, there's nothing in there that you shouldn't use, which is one of the biggest problems with real world cryptography.
- hardwaregeek 4y agoIt's amazing how many CS programs fail to teach you even the basic tools of being a software developer. Yes, yes, CS is not programming, but there is a non-trivial amount of CS that is indeed programming, and that is generally what people do with their CS degrees, so it'd make sense for a CS program to teach the basics. Maybe even more than the basics.
- never_inline 4y agoIn India we usually call it "Computer Science & Engineering". But name is the only thing we get right in CS education.
- xavdid 4y agoCS programs prepare you first and foremost for a PhD in CS. They're great for learning the theory and fundamentals, but teach practical Software Engineering skills as a side effect.
- sroussey 4y agoThis very much varies by school. In California, undergrad as prep for grad school is the default for the UC system, but not so for the Cal State system.
- warner25 4y agoIronically, as a CS PhD student I spend an enormous amount of my time on the subject matter listed. There are very few research areas in which PhD students can get away with ignorance of the command line, shell environments, build systems, version control, debugging, etc. A common scenario is that I want to reproduce and extend some earlier research, and there's a GitHub repository for it that hasn't been touched for the last seven years, which was forked from an even older repository that some grad student hastily pieced together. And I need to run components of it on our high-performance computing cluster, where I don't have sudo privileges. So it's whole lot of moving things around between VMs and Docker containers, figuring out what to do about ancient versions of packages and libraries that are dependencies (especially everything that's still written for Python 2.7); either refactoring things to update it all, because I want to take advantage of newer functionality, or setting up some isolated environment with older releases of everything built from source.
- anonuser123456 4y agoI like how make is like half of a day. make can be a career in and of itself.
- automotua 4y agoReminds me of CMU's 15-131 GREAT PRACTICAL IDEAS FOR COMPUTER SCIENTISTS. Reminiscent of the old CMU days.
- WalterBright 4y agoCaltech's mechanical engineering program did not teach you how to use machine tools. The courses were all math, more math, lotsa math, a heapin helpin of math, with a side dish of math.
- hummus_bae 4y ago[dead]
- tsujamin 4y agoMy university (ANU in Australia) added a course very similar to this along side their first year courses. Didn’t get to see the results, but having tutored the years before the course’s introduction it was certainly… necessary
- superdude12 4y agoUCLA has a class for this: https://web.cs.ucla.edu/classes/fall22/cs35L/syllabus.html https://web.cs.ucla.edu/classes/fall22/cs35L/syllabus.html
- raydiatian 4y agoHmm, my education must have been better than I give it credit: I definitely was taught all of these concepts at uni.
- zamnos 4y agoWhich uni was this? Presumably you're a proud alumni, even if you don't want to donate money to them, you might at least consider repping them in this context for having taught you this stuff. Fwiwi, many CS programs focus on the science end of things like Big Oh notation, and utterly fail to discuss any day-to-day, practical applications of things.
- raydiatian 4y agoI try to minimize the amount of personal info I share. Hacker News community is smart people, and my thread history is triangulation data. Wouldn’t say I’m a particularly proud alum. They dropped the ball on a wide swath of other topics that I would consider integral. For instance, distributed computing should be a more common undergrad elective, not something you get blindsided by when you get out of school. “Sorry, you said Who-bernetes?” Now, I get that Kubernetes is a relatively young project, as is Docker and other containerization tech, but it is nonetheless staggering how school felt like it was 10 years behind the ‘cutting edge’ when I was there. They seemingly had no interest in educating engineers to go out and join the web community unless that individual sought self-guided study.
- throw_pm23 4y agoSome programs manage to sneak in some of this material in an "operating systems" or "network programming" or other such class where you do more hands-on programming. More so in technical universities and CS Engineering degrees (at least this is the case in Europe).
- ghaff 4y agoI don't think it's so much a case of better or worse--but rather that some schools see a place in the CS curriculum for a Computers, Programming, and Tools 101 course and others do not--figuring you know a lot of this stuff or can pick it up.
- mauro3 4y agoWe're teaching a course at ETH Zurich [1] where --besides the actual payload of solving partial differential equations (PDEs) on GPUs-- we put a lot of emphasis on "tools". Thus students learn how to use git and submit their homework via pushing to a repo of theirs on github, we teach testing and continuous integration, writing documentation, running code on a cluster, etc. In their final project, again submitted as a GitHub repo, they need to make use of all of theses skills (and of course solve some PDEs). Note that excellent work in this space is done by the Software Carpentry project which exists since 1998 [2]. [1] https://pde-on-gpu.vaw.ethz.ch/ https://pde-on-gpu.vaw.ethz.ch/ [2] https://software-carpentry.org/ https://software-carpentry.org/
- arendtio 4y agoThank you very much for the GPU course. Even though my college taught shell usage to some extent, when I asked about GPU programming it was considered a nerd topic back in 2009.
- Shacklz 4y agoAs an alumni, thanks a lot for doing this. Looking back, all the things that I've learned in just the first few weeks in the industry made writing code so much more productive - if only someone had shown some of it already during some early semester, even just during some assistant teaching hour, it would have saved so many hours. I remember specifically when one of the exercises for some compiler lecture contained unit tests the code had to satisfy, and I was like, wow, why didn't I already knew about this during algorithm classes earlier where I was fumbling around with some diff-tools to check my output. Let alone proper version control, now that would have been a blessing. In hindsight, it's a bit embarrassing that I didn't bother to, well, just google for it, but neither did my colleagues - I guess we were so busy with exercises and preparing for exams that we just didn't have the time to think further than that.
- hcks 4y agoWell I’m glad I didn’t have a full semester dedicated to trivial tools and boomer software
- sunjester 4y agoI was blessed with a badass AIX teacher. Thank you Coleman University for allowing hackers and AIX in your facility!
- theonething 4y agoIs there anything about AIX that differentiates it or makes it exceptional over other UNIXes? Not saying you're insinuating that. Just curious about AIX.
- pjmlp 4y agoYes, in many ways it is closer to Windows and IBM mainframe/micros semantics, even though it looks like UNIX on the surface. For example, it uses COFF (although it also does ELF), the shared libraries also use export files, are private by default, and allow lazy loading on demand when symbols are touched for the first time, just like on Windows. The TUI tooling to manage the OS is similar to what the other IBM platforms use. Not much I can remember, the last time I used Aix was in 2002.
- vishnugupta 4y agoBy a happy accident I did a 3 year masters program in India called Research Assistant program. I was a system-admin at the CS department's for 3 years. I had to do ton of stuff, like setting up and maintaining backups, installing tools such as DNS, mail servers, handling server failures, provisioning new servers, debug networking failures by inspecting router connections, so on and so forth. It was a lot of work but super fun and lots of stories. This was ~20 years ago so no SaaS tools etc., One had to do almost everything in house and we had to use free/open-source tools to save money. That experience taught me so much and I still use most of those learnings on a day to day basis.
- theonething 4y agoLots of laudatory comments here about this being essential but missing teaching but I have a different take. The content looks good, nothing wrong with teaching these things. But these things can be and are learned on the job fairly quickly for anyone interested enough in the field and with enough aptitude. In fact, I would say these things can be learned on your own time as a side effect of being interested in computers. So I would say it's good content, but not essential for a CS program.
- fierro 4y agoI don't think you're wrong that you can learn this stuff on the job, but a "primer" kind of class like this which surveys several useful tools helps new engineers develop pattern matching skills around how to continue self-teaching these kinds of things. Shell/scripty/vim-ey,linux-ey stuff can be really challenging to learn how to learn for some people.
- aerhardt 4y agoWhether you think that: a) Universities are places of higher learning that do not need to cater to industry b) There is an implicit social contract whereby universities should produce industry-ready graduates c) Something in-between … the skills taught in this course are as useful for the PhD candidate as for the junior software engineer. Why leave these out or up to the student, then? Furthermore, in many other academic disciplines, it’s very common to teach applied technique (eg, on writing essays or structuring research), is this any different?
- noisenotsignal 4y agoI think it’s dependent on the person learning the material. My college had a similar course and it was also highly regarded as useful by students. However, while I found the course fun I already knew most of the basics from my research job, and the advanced stuff hasn’t really come up again even in work (e.g. fancy git or gdb commands), so I’ve entirely forgotten it; my biggest takeaway is probably ctrl r for searching in shell. But I can see why a guided intro would be really helpful to someone who had no experience or some trouble getting started learning this kind of material (which is very different from programming or computer science). There’s probably an aptitude threshold past which the course’s value diminishes - don’t mean any disrespect to anyone, just trying to expand on your point. The top students either have already figured it out or will do so easily, so they might be better off doing something else with the time they would’ve invested in this. But for a lot of students learning about these tools and concepts can be a real force multiplier, more so than a random upper level course.
- eeue56 4y agoAt university, my co-founders and I took over teaching a few modules. We were eager to find a larger pool of students that had useful skills for a company, rather than those versed in just theoretical knowledge and Java. To provide the students with the skills they'd need in their career, we taught them how to use real world tooling: how to make a website from a design, how to use Git, how to write backend code, identifying security risks, how to use editors that weren't JEdit or Netbeans, how to use PhoneGap, how to deploy to a server, how to use Unix. As a result of our training, we managed to get some great students on-board. No longer were we surrounded by students who could make some ServiceFactoryBean, but instead ones who were fully capable of making real things in a real company. It's awesome to see that MIT has a similar programme - covering all the skills that we actually did teach. Too much of university is spent theorising and not spent making students employable.
- vandahm 4y agoThis is great! I can remember how painful it was to figure this stuff out when I was a student. Even with what I know now, I still learned a few things from browsing through the material.
- tomstuart 4y agoThe metaprogramming lecture [0] perpetuates the common misunderstanding of what “mocking” is [1], which is unfortunate. [0] https://missing.csail.mit.edu/2020/metaprogramming/#a-brief-aside-on-testing https://missing.csail.mit.edu/2020/metaprogramming/#a-brief-... [1] https://martinfowler.com/articles/mocksArentStubs.html https://martinfowler.com/articles/mocksArentStubs.html
- sethaurus 4y agoAt some point, we might need to accept that "mock" has become a generalised term which refers to many kinds of test-doubles. If it's being taught that way in universities and embodied that way in tooling, then the term has a new meaning.
- ukoki 4y agoI would add jq to the data wrangling section https://stedolan.github.io/jq/ https://stedolan.github.io/jq/ Being moderately competant at jq on a team that doesn't know jq is a super power.
- throwaway675309 4y agoIncidentally I found that chat GPT is excellent for asking for complex csv/json transformation queries and having it spit out the correct script.
- noisenotsignal 4y agoAny reason why you would use jq over Python? Certainly this can be attributed to my lack of knowledge in jq, but anything beyond a simple query is going to be done with Python for me. Beyond not having to look up query syntax, doing it in Python (or any script) is easier to read (both during and after writing it) due to auto formatting in an editor.
- Izkata 4y ago> Any reason why you would use jq over Python? To give an example from another context: This is a bit like asking "why would you use document.querySelector() instead of just looping over childNodes directly?"
- ukoki 4y agoReadability is important if you're writing actual code, but for things like debugging a giant JSON blob from an API request JQ is far faster IMHO.
- bouvin 4y agoThat's funny. This is much of what I teach my own IT Product Development students in the first year course The Web of Things at my CS Department, Aarhus University. My goal for the course was precisely to introduce tooling and techniques, and to habituate the students to their use through the construction of systems integrating Web and IoT. It's a busy seven weeks, but students further along often tell me that they learned a lot and are still using the same tools.
- andreistan26 4y agoAt my uni this is a course in the first semester, called introduction to operating systems, covering command line, git, encryption, bash and all that. It's pretty good for second year student that are TA's because it's quite some infrastructure needed to teach the labs(containers, configuring vms, custom autograders) so
- 50 4y agoOne of my favorite projects. I was most receptive to Athalye's[1] manner of teaching. 1. https://github.com/anishathalye https://github.com/anishathalye
- riedel 4y agoAlways think we should do this at uni and even for our PhDs. Some students are actually much better in control of those tools than their advisors, but it is still a minority. Always lacking the time to teach this. German system lacks incentives for actual sensible courses IMHO (applied universities might be a bit different) BTW: Pops up every year seemingly. E.g. 3yrs ago with more than 1000 comments: https://news.ycombinator.com/item?id=22226380 https://news.ycombinator.com/item?id=22226380
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- zamnos 4y agoWhat's has only a single, passing mention in the article, and none here, is how this fits in to MIT's curriculum. The content is supremely useful, but does not properly fit into a traditional college semester 10-week course schedule. MIT has this weird 'half semester' in which to fit this, and similar shaped content, for all disciplines. It is largely student run, as we see here. > Independent Activities Period (IAP) is a four-week period in January during which faculty and students are freed from the rigors of regularly scheduled classes for flexible teaching and learning and for independent study and research. IAP is part of the academic program of the Institute—the "1" month in MIT's "4-1-4" academic calendar. Students are encouraged to explore the educational resources of the Institute by taking specially designed subjects, arranging individual projects with faculty members, or organizing and participating in IAP activities. They may also pursue interests independently either on or off campus. http://catalog.mit.edu/mit/undergraduate-education/academic-research-options/independent-activities-period/ http://catalog.mit.edu/mit/undergraduate-education/academic-...
- btheshoe 4y agoI personally don't like the undertone of the class (tho very grateful that this material exists!!!) - this idea that universities are failing their students by not teaching them necessary material. I think a better phrasing is that students are failing themselves by not learning the material. I've personally never considered it the responsibility of my university to educate me - some of the classes are certainly useful for learning, but the ultimate onus falls on me to gain the skills that will lead me to success. I find it kind of distasteful how classes encourage a sort of passive victim mentality when it comes to learning - as if students need to be bribed with credits and cudgeled with a gpa to be forced to learn genuinely useful things.
- bmitc 4y agoYou don't consider paying tens of thousands of dollars as creating responsibility to educate? Of course, students need to be active in the learning process. But in my experience, it is more likely that professors and departments are terrible at educating than it is for students to not be motivated to learn.
- sokoloff 4y agoThere’s absolutely a responsibility to educate on the topics needed for the degree to be granted. This class is an adjacency to an EE or CS candidate. Are universities also failing their students by not offering/requiring a touch-typing class? I don’t think so, in large part because computer science is not programmer occupational training.
- Niksko 4y agoA CS course isn't programmer occupational training in name only. Practically, there aren't many CS research jobs and working as a programmer is more often than not the career path for someone with a CS degree. Universities can choose to be puritans about what CS is as you seem to be advocating for, or they can be realists and fill a very real gap in skills and knowledge. Your point about "the topics needed for the degree to be granted" is also a very purist view of the role of university. Is the role of university solely to teach a curriculum that aligns with some abstract ideal of what a particular degree title means? Partly it is. But again, that doesn't match the expectation and the practical reasons why students choose a course. There are very few students studying CS for the beauty of it. Those that do probably do end up in academia and don't need this course. The rest are there for jobs, and they certainly could benefit from this.
- meltyness 4y agoAh yes, using tmux so you can monitor your <endless search for for twin primes>.
- bmikaili 4y agoExcept this is just software engineering and has nothing to do with computer science.
- mattrighetti 4y agoThe data wrangling lesson was super enlightening! It's held by Jon Gjengset which is great at explaining stuff. I was super impressed with how much stuff you can do directly from the command line. I remember that after watching that lesson I straight up wrote two big bash scripts that made users download recorded lessons directly from WebEx and MS Teams.
- hnrodey 4y agoThis is great content. There is an entire generation of "Windows developers" that could use a course like this tailored to the MS stack.
- tkiolp4 4y agoAt my university they thought me: tons of mathematics, electronics, automata theory, compilers, and a bunch of stuff that “I don’t use on my day to day”. They didn’t teach me debuggers, profiling, or bash. I’m glad they did that. Because I ended up learning bash, profiling, debugging, etc. all by myself. I would have never learned by myself in my free time the pumping lemma, for instance. So, all in all, I’m grateful my uni didn’t teach me “useful” stuff.
- lizknope 4y agoI started college in 1993 and my school had a mandatory "Introduction to Unix Computing Environment" class for all incoming engineering freshmen. We learned the basics of the shell, file system, file editing, AFS ACL's for group projects, and more. It looks very similar to this MIT course which makes sense as our school's computing environment was based on MIT's Project Athena and AFS (Andrew File System) https://en.wikipedia.org/wiki/Project_Athena https://en.wikipedia.org/wiki/Project_Athena I looked and the same course is still mandatory for incoming engineering students. I'm in the semiconductor industry and everything runs on Unix / Linux. Back in 2000 we would get new grads that knew very little about Unix, command lines, or scripting. That kind of stuff is half my job. These days Linux is so popular that most of the new grads know this stuff.
- ghaff 4y agoEven though a lot of incoming students would have had PCs by that time, they'd mostly have been running Windows. As you suggest, as I understand it MIT really focused on Project Athena clusters for engineering work and people used PCs more for word processing, etc.
- rootusrootus 4y agoWe learned this exact stuff (okay, maybe not git, for obvious reasons) when I got my undergrad CS degree in the late 90s. I agree it's invaluable knowledge, but I don't think any reputable undergrad CS program is omitting this from their year 1 curriculum.
- ourmandave 4y agoIf your first job is at a Windows shop, good luck with that Powershell prompt.
- haunter 4y agoDoes it really matter nowadays with Windows Terminal and WSL? With WSL2 you can even run GUI apps!
- RomanPushkin 4y agoVim? Really? No text editor will make you a good programmer. I barely use/know Vim with 20 years of programming experience.
- adrianmonk 4y agoI think the point is to not leave yourself in a position where you're not proficient with any text editor at all. This is an actual issue. Some students show up at college without ever having written a line of code and without knowing how to open a plain text file, make changes to it, and save it. It doesn't matter that much which one you learn. If you already have an opinion about which one you like better, you're already where you need to be and can skip the section on editors. If you learn vim and don't like it, you can learn a different editor.
- IIsi50MHz 4y agoHaving only very rarely needed to use vi/vim or emacs, I'd say it does very much matter which editor(s) you learn. If you learned BBEdit, DOS Edit, TeachText, or WordPerfect 1.0 for UNIX, you'll be lost it vi/vim or emacs. What you'll think you know about "how editors work" will be actively harmful. I've seen and heard of people resorting to pressing the computer's reset switch when they can't figure out how get out of a 'real' textmode editor whose behaviour defies all commonalities. And good luck getting to the man-page if you can't get out of the editor. When I've needed to use one of those, I fortunately had been provided exact steps or had a 'real user' who could help me. I've had a few goes at the man-pages ages ago (which were not installed on one or two systems!), but paging through them just made 'real' editors seem even more like "not a usable editor" to me. Too dainbramaged by having grown up with 'intuitive' editors that give more affordances. [Edit: missing word]
- ClumsyPilot 4y agoThe first thing I do on any linux box is remove Vim for nano Vim is like Dvozak keyboard. Consistency and standardisation is more important than 1% performance improvement.
- Noumenon72 4y agoThe "data wrangling" chapter goes off the rails around the time it starts massaging the regex to handle the edge case "What if the user's username is 'Disconnected from'?" In my experience if you are using sed or awk on the logs you should give in and write some Python, or start using an actual log tool like Splunk. You'll never remember the awk syntax anyway. On the other hand, the idea of piping your log data to a statistics package or gnuplot is fascinating. It could have benefited from showing some output from those programs to illustrate the kind of things you can get from it.
- oregoncurtis 4y agoThis is such a great resource. Definitely useful as a newish SWE.
- dreamcompiler 4y agoKind of ironic that this course is from MIT and it teaches Vim without even mentioning Emacs. I get that they chose Vim because it's more popular, but it feels as weird as taking a course from Apple that teaches you how to use Windows.
- precompute 4y agoI think it's because it's a course focused on Linux and not Emacs. Different operating systems.
- readingnews 4y agoI have tried in vain to get this implemented at our uni. I can say a few things I find interesting: - Students used to get this stuff but no longer do, for example all workstations used to be unix, so when you left, you "knew" "unix" (shell, vim, etc) - Due to things like ABET, classes are crammed with need-to-know-for-accreditation info so, well, some items need to go by the wayside (many are in the MIT list) - There is a huge push, even by ABET, for security and crypto to be somehow integrated into nearly every class. - Professors seem aware that we need this "missing class", but it is hard for administrators to implement, because: Universities were pressured into lowering credits to grad, so some courses were removed, so there is no room left for another course. I am not pushing one way or another, and I only have the vision of working at two universities, but I think unis need to take a real hard look at their courses from a holistic point of view. I recall stumbling across that MIT course at least 5 years ago. I do not know many others who implemented something like that.
- devwastaken 4y ago"Universities were pressured into lowering credits to grad" Uni's are requiring more generals, especially humanities. The problem isn't credit requirements, it's accreditation, marketing, and politics.
- ModernMech 4y agoWe're trying to implement exactly this. I assign the MIT missing semester materials in my sophomore systems programming course, and we do all of our assignments using a CLI, C, GCC, and Git. Prior to my course, the students know only Java and IDE programming. One problem we have is that the prereq chain for our courses is very long, so adding another course as a pre-req to all others lengthens that chain. The MIT course offers probably too much info for our purposes, or at least info students don't need preloaded. Just basic CLI and basic Git clone/fork/pull/push are enough for up to probably Junior year. The problem is that the intro courses are so sanitized that students aren't even getting basic CLI until Sophomore year, which means by the time they graduate, they're behind where they should be imo.
- lallysingh 4y agoWe had this class, Unix, in freshman year (VT). This isn't normal?
- anarticle 4y agoExcellent guide! Lol at title though, I just realized how spoiled I was with my CS degree from Drexel. We had a UNIX tools and an Advanced Programming Techniques course. Both gold. Taught from the sausage dog book and the Unix Programming Environment book iirc. Totally standard texts I thought? Link to sausage dog (ha!): https://en.wikipedia.org/wiki/The_Practice_of_Programming https://en.wikipedia.org/wiki/The_Practice_of_Programming Advanced Unix: https://en.wikipedia.org/wiki/Advanced_Programming_in_the_Unix_Environment https://en.wikipedia.org/wiki/Advanced_Programming_in_the_Un... Some of it is old hat, but TPOP ages particularly well due to its lack of language specificity. Something we could all do with :).
- raarts 4y agoI teach various classes of CS in college. Have been trying to get this into the curriculum for a few years. It seems to be happening after the summer. Software engineers are way more productive if they know their tools.
- precompute 4y agoCould have done with a small guide to how the filesystem works and what XDG dirs are, and stuff like that. A lot of newbies trip on these while figuring out how configuring anything on linux works, because it's a very alien concept if you're moving from windows.
- WoodenChair 4y agoInstead of smashing tools into a single class, they should be incorporated early and throughout the curriculum so they can aid students as they progress. For example we have a sophomore fall class called Linux/Unix Programming that covers about half of these topics and a sophomore spring class called Open Source Software Development that covers the rest (and philosophy, history, etc.). We have an advantage for this sort of work, though, in that we’re not a prestigious research university, but instead a small teaching college that calls ourselves “professionally focused.” Meaning while we have a CS degree, we acknowledge that 90% of our graduates will become software developers. That approach means that while theory is still important, tools for software development are very intentionally incorporated as part of the core of what we teach. Think of it as a blend of CS and software engineering (which is also one of our concentrations for a deeper dive).
- anthomtb 4y agoThere’s a struggling developer on my team and this course covers everything he is having trouble with. Writing performant code? He does a fine job. Setting up an environment, navigating a couple terminals and getting code into revision control? He is completely lost. Someone basically has to do it for him. I’m going to send this course material to his manager* and hopefully a few weeks from now the team stress levels will be greatly reduced. *yes, company culture dictates that it would not be appropriate for me to flat out say to him “dude you suck and here’s a way to be better”.