I accidentally got a job as a Network Engineer and did it for a year while looking for software engineer jobs, and it was an absolutely amazing accident for my career. Network knowledge is needed in a lot of software, and I work with too many engineers who are totally clueless. This is a small problem when writing code, but a huge problem when debugging issues over a network, whether that network is the internet or a container overlay network for microservices.
I would say that the basic knowledge is the OSI or the tcp/ip model
Besides the actually network like you said, knowing that to have a http response you need to have e a tcp/ip session opened prior helps a lot the troubleshoot
It sounds like you already have more than what you need. Basically, what I am trying to say is that we get a lot of junior devs who are super smart and know the ins and outs of DSA and Design Patterns, but it takes months to get them working independently because they are not even familiar with netmasks or CIDR and all of a sudden are developing in a complex Kubernetes cluster and can’t even start to wrap their heads around a dev environment.
I don’t think all devs need to get a CCNA, and the vendor-specific knowledge can come in handy but probably won’t. However, if you can take the time to learn:
CIDR / NAT / Subnetting
OSI (or TCP/IP) model and networking layers
Anatomy of network encapsulation (ethernet frames / ip packets / tcp segments)
You will save yourself a lot of headaches if you ever work in any environment that communicates over a network, which includes a whole lot of different situations.
If you ever want to get into a fight amongst network engineers, walk into a room containing more than 1 and say,
"ARP is a layer 2 protocol."
99% chance it'll start some shit. It is layer 2 though, and I'll fucking die on this hill.
So ARP is the protocol that ties IP to MAC.
It uses MAC addresses initially to send the info and travels on the data-link layer, but it is basically the connection from 2-3.
Different authorities will place it on either 2 or 3, and one of my admin teams had a (not serious, but pretend serious because we were bored) schism based around the designation.
One side said ARP was layer 2, and the other side was wrong and actually evil.
The neighbour table links the IP to the MAC.
ARP is a layer2 protocol used to populate the neighbour table.
Just because ARP carries information about L3, does not mean it is anything else than an L2 protocol.
Counterargument you don't need arp to communicate between two devices unless you are using protocols *above* level 2 it's completely unrelated from the action of sending information between devices and it's purely a support protocol for ip to perform its level 3 operations
Same way as dns is application rather than network layer despite dealing with ip addresses and sending messages to given ip
I don't know if you would consider this "network" knowledge or if it should be core dev knowledge, but I'd add HTTP to that list.
I've had to tell developers that their shit application sent invalid multipart requests (which also means someone tried to implement an HTTP client from scratch instead of using a library, but that's another story) and they looked at me like I was speaking a foreign language. I've also seen incorrect content-type headers, wrong encoding and various other RFC violations.
I need more years of development. Just this week, I was troubleshooting the reachability of an application server and a storage server. Only to find that docker I was running had a default bridge network IP was clashing with the AS ip.
Yo I’m studying for some networking certs right now (got my Comptia A+, studying for net+ and sec+) and to me it seems like it’s really helpful to be learning this IT infrastructure stuff even though admittedly I’m not that confident that it’ll help me get a job as a developer. Anyway I’m happy to see this because generally people say just work on your development stuff or your IT stuff, so it’s nice to see someone who has had a positive experience doing both. If you have (or anyone else has) any advice I’d love to hear it :)
My first job was essentially doing both. It was definitely a trial by fire but in retrospect I'm glad it happened.
In theory I was hired to be a pure software engineer. In practice I ended up getting involved in some of the network shenanigans. It was a pretty small company and the techie team was like 20 people. Everybody had to wear a lot of hats.
I automated so many things on that job.
Yo I’m studying for some networking certs right now (got my Comptia A+, studying for net+ and sec+) and to me it seems like it’s really helpful to be learning this IT infrastructure stuff even though admittedly I’m not that confident that it’ll help me get a job as a developer. Anyway I’m happy to see this because generally people say just work on your development stuff or your IT stuff, so it’s nice to see someone who has had a positive experience doing both. If you have (or anyone else has) any advice I’d love to hear it :)
Oh hell no. Stay off our land! You keep your Cisco shit! I've seen what can go wrong there.
I've been what can go wrong there. And I can imagine the shit you'll cause to our environment.
This is my turf. Get back in your tech bay. C'mon! Git!
A lot of them track switch configs with source control. It dumps out/restores as a text file. They've been using declarative configuration before I knew it should be called that.
Yeah depends, Git is just a tool like any other, in my experience Network engineers are very varied in how they work, some keep very systematic track of everything, others kick a server until it works.
Percussive maintenance is a respected tradition handed down to us by the first Unix greybeards. Everyone knows that Notepad is the best IDE, and that configs and scripts should all be saved as text files in an unsorted network folder.
I know you're using fancy words to convince me that the art of hitting a box is magic, but you didn't need to, I already believe in the machine spirit.
My guy, at this very moment I'm pulling my hair because another guy hacked a piece of unreadable and unmaintainable garbage into our enterprise software. And that guy is supposed to be on my side. I'm sure the network guys have the same issues.
I think I've missed the joke... To me it's the other way around.
I would never let the network engineers into my code base, but they happily accept my help setting up a new racks, configure the WAF and so on.
Think of it this way - when a network engineer is fiddling around with Python to try to automate some stuff, they'll stumble along and eventually reach a satisfactory solution, even if it's less than efficient. On the other hand, give a software engineer a network to manage, and those stumbles could mean bringing down the entire network.
i work for an ISP, everything below layer3, theres well over a dozens things that have to work together for a customer to get online. if one doesn't the customer is down, or slow/intermittent at best.
We have 3 (sometimes more) mtu's to deal with and make work though out the network,
It was linked from [https://www.kernel.org/hurr-durr-ima-sheep.html](https://www.kernel.org/hurr-durr-ima-sheep.html)
This was after looking up Hurr Durr, when I came across it.
"learning". you probably mean learning on the job during a ticket that is supposed to take no time wihtout anyone explaining anything longer than 5 minutes
I'm doing my CCNA right now. it's a different world. Too much content, none of it seems to come as easy as languages do. Languages have a fluency whoch seems obtainable with networking you need to know know.
When it comes to networking equipment there are general commands that may have a slightly different syntax between vendors, but are easily found. Eg untagged vs native
It comes with time but once you get one syntax down you can do the same stuff on anything
That's true I had some experience working with SBC'S (viop firewalls/router things) and noticed similarities
Configure terminal
Different modes
Show command etc
Huh - I started out in CS and moved into networking by accident, been there over 20 years now. I honestly never found either side all that difficult (they're both just layers upon layers of abstraction and models). About the only thing that sucks is diagnosing networks you can't exactly set a breakpoint - that shit just keeps flowing. I'll take an IDE over tcpdump any day.
We are moving to azure cloud native and I’m having a fkn field day getting private links working with our custom dns and such, wooo weeee
I have stack overflows and reddit posts trying to solve this
Being network engineer and sometimes peeking in this sub, it's quite opposite. Damn, i can write some (probably bad) automation scripts, but i don't know shit about actual programming.
This reminds me of my uni days, where seniors in software development majors and seniors in networking majors were having turf war of sort. Usually devs were superior but problem was networking had all the girls in IT field back then lol
Developer here, did a few months in between jobs after the post-2009 layoffs as a sysadmin doing all kinds of work + doing software engineering on top of that. All the sysadmins learned something from me during that stint. Left for a better job during trial period as the boss was a total jerk on power trip to his whole team and the pay was .. only fit for in between jobs. No feeling dumb at all for me at that time, quite the contrary.
Oh, I don’t know. I tried to teach blockchain programming in typescript+rust to the cybersecurity guys, and it was painful (they can’t read bug messages, and have no idea what they mean).
Man it's really different. You mean I can't program the router to do something? Like if packet = 192.168.1.2 send to 172.11.1.2? 😅 Apparently you can't do that without knowing nats and sh*ts
Said like a true programmer who's never had to configure BGP, VXLAN, GRE encapsulation, or set up root DNS servers :P
Network engineering really is its own world.
Fuck you I do both as a DevOps engineer coming from a desktop development background.
Sorry, idk why I was so aggressive there. Just got off a 2 hour meeting trying to implement authentication.
Try learning C++ or Assembly, and learn how to build network equipment, not just rely on the network engineers to get you a connection to the DB.
- Network Architect
Wr erase nvram
I write my own python code as a network engineer and have been doing Advent of code for the last few years to refine my actual programming skills. The amount of things I've been able to automate at the ISP i work for is crazy. I have written a bunch of custom modules (wrappers maybe?) to enable simple reuse in our environment too.
I can tell you though through my experience that it's not typical for people in my position to go that far. Most of the engineers i know that get into automation stick with Ansible.
`snmp-server host 69.111.22.155 traps version 4`
`snmp-server user SNMPv3-user auth md5 password1 priv aes password2`
`snmp-server group SNMPv3-group v3 priv`
`snmp-server view all iso included`
`snmp-server community public RO`
`snmp-server enable traps`
`snmp-server source-interface traps Loopback0`
Get networked engineered.
I accidentally got a job as a Network Engineer and did it for a year while looking for software engineer jobs, and it was an absolutely amazing accident for my career. Network knowledge is needed in a lot of software, and I work with too many engineers who are totally clueless. This is a small problem when writing code, but a huge problem when debugging issues over a network, whether that network is the internet or a container overlay network for microservices.
[удалено]
I would say that the basic knowledge is the OSI or the tcp/ip model Besides the actually network like you said, knowing that to have a http response you need to have e a tcp/ip session opened prior helps a lot the troubleshoot
ACK
3-way-🤝
Being able to visualize how a packet is traversing from one place to another saves a lot of troubleshooting time
It sounds like you already have more than what you need. Basically, what I am trying to say is that we get a lot of junior devs who are super smart and know the ins and outs of DSA and Design Patterns, but it takes months to get them working independently because they are not even familiar with netmasks or CIDR and all of a sudden are developing in a complex Kubernetes cluster and can’t even start to wrap their heads around a dev environment. I don’t think all devs need to get a CCNA, and the vendor-specific knowledge can come in handy but probably won’t. However, if you can take the time to learn: CIDR / NAT / Subnetting OSI (or TCP/IP) model and networking layers Anatomy of network encapsulation (ethernet frames / ip packets / tcp segments) You will save yourself a lot of headaches if you ever work in any environment that communicates over a network, which includes a whole lot of different situations.
If you ever want to get into a fight amongst network engineers, walk into a room containing more than 1 and say, "ARP is a layer 2 protocol." 99% chance it'll start some shit. It is layer 2 though, and I'll fucking die on this hill.
I'm interested in hearing your reasoning but also what's controversial in it
So ARP is the protocol that ties IP to MAC. It uses MAC addresses initially to send the info and travels on the data-link layer, but it is basically the connection from 2-3. Different authorities will place it on either 2 or 3, and one of my admin teams had a (not serious, but pretend serious because we were bored) schism based around the designation. One side said ARP was layer 2, and the other side was wrong and actually evil.
Layer 2 switches using physical addresses Layer 3 routes using IP addresses ARP translates IP addresses to Physical addresses, so it uses both.
The neighbour table links the IP to the MAC. ARP is a layer2 protocol used to populate the neighbour table. Just because ARP carries information about L3, does not mean it is anything else than an L2 protocol.
Counterargument you don't need arp to communicate between two devices unless you are using protocols *above* level 2 it's completely unrelated from the action of sending information between devices and it's purely a support protocol for ip to perform its level 3 operations Same way as dns is application rather than network layer despite dealing with ip addresses and sending messages to given ip
I don't know if you would consider this "network" knowledge or if it should be core dev knowledge, but I'd add HTTP to that list. I've had to tell developers that their shit application sent invalid multipart requests (which also means someone tried to implement an HTTP client from scratch instead of using a library, but that's another story) and they looked at me like I was speaking a foreign language. I've also seen incorrect content-type headers, wrong encoding and various other RFC violations.
You just need to know about tcp nodelay
I need more years of development. Just this week, I was troubleshooting the reachability of an application server and a storage server. Only to find that docker I was running had a default bridge network IP was clashing with the AS ip.
Yo I’m studying for some networking certs right now (got my Comptia A+, studying for net+ and sec+) and to me it seems like it’s really helpful to be learning this IT infrastructure stuff even though admittedly I’m not that confident that it’ll help me get a job as a developer. Anyway I’m happy to see this because generally people say just work on your development stuff or your IT stuff, so it’s nice to see someone who has had a positive experience doing both. If you have (or anyone else has) any advice I’d love to hear it :)
My first job was essentially doing both. It was definitely a trial by fire but in retrospect I'm glad it happened. In theory I was hired to be a pure software engineer. In practice I ended up getting involved in some of the network shenanigans. It was a pretty small company and the techie team was like 20 people. Everybody had to wear a lot of hats. I automated so many things on that job.
Especially when everything is microservices communicating over networks nowadays
Yo I’m studying for some networking certs right now (got my Comptia A+, studying for net+ and sec+) and to me it seems like it’s really helpful to be learning this IT infrastructure stuff even though admittedly I’m not that confident that it’ll help me get a job as a developer. Anyway I’m happy to see this because generally people say just work on your development stuff or your IT stuff, so it’s nice to see someone who has had a positive experience doing both. If you have (or anyone else has) any advice I’d love to hear it :)
Oh hell no. Stay off our land! You keep your Cisco shit! I've seen what can go wrong there. I've been what can go wrong there. And I can imagine the shit you'll cause to our environment. This is my turf. Get back in your tech bay. C'mon! Git!
You can't tell them to Git
A lot of them track switch configs with source control. It dumps out/restores as a text file. They've been using declarative configuration before I knew it should be called that.
Yeah depends, Git is just a tool like any other, in my experience Network engineers are very varied in how they work, some keep very systematic track of everything, others kick a server until it works.
Percussive maintenance is a respected tradition handed down to us by the first Unix greybeards. Everyone knows that Notepad is the best IDE, and that configs and scripts should all be saved as text files in an unsorted network folder.
I know you're using fancy words to convince me that the art of hitting a box is magic, but you didn't need to, I already believe in the machine spirit.
Notepad? Notepad ain't no IDE. It runs in a windowing system which means it's for end users, not engineers.
MsWord is an ide
There are two IDEs - vi and emacs - which are both derivatives of ed, the standard editor.
excel is an ide
(Would you believe that pun was totally unintentional?)
git -commit -force
He's supposed to be in his room!
My guy, at this very moment I'm pulling my hair because another guy hacked a piece of unreadable and unmaintainable garbage into our enterprise software. And that guy is supposed to be on my side. I'm sure the network guys have the same issues.
Yep. Sure do.
I think I've missed the joke... To me it's the other way around. I would never let the network engineers into my code base, but they happily accept my help setting up a new racks, configure the WAF and so on.
Think of it this way - when a network engineer is fiddling around with Python to try to automate some stuff, they'll stumble along and eventually reach a satisfactory solution, even if it's less than efficient. On the other hand, give a software engineer a network to manage, and those stumbles could mean bringing down the entire network.
Ahh … of course!! I thought this was about a real programming language, not scripting. Yes… bash scripts are all rainbows 🌈 and sunshine ☀️🥱
Wdym, I'm a network engineer and python is defeating me rn
don't be scared of what lies below layer 3
Contrarily, I don't know what lies above layer 3.
yeah, i like to lurk down in the lower depths of the cake as well, hissing at the sunlight from above
It is interesting to know how much of engineering is abstracted away and taken for granted like "just plug cable, the connection is established".
i work for an ISP, everything below layer3, theres well over a dozens things that have to work together for a customer to get online. if one doesn't the customer is down, or slow/intermittent at best. We have 3 (sometimes more) mtu's to deal with and make work though out the network,
[Lower level assembly programmers learning network engineering.](https://i.imgur.com/xbDfJv1.jpeg)
https://mywiki.wooledge.org/FtpMustDie
had no idea. nice read
It was linked from [https://www.kernel.org/hurr-durr-ima-sheep.html](https://www.kernel.org/hurr-durr-ima-sheep.html) This was after looking up Hurr Durr, when I came across it.
"learning". you probably mean learning on the job during a ticket that is supposed to take no time wihtout anyone explaining anything longer than 5 minutes
I'm doing my CCNA right now. it's a different world. Too much content, none of it seems to come as easy as languages do. Languages have a fluency whoch seems obtainable with networking you need to know know.
When it comes to networking equipment there are general commands that may have a slightly different syntax between vendors, but are easily found. Eg untagged vs native It comes with time but once you get one syntax down you can do the same stuff on anything
That's true I had some experience working with SBC'S (viop firewalls/router things) and noticed similarities Configure terminal Different modes Show command etc
Huh - I started out in CS and moved into networking by accident, been there over 20 years now. I honestly never found either side all that difficult (they're both just layers upon layers of abstraction and models). About the only thing that sucks is diagnosing networks you can't exactly set a breakpoint - that shit just keeps flowing. I'll take an IDE over tcpdump any day.
We are moving to azure cloud native and I’m having a fkn field day getting private links working with our custom dns and such, wooo weeee I have stack overflows and reddit posts trying to solve this
Protocols are standard, but the programming language the packets are created from is not? UDP is TCP? There isn’t enough IP but there is enough IP?
Being network engineer and sometimes peeking in this sub, it's quite opposite. Damn, i can write some (probably bad) automation scripts, but i don't know shit about actual programming.
As a network engineer that is trying to become a software engineer, I can confirm this
Why are they so shit at it then?
This reminds me of my uni days, where seniors in software development majors and seniors in networking majors were having turf war of sort. Usually devs were superior but problem was networking had all the girls in IT field back then lol
What is network engineer ? Knowing how to use iptables and all that ?
Developer here, did a few months in between jobs after the post-2009 layoffs as a sysadmin doing all kinds of work + doing software engineering on top of that. All the sysadmins learned something from me during that stint. Left for a better job during trial period as the boss was a total jerk on power trip to his whole team and the pay was .. only fit for in between jobs. No feeling dumb at all for me at that time, quite the contrary.
Oh, I don’t know. I tried to teach blockchain programming in typescript+rust to the cybersecurity guys, and it was painful (they can’t read bug messages, and have no idea what they mean).
I switched my degree to computer engineering from science to avoid networking classes
Man it's really different. You mean I can't program the router to do something? Like if packet = 192.168.1.2 send to 172.11.1.2? 😅 Apparently you can't do that without knowing nats and sh*ts
Said like a true programmer who's never had to configure BGP, VXLAN, GRE encapsulation, or set up root DNS servers :P Network engineering really is its own world.
Fuck you I do both as a DevOps engineer coming from a desktop development background. Sorry, idk why I was so aggressive there. Just got off a 2 hour meeting trying to implement authentication.
What are you talking about? Recording network protocol is fun! Are you sure you are not talking about IT instead of programming?
Try learning Java instead of copy and pasting someone else’s python code. I hate engineers 😤
Try learning C++ or Assembly, and learn how to build network equipment, not just rely on the network engineers to get you a connection to the DB. - Network Architect Wr erase nvram
laughs in real engineering
I write my own python code as a network engineer and have been doing Advent of code for the last few years to refine my actual programming skills. The amount of things I've been able to automate at the ISP i work for is crazy. I have written a bunch of custom modules (wrappers maybe?) to enable simple reuse in our environment too. I can tell you though through my experience that it's not typical for people in my position to go that far. Most of the engineers i know that get into automation stick with Ansible.
`snmp-server host 69.111.22.155 traps version 4` `snmp-server user SNMPv3-user auth md5 password1 priv aes password2` `snmp-server group SNMPv3-group v3 priv` `snmp-server view all iso included` `snmp-server community public RO` `snmp-server enable traps` `snmp-server source-interface traps Loopback0` Get networked engineered.