Should you know TCP/IP to work for a web company?

An interesting discussion (argument?) popped in my tweets yesterday in the form of TCP/IP knowledge depth to be able to work at a web company.

The tweet that prompted it all

That quickly prompted quite a few replies from developers and techs leads of different levels and knowledge, including myself, but none of us asked the question: “for which role?”

There are a lot of different roles at a web company, and if we exclude the obvious non techies ones (I doubt the receptionist gives a damn about MTU and error control), we can still argue about the depth of network knowledge required to occupy a technical role. Let’s be clear here: we’re not talking about connecting your laptop to your corporate wifi network, but about network protocols and how they work.

The pure front-end developer: I’d argue you only need some very small basics, if any, about network protocols to do an awesome job without any problem. I hope you know what an IP address is, and that’s possibly the only thing you’ll need. If you don’t, dig it up, but don’t learn the whole CCNA syllabus. No need. Knowing HTTP, on the other hand, is not an option these days, even for “pure front-enders” who’ll most likely have to do something with asynchronous javaScript calls at some point or another.

The all rounder: If, like me, you’re one of those, doing some front end and backend code, you’ll probably want to know a bit more about what rules data transfers across networks. Having a little knowledge about network protocols, what they generally do and how to ping/trace stuff is a good thing. But I am really not convinced that knowing the inner workings TCP/IP should be a requirement to land you a job. Hands up all rounders who have had to dig in TCP retransmission timeouts or the size of IP datagrams because some packets were being dropped on “the line”? Yeah… I thought so. Probably not many, and the ones who raised their hands either do a networks engineer’s job, or, like me, did some network studies before falling into development.

The back-ender: It’s probably a very good asset to have, especially if you work at a web company dealing with large volumes of users, requests, page loads and transactions. Knowing it will probably help a lot in optimisation of data transfers an server communications. I’d argue here that it is a requirement for you to know where things happen on the network stack. You won’t need it every day in your job, but you’ll have an extra weapon in your arsenal in case things get nasty in those lower layers. Having said that, if you don’t work on networks systems, I’m pretty sure you can still do an excellent job without the complete knowledge of how IP re-assembles packets or how TCP works out how to retransmis the ones gone astray…

Now if you’re interviewing for a network or systems engineer role, then you should not only know what TCP/IP is, but know its inner workings and its quirks. You should know how to trace errors in packets and be able to identify why some retransmission occurs on the networks you’ll be managing. At this level, basics aren’t enough anymore, but this is valid in any IT networks department, regardless of the company.

As with everything, it’s all a matter of perspective (and remember I’m more an all-rounder with a strong preference on front-end development), but I’d argue you don’t need a very deep understanding of the inner workings TCP/IP and how it works to “work at a web company”.

What’s your view?

Comments are disabled temporarily until I find a suitable system, but you can still send a comment by email and I'll add it to this post. Thanks!