[HN Gopher] The Missing Semester of Your CS Education
___________________________________________________________________
The Missing Semester of Your CS Education
Author : saikatsg
Score : 796 points
Date : 2023-02-25 05:40 UTC (17 hours ago)
(HTM) web link (missing.csail.mit.edu)
(TXT) w3m dump (missing.csail.mit.edu)
| anarticle wrote:
| Excellent 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
|
| Advanced Unix:
| 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 :).
| eeue56 wrote:
| At 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.
| [deleted]
| WalterBright wrote:
| Caltech'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 wrote:
| [dead]
| 2OEH8eoCRo0 wrote:
| I'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 wrote:
| [dead]
| MacroChip wrote:
| My 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).
| throwaway675309 wrote:
| Completely agree. Things like shell scripting, debugging tools,
| IDE usage can all be naturally picked up on the job given
| whatever tools that they recommend you use at their company.
|
| You know what you're not going to be able to pick up at your
| first software engineering position? Discrete mathematics or
| linear algebra.
| jrpelkonen wrote:
| Not trying to dismiss the importance of knowing discrete math
| etc. in general, but I would posit that vast majority of
| entry level swe positions require no knowledge of it.
|
| However, knowing the tools of the trade is something that is
| invaluable. And yes, it can be picked up on the job, but
| deliberate learning and practice is more effective and less
| stressful.
| matwood wrote:
| > Not trying to dismiss the importance of knowing discrete
| math etc. in general, but I would posit that vast majority
| of entry level swe positions require no knowledge of it.
|
| Directly, sure. I do think there is something about the
| rigor of the math thought process that lends itself to
| writing software. Thinking through algorithms and proofs is
| really not much different than writing code or debugging.
|
| Even with tools I think learning concepts are better. I've
| used so many IDEs through my career, but they are all
| roughly the same conceptually. One thing that has helped
| though is embracing vim keystrokes and using them
| everywhere.
| vitaflo wrote:
| This was my first thought too. The tools talked about in the
| link are useful but they aren't really computer science. This
| was also hit home in my CS courses. I was being taught the
| science behind computers, not necessarily the practical
| application of them.
| _dain_ wrote:
| The 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.
| racedude wrote:
| Purdue 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 (see
| lectures in sidebar). This course is actually how I found out
| about Hacker News!
| vandahm wrote:
| This 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.
| mindcrime wrote:
| A 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
| anthomtb wrote:
| There'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".
| lizknope wrote:
| I 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
|
| 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 wrote:
| Even 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.
| dfee wrote:
| The 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.
| tkiolp4 wrote:
| Indeed. While I think learning algorithms and ds is a non-
| negotiable thing, in 90% of the companies out there in 90% of
| the situations one will never have to write a binary search
| from scratch or implement a queue from scratch. On the other
| hand, profiling, debugging, glueing things together via bash,
| etc., that's what distinguishes you from the colleges who only
| write passable code.
| Encrust6221 wrote:
| I dropped out after a year of college and have since weaseled
| my way into a dev position, your observation could not be
| more true in my experience. I've since strongly considered
| going back to school for a degree, but as interesting and
| _probably_ useful some of the material may be, I 'm not
| convinced it's worth it as an investment into making me
| better at my job.
|
| If only I could use 529 funds on some of these online course
| providers.
| starkd wrote:
| But writing implementing some of those basic data structures
| is some of the funnest things to do in uni.
| 6LLvveMx2koXfwn wrote:
| I 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.
| marginalia_nu wrote:
| How would a breakpoint help with debugging a concurrency
| issue?
| roflyear wrote:
| I learned this stuff without having people show me.
| bmitc wrote:
| It's interesting. I mainly use functional-first languages,
| and I rarely need breakpoints. Programming is much more
| compositional with certain languages.
| fsociety wrote:
| I agree you should know how to use a debugger, however will
| also note that some companies mandate use of a specific IDE
| (or heavily encourage).
|
| I have seen devs scoff at the thought of print debugging, but
| I recall that in systems programming there are many times you
| can't use a debugger or need to rely on other tool.
|
| I'd rather schools teach the concept of step debugging vs
| runtime debugging. Teach students to try to understand the
| code, make hypotheses, and verify them.
|
| I have seen some people use a debugger solely because they
| only know how to step debug. Meaning they start from main or
| another entry point and step through every line of code.
|
| My point being that, you can't judge a developer by if they
| use print statements or a debugger. Judge them by the
| methodology of how they debug.
| ModernMech wrote:
| > I have seen devs scoff at the thought of print debugging
|
| Next time they do, ask them to recommend a better method of
| debugging that works across generally all languages,
| compilers, IDEs, and platforms with next to zero
| configuration.
| a_e_k wrote:
| The key thing about print debugging for me, that I've
| never seen a typical debugger handle well, is what I like
| to think of as "temporal debugging":
|
| Taking a program trace from the print debug statements,
| grepping through it repeatedly to filter down to certain
| events of interest, looking at the interleaving of those
| events, and figuring out the order that things happened
| in to cause it to go off the rails. That sort of thing.
| (To be fair, time-travel debuggers can start to get at
| this, but those are pretty uncommon. Traces, as you say,
| work almost everywhere.)
|
| Or better yet, compare the traces between working and
| non-working runs to see how they differ. I've looked at
| diffs of traces this way before. (Sometimes I'll first
| use a small script to renumber pointers in traces by
| order of appearance.)
|
| I've also used this sort of strategy before for debugging
| rare threading or other non-deterministic issues. Have
| the shell run the program in a loop, saving each run's
| trace and results to a different file, go off and get
| lunch, come back and see if anything failed. Then look to
| see if any of the runs failed and look for the structural
| differences between the working and non-working traces.
|
| I can't imagine sitting and stepping through in a
| debugger 100+ times in the hopes that maybe this time, it
| will be the run that's just different enough to trigger
| the bug and that the debugger itself won't prevent the
| issue from manifesting. Not to mention, trying to
| remember the steps from all the good runs and spotting
| where the bad run goes bad before you've stepped to far.
| No thank you.
|
| I think people really underestimate print debugging.
| Debuggers are fast and easy for simple bugs, sure, but
| there's powerful stuff that you can only really do with
| printed traces.
| Serow225 wrote:
| > I can't imagine sitting and stepping through in a
| debugger 100+ times in the hopes that maybe this time, it
| will be the run that's just different enough to trigger
| the bug
|
| Isn't that where things like breakpoint conditions, data
| breakpoints ("break whenever X value/field changes"), and
| dependent breakpoints, work pretty dang well? You just
| set up the appropriate situation and let it run until it
| breaks
| JackFr wrote:
| Print debugging is one of the best ways to learn about
| buffering and the difference between stdout and stderr.
| Kwpolska wrote:
| > I agree you should know how to use a debugger, however
| will also note that some companies mandate use of a
| specific IDE (or heavily encourage).
|
| The debuggers in most popular IDEs (IntelliJ IDEA/any
| JetBrains IDE, Visual Studio, VSCode, Eclipse) work the
| same way. You set breakpoints (typically by clicking
| somewhere around the line number), step into and out of
| functions, and look at the memory state. If you learned how
| debugging works in IDE X, you can easily switch to IDE Y
| without having to learn much.
| codemonkey-zeta wrote:
| The biggest hurdle for beginners when using built-in IDE
| debuggers in my experience is the requirement to set up
| the debug run configuration to properly execute their
| program. Even though this amounts essentially to "how do
| you run the program on the command line? Write that in
| the IDE configurator", newbies don't know how to run the
| program from the command line (and can't debug any
| startup errors they might get), so can't properly set up
| the debugger in their IDE, and revert back to print
| debugging everything.
| theonething wrote:
| A talented developer who doesn't know how to set a breakpoint
| sounds contradictory to me.
| crispinb wrote:
| As an untalented developer, I used to make heavy use of
| debuggers, and knew them well. Currently, as a still
| untalented developer, I've fallen out of the habit of using
| them and don't know how to for my current toolchain.
|
| Neither situation was at all related to my talent (or lack
| thereof).
| noisenotsignal wrote:
| You don't need breakpoints all the time though. If you're
| familiar with the code (or just "talented"), you might have
| an intuition for what the problem is and it's faster to
| just think through it (and maybe write a few quick prints)
| instead of interrupting your train of thought setting
| breakpoints, clicking continue, waiting for the IDE to
| freaking load the debugging session ( _cough_ Visual
| Studio), rerunning the test, etc.
|
| Besides, every IDE has a different way to debug, so they
| might just not be familiar with the interface. I can't tell
| you exactly how to debug in VSCode even though I've used it
| the most. I've had to run a debugger only a handful of
| times in the past couple of years and it's always for
| codebases that are more tangled (e.g. .NET where there's
| interfaces everywhere).
| 8n4vidtmkvmk wrote:
| +1. i just used a debugger today at my work for the first
| time in 4 years by coincidence. normally i just throw a
| couple prints and rerun the test and today i was reminded
| why. takes like 8 minutes to run the test in debug mode.
| lots of useful info in there but usually i can guess
| where the error is without it. it was indeed good at
| pinpointing the sigsegv though.
| noelwelsh wrote:
| There is a world of programming where debuggers don't serve
| much purpose. Individual microservices are usually trivial,
| but push complexity into the interactions between services.
| Debuggers are not much use there; distributed tracing is
| more relevant. Functional programming, which is a growing
| part of the industry, really emphasizes code you can easily
| reason about. That's arguably the whole point of functional
| programming. Debuggers don't get much use there either.
| sanderjd wrote:
| The distributed tracing point makes sense, but I think
| debuggers are still quite useful for functional code.
| Though maybe less commonly needed than just the repl.
| Eji1700 wrote:
| I'm not a talented developer but I did spend my day on an
| F# piece of code that builds a databale based on a record
| type using reflection (and eventually realized it was
| going to need to be recursive) and I probably would've
| just quit if I wasn't allowed to use a debugger.
|
| Now maybe if I was better that wouldn't be the case, but
| even the cleanest "wish i thought of that" functional
| code i've seen still looks like it'd be easier to fail
| fast using a debugger with.
|
| In fairness though, I will admit I use the debugger a lot
| less when i'm not screwing with reflection on generic
| types or whatever because runtime errors just happen a
| lot less in functional styles. Usually if it compiles, it
| runs, because the compiler can sanity check the code
| better than you can.
| tokinonagare wrote:
| > I'm not a talented developer
|
| > [uses F#]
|
| That has to be humblebragging. The average .net developer
| is _terrified_ of or doesn 't even know about F#.
| bmitc wrote:
| It's an interesting phenomenon because F# is far easier
| to learn than C#.
| bazoom42 wrote:
| Perhaps if you already know C#, otherwise I doubt it. Of
| course it depends on ones prior experience, but F# is
| functional but still requires you to understand OO in
| order to interact with the framework.
| pyjarrett wrote:
| Knowing a good bit of Rust helped me considerably, due to
| the commonalities of being expression-based, pattern
| matching and sum-types. F# almost feels like a more
| functional and GC'd Rust.
| Eji1700 wrote:
| I think it's harder if you already know C# or some other
| OO language. I really think it would be easier, or about
| the same, to teach a raw beginner the basics of F# vs C#.
|
| The only reason F# winds up feeling harder isn't so much
| how F# works, but simply because the entire dotnet
| environment was built for C# first, so you do need to
| know how to handle the C# style. I do think that if you
| could just pick one and then suddenly have every library
| support it's styles, F# would probably be easier overall
| because it's just got a lot of nice features built in
| that make updating your code so much easier.
| nickpeterson wrote:
| I've encountered the same thing. I'm a terrible
| programmer but find f# way clearer than most C#/java. But
| I work with tons of great developers who would rather cut
| off their finger than learn f#, it bothers me because it
| exposes some fundamental difference between us I dont
| like to believe exists.
| OOPMan wrote:
| > I'm a terrible programmer
|
| Oh? Did you win some award? I'm curious as to how you're
| determining this?
| politician wrote:
| Job vs craft. Or, maybe, they just don't want to pollute
| the codebase with a new thing that breaks. Consistency is
| a virtue in old codebases.
| Eji1700 wrote:
| It's really not. I'm quite terrible from any industry
| perspective.
|
| F# isn't hard, it's just different. Hell in many ways i'd
| argue it's much much easier once you get used to it. It
| doesn't have the support C# does so often you're stuck
| with a library that WILL work but doesn't have
| documentation for doing it in F#, and that can lead to
| struggles, but that's not really a sign of being a good
| coder.
|
| Most dotnet developers could probably code circles around
| me in F# if they knew it existed/gave it a chance.
|
| Personally I stuck with it because it had the low code
| look of python with strong typing. It took a bit to wrap
| my head around some functional stuff (basically map/iter
| = foreach and if you want to update something on each
| loop you probably want a fold, or more likely a built in
| function), but once I got over that hurdle it was pretty
| smooth sailing.
|
| The irony is that by far the hardest part is the library
| thing, which your average dotnet dev would handle WAAAAY
| better than me.
| ModernMech wrote:
| Is the average .net developer terrified of F# because
| they're not talented enough, or because it's different?
| Eji1700 wrote:
| It's 100% the latter. I get "ok we don't want to mix
| codebases" and that's fine, but if you can code in C# you
| can probably get up and running in F# in a week, maybe a
| month if you struggle with some of the concepts.
|
| One major issue I do see coming from the C# side is "well
| how do I do this then?!", which often the answer is "you
| don't, because you don't need to" or "well what if it's
| more performant to do it mutably!" well then thankfully
| F# can absolutely do that.
|
| If you keep an open mind it's really a very clean and
| simple language, but in an age where half of development
| is importing 8 well known libraries, not being the main
| supported language is a major weakness.
| pyjarrett wrote:
| I normally write C++, but I've also written in Rust,
| Python, Ruby and bunch of other languages. I've never had
| trouble with a programming language until Haskell, and
| had to accept that I'm just probably just not smart
| enough to do it.
|
| However, I wrote my first thing a port of a small C# tool
| of a couple hundred lines, to F# in about an hour. It's
| been about a week now, and things are considerably
| smoothing out.
|
| To be considered niche, the F# tooling has been great.
| Also, having the .NET libraries available adds a lot of
| built-in capability.
| noisenotsignal wrote:
| Agreed, when I commented earlier I was also thinking
| about mentioning something similar with regards to
| classes of bugs due to interactions between systems.
|
| Unless you have a setup where you can easily run one
| system with a debugger attached while connecting it to
| everything else, you're basically restricted to running a
| debugger for bugs that can be reproduced locally.
| tkiolp4 wrote:
| Meh. I use the right tool for the job, and most of the
| time, a simple print statement put in the right place beats
| any debugger. Certainly the debugger has helped me in the
| past, but maybe one or two times only. Besides, putting a
| print statement costs nothing, and one knows exactly how to
| do so. Debuggers vary wildly: terminal, IDEs, etc.
| sidlls wrote:
| I haven't been shocked that fellow engineers don't know how
| to use a debugger for at least ten years. Most jobs in the
| industry can be done adequately without getting into tools
| that low level.
| Transfinity wrote:
| Hi! I'm that person! Senior engineer, decade of experience.
| I've used debuggers in the past, both for running code and
| looking at core dumps, but I really don't find them to be
| cost effective for the vast majority of problems. Just
| write a print statement! So when I switched from C to
| python and go a couple jobs ago, I never bothered learning
| how to use the debuggers for those languages. I don't miss
| them.
| lordnacho wrote:
| I find I use the stepping debugger less and less as I get
| more experienced.
|
| Early on it was a godsend. Start program, hit breakpoint,
| look at values, step a few lines, see values, make
| conclusions.
|
| Now I rely on print statements. Most of all though, I
| just don't write code that requires stepping. If it
| panics it tells me where and looking at it will remind me
| I forgot some obvious thing. If it gives the wrong answer
| I place some print statements or asserts to verify
| assumptions.
|
| Over time I've also created less and less state in my
| programs. I don't have a zillion variables anymore,
| intricately dependent on each other. Less spaghetti, more
| just a bunch of straight tubes or an assembly line.
|
| I think it's possible that over the years I hit problems
| that couldn't easily be stepped. They got so complicated
| that even stepping the code didn't help much, it would
| take ages to really understand. So later programs got
| simpler, somehow.
| nradov wrote:
| I find I use the stepping debugger more and more as I get
| more experienced. Watching the live control flow and
| state changes allows me to notice latent defects and fix
| them before they ever cause actual problems. Developers
| ought to step through every line of course that they
| write.
| jbverschoor wrote:
| It's because we moved to request-response, and allow for
| deep linking / saved states. Soo the state of the session
| is more easily reproduced
| marginalia_nu wrote:
| I think there's a sort of horseshoe effect where both
| beginners and some experienced programmers tend to use
| print statements a lot, only differently.
|
| When you're extremely "fluent" in programming code and
| good at mentally modelling code state, understanding
| exactly what the code does by looking at it, stepping
| through it doesn't typically add all that much.
|
| While I do use a debugger sometimes, I'll more often form
| a hypothesis by just looking at the code, and test it
| with a print statement. Using a debugger is much too
| slow.
| sanderjd wrote:
| In what way is using a debugger "slow"? I find that it
| speeds up iteration time because if my print statements
| aren't illustrative I have to add new ones and restart,
| whereas if I'm already sitting in the debugger when my
| hypothesis is wrong, I can just keep looking elsewhere.
| jcparkyn wrote:
| > Using a debugger is much too slow.
|
| This varies, but in a lot of environments, using a
| debugger is much _faster_ than adding a print statement
| and recompiling (then removing the print statement).
| Especially when you're trying to look at a complex
| object/structure/etc where you can't easily print
| everything.
| dpflan wrote:
| I think there is a bit of a paradox, debugging can seem
| heavy, but then when you've added enough print statements
| you've spent more time and added more things to clean up
| than if you had just taken the time to debug, well, you
| should have debugged. But you don't know until you know.
| This seems to also appear with the "it would've been
| faster to not try to automate/code a fuller solution"
| than address whatever you were doing.
| arghnoname wrote:
| I am also this person. I'm a systems programmer (kernel
| and systems software, often in C, C++, golang, bit of
| rust, etc)
|
| What I find is that if my code isn't working, I stop what
| I'm doing. I look at it. I think really hard, I add some
| print statements and asserts to verify some assumptions,
| and I iterate a small handful of times to find my faulty
| assumption and fix it. Many, many times during the 'think
| hard' and look at the code part, I can fix the bug
| without any iterations.
|
| This almost always works if I really understand what I'm
| doing and I'm being thoughtful.
|
| Sometimes though, I don't know what the hell is going on
| and I'm in deep waters. In those cases I might use a
| debugger, but I often feel like I've failed. I almost
| never use them. When I helped undergrads with debuggers
| it often felt like their time would be more productively
| spent reasoning about their code instead of watching it.
| throwaway2037 wrote:
| Your list of programming languages excluded Java. Please
| ignore this reply if Java is included.
|
| Are you aware of the amazing Java debugger feature of
| "Drop to Frame"? Combined with "hot-injection" (compile
| new code, then inject into current debug'd JVM), it is
| crazy and amazing. (I love C#, but the hot-injection
| feature is much worse than Java -- more than 50% of the
| time, C# compiler rejects my hot-injection, but about 80%
| of the time, JVM accepts my hot-injection.) When working
| on source code where it is very difficult to acquire data
| for the algorithm, having the ability to inspect in a
| debugger, make minor changes the the algorithm, then re-
| compile, inject new class/method defs, the drop to frame,
| the re-exec the same code in the same debug session is
| incredibly powerful.
| icedchai wrote:
| It depends what you're doing. Sometimes inserting a print
| and capturing state works. Sometimes you're not sure what
| you need to capture, or it's going to take a few
| iterations. That's where pdb / breakpoint() / more
| interactive debuggers can be very helpful.
| wiseowise wrote:
| What makes you talented?
| theonething wrote:
| > I never bothered learning how to use the debuggers for
| those languages. I don't miss them.
|
| This could be causal.
| thaumasiotes wrote:
| You'd have to assume that the python and go debuggers do
| something that C debuggers don't do.
| actionfromafar wrote:
| Or assume that python debuggers aren't as nice to use, or
| that python does not lend itself to inspecting weird
| memory and pointer dereferences, or a bunch of other
| possibilities.
| softsound wrote:
| Most of what I worked with code wise growing up was
| either very niche or setup in such a way that debuggers
| weren't an option so I never really used them much
| either. I don't understand their appeal when print
| statements can give you more context to debug with
| anyway. I'm definitely no senior but I'm used to solving
| things the "hard way" as one developer told me. He
| wondered how I could even work because of how "bad" my
| tools were but I didn't know any better being self taught
| and with certain software it's just not compatible with
| the tools he mentioned.
| kernal wrote:
| True. A talented developer abuses the hell out of
| breakpoints by using hit counts, conditions and trigger
| points.
| ordu wrote:
| I didn't use debuggers since switched from C to Rust. By
| the way I switched from emacs to VSCode and I do not know
| how to debug here. I never used debugger with lisp.
| Debugging is a language dependent technique.
| tmtvl wrote:
| I like debugging Lisp because the debugger is built in. A
| _break_ here, an _invoke-debugger_ there and the REPL
| takes me where I want to be.
| alfiedotwtf wrote:
| I read a long time ago, that either Kernighan or Ritchie
| said they never use a debugger and just sprinkle printf()
| statements.
| sfpotter wrote:
| Concluding that using printf to debug is superior to
| using a debugger would be a mistake!
|
| I've been programming in C for nearly 20 years and
| primarily used printf for debugging for the first 12-15
| years, and have used debuggers more and more. I use
| Emacs, and its gud mode is so nicely integrated into
| everything that using gdb is truly much, much faster than
| the alternative. I don't use print debugging at all
| anymore.
|
| It takes less time and cognitive overhead to just stop
| the program on the same line you would have inserted your
| printf, but you can now inspect the entire program state.
|
| Obviously I'm not saying anything revelatory if you use
| an IDE on a regular basis... I guess this comment is for
| the folks who eschew IDEs.
| wojciii wrote:
| This works well mostly and I use this. I usually
| implement a logging system where I can enable/disable
| individual components but use a debugger to examine
| functions which are not behaving as intended.. or core
| dumps. Usually in connection with an unit test that fails
| or started failing caused by my changes to the codebase
| that I'm working on.
|
| Logging alone is fine, but it can often be difficult not
| to drown in information. I do embedded programming in C
| mostly.
| imetatroll wrote:
| I don't usually use breakpoints in part because I use
| neovim and in part because... I seldom truly need them. Who
| are these people and what are these problems where stepping
| through method calls etc is _actually_ necessary? I find it
| hard to believe. I 've been successfully programming and
| problem solving this way for over 15 years.
| fooker wrote:
| There are large categories of software engineering where
| debuggers are not used that much.
|
| I work on compilers and debuggers are more of an hindrance
| than help when trying to fix a compiler bug.
|
| I believe there is a similar situation for distributed
| systems.
| jbverschoor wrote:
| Well. a big part is curiosity, and apparently he isn't
| curious not interested in what his tools do.
|
| I used to read every help file on windows / visual c++, the
| FreeBSD manual, plowed through the file system and tested
| this it. Just because I was curious
| [deleted]
| tkiolp4 wrote:
| There's limited time. One cannot vey curious about all the
| stuff related to programming, so we must be selective.
| jbverschoor wrote:
| Sure.. that's the story of the lumberjack with a blunt
| axe.
| Jensson wrote:
| Nah, debuggers are useful but hardly necessary to do your
| job well. People have been productive at programming long
| before they had many useful tools at all, the most
| important thing will always be how well you understand
| the program you are writing and not how you use your
| tools.
| lordnacho wrote:
| I have this feeling that the kids who appear better at uni are
| the ones who happened to pick up certain not-quite-programming
| skills before they started. Basics of networking, how
| installation of programs happens, how to use the command line,
| that kind of thing.
|
| I looked over her shoulder as my wife was doing a CS degree,
| and I realised there's a bunch of these little things that make
| life a lot easier if you know them.
| eslaught wrote:
| This doesn't fit my experience.
|
| I mean, yes, this was me. I came in knowing most/all of this.
| I knew six (or more?) programming languages, had at least
| played with CVS/SVN, had installed Linux (read: fought with
| the Linux bootloader to get my AMD CPU to boot without
| crashing), had dipped my toe in a few open source
| communities.
|
| But I was a tutor in college and I interacted with a bunch of
| people who didn't come in with any of this experience. Many
| of those people struggled, but I also know a bunch of people
| who came into CS knowing nothing, loved it, and went from
| zero-to-sixty faster than even the people who came in knowing
| a lot.
|
| I'm still not sure I can identify what the ingredient was,
| but experience alone is not enough to explain it.
| [deleted]
| matwood wrote:
| I went to college in the late 90s. Didn't even own a
| computer until I was a freshman (used my loan money to buy
| one). Math and science had always been my subjects, so I
| started college pre-med. But, this new computer I just
| bought kept sucking me in. I'd stay up all night reading
| how to make it faster, learn all the tricks, and finally
| make it do what I wanted through programming. Next semester
| I took a programming class just to see how it went, then
| dropped everything, and switched majors. I got a part time
| job writing custom software for local companies as a
| sophomore/junior (late 90s dotcom was just ramping), and I
| guess it has all worked out ok.
| joenot443 wrote:
| In my class 5 years ago, the differentiating factor was
| whether the kids who grew up online or not. Students like
| myself or my roommate who'd spent their formative years in
| front of a computer, not because they had to, but because it
| seemed like the thing to do at the time. I never realized how
| much I was learning during the time I spent scripting
| RuneScape bots and writing toy "viruses", I did it because it
| was more fun.
| ccity88 wrote:
| I got my start writing RuneScape bots too! It's such a
| shame because speaking to the younger generation (I call
| them the TikTok generation) they don't have the same
| experience with the web the way we did. For them, the
| internet is closed off, a few big websites like Facebook,
| youtube, twitter. They use their phones primarily to access
| the web, and a laptop is exclusively used for school work;
| "A PC? Why would I need that when I can game on my
| XBox/PS5??". The internet really did change so much in the
| last decade, and in my honest experience computer literacy
| has gone down not up as we've all expected
| ghaff wrote:
| There's definitely a thing with CS that, at least at more
| elite schools, there's an assumption that you more or less
| know how to program--at least a language like Python--and you
| also more or less know your way around a computer well enough
| to use it as a tool for programming. (Or you pick it up
| quickly on the side along with your full course load.)
|
| This is more or less unique among college majors outside of
| some arts disciplines like music. Yes, there's a requirement
| for some secondary school algebra and some basic science but
| an electrical engineering major could basically have never
| assembled a circuit before attending college and probably
| wouldn't be at any particular disadvantage.
|
| And, per the original post, MIT is certainly one of the
| institutions that does this. The 6.001 MOOC(s)--basically
| intro to algorithms--teaches a bit of Python on the side but
| clearly you're intended to mostly learn it on your own.
|
| (By contrast, back in the day, I took a FORTRAN course as
| part of a non-CS engineering major. The assumption was that
| you had never touched a computer before.)
| closeparen wrote:
| My school handled this cleverly by taking people with prior
| programming experience into a Haskell sequence, which
| suitably kicked our asses to the same degree as what the
| first-time programmers were getting.
| a_e_k wrote:
| My college's CS program did the same, but with Scheme
| back in the day.
|
| I can't complain, since I was introduced to Emacs along
| the way, which I still use heavily to this day. And while
| I don't really use Scheme anymore, it made Elisp trivial
| to figure out.
| helloooooooo wrote:
| UWaterloo does this.
| tobych wrote:
| My CS course at the University of Sussex, UK did this (in
| 1988) with ML, the functional programming language.
| Plenty of us had already been coding in C or Pascal
| before starting at college. None of us had done any
| functional programming. I loved ML: it seemed all elegant
| and beautiful and magical.
|
| When I hear people starting their CS degree with C++ or
| Java, it makes me cringe.
| linhvn wrote:
| MIT has an expectation that students would cover their
| programming skills via internships or outside jobs, and
| thus they focus on teaching CS which is quite hard to pick
| up on your own. Unlike frameworks or trends which change
| every 2 years, fundamentals are quite hard to change and
| can carry you quite far if you know how to apply it
| correctly.
| lordnacho wrote:
| But is it common for kids to be taught how to code before
| they come to uni? I would imagine it's not that easy to
| find someone to teach that sort of thing, so then the only
| kids who graduate high school with any tech skills are the
| ones who did it themselves.
|
| Your point about engineering is exactly right. I built a
| working radio in my first term, having never done anything
| like it before, save for acing some physics exams with
| minimal electricity sections. When we came to coding, I had
| mucked about a bit with a computer, but I also found other
| students who'd worked at Microsoft. Wide wide range, and a
| lot of people of course ended up getting that fellow to
| email them the solution.
| ghaff wrote:
| Even if it's more like hacking around in Python than
| being "properly" taught, I assume that it's pretty common
| for a technically-inclined and motivated high school
| student to play around with a Raspberry Pi. I imagine I'd
| be doing so if I were in high school today. In addition
| to books, there are also some pretty breezy intro to
| programming MOOCs out there that wouldn't be out of the
| reach of a smart high-schooler.
| bjourne wrote:
| I had a guitar tutor once and I asked him if I honestly had
| a chance to get into the Royal College of Music. He said
| absolutely, no problem, as long as you practice for at
| least two hours per day. Every day. For the next ten
| years... High-level CS is the same and I don't see any
| reason why it should be different. There is just no, or
| very little, time to teach introductory programming classes
| at most universities.
| whynotminot wrote:
| Am I unique in not romanticizing computer science?
|
| I see it more as a trade. There can certainly be some
| beauty to it. I'm sure coal miners hold some of their own
| in special regard too.
| throwaway675309 wrote:
| Software development is a trade, if all you aspire to be
| is a WordPress or frontend developer then you don't need
| a fancy degree, you can just as easily go to a 6 to 8
| week code camp for that.
|
| Computer science is a pathway for those that want to
| delve deeper, and that necessitates rigorous fundamentals
| in applied mathematics and information theory.
| jamal-kumar wrote:
| Coal miners also do stuff like massively die in gas
| explosions and are kind of a poster child for labour
| exploitation. Wouldn't it be crazy if this line of work
| held the same prestige to hold in special regard?
| seadan83 wrote:
| There is beauty in just about any trade that is well
| done. To the extent this is romanticized is up to you.
| I'm not a big fan of the professionals that feel it is
| 100% trade. On the flip side, the 100% romantics are not
| ideal either IMHO - too focused on technology for
| technology sake.
| mixmastamyk wrote:
| It sounds like you are thinking of software engineering,
| which is an adjacent field often conflated. CS is about
| pushing current boundaries and inventing the future.
| berkle4455 wrote:
| Well after they spend 4-8yrs of their life learning CS,
| damn right they're going to romanticize and gatekeep it
| every chance they get.
|
| Meanwhile I agree with you, software engineering jobs are
| a trade 90% of the time. It's why so many highly educated
| folks are being laid-off right now, while the doers keep-
| on building and making bank.
| anon7725 wrote:
| > while the doers keep-on building and making bank.
|
| It's spelled Doerr
| wardedVibe wrote:
| I didn't start programming until I was in college and did
| just fine in my undergrad CS at UW Madison.
| ghaff wrote:
| With the performing arts--perhaps music in particular--
| it's certainly the case that you mostly can't decide you
| want to do the music thing, except as maybe a very
| recreational activity for the first time in college.
| However, I'm not sure I'm sold that CS--more or less
| uniquely among technical fields (including electrical
| engineering)--needs to have the same level of informal
| prerequisites.
| rejectfinite wrote:
| >Basics of networking, how installation of programs happens,
| how to use the command line, that kind of thing.
|
| um yea thats my job dude and i fought for it so other people
| should too these people waltzing in not knowing shot should
| not get into CS
| ClumsyPilot wrote:
| One of those cases that some people are so unreasonable,
| you can't tell what's sarcas m
| ghaff wrote:
| I sort of get that, in this day and age, it would
| probably seem a bit unusual for someone to show up at
| Stanford or MIT and be like "I've only ever used a
| computer to play video games but I think I'll major in
| CS." On the other hand, I also don't think programming
| had to be an all-consuming passion for the past 10 years
| as some seem to deeply believe.
| analog31 wrote:
| I think there actually may be some of this. Both of my
| kids are in college right now, but I knew a lot of high
| school kids and their parents through the
| extracurriculars that my kids were involved in. The kids
| knew what the "hot" college majors were, including CS.
|
| But they also knew the precise formula for college
| entrance, and were laser focused on getting into an
| "elite" school. Any activity that didn't contribute to
| that process was eschewed.
| rejectfinite wrote:
| I'm not sarcastic.
| mastax wrote:
| Yeah, I remember taking this machine architecture course with
| a friend who was getting a journalism degree and had never
| written any code or done anything more technical than playing
| StarCraft brood war before college.
|
| One of the later assignments they gave us this "bomb"
| executable and we had to use gdb to pick it apart and modify
| the instructions or find ROP gadgets or something to make the
| code not "explode". He was my partner in the assignment and I
| spent most of the time trying to teach him what I was doing
| in gdb. And trying to express that, sincerely, he wasn't
| stupid GDB is just really hard and he didn't have the
| background knowledge to make learning it easier.
| agumonkey wrote:
| Not sure if that fits, but it reminds me of Gary Bernhardts
| "Unix Chainsaw" talk
|
| https://www.youtube.com/watch?v=ZQnyApKysg4
|
| It's all about leveraging "simple" cli tools and combine their
| powers to cut through work very swiftly. The opposite of many
| days for many people.
| whateveracct wrote:
| I 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 wrote:
| They 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
| Noumenon72 wrote:
| The "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.
| tomstuart wrote:
| The 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-...
|
| [1] https://martinfowler.com/articles/mocksArentStubs.html
| sethaurus wrote:
| At 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.
| bmikaili wrote:
| Except this is just software engineering and has nothing to do
| with computer science.
| thfuran wrote:
| In approximately the same way that knowing how to type has
| nothing to do with computer science.
| bmikaili wrote:
| True, that also has nothing to do with computer science.
| thfuran wrote:
| Nor does knowing how to read, yet all of those things are
| useful in studying computer science.
| mydriasis wrote:
| I 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.
| lordnacho wrote:
| I don't use vim much since nano seems to be on every
| installation I've seen recently.
|
| But I don't think anyone can avoid learning how to quit vim.
| We've all been there, you think you know the keys, you don't,
| now you are trapped.
| lizknope wrote:
| 70% of my coworkers use vi but most of us are in our 40's.
| About 20% use emacs and the other 10% use some other usually
| GUI text editor.
| vishnugupta wrote:
| I can't edit text files without vim. I use modern IDEs
| (IntelliJ) and the first thing I do when I install them is to
| install Vim plugin.
| crispinb wrote:
| I use it (well neovim) exclusively now because I like it. I
| have in the past used Emacs, IntelliJ, and VSCode. All work,
| the choice between them doesn't matter a jot, and that choice
| has never had the slightest influence on my competence or so-
| called 'productivity'.
|
| More useless words have been spent over editor choice than ..
| "how good is Linux?" or "how terrible is Electron!" or any one
| of the handful of sometimes entertaining and always vacuous
| areas of argument software people frequent over their
| peccadilloes.
| flippinburgers wrote:
| I have used neovim for a few years now. With lsp support and
| other additions, using a vim variant hasn't been better!
| jojo14 wrote:
| I use Vim infrequently. I know it and if it was the only option
| I'd be efficient with it. I've even started with Vi as the only
| option. However I prefer Emacs because I feel way more
| efficient and comfortable with it. As a bonus main key bindings
| are consistent with Bash and others GNU tools. The course
| should introduce Emacs as well so that students can choose on
| their own. Whatever your preferred editor is IMHO it is up to
| an IDE to integrate with it.
| tooltower wrote:
| I switched to vim in college, never went back. That was 20
| years ago.
| danmur wrote:
| Lots 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 wrote:
| if 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
| [deleted]
| dfee wrote:
| Using vim itself? I mean, yeah picking up ninja edits here and
| there.
|
| Using vim motions? Everywhere. All the time.
| nicklaf wrote:
| Yep! Evil for Emacs, IntelliJ, ranger, ksh93 shell history
| editing (this one includes search!), DuckDuckGo, Fastmail,
| Gmail....
| theonething wrote:
| I use it professionally and personally for all text editing,
| even just taking plain notes. I feel handicapped without it.
| vyskocilm wrote:
| I use neovim with Ale plugin for LSP and linters. Somehow it
| maps into my brain better than anything else. Its fast, on cli,
| feature rich, usable without a mouse...
|
| The only thing where vim/neovim really sucks against other
| tools is the project specific configuration.
| zem wrote:
| been using it my entire career. works well, never had much
| reason to switch, especially these days when I do most of my
| work sshed into another machine (we aren't allowed to have work
| code on our laptops)
| raincole wrote:
| Depending on what kind of programming you're doing. I think
| it's fairly command in sysadmin stuff. But I can't imainge
| doing, say, Android development in vim. (Of course it's
| physicall possible, but...)
| johncoltrane wrote:
| I switched from TextMate to Vim as my main driver in 2010.
| Never looked back.
| jrumbut wrote:
| I've been using it professionally since 2011.
| ar_lan wrote:
| I use (Neo)vim as my daily driver, professionally (for the past
| 4 years, coming from Goland). I've found every other editor to
| be too heavy/slow (VScode/Jetbrains), or too noisy (regarding
| features).
|
| Neovim allows me to specify the precise minimum I desire to
| have a fully functional IDE-like experience (basically
| treesitter + LSP + DAP + minimal extra plugins).
|
| It's super fast, I'm already in my shell, and my memory usage
| gets to stay super low :)
| Salgat wrote:
| Once I learned how to use vs code productively it really
| changed my mind. The other day I needed to do a quick base64
| encode and vs code had that. Same goes for formatting some
| json or doing a diff. It's all available in a single tool
| with no learning curve. Hell it even has git and git blame in
| there.
| laurels-marts wrote:
| I think VS Code is just extremely convenient and can
| address most peoples needs out of the box. It's therefore
| also very beginner friendly. You don't need to constantly
| fight the tool or spend hours researching how to configure
| some trivial feature. That being said VS Code is quite
| heavy and has an enormous amount of GUI elements. I mean
| they even have buttons for things like git fetch and pull
| for heavens sake. They could release a VSC Light that
| strips most of the GUI out.
| ohy wrote:
| True, but you can customise it a lot. So the number of UI
| elements is not a problem.
| ar_lan wrote:
| Yeah - to each their own. I have all these tools in my
| terminal too. I'm just a lot faster in the terminal, and I
| don't really think it's possible to be faster in a GUI
| (even if there are shortcuts - there will surely be
| shortcomings before you eventually just re-invent a
| terminal via VSCode).
|
| Plus - modal editing :)
| ClumsyPilot wrote:
| Vs Code is the gateway drug of real IDE's. Last time I
| checked, it still cant do things like navigate to
| definition, or rename a calss along with all mentions of it
| in comments. Or count TODO: comments
| ar_lan wrote:
| I don't think this is accurate - at least not anymore. VS
| Code supports LSP configuration which means all those
| features should be available.
|
| That said - I haven't used it in years. Way too heavy and
| Vim does all of those + modal editing.
| dizwit wrote:
| navigate to definition -> f12
|
| rename all instances of class/method/variable -> f2
|
| count TODOs: too many vs code plugins that will do that
| for you
|
| Not sure when the last time you checked, but vs code is a
| practical full fledged IDE with the right plugins.
| anthomtb wrote:
| Of 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.
| laichzeit0 wrote:
| I've given up on Vim a long time ago. However, every IDE or
| editor or notebook tool I use that has Vim keystrokes I enable
| that and use that. You have to let the Vim purist in you die,
| it's not a fight that can be won. Settle for like 80% of what
| you used to be able to do in Vim and call it a day.
| xyzzy_plugh wrote:
| I don't understand. Why do you need to do this? What am I
| settling for? I use vim daily and want for nothing.
|
| Vim becomes a state of mind, a model for editing that is
| really empowering. I can translate any thought to code by
| doing a little dance on my keyboard. My mind is freed by this
| expression.
| vincent-manis wrote:
| I'm not fond of Vim, have been an Emacs user for going on 40
| years, starting with Gosmacs. That said, I'd rather that
| students learn one editor really well, rather than the
| smattering of editor/IDE usage most of them seem to acquire.
| So, fine, teach them enough Vim that they can use it well,
| afterwards, they can use whatever editor they choose.
| shaunsingh0207 wrote:
| Every time I'm working on a personal project I boot up neovim
| and have some fun. I have an extensive neovim (and emacs)
| configuration.
|
| If I need to do anything in a professional environment, I boot
| up intellij/vscode/whatever they use and just install a vim
| emulation plugin. Vim is fun and all, but when time is money
| the _last_ thing I want to worry about is configuring my
| editor.
| danmur wrote:
| All of mine are missing bar the first one
| mattrighetti wrote:
| The 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.
| lizknope wrote:
| I 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/
| grogenaut wrote:
| man 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
| tsujamin wrote:
| My 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
| meltyness wrote:
| Ah yes, using tmux so you can monitor your <endless search for
| for twin primes>.
| hnrodey wrote:
| This is great content. There is an entire generation of "Windows
| developers" that could use a course like this tailored to the MS
| stack.
| ggm wrote:
| Odd. 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.
| superdude12 wrote:
| UCLA has a class for this:
| https://web.cs.ucla.edu/classes/fall22/cs35L/syllabus.html
| aio2 wrote:
| this was posted here a few weeks back
| xupybd wrote:
| Wow I wish I had been taught any of that before my first job.
| mettamage wrote:
| I'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
| raydiatian wrote:
| Hmm, my education must have been better than I give it credit: I
| definitely was taught all of these concepts at uni.
| ghaff wrote:
| I 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.
| zamnos wrote:
| Which 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.
| throw_pm23 wrote:
| Some 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).
| iamEAP wrote:
| When 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 wrote:
| Same thing at my state uni. We used
| https://www.oreilly.com/library/view/unix-power-tools/059600...
| as our textbook, and I still keep it on my shelf 20 years
| later.
| spicyramen_ wrote:
| [dead]
| oconnor663 wrote:
| As 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.
| oregoncurtis wrote:
| This is such a great resource. Definitely useful as a newish SWE.
| precompute wrote:
| Could 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.
| mauro3 wrote:
| We'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/ [2] https://software-
| carpentry.org/
| Shacklz wrote:
| As 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.
| hardwaregeek wrote:
| It'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 wrote:
| In India we usually call it "Computer Science & Engineering".
|
| But name is the only thing we get right in CS education.
| xavdid wrote:
| CS 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 wrote:
| This 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 wrote:
| Ironically, 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.
| vincent-manis wrote:
| I was on the CS faculty at a Canadian university in the 1980s.
| I proposed a course with almost exactly this outline, only to
| be told it wasn't university-level material. MIT seems not to
| have got this message; good on them!
| pjmlp wrote:
| I think this is mostly a US thing, or countries based on
| similar education systems.
|
| In Portugal our computing degrees are Informatics Engineering
| to use a literal translation, a mix of CS stuff and
| Engineering. And validated by the Engineering Order as
| fulfilling certain requirements, for anyone that at end of the
| degree also wants to do the admission exam for the professional
| title.
|
| Those that only care about the theory part of CS take a
| mathematics degree with major in computing.
| feydaykyn wrote:
| I 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?)
| hcks wrote:
| Well I'm glad I didn't have a full semester dedicated to trivial
| tools and boomer software
| [deleted]
| raarts wrote:
| I 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.
| anonuser123456 wrote:
| I like how make is like half of a day.
|
| make can be a career in and of itself.
| dreamcompiler wrote:
| Kind 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 wrote:
| I think it's because it's a course focused on Linux and not
| Emacs. Different operating systems.
| automotua wrote:
| Reminds me of CMU's 15-131 GREAT PRACTICAL IDEAS FOR COMPUTER
| SCIENTISTS. Reminiscent of the old CMU days.
| WoodenChair wrote:
| Instead 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).
| readingnews wrote:
| I 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.
| closeparen wrote:
| This "class" was run by our CS library computer lab and was
| something your TA might push you to attend, but not part of the
| formal curriculum. That worked around some of the admin
| nonsense but still got help to motivated students.
| dls2016 wrote:
| Thank you for making the point about accreditation, it's sort
| of a pet peeve of mine. I taught "intro to C++" last year at
| the Harrisburg campus of PSU. The students were a mix of non-CS
| majors who didn't know what a file was, a handful of students
| who already knew how to program and a bunch in the middle.
|
| Re: accreditation... the admin is _very_ reluctant to change
| anything about the courses. Even specific textbooks had to be
| recommended (I was warned for suggesting in the syllabus that
| the textbook wasn 't needed). Seemed a little more strict than
| teaching mathematics, which I did in graduate school.
|
| Re: kids these days... a significant portion didn't understand
| the concept of a file. I blame apps and the cloud (funny
| because I now work in cloud storage). I ended up writing my own
| pre-cursor doc to the "missing semester". It was challenge to
| get a student from not understanding the filesystem to having
| some sort of understanding of linear search and pointers. (If
| you're interested:
| https://www.dropbox.com/s/jar1r0l5vdgspcl/basics.pdf?dl=0)
|
| I tried to stress, especially to the non-majors, that this
| "missing" stuff was perhaps the most important thing they could
| learn. That, and how to properly google/search for things. I
| would experiment and try to re-word homework questions so that
| interesting StackOverflow answers appeared in search results.
| bcbrown wrote:
| > I would experiment and try to re-word homework questions so
| that interesting StackOverflow answers appeared in search
| results.
|
| That's a really interesting pedagogical approach, I like it a
| lot.
| wirthjason wrote:
| C++ needs a "missing semester" around tooling. Most material
| I see focus on the core language but leave out setting up
| build systems, package management, clang tidy, testing etc.
| no_wizard wrote:
| How do you do package management in C/C++?
|
| I have only used pip, cargo, npm (well yarn and pnpm
| mostly) and composer.
|
| Big off putting aspect of learning C/C++ is that I can't
| grok how shared libraries work very well
| [deleted]
| lallysingh wrote:
| We had this class, Unix, in freshman year (VT). This isn't
| normal?
| ModernMech wrote:
| We'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.
| jcelerier wrote:
| > I do not know many others who implemented something like
| that.
|
| the school I did in france, ENSEIRB-MATMECA, started with three
| weeks where you only learn shell commands, emacs, LaTeX etc
| before doing anything else. Here are the slides (in french
| sorry, although they all have useful reference cards at the
| end):
|
| - intro: http://mfaverge.vvv.enseirb-matmeca.fr/wordpress/wp-
| content/...
|
| - unix, shell: https://cours-
| mf.gitlabpages.inria.fr/if104/docs/01-unix.pdf
|
| - emacs: https://cours-
| mf.gitlabpages.inria.fr/if104/docs/02-emacs.pd...
|
| - latex: https://mfaverge.vvv.enseirb-matmeca.fr/wordpress/wp-
| content...
|
| - "advanced" shell scripting: https://cours-
| mf.gitlabpages.inria.fr/if104/docs/05-scripts....
| readingnews wrote:
| Thank you for the links... I actually read enough French to
| get by, so those are great to look at for more ideas.
| RheingoldRiver wrote:
| LaTeX? Is this a dual math-cs program?
| btilly wrote:
| LaTeX was written by a famous computer scientist to write a
| computer science book.
|
| Yes, mathematicians love it. But computer scientists were
| first there.
| henrydark wrote:
| Interesting, do you think Lamport doesn't think of
| himself also as a mathematician? How about Knuth?
| IshKebab wrote:
| Maybe a useful skill but it's not a CS skill so it's
| slightly odd to teach it. Same with Emacs tbh. Students
| could easily use VSCode (and it would probably be better
| for a CS class).
| dustymcp wrote:
| I always laugh abit about this, the purists are just
| insane, yes you can do things in one way forever but you
| dont have to.
| kriro wrote:
| I find this comment a bit odd. I teach CS and our students
| are required to use LaTeX for everything they hand in
| (internship report, project work, BA thesis). We also
| publish everything using LaTeX if possible. There's some
| conferences which use Word templates (shudder) but mostly
| it's LaTeX.
|
| Citations and bibliography management are easy, it's super
| easy to switch from IEEE to Harvard or whatever and as soon
| as you have diagrams, graphs, tables or formulas it's a no
| brainer.
|
| Pretty curious why you associate LaTeX with "math only".
| AFAIK it's absolutely standard to use it in CS. It's also
| quite easy these days. We provide templates for the
| students and they usually use Overleaf so there's very
| little hassle with setting up the entire environment.
| RheingoldRiver wrote:
| Ah, that makes sense. The reason is that I was a math
| major and now doing programming, have lamented my LaTeX
| being utterly useless; the only thing I use it for is
| (perhaps somewhat ironically) my resume document, and
| I've forgotten so much that I don't even list it on my
| resume (if I even thought it was relevant).
|
| But I had not considered that during the degree program
| itself, you will lose LaTeX quite frequently, which of
| course does make sense.
| thangalin wrote:
| > have lamented my LaTeX being utterly useless
|
| ConTeXt integrates Lua. KeenWrite[0] is my text editor
| that converts Markdown to XHTML then pipes that XML
| document into ConTeXt for typesetting[1]. ConTeXt does an
| amazing job of keeping presentation logic separated from
| the content. Meaning, once you've created a theme
| template, it's easy to pick it back up to create new
| ones.
|
| There's a video series showing how to use KeenWrite.[2]
|
| [0]: https://github.com/DaveJarvis/keenwrite
|
| [1]: https://www.youtube.com/watch?v=qNbGSiRzx-0
|
| [2]: https://www.youtube.com/playlist?list=PLB-
| WIt1cZYLm1MMx2FBG9...
| mixmastamyk wrote:
| Sphinx, asciidoc, mkdocs etc more accessible these days.
| satvikpendem wrote:
| Interesting, we never used LaTeX at all in our CS
| program. We also didn't have very many papers to write in
| our CS program anyway, most were coding or proofs which
| we could use regular Google Docs with their math support,
| or do it by hand.
| pantalaimon wrote:
| We had plenty of math classes in CS
| ghaff wrote:
| Note that this is not part of the CS curriculum at MIT. It's a
| series of classes during Independent Activities Period in
| January which is mostly unstructured time when students can do
| or not do any activities that catch their fancy. It works well
| for this sort of thing but students also do a ton of stuff that
| isn't especially academically-related.
| readingnews wrote:
| I do know that, I was trying to implement it as part of a go
| at your own pace online course, but that still requires
| approval from the uni.
| starkd wrote:
| It would seem this would be the perfect kind of class for
| online learning. Perhaps even as a wiki to crowd source helpful
| contributions. Most learning doesn't even have to be directed,
| but just point students in the right direction. This is a ripe
| area to find ways to better facilitate individual initiative,
| because a moderate level of effort yields tremendous reward.
| Plus, you can easily determine if you are doing it right.
| LelouBil wrote:
| Same in another school (EPITA).
|
| You start with 2 weeks of only Linux C + POSIX shell, and
| during this you're only allowed to use i3 + vim/emacs.
| gumby wrote:
| This "MIT Course" was taught by grad students because they felt
| the actual course work left this out.
|
| So when you say it's a shame your uni doesn't teach this, well,
| that's what these grad students were saying as well. Perhaps
| the students could seize the initiative at your institution as
| well?
| readingnews wrote:
| I might have to get a separate group to do it, like the ACM
| students. If I suggest it, even as an online sort of thing,
| it gets cut down. All of the sudden, it can not be "something
| we support" that is not "part of the curriculum".
| devwastaken wrote:
| "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.
| ukoki wrote:
| I would add jq to the data wrangling section
| https://stedolan.github.io/jq/
|
| Being moderately competant at jq on a team that doesn't know jq
| is a super power.
| noisenotsignal wrote:
| Any 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 wrote:
| > 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 wrote:
| Readability 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.
| throwaway675309 wrote:
| Incidentally I found that chat GPT is excellent for asking for
| complex csv/json transformation queries and having it spit out
| the correct script.
| zamnos wrote:
| What'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-...
| bouvin wrote:
| That'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 wrote:
| At 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
| mrcsno wrote:
| I 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=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.
| tkiolp4 wrote:
| At 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.
| sunjester wrote:
| I was blessed with a badass AIX teacher. Thank you Coleman
| University for allowing hackers and AIX in your facility!
| theonething wrote:
| Is 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 wrote:
| Yes, 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.
| mliker wrote:
| Went through the syllabus. The content is really useful since I
| spent most of my post-graduate years reading man pages for
| various debugging tools.
| 50 wrote:
| One of my favorite projects. I was most receptive to Athalye's[1]
| manner of teaching.
|
| 1. https://github.com/anishathalye
| riedel wrote:
| Always 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
| rootusrootus wrote:
| We 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.
| vishnugupta wrote:
| By 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.
| ourmandave wrote:
| If your first job is at a Windows shop, good luck with that
| Powershell prompt.
| haunter wrote:
| Does it really matter nowadays with Windows Terminal and WSL?
| With WSL2 you can even run GUI apps!
| RomanPushkin wrote:
| Vim? Really? No text editor will make you a good programmer. I
| barely use/know Vim with 20 years of programming experience.
| ClumsyPilot wrote:
| The 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.
| sethammons wrote:
| Wait - you actively remove vim? Or you alias nano to vim?
| Neither of those make sense to me. Why not leave it there and
| just not use it?
|
| Every system I've ever been on has vi and nano and usually
| vim.
| adrianmonk wrote:
| I 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.
| btheshoe wrote:
| I 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.
| enumjorge wrote:
| I think you're conflating two different things: universities
| selecting and presenting a syllabus needed to earn a certain
| degree, and students actually learning the material.
|
| The latter is the solely the responsibility of each student,
| but I don't understand why the former would be. Some of the
| content in this course strikes me as unknown unknowns for new
| programmers. Why would they be to blame if no one told them to
| learn a particular skill?
| jimbo9991 wrote:
| Honestly, because its something that should be a prerequisite
| for starting the degree program in the same way basic algebra
| is a prerequisite. Likewise, not knowing you need to know
| this stuff is a sign that you are probably not at the point
| where you should even be able to have declared the major. The
| fact that colleges allow this at all is doing a disservice to
| students, many of whom will go on to permanently damage their
| academic records.
| ghaff wrote:
| So, beyond a fairly standard high school curriculum and not
| too much distaste for math, what implicit requirements
| should we add for physics, mechanical engineering,
| chemistry, chemical engineering, material science, etc.?
| Because where I went to school, there were no special
| requirements for those majors--nor for CS/EE. Is CS today
| unique for some reason among STEM majors?
|
| Different majors have varying degrees of difficulty for
| different people. By and large schools don't (and
| shouldn't) get into the business of heavily policing who
| gets to give a particular major a whirl.
| bmitc wrote:
| You 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.
| ramblerman wrote:
| > You don't consider paying tens of thousands of dollars as
| creating responsibility to educate?
|
| I get OPs point. It's like getting an english literature
| degree and you've never read a book on your own.
|
| My guess is most people needing the missing semester never
| coded outside of their assigned tasks. Which is fair enough,
| but its surprising to me to meet phd candidates who marvel
| over the missing semester (I've met 2).
| bmitc wrote:
| To be clear, I was responding to the commenter's general
| point and not regarding this specific class or its
| contents.
| sokoloff wrote:
| There'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.
| ModernMech wrote:
| > Are universities also failing their students by not
| offering/requiring a touch-typing class?
|
| Universities make assumptions based on the larger student
| body as to what requirements are needed for admission.
| Generally, we assume students can read and write and have
| general computer literacy, but actually the last assumption
| is starting to fray a bit; more and more, students are
| coming into school without basic computer desktop literacy.
| This hasn't been a problem for decades, as students tended
| just to pick up skills like touch typing. But today, some
| students are hard pressed to to save a file to the desktop.
|
| I could see universities might actually have to start
| adding computer literacy as an entrance requirement, the
| same way we require basic reading and writing and English
| speaking, so we don't have to teach those things.
| Niksko wrote:
| A 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.
| patmorgan23 wrote:
| What occupation are the vast majority of CS students
| intending to pursue when they enter a computer science
| program? What occupation did the vast majority of
| computer science graduates end up pursuing?
|
| I'm willing to bet the answer to both of those questions
| is a computer programmer.
| [deleted]
| tkiolp4 wrote:
| A degree takes already 3 or 4 years. In order to incorporate
| this "missing semester" universities would have to either a)
| remove existing material to make space for it, or b) extend
| the degree one more semester.
|
| I don't think universities should remove existing material in
| general to incorporate "bash 101". Mainly because learning
| bash is easy and one can learn it by oneself without a
| professor. Extending the degree one more semester doesn't
| make much sense either.
| BeFlatXIII wrote:
| Half the value of having the material in a course is that
| it specifically highlights what should be learned.
| pcthrowaway wrote:
| I'm surprised anyone would object to this. Universities have a
| responsibility to prepare their students.
|
| When I saw the title I figured it was another "computer
| science" class. But the curriculum was a significant portion of
| what I lacked when I graduated, which prevented me from finding
| work for a year.
|
| Had someone at university told me before I graduated that I'd
| have no chance of finding work if I didn't know Git, Linux,
| REST, how to use the command-line, how to use an IDE, how to
| use an editor on the command line, and bash, I would have
| prepared myself for those things.
| l33t233372 wrote:
| Can you elaborate on how not knowing those things
| specifically is what led to you not being able to find work
|
| Did your interviews ask specific questions about Git, Linux
| things not covered in a standard operating systems course,
| and command line editing?
| _dain_ wrote:
| go on indeed, search for "software engineer", look at how
| often those things crop up in the "essentials" section
| TheBigSalad wrote:
| "I've personally never considered it the responsibility of my
| university to educate me" - you're going to have to explain
| yourself
| jimbo9991 wrote:
| People are going to really dislike what you said but I agree to
| a certain extent, especially when it comes to the basics of
| working in the command line. If somebody can't read the manual
| on that and figure it out then they are going to be so hopeless
| for so many other things that I don't want anything to do with
| them.
| ghaff wrote:
| If someone has literally never opened a terminal with a
| command line, you're probably being rather dismissive of how
| unintuitive it will be for a lot of people at first.
| adrianmonk wrote:
| > _the ultimate onus falls on me to gain the skills that will
| lead me to success_
|
| I see where you're coming from, but sometimes you don't even
| know what the necessary skills are. Even if you're very self-
| motivated and enthusiastic, you can still benefit by being
| pointed in the right direction. That's part of what a good
| school or teacher should do for you. (And while they're at it,
| they can provide materials that smooth out the path to get
| there.)
|
| You should never expect them to cover 100% of that, but if
| they're aware of a way that they can get closer to 100% than
| they currently are, then it's a good thing for them to do it.
| SunghoYahng wrote:
| Looking 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.
| theonething wrote:
| Lots 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.
| commandersaki wrote:
| > The class is being run during MIT's "Independent Activities
| Period" in January 2020 -- a one-month semester that features
| shorter student-run classes. While the lectures themselves are
| only available to MIT students, we will provide all lecture
| materials along with video recordings of lectures to the
| public.
|
| It seems that the course is only 1 month and runs alongside
| some student-run classes. So this is from the get go not an
| essential course of a CS program.
| ghaff wrote:
| There's quite a broad mix of offerings during IAP--a lot of
| which isn't part of a regular academic program and a lot of
| which is just for fun/intellectual interest. It's mostly all
| non-credit. And there are a fair number of sessions dealing
| with practical details that may not be covered in regular
| courses.
| chii wrote:
| This is also what i thought too. The content is effectively a
| roadmap on how one could use the computer well to perform tasks
| (without the algorithmic/programming portion).
|
| If your main usage environment is windows, none of these are
| that helpful, but the ideas could be translated mostly (windows
| shell is similar enough, that you can just as easily script
| them with batch files).
| fierro wrote:
| I 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 wrote:
| Whether 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 wrote:
| I 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.
| Epa095 wrote:
| I think it can be useful to distinguish between the "known and
| unknown unknowns" here. For example, everyone will quickly
| realise that that they need to know git, and they will learn
| what they need to know (a known unknown). A university course
| would maybe save them time, but it would not really change what
| you know after 2 years in industry. Compared to e.g awk or
| shell scripting which can be incredible usefull, but maybe not
| something people realise by themselves that they need (a
| unknown unknown). A university should make people at least
| aware of these latter tools.
| ericpauley wrote:
| Totally agree. Further, these skills actively support rapid
| iteration on learning other core university outcomes. In CS
| it's very easy to waste lots of time doing things the wrong
| way that could otherwise be spent doing something useful.
| sanderjd wrote:
| Yeah I pretty much agree with this comment. But I think my take
| on whether universities should be training for academia or for
| industry is "why not both?". I think these are just different
| valid tracks. There is a lot of education that overlaps between
| "computer science researcher academic" and "software
| engineering professional with strong fundamentals". So that
| should be the required set of credits. But then there are
| different tracks toward where you want to take your degree.
| Those sound like electives. Academics should learn more about
| research techniques and publishing and presenting at academic
| conferences, etc. And those on the professional track should
| learn more about tools and techniques used in industry.
|
| There's no conflict or contradiction here, just different
| strokes for different folks.
| utopcell wrote:
| The 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. :-)
___________________________________________________________________
(page generated 2023-02-25 23:01 UTC)