Hacker News new | ask | show | jobs
by classybull 3314 days ago
Every time I start to fall into the conceit that I'm an exceptionally good developer, I look at things like kernels or low level hardware programming and eat a big ol' slice of humble pie.
2 comments

Why? It's just a different level of detail than you're used to. It's not magic.
As someone that used to do kernel and RTOS development for many years and then migrated into web and app dev for a living because it allowed a more flexible lifestyle for paying the bills - this equivocation is disingenuous.

There is some room for disagreement, but I agree with most of the following. https://developer.apple.com/library/content/documentation/Da...

Kernel development, similar to algorithmic trading (incl HFT), some types of games, various embedded, actual production compilers etc requires a higher level of rigorous understanding from a variety of areas compared to the vast majority of webapps (often CRUD) and most software that IT professional work on. Kernel dev similar to other performance critical or safety critical systems has a much reduced set of tradeoffs and more numerous constraints, for one.

Of course, most applications require knowledge in disciplines such as design and domain specific knowledge that kernel development does not require, but that is besides the point. It requires a different type of thinking overall (one that is more unforgiving to lack of rigor and not as open to subjectivity cf. design) that low-level systems development/engineering and most app development are virtually unrelated disciplines outside of trivial similarities relating to them both targeting computers.

I don't say this to discourage anyone. But these reductions are unhelpful and outright condescending to those that might struggle to learn (oh it's just a slightly different domain than your JS TODO app....um no it's not.. it's harder for you to learn because it is actually harder and more complex).

This is true insofar that bugs resulting from an incomplete understanding of the system have far more significant implications in kernel development (kernel panics, seg faults, OOM killer) than in web dev, where you might get an Exception that's handled by your framework.
> this equivocation is disingenuous

i'm super confused. what equivocation are you refering to?

I think he may have meant equiparation.
This is probably the most important lesson I learned when I started doing kernel and firmware work - the Linux kernel is, fundamentally, just a C program - albeit quite a complex one where you don't have the standard library and you see "volatile __asm__" more than you'd like to, but it's still just a big C program.

I'd absolutely encourage anyone with some C background to go and write themselves a "hello world" Linux kernel module to go convince themselves of this.

I work in JIT compilers and sometimes people say this about my field. But it's really not true for one major reason - not all the knowledge you need in this field is written down. So if you don't have someone you can ask questions nearly full time who knows it all, you can't just get started like you can in web programming, where there are endless books and tutorials.
It's not magic indeed:

——

Looking up and down the aisles at Lowes and not finding a raised garden bed that met my needs, I inquired with a staff member:

“Sorry, we don’t carry anything like that.”

“Darn. Ok, I’ll try another store then,” I sighed with resignation.

“You know,” he said to me, “it’s just wood.”

It took me a moment to realize how liberating this statement was. To him, woodworking held no mystery at all - it was just a thing you did. If he wanted a garden bed, there’d be no question in his mind that he’d make it himself. Why spend more on something suboptimal when you can build exactly what you want?

— Bryan Kennedy (http://plusbryan.com/its-just-wood)

Nice quote.

At least half of what I have learned has been because I was dissatisfied with what was available and thought I could do better myself.

Sometimes I could make a better thing, and sometimes I couldn't, but I always learned something. Even sometimes just the knowledge that it's harder than it looks.

Eh... It's far more complex than what most devs are accustomed to, and often too complex for most devs to be good at. It's not just "different", it's harder. You have to solve hard problems if you're going to build and maintain an OS. You're not solving hard problems when you write your next CRUD app.
Thats right. We're each of us experts in our own systems.
+1 and then I feel the same and sometimes even worse when it comes to programming language design.