2

Most of the underlying workings of the operating system is hidden from the programmer. I believe that is also one of the purposes of an operating system. Then what are the reasons a software developer should learn about how operating systems work?

Kake_Fisk
  • 145
  • 1
  • 4
  • 1
    How many of the systems you develop don't have some operating system as a component or dependency? – TZHX Aug 30 '16 at 10:45
  • Off-topic since career-advice. But yes it is. So read http://pages.cs.wisc.edu/~remzi/OSTEP/ – Basile Starynkevitch Aug 30 '16 at 11:11
  • This wasn't meant as a career advice question. I'm trying to ask why operating system knowledge is a good thing for a software developer to know. If that still is off-topic, then okay. But if not, maybe somebody could help edit the question to sound less career-advice-y. – Kake_Fisk Aug 30 '16 at 11:24
  • Then you forgot `why` in your question title. But the question would become opinion based, so still probably off topic. – Basile Starynkevitch Aug 30 '16 at 11:55
  • yes , learning Operating system will let you understand programming more deeply. go through this question [Programming and OS](http://programmers.stackexchange.com/questions/329651/two-c-program-sharing-same-addresses/329659?noredirect=1#comment701614_329659) – user143252 Aug 30 '16 at 10:58

5 Answers5

4

Learning operating systems is very useful.

  • know how your threads are scheduled
  • know how to run multi threading code
  • know how much memory the OS allows you to allocate
  • know latency in your IO polling waits
  • know how efficient process and threads are switched
  • know the latency in the networking code (for example useful for high frequency trading)
  • know how your program is paged

And many more I missed

ABCD
  • 1,166
  • 1
  • 8
  • 13
4

Knowing how operating systems work is a fundamental and critical to anyone who is a serious software developer. There should be no attempt to get around it and anyone telling you it's not necessary should be ignored. While the extent and depth of knowledge needed can be questioned, knowing more than the fundamentals can be critical to how well your program runs and even its structure and flow.

Anything else is a cop out, that is, an attempt to get out of the work.

Why? When you write a program and it runs too slow, but you see nothing wrong with your code, where else will you look for a solution. How will you be able to debug the problem if you don't know how the operating system works? Are you accessing too many files? Running out of memory and swap is in high usage? But you don't even know what swap is! Or is I/O blocking?

And you want to communicate with another machine. How do you do that locally or over the internet? And what's the difference? Why do some programmers prefer one OS over another?

Rob
  • 709
  • 7
  • 10
  • I guess that a software developer working on deep embedded software for cheap microcontrollers (like Arduino-s) without any kernel don't need that knowledge, but I do believe it is still useful to him (for the general concepts it is bringing) – Basile Starynkevitch Aug 30 '16 at 11:57
  • @BasileStarynkevitch You know that, at some point, there is an operating system at some simple level that manages its I/O at the minimum but let's not get into the exceptions. – Rob Aug 30 '16 at 11:59
  • 1
    @BasileStarynkevitch - It is very rare that developing for microcontrollers that don't have an operating system doesn't lead the developer to implement operating system level features. In that regard, that embedded developer needs to know how operating systems work in much more detail than other kinds of developers. Otherwise, their embedded device is going to be locking up all the time as deadlocks, memory corruption and whatnot occur because they don't understand the edge cases that need to be handled. – Dunk Aug 31 '16 at 16:26
  • @Dunk: Agreed, see the last sentence of my first comment. – Basile Starynkevitch Aug 31 '16 at 17:34
3

In the 1960s and early 1970s, the operating systems people were learning some painful lessons about concurrency, mutual exclusion, deadlocks, and the problems that arose. This included a bunch of stuff about how to build distributed systems.

In the late 1970s and early 1980s, the distributed database folks were having to learn the exact same lessons, the hard way, because they didn't bother to read the papers published ten years earlier by the operating systems guys.

This observation came from a professor at UT Austin, near the end of my undergraduate career.

John R. Strohm
  • 18,043
  • 5
  • 46
  • 56
1

It depends on what kind of development you're doing.

Working on your average, run of the mill, line of business CRUD? Then no. No, you don't really have any need to understand the theory behind an operating system. You're just going to use the OS and not think about how it works.

Working on an embedded microcontroller or a PLC motion controller where there isn't an OS and you're going to want to learn some basics. You're going to need to understand interrupts, thread scheduling techniques (round robin is common, but not necessarily best), amount other things I'm sure I've yet to learn.

Basically, you only need to learn these things when it's not handed to you on a silver platter. However, that's not to say it isn't useful to understand OS theory either. We're knowledge workers. Having more knowledge about the environment we're targeting certainly can't hurt.

RubberDuck
  • 8,911
  • 5
  • 35
  • 44
0

Most of the underlying workings of the operating system is hidden from the programmer.

Agreed; Developers doesn't need to know minutiae of of how to read a stream of bytes from the puddles of media on the surface of a magnetic disk device spinning at thousands of revolutions per minute.
That sort of thing is written by someone else; the Developer simply reuses it.

I believe that is also one of the purposes of an operating system.

The purpose of an operating system is to make a system operate - basically to make the computer "work".

What Developers may or may not do with it is only a small consideration, influencing the creation of the APIs used by Developers to access functions provided by the operating system.

Then what are the reasons a software developer should learn about how operating systems work?

If you travel to a foreign country, do you need to know on which side of the road they drive? OK, you can "get by" without this snippet of information, but your journey is likely to be more colourful/ eventful/ problematic/ painful than it might be knowing how to use their roads.

If you're lucky, your programming Framework might insulate from many of these differences, but by no means all of them.

Phill W.
  • 11,891
  • 4
  • 21
  • 36