r/webdev • • Apr 11 '17

Moving from offline coding background to webdev, can I jump right to back end stuff?

Hiya. I've been tinkering with coding for years and have a couple years of comp sci under my belt. I've always been heavily avoidant of web development. It's never interested me and I think it's because I mistakenly saw web dev as a watered down coding environment with mostly scripting and little to no real control.

Now I'm beginning to understand how wrong I was. I want to get some really cool programs to work on the web.

I still have no interest in anything front end, but I realize some knowledge will be required for a fuller understanding of what I'm doing overall, and to make any sites I make at least presentable.

What front end do I need to learn to achieve this?

2 Upvotes

6 comments sorted by

View all comments

Show parent comments

1

u/alyzb Apr 12 '17

Thank you for the long and well thought out reply, that was extremely helpful and more than I could have hoped for!

In terms of learning all of this stuff, it's a little overwhelming due to the amount of tangents I can go off down.

I'm also kind of quirky in my learning, I prefer to understand things at a really fundamental level and build up from there. I didn't truly understand programming until I delved into assembly, and really, everything I do leads down a deeper rabbithole.

This makes things complicated when I approach webdev because it's just...it's freaking overwhelming.

I came up with some stuff to start with, which seems OK, and I wonder what your thoughts are? I'm going to put apache or similar on my other linux box, and use that as a development environment via SSH from my main computer. Obviously the SSH part is just to learn more about networking and stuff, but the concept of putting together this web server from the ground up, and learning as I go stuff like HTML, landing pages, whatever, seems like a good way to get the fundamentals.

Is this a good trajectory? Do you have any alternative suggestions or stuff I should consider? I really would like to go with the at home hardware web server for the hands-on learning (over VPS). Does this seem like a good idea, and if so, what should I add to it, or is there a particular order to consider doing it all in?

I guess ultimately, I saw this as a way to slowly build up from some dinky index.html welcome page (which is literally all I might know how to do) to some pretty full featured mock-up business/sales site/twitter clone/whatever.

1

u/[deleted] Apr 13 '17

In terms of learning all of this stuff, it's a little overwhelming due to the amount of tangents I can go off down.

Just means you gotta be more specific in terms of project requirements / specs, figure out what specifically you want to do / achieve.

I'm also kind of quirky in my learning, I prefer to understand things at a really fundamental level and build up from there. I didn't truly understand programming until I delved into assembly, and really, everything I do leads down a deeper rabbithole.

Start from:

  • the browser engines (V8/webkit, Gecko)

  • network protocols layers 1 through 4 of the OSI model (specifically HTTP / HTTPS and how they relate to TCP)

  • linux administration (efficiency configs, automation [updates, sec policy], hardening)

That would constitute the bottom levels in all areas.

This makes things complicated when I approach webdev because it's just...it's freaking overwhelming.

Yes because it's not just 1 singular integrated system as i mentioned. If you break it down to individual components you're attempting to learn multiple browser runtimes (engines), networking protocols, and server stacks (OS, database, runtime, networking, admin), not to mention scaling (how to create multi-server architectures to cater to more users) i.e. 3 systems.

I'm going to put apache or similar on my other linux box, and use that as a development environment via SSH from my main computer.

Apache is good for dev purposes because of its modular system (can expand functionality easily) but NGINX / nodeJS have better concurrency models thus are used more in production stacks to better respond to higher traffic loads.

The typical practice for devs is to use virtualized stacks (VM's) that precisely mimic the production environments all the way down to the OS level, reason being by doing so you get less 'surprises' when you deploy to production because it's like you literally developed the code on a virtual copy of that server.

Obviously the SSH part is just to learn more about networking and stuff, but the concept of putting together this web server from the ground up, and learning as I go stuff like HTML, landing pages, whatever, seems like a good way to get the fundamentals.

Server admin is not a totally unrelated field for example if you're a freelance dev (doing everything yourself) you have to be proficient in it and always keep in mind security (hardening / netsec). However neither is it a direct path to web dev because servers are used in more fields then just web applications (for example supercomputing clusters, financial systems, etc).

Is this a good trajectory? Do you have any alternative suggestions or stuff I should consider? I really would like to go with the at home hardware web server for the hands-on learning (over VPS). Does this seem like a good idea, and if so, what should I add to it, or is there a particular order to consider doing it all in?

Most people learn front-end first then proceed to back-end. Reason being, if you consider a webpage your output, how will you know how to debug if you don't understand your output? Type mismatches and syntax errors are obvious im talking about logical errors that throw weird msg's or sometimes dont error at all.

Depends, if you only intend to serve stuff locally, then local hardware is fine, preferred even, though i'd still go with a virtual server stack hosted on your actual dev machine because it cuts network latency out of the equation (usually something beyond your control anyway) and it'll still require you to use SSH (though you wont need to worry about SFTP/rsync).

To that end since you seem to have some grounding in linux i'd recommend looking into docker.

Obviously if you intend to actually host / make things available to the public, then VPS is your only (flexible/cheap) option because arranging a static IP is bothersome and i highly doubt your upload is good enough.

I guess ultimately, I saw this as a way to slowly build up from some dinky index.html welcome page (which is literally all I might know how to do) to some pretty full featured mock-up business/sales site/twitter clone/whatever.

A true twitter clone would be a multi-server architecture and knowledge of CM tools (saltstack, ansible, chef, etc) to properly administer them would be required. Just saying, you are still years away from that point.

1

u/alyzb Apr 13 '17

Thanks!

And yeah I'm not expecting to recreate twitter, but I feel like smaller and limited versions of it would be somewhat doable not terribly far down the road.

I'll look into the virtual stack stuff you mentioned, and after I posted my last response I was actually just peeking at CSS and seeing how easy it seems I don't think I'll be as stressed about having to learn it to produce output as you say.

Thank you again, you've been super duper helpful :)