hckrnws
So much of practical CS is abiding by standards created by solo programmers in the past.
My university frowned on any industry-related classes (i.e. teaching software engineering tools vs. theoretical CS), but I was fortunate enough to know a passionate grad student who created a 1-credit seminar course on this exact topic.
This course covered CLIs/git/Unix/shell/IDEs/vim/emacs/regex/etc. and, although I had experience with Linux/git already, was invaluable to my early education (and adoption of Vim!).
It makes sense that this isn't a core topic, as a CS education should be as pure as possible, but when you're learning/building, you're forced to live within an operating system and architecture that are built on decades of trade-offs and technical debt.
Universities consider themselves pure and isolated from lowly industry.
Industry demands specifically university degrees to gatekeep positions.
And then we leave teenagers to figure out the puzzle by themselves. I think it's a disservice to the youth.
Universities produce research, and students; Students produce industry, and the body politic; Industry and polity produce university funding.
A cycle I like to call, the "ring-bugger."
I'm not saying it's right, or acceptable, or particularly moral… But I agree that by obscuring the facts, we only serve to confound the decent and good-willed of our students.
Edit: derp.
While I have my issues with the system, many Soviet-controlled countries implemented a two-tier higher education system that solved this by having one tier be focused on practical subjects and the other on theoretical ones.
Britain used to have this too. Sadly it was strangled to death by the UK class system, but the replacement didnt help.
Once upon a time the white collar track was to go to University. One of the old ones if your class situation was pushing you towards executive roles in the Civil Service or banking or some big corporation. One of the newer, redbrick ones if your horizon was more like running a textile mill in the North. You were trained to think and had a fairly Great Books style of curriculum.
For the people who needed advanced education to keep the electric grokulator working, there were polytechnics. People came out of here with practical skills. In some areas, like mathematics, there would have been overlap between University and Polytechnic courses.
Then there were technical colleges where working class people could get skills to help them in their jobs, like rebuilding engines or CNC machining.
Then, people got antsy that university was so elite and only 5% of highschoolers were going. why not let polys be universities? After all, we need to keep up in a global economy. And so there was a massive gold rush and places that had no business or capability became A University overnight.
But...Brits being how they are, they still stratified themselves into class layers. You're far more likely to find a Russell Group university graduate in a fancy job than someone from a former poly in the North. The class system persisted despite everything, and attempts to broaden educational access ultimately did not simultaneously keep the quality uniformly high.
Yeah, I got duped by this. Did a CS degree because that's what you're "supposed" to do to get a programming job, and it was almost all theoretical junk I had no interest in. I hated it. I think I learned useful things in like, two of my classes. I knew more about programming than all but one of my instructors. It was awful and going through that degree program is one of the biggest regrets in my life. But hey, I get to stick "CS Degree from University" as the very last line on my resumes, I guess. Woo.
Where exactly did this "supposed to" come from? I've never met anyone who expected (or needed) a CS degree to teach them programming.
So do you think most people get into tens of thousands of debt to be “a better citizen of the world” or to learn what they need to know for some company to allow them to exchange labor for money to support their addictions to food and shelter?
Sounds like MIT's missing semester https://news.ycombinator.com/item?id=46273762
If you've made it that far in life without learning how to use a screwdriver, engineering would be a bad choice of major. And paying insane amounts of money for someone to explain how to use one would be an even poorer choice.
Same reason I always wonder whether I should go for an electrician/mechanic/avion mechanic education if I'm laid off (and cannot find a job).
I'm really not a handyman -- quite the opposite -- it took me and my father 30 minutes to change the car battery last time -- and most of the time was spent on pushing a component dropped to the bottom out of the car. I used to think that more practices bring some sort of linear growth of the skill in the beginning, but now I tend to believe that for certain people (who are not suitable for the trade), the beginning is totally random -- I could practice 100 times and fail 100 tiles randomly, without really learning anything -- because there are an unlimited number of ways to do one thing, theoretically.
Software suits me way more. Soldering is also OK albeit more confusing. Unfortunately there is no trade that primarily deals with microcontrollers, except in military/defense.
> It makes sense that this isn't a core topic, as a CS education should be as pure as possible, [...]
I don't think that's a good goal. Otherwise, why let you near a computer at all, and not restrict you to chalk and blackboards?
I use TLPI as an optional text for my CS Operating Systems course! It's honestly the best resource for a comprehensive look at the innards of Linux. I actually even snip select pages for lectures.
It’s a big book, can you describe what parts you use and how?
People should do a foundation course to figure out which deprecated parts of the kernel source to avoid. It is nontrivial, but talking with the active developers will save a lot of guess work. =3
Introductory LFD103 is a free course:
https://training.linuxfoundation.org/training/a-beginners-gu...
Some channels to get some experience handling the modern kernel source:
catfood's point about a 2nd edition is worth unpacking:
The syscall ABI itself is remarkably stable, backward compact is practically Linux's religion, but the conceptual model has shifted substantially.
Namespaces and cgroups went from obscure subsystems to the foundational abstraction containers run on.
io_uring rewrote the async I/O model.
eBPF changed how you think about observability and policy enforcement.
One of the greatest texts ever written. Ok maybe just one of my favorites. I wouldn't mind a 2nd edition though... surely the system call interface has changed a bit since 2010.
One of the best books I've read. It helped me lead meetings and solve complex problems where other engineers struggled.
Thanks for sharing. What kind of problems do you solve in daily work? Sounds like an interesting career path.
This is the curriculum I wish my university’s CS program had back in the day.
My favorite book about systems programming on UNIX systems is the book by the late Stevens, but this book more detailed, Linux-specific and if updated (after 16 years, in which Linux did not stand still), could steal the crown from Stevens.
I guess it is more appealing to current university students, than reading about UNIX Lion's commentary, Minix, BSD design, and other academix books with UNIX like implementations.
We did not get as recommend or required reading in a course. But the professor did recommend it to me outside of class.
Excited to see there is a new edition coming.
What a horrible selection for a university textbook! It doesn't get trivially updated every year to prevent reuse and reselling, so how is this supposed to generate more profit for the booksellers? /s
Seriously though, this book is fantastic, and far better than typical course textbooks. I'm honestly a little surprised that universities would select it.
Crafted by Rajat
Source Code