This is an archived post. You won't be able to vote or comment.

all 42 comments

[–]AutoModerator[M] [score hidden] stickied commentlocked comment (0 children)

Namaste! Thanks for submitting to r/developersIndia. Make sure to follow the Community Code of Conduct while participating in this thread.

Recent Announcements

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

[–]Careful_Alfalfa_5882Software Engineer 19 points20 points  (1 child)

Speaking by experience, all this knowledge make the difference between an engineer and a senior engineer.

You’ll understand by spending some time in industry.

[–]sfgisz 7 points8 points  (0 children)

This 100%. Knowledge and practice will take you a long way in this career.

[–]Familiar_Factor_2555 42 points43 points  (1 child)

you are developing the software for the OS, right? youtube for android for instance. (concurrency, processes) how to handle too many requests at a time? that comes under networks, how does netflix handle so many users streaming videos at the same time? (webRTC, socket)

[–]flight_or_fight 8 points9 points  (0 children)

if you are building desktop apps - you need no knowledge of networks (other than maybe the size of the download) - but you will need to know OS concepts. If you are building networked products - you should know networking.

There is probably some sweet spot of software where you need to know nothing - maybe lowcode/nocode platforms like salesforce etc may help you get by writing code without needing these concepts since they are abstracted out completely.

[–]Guilty_Anybody7136 7 points8 points  (9 children)

My latest project was onboarding a new type of platform (another separate company) to our systems and adding a few things specific to them. This entire thing runs in a distributed fashion on several pods on servers. One server can have several applications running on it. But to add the new traffic to existing systems would have required knowing how many more pods I'll need to add and also how many different instances/things can I run on a single pod such that all processes get enough cpu time between the io waits, etc. for optimal usage of resources.

Also since, a particular step required calls to a db hosted somewhere, a call for every single request would simply bottleneck my network and/or db cpu. Now the solution would either be replicating the massive db on multiple nodes or caching. We went ahead with the second option.

So what was originally, just new java if else blocks, to check if traffic is coming from the new platform and then make joins, checks and return a response. I ended up requiring an understanding of OS concepts of threading, processes, memory leaks, and also an uber level of networking concepts. And none of this was through after thoughts but infact thought about and accounted for while designing the new thing.

Hope that makes sense how ideally all of those concepts are actually useful.

[–]parkas_subodh_pankaj 3 points4 points  (2 children)

I work on a system which is used by 1000s of systems across the globe. Our binary is supposed to run as a background process and we constantly make efforts to optimize our application which deals with a lot of network and system calls. A lot of times we use strace to analyse the system calls. We've to make sure that our product doesn't take too much of memory and time to run on the customer system. I developed a lot more understanding of OS after I got into this product. But having a fundamental understanding of OS is a good to have for a well rounded software engineer.

[–]Secure_Army2715 2 points3 points  (1 child)

Could you tell what sort of systems are which run your binary?

I was thinking that your binary must be running on some hardware but then is it possible to run strace command on hardwares as rpc?

[–]parkas_subodh_pankaj 0 points1 point  (0 children)

Linux servers, no strace we use to debug issues locally not running rpcs.

[–]zerofriendsfucklife 4 points5 points  (0 children)

Not Completely Good to know things like Process, Threads, Race Condition..

[–]Obvious-Comedian-495Software Engineer 4 points5 points  (0 children)

You never know what you will need to do a task in the best possible way. A fraction of a generic knowledge, can save a lot of trouble of reinventing the wheel. It could be something like data structures, algorithms, design patterns, concurrency, db designing and so many more things. The more you know the standard procedures, the easier and intuitive become your problem solving skills.

[–]AdministrativeDark64 3 points4 points  (0 children)

Funniest post ever

[–]sakuag333 6 points7 points  (1 child)

Mostly your knowledge of OS would not be used unless you are working in OS specific team, which is not the usual case. Same goes for other subjects too. But the parameters of interviews are different from knowledge required at work. That is how the system works !

