OK, so not a series of tubes
March 6, 2016 6:23 PM   Subscribe

How does the internet work? Clients, servers, REST, SOAP, packets, protocols, oh my! -- looking for resources to teach a budding programmer how it all works.

I am not five, or a technophobe: I have made a couple intranet pages at my job, and one website for another job, so I know some HTML and CSS, and a little JavaScript. I have dabbled in Python with this excellent book. I did an A+ course, and have assembled three computers.

Now, if my friend's startup gets funded, he's going to hire me as a junior programmer on this web app he has -- in April or May. My friend knows I know nothing, but he thinks I could learn and wants to help me out, and I love what I've done so far with coding, and want a career change. I need to learn what one presumably learns in the first semester of CS school -- What is all this stuff? How does it fit together? To illustrate what I don't know, my friend suggested I look into Backbone, and this page scared the fuck out of me. No comprendo.

Book and website resources very welcome, or you could just tell me.
posted by pH Indicating Socks to Computers & Internet (9 answers total) 25 users marked this as a favorite
 
Let's say you have a website that collects leads for your sales service. Basically it's a fancy looking website with a form for a person to enter their information. Using HTML and CSS a backend server displays the html and css with the form on it. It's sent over the network and rendered by the browser. The user can interact with the form and fill it out. This interaction could be done typically using specific HTTP verbs such as POST to send their data back to the backend server. It might even use Asynchronous Javascript and XML(OR usually JSON these days) to send the data back to the server without reloading the page or loading a new page. That data goes into some kind of database somewhere either a typical relational database or a not only sql database. There could be a whole lot more depth one could go into such as what network requests look like or what backend service is used to host the service or even what frontend javascript framework might be used. You do not need to know how to do all these things at once. A simple static website can be served with very little overhead.
posted by andendau at 6:58 PM on March 6, 2016 [1 favorite]


Maybe you will find How DNS Works helpful and/or entertaining.
posted by sea change at 7:00 PM on March 6, 2016 [1 favorite]


Best answer: I don't think you are looking for what one learns in the first semester of Computer Science. The same can be said for even a Software Engineering degree. Many CS curricula focus on the math and computational theory and use programming as a tool to demonstrate those theories (for example, a telescope is to Astronomy as a computer is to Computer Science). That's not to say that a CS degree doesn't teach one to program but it's more of something akin to a side-effect than the end-goal.

Web Development is often a subset of a CS degree, if included at all, and the whole of a CS student's Web Development education comes often from 1-3 courses. The rest, they learn on the job or through hobby programming. That's how it worked for me at least -- I had one elective course on Web Programming which was basically an introduction to the LAMP Stack but I've been programming with and for web technologies well before my college years and well after.

In your case, here's a great resource about the web in general: http://www.tutorialspoint.com/web_developers_guide/index.htm. Being a web developer can mean many things. I find the best are those that understand the web from soup-to-nuts and never says "That's not in my job description." That is, be the best you can be and learn as much as you can about all things. web.

I know I have another resource that is similar to this one saved somewhere -- If I find it, I'll make another comment.
posted by TimBridge at 7:41 PM on March 6, 2016 [7 favorites]


Found it! It's geared towards Front-End developers (which you may very well be trying to be) but, regardless, there is TONS of info in here about all things web: https://frontendmasters.gitbooks.io/front-end-handbook/content/index.html

I linked to the Intro page but, seriously, look through as much as you can. Part 1 is all meta stuff but Part 2: Self Directed Learning would be great for you to begin with, I think.

And, just to elaborate on what I said in my previous comment -- What I mean by never say "That's not in my job description." is to care about everything from the version of Apache on your box and your box's security updates, the database structure and normalization, the LAMP Stack, to SEO, to Node.js, HTTP Requests/Responses, Performance/Load testing, QA, Version Control (very important to have experience with version control these days) and all the way through to using Photoshop/Illustrator to work on/give opinions on the design and the UX/UI of your site.

