10 ms·
Can I add another one? How about "The Network Doesn't Work The Way You Think It Does: A Distributed Systems Survival Guide". As someone who has spent a good ch
by insaneirish 11y ago
Can I add another one? How about "The Network Doesn't Work The Way You Think It Does: A Distributed Systems Survival Guide".
As someone who has spent a good chunk of their career building high performance networks and another chunk of it working closely with developers who care a lot about those networks, I'm constantly amazed at how little top tier graduates from well respected schools know about networks.
Relatively basic stuff, like what does your application's traffic look like on the wire, how an OS determines what to do with a packet, how latency affects applications, and many other things are completely foreign to way too many developers. I could go on and on, but given the connected nature of things today, it seems like a very overlooked area.
- fr0styMatt2 11y agoClosely related I think: breaking into software / hardware / networks. A course that has people doing basic and maybe not-so-basic exploits on real systems. Including attendance at a conference such as DEFCON. Our future software engineers need to have security as a fundamental concern to software engineering and not as something that's an 'add-on'.
- testaccount17 11y agoI am a recent CS grad and I am constantly amazed by how little I know about networks. Do you have a favorite book or online resource on the subject?
- jzwinck 11y agoOne fun thing is to download Wireshark and look at the packets being sent in detail when you do common things like browse the internet or use FTP.
- insaneirish 11y agoI think this is a really good idea, but I'd add one alternate possibility is well. Doing this on a typical user's computer today will present a mind blowing amount of data--so much that it is easy to give up trying to figure out what's going on if you've never done it before. Instead, perhaps spin up a Linux VM, maybe even no GUI to start. Then run Wireshark on its interface. Much less noise. Should be much easier to begin dissecting.
- jzwinck 11y agoNo need for a VM, just do some filtering in Wireshark. This will help you understand even better what is possible (filter by IP, port, and many other things).
- lotu 11y agoIt's even more fun to do it on a network, where you can see what things other people are doing.
- re_todd 11y agoAgreed. I took a networking course at University, and at community college, but didn't really understand networking until I started fooling around with Wireshark.
- douche 11y agoFor a little softer experience, you can load up Fiddler and just look at the HTTP traffic. It's a little mind boggling to me to envision trying to debug web apps without Fiddler, Chome devtools/Firebug and server-side logging inspectable at the same time. Also a little terrifying to realize just how much incoming and outgoing traffic all the things on your computer are generating all the time.
- rayiner 11y agoI'm a fan of lecture notes. http://www.cc.gatech.edu/~traynor/cs3251/f13/slides/ http://www.cc.gatech.edu/~traynor/cs3251/f13/slides/
- akandiah 11y agoComputer Networks by Tanenbaum: http://www.amazon.com/Computer-Networks-Edition-Andrew-Tanenbaum/dp/0132126958 http://www.amazon.com/Computer-Networks-Edition-Andrew-Tanen... It's a classic.
- yaur 11y agoTCP/IP Illustrated is what I cut my teeth on back in the day. You will need to be able to read C to follow the code, which is mostly from the BSD TCP/IP stack IIRC.
- evgen 11y agoThe Stevens series is a classic, and you should find a used copy to stick on a bookshelf for the nerd cred and because they are damn fine boos, but I think you will find the Kozierok's TCP/IP Guide from No Starch Press to be a more modern and up-to-date text.
- spacecowboy_lon 11y agoThe CISCO press books for the CCNA course are fairly good. I actually did the proper 4 semester CISCO academy course at night school a while back which should give you real hands on experience - one of the tests is the instructor breaks a system and you have to fix it
- lordnacho 11y agoI ended up doing the CCNA course just to figure out how networking works. I was designing a distributed trading system and I wanted to actually understand how things worked rather than just cargo culting a few commands and praying. There's just so many acronyms in the networking space it's hard to figure out without an overview. Even with the CCNA course, you're still not going to know about stuff like security and firewalls on a deep level. But get the textbooks and read through them.
- ArkyBeagle 11y agoThis is probably complete overkill , but my favorite is still McDysan/Spohn "ATM Theory and Applications." The first few chapters before you dive into the details about ATM are a very good overview of all communications systems.
- 2muchcoffeeman 11y agoI know a few good developers that don't even know how a computer works. Everything is so abstracted you never really have to know.
- toomuchtodo 11y agoAs a devops/infrastructure guy, this drives me nuts. You abstract everything away, but then are shocked when you don't understand what's happening when the underlying layers fail or break down in unexpected places ways.
- api 11y agoIt's rapidly becoming a two tier world with two types of programmers: those who are well trained in coding within known environments, and those who are like the folks in The Matrix films who ate the red pill-- they know what's really going on.
- jpatokal 11y agoIt's been like that for decades. Or do you really know what assembler your program compiles down to?
- djcapelis 11y agoFor some of them, absolutely. I change the assembly output and reassemble to verify that the atomics are necessary and fixing the cases I think they do. As far as I'm concerned, if you're not removing the atomic instructions to make sure the breaks happen that you expect to happen, you're not really testing your code.
- joezydeco 11y agoI'm an embedded systems engineer. It's always been that way for me: I own and compile the bootloader, kernel, filesystem, runtime libraries, and the application code. I have the schematics and gerbers for my boards. I have the reference manuals for every chip. What's weird is watching people play with stuff like Raspberry Pi and they expect things to just apt-get and launch like it's always been done for them. And most of the time it does just work that way. Except when it doesn't.
- api 11y agoA thousand times yes. I've met tons of good programmers, even CS/CE Ph.Ds for whom networks and anything wire-releated is black magic beyond mortal understanding. Not only does it prevent them from dealing with or writing such systems, but it's also a major contributor to clueless security FUD. It's not that there's nothing to be afraid of... it's that if you don't understand how networks work you are probably afraid of the wrong things.
- serge2k 11y agomy school offered both networking and distributed systems courses, and it was a tiny school with an even smaller cs department. The problem is getting practical experience in modern techniques.
- hcrisp 11y agoNetwork speeds I don't know about, but the book "High Performance Python" comes pretty close to the description of "CSCI 4020: Writing Fast Code in Slow Languages". Check it out!
- irremediable 11y agoThanks for the tip. I've been exposed to Cython a little, but my experience was very ugly... will check this out.
- karmakaze 11y agoAwesome. I was just about to say I'd pay for CSCI 4020.
- superuser2 11y agoThis is Networks and Distributed Systems at UChicago: CMSC 23300. Networks and Distributed Systems. 100 Units. This course focuses on the principles and techniques used in the development of networked and distributed software. Topics include programming with sockets; concurrent programming; data link layer (Ethernet, packet switching, etc.); internet and routing protocols (UDP, TCP); and other commonly used network protocols and techniques. This is a project-oriented course in which students are required to develop software in C on a UNIX environment. http://collegecatalog.uchicago.edu/thecollege/computerscience/ http://collegecatalog.uchicago.edu/thecollege/computerscienc... The 3 major C programming assignments last year: an IRC server, a TCP stack, and a router. Best course I've ever taken.
- zachberger 11y agoI dug around and found the course projects: https://github.com/uchicago-cs/cmsc23300/wiki https://github.com/uchicago-cs/cmsc23300/wiki
- voltagex_ 11y agoThanks for this.
- deleted 11y ago[deleted]
- serge2k 11y agoShould be considered a typical CS course.
- grrowl 11y agoPart of my bachelor of Software Engineering included calculating to the nanosecond the latency of networks from the kernel interrupt to the other side (including across copper, fibre, and waiting in RAM buffers along nodes on the way)
- voltagex_ 11y agohttps://www.nsnam.org https://www.nsnam.org looks like a good idea, but my head is spinning from the first tutorials - I'd love a "network simulator" that could just replay pcap files. Do you think that programmers watching and understanding some of what's going on in a Wireshark session would help?
- voltagex_ 11y agoAlso found via the course wiki - http://mininet.org/ http://mininet.org/