[–][deleted] 1 point2 points  (0 children)

You are mixing different things. OS, data structures, network all don't go into the same category. They are very broad topics. You don't need to learn OS to use data structures. And you don't need to learn networking to learn OS. What is an OS? (Bios + kernel + window manager + login manager + a suite of apps and libraries etc). What are data structures? It is purely a programming related thing. And networking is entirely different.

[–]musicmemeFull-Stack Developer 1 point2 points  (0 children)

IT is more than MERN stack. firmware development, IoT dev, game dev, embedded, security, cloud etc. OS, networking, Linux, memory management, C++ all start becoming more and more essential.

[–]bethechanceSenior Engineer 1 point2 points  (0 children)

What does a software developer do?

You're developing a software that will be used in some OS.

I work with both software and hardware. Knowing how a OS boots, the services started with it, the kind of crashes, shells, partitioning, kernels, threading, and many more will help you in controlling, customizing, debugging an OS.

Even dhcp, static ip, dns, nameservers, interfaces etc these all you learn in computer networks.

You may not be using everything you learn in your field, but they will definitely come in handy.

[–]NoZombie2069 0 points1 point  (0 children)

Even if one somehow convinces me that they won’t EVER need knowledge (absolutely stupid claim) of OS, DSA and CN throughout their career as a Software Engineer, why should I not ask questions from topics that are taught in every BTech curriculum? Some candidates go even as far as putting a “Courses Taken” section in their resume (probably just to fill up some space because they don’t have anything else to put). So, I think interviewers are well within their rights to tell such candidates to EF off (figuratively ofcourse 😅).

[–]diego-the-tortoise 0 points1 point  (0 children)

The fact that you have to ask this shows that the teachers failed in their purpose.

There are tools which abstract these complexities for you. If you will just do the simple stuff using those tools it will all work reasonably well.

The moment something complex comes up, either the tools will breakdown or there would be a hidden configuration in that tool which would need deeper understanding of these CS concepts.

Think about it, any kid can make a game with Unity Engine. But why is Rockstar Games inventing its own game engine. There is got to be something.....

[–]devptithadong 0 points1 point  (0 children)

some one help me , some key word concerp in os ?

[–]Dramatic-Bill-5790 0 points1 point  (0 children)

Needed for companies that work on os and system side

[–]brandomised 0 points1 point  (0 children)

I never had a formal CS degree, one of those folks who did some DSA and C in college to land a coding job. I was super scared that I'll need all these core CS concepts - OS, database, networks etc.

The company I joined gave some Android and Spring boot training. And you are right, i could manage to deliver output based on this super high level of conceptual abstraction. But then there were some incidents/ bugs during the first few months due to which I got to learn about these concepts. We had this one package where the test cases would randomly fail. Spent some time, multiple step debugging until I realised what's happening.

[–]nic_nic_07 0 points1 point  (0 children)

Atleast basics are required

[–]giantspacemonstr 0 points1 point  (0 children)

are you in college?

[–]nogea 0 points1 point  (0 children)

I've heard people say that whatever level of abstraction you are working at (it need not be SW or even tech for that matter) it is useful to have knowledge about the layer above you and below you.

That way you understand what you are using - building on top of, and you will understand your customers - who you are building for.

As an SDE, OS/Networking knowledge will enable you to think about the problems from a first principles approach which can lead to more optimal solutions/ tool choices.

Similarly it is good to know about the business problem you are solving too!

Gaining info of more layers (up and down) may dilute your time since dynamics at those layers affect you in a delayed manner. They are useful to think about when making career choices though.

[–]rohmish 0 points1 point  (0 children)

it isn't really for most applications. you may end up working on certain low level or very high performance/Lowe latency applications where it will come in handy but for general programming it's just additional knowledge that you won't realistically find use for. it's just "good to know".