A lot of developers pigeon-hole themselves by saying (and doing) things like "I don't care about UX, I am a a Back-End dev (or Front End dev, or Database Admin, etc.). Learn about _everything_ enough to handle anything that comes your way and you'll stand out in the field.
posted by TimBridge at 8:01 PM on March 6, 2016 [4 favorites]


Response by poster: Oh TimBridge, that TutorialsPoint link is fantastic -- exactly what I was hoping for! And to your advice, yes, for sure -- my friend tells me that one big difference in working for a start-up as opposed to a big company (the only kind of place I've ever worked) is that everyone pitches in to do whatever needs doing, irrespective of strict job description. I hope I will learn everything, and do everything. Even documentation, which is the only thing I'm actually semi-qualified to do at this point.
posted by pH Indicating Socks at 8:54 PM on March 6, 2016


Great. Glad to hear those resources are useful to you. Your friend is right about start-ups. I worked at a start up during and for a year after I was in and graduated from college -- our line was "we all wear many hats." If you take that mentality with you to other places, you'll stand out.

Documenting code is a great way to learn because to properly document, you must understand 100%! Not to mention it's pretty much a requirement in any size team to properly document your code these days. Best of luck.
posted by TimBridge at 9:11 PM on March 6, 2016 [1 favorite]


Best answer: You want to really know how the internet works? Read this. It is an extremely in-depth guide to the protocol that makes all this possible, HTTP. The authors of this book are not just random geeks who slapped together a how-to guide. Totty was part of the team that developed the VPN. The book covers not just HTTP semantics (i.e. REST, which Backbone.js is based upon) but also a lot of details about how it connects to wider networking concepts. If you have only been exposed to the application side of the internet, this book is a great deep dive into how things really work in between the client and server.
posted by deathpanels at 5:00 AM on March 7, 2016 [1 favorite]


In addition - go to local user groups. (Meetup.com)

[Career advice below]

Yes, you can learn a lot from usergroups, but more importantly - also possibly find a couple mentors to help you out. (I say "couple" - because if you are asking people for guidance, it makes sense to spread the load across a few different people ;-) as to "who" to ask... typically the topic speakers and/or people running the group)

But ... congrats, and don't worry - yeah, some things you see will confuse you - heck, it may take a decade or more before you truly understand some topics - especially when you are self-taught - but, OTOH - being self-taught will mean that you are going to have a lot of meaningful real-world experience in the areas you do knuckle-down on.

Make sure you create a profile/account on Stackoverflow - that is an amazing resource to ask questions.

When you are encountering something that blocks you - remember to search for an answer, rather than post a request right away - I have a personal rule-of-thumb that I can never be the first person to encounter a problem/bug/issue and 99.999% it has proven to be true - and when you are asking for help, people respond better to someone who has taken the time to try and figure it out.

Also - a trick taught to me by a mentor long ago - when you are given a specific error message, solve for that error - do not assume or guess that it is something else. If, once that error message goes away, another turns-up, solve for that new one and keep doing this until you get no more error messages... By that time, you probably have re-solved your bug...
posted by jkaczor at 6:13 AM on March 8, 2016 [1 favorite]


To illustrate what I don't know, my friend suggested I look into Backbone, and this page scared the fuck out of me. No comprendo.

Did he suggest that because the company has an application already built in backbone? Otherwise, starting with backbone (which is a javascript framework) doesn't make a ton of sense in 2016. And it's putting the cart before the horse anyway. Get solid on the fundamentals of Javascript before you start playing too much with frameworks or libraries (e.g. React, Angular, Ember, Meteor). There are good resources at /r/learnjavascript.
posted by ludwig_van at 11:52 PM on March 8, 2016 [1 favorite]


« Older Must not involve shooting alien Nazis in the face....   |   Just broke up: How to ride the sorrow? Newer »
This thread is closed to new comments.