4 ms·
Formal CS education is pretty much useless for systems programming. Systems programming deals with real-world hardware, CS is theorizing about about fantasy mac
by coldpie 6y ago
Formal CS education is pretty much useless for systems programming. Systems programming deals with real-world hardware, CS is theorizing about about fantasy machines. "Computers are to Computer Science what telescopes are to Astronomy." They're just different fields. They intersect, of course, but systems programming isn't very near that intersection. Being good at analyzing a DFA on a Turing machine isn't going to be much help when you need to bang bits to a non-compliant USB device.
If you want to get into these discussions, you need to be a kernel dev. That means you need to write kernel stuff. Probably the easiest thing is to write or improve a driver for some device you have (game controllers; steering wheels; audio devices; drawing tablets). It's not rocket science, it's all just bits and bytes and code, just like any other programming.
Edit: Just for an example, here's where the PlayStation controller driver parses the data it gets from the device into something applications can read over the input subsystem. Don't be intimidated, there's nothing magic here, just C code reading data and transforming it. Suppose you maintained this driver and wanted to re-write it in Rust. You could have some input into the discussion!
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/hid/hid-sony.c#n940 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
- nikki93 6y agoRe: the first paragraph--a lot of "formal CS education" focuses on systems and there are systems tracks. Where BSD came from, for example. So I wouldn't call it useless (while the parts that do not focus on systems do, indeed, not focus on systems). In fact, even the non-systems stuff isn't entirely useless for systems--eg. how ideas from ML and Cyclone influence Rust and its application of those ideas to systems use cases. That said, all this is independently learnable, as is true for all things software.
- golergka 6y agoHonest question: why is this downvoted? Is it bad advice? Which of it is?
- jonahbenton 6y agoI upvoted, it's all good advice, but the blanket statement that "formal CS is useless..." is a little strong. CS undergrad is generalist and mostly about types of problems and surveys of solution flavors and POCs of specific solutions in domains that are hot or cool or whatever and geared to students who are just trying to get through and don't have time or patience to work through bespoke granular details. Getting the idea is good enough for a B. Kernel programming is largely the opposite in all respects. Many topics, problem domains, solution approaches e.g. usually covered in CS undergrad are not relevant for kernel programming. Not useless, but not relevant. Kernel programming relative to most CS undergrad courses is like taking a semester-long lab, but starting from the best A+ project from the last 5 years, and instead of newly solving the problem, spending time working on understanding why the best A+ solution still sucks, under what edge conditions it fails, and then testing how it can be made better.
- pjmlp 6y agoExcept many universities don't teach CS like that, I guess that might be an US thing. In the Portuguese university where I took my degree, for example, I had to write an UNIX floppy device driver, code in 80x86 and MIPS Assembly, implement my own userspace threading library, implement a distributed algorithm for maldebrot calculations across a Linux cluster via PWM (MPI predecessor) and report its scalability varying the amount of available machines on the cluster, create a compiler, stuff SUN RPC generated stubs with our own encryption algorithm, implement a B+Tree indexing library using inodes directly. All look pretty useful to me.
- ksec 6y agoAnd How long ago was that? :) I would assume most CS in EU dont teach that anymore.
- pjmlp 6y agoMid-90's, so around 30 years ago. My former university surely does it, although obviously not with the same exact content. https://www.di.fct.unl.pt/en/education/integrated-master-computer-science/study-program https://www.di.fct.unl.pt/en/education/integrated-master-com...
- justinmeiners 6y agoCS education typically includes OS theory, computer architecture, and compiler theory, all of which are directly relevant to the kernel. You may be right that EE is perhaps a better fit for this kind of interest.