Learning web development with prior programming experience?
October 17, 2020 9:46 AM   Subscribe

I'm looking into learning full-stack web development as a hobby. There are a ton of resources out there for learning, but they seem geared in a particular direction, which seems less useful to me, because I do programming for my work, but mainly stats/ML stuff in Python and R. Is there a way you think would be good that would allow me to get my hands dirty and learn a lot?

Part of the problem is that compared to the stuff I'm normally involved in, the discourse around frameworks in web stuff seem so ridiculously internecine. People might talk about the relative merits of PyTorch vs. TensorFlow, but I get the impression that it's like that in web development, except more multi-faceted and opinionated. So I don't know if I'm particularly looking for advice about a particular JS framework, but I suppose I'm open to that kind of thing.

Mainly I was wondering if people had an idea about how I could devise a really thorough curriculum for myself. I want to put this learning into practice by making little projects, personal websites, etc.

Because 90% of my work is done in Python, I figured I'd look at Django and Flask, but they don't really do it for me; Django struck me as having too many moving parts; managing database migrations didn't seem like something I wanted to worry about at first. My totally ignorant impression is that it might be better to learn basic stuff using some static site generator.

I'm not sure if I've given enough of an idea of what I'm looking for, but it's kinda hard to know because the information out there is so overwhelming! I'm open to any suggestions you might have!
posted by vocativecase to Technology (8 answers total) 8 users marked this as a favorite
Flask would be a good place to start, since it's Python and very simple. It's only a back-end, though. I only really know JavaScript front-end frameworks. Of the ones I know well (Angular, React, and Vue) I'd recommend starting with Vue since it's probably the simplest. For real work, I personally prefer Angular, but any of them will work.

One thing to know about JS frameworks is that the whole landscape changes drastically every 3 years and, as you have seen, people are unbelievably opinionated. However, once you learn one, you can pick up another one pretty quickly.

I don't have advice on a curriculum per se, except to say maybe don't? I'm a professional and I rarely bother going through a learning course before diving in. Maybe I'll watch a super-quick overview video or read an article. I would just pick a project and then google for relevant examples. Learn by doing. When you come across a concept you don't really understand, then you can delve into learning about it.
posted by callmejay at 10:09 AM on October 17, 2020

You might also want to look into D3 for some really cool visualization stuff, although at least for me that was harder to learn.
posted by callmejay at 10:10 AM on October 17, 2020 [1 favorite]

I think I'm a little confused about your goal here; do you want to build full-featured web apps (having a DB somewhere & persisting data; offering some user interactivity) or do you just want to display static content (a portfolio site or something along those lines)?

If it's the latter, I'd go with Flask. It's simple, but it can do everything you're doing to need: it can render HTML, it can handle user input, and down the road you can add DB integration or convert it to an API and put a JS app in front of it. It's super easy to get a Flask server up and running locally, and you can also get it running on Heroku (i.e. have it out in the real world) in the free tier pretty quickly. It has a lot fewer moving parts than Django, but it'll still give you the opportunity to have some user interactivity down the line. (That said, Django can also do all this stuff. You don't have to have a DB with Django, you can just use it as an OP HTML renderer.)

I'd avoid static site generators for now. Not because they're bad (I use GitHub's static site functionality as my own portfolio's backend), but if you weren't happy with Django doing stuff under the hood without showing you what's going on, you're going to be really frustrated with static site generators.

In terms of learning, I like Real Python’s courses and articles. If you have more questions, feel free to shoot me a DM; Python webdev is about 50% of my day-to-day work these days and I'm happy to talk more about it.
posted by protocoach at 10:18 AM on October 17, 2020

I agree with callmejay; Instead of working from a curriculum - just try and build those small projects. Most development skill comes from learning though doing, and if you can't envision why you'd use something, then don't waste your time on it yet. You'll more happily deal with databases when all of a sudden what you want to do requires a database!

For JS frameworks, just pick a non-obtuse, common one and use that. It will very rarely be the absolute wrong choice. It might not be the absolutely perfect one for your specific use case, but it takes experience and doing to figure out that for yourself - and there's no one right answer, hence the overly opinionated communities around these things.

Just pick a project, and start coding. Flask is a perfectly good starting place for server-side development. If/when you need something heavier like Django because you've hit some of Flask's limits, you'll probably know.
posted by cgg at 10:28 AM on October 17, 2020 [3 favorites]

Your ambivalence about backend frameworks suggests that maybe you’re actually more interested in what happens in the browser? The JS framework landscape has largely stabilized around React within the past ~5 years, but it’s kind of a beast because it’s designed to solve large team coordination problems (how to deliver predictable front-end behavior on Facebook.com with thousands of people working on sub-components).

You might get there eventually but you may want to start with plain old HTML and CSS to get a feel for the elements of page design and the way in which a navigation experience is defined and interpreted. Lots of dynamic stuff happens in a browser just getting markup rendered, and the web is a profoundly flexible publishing medium. Good writing on this exists from authors like Eric Meyer and publications like A List Apart. The only tools you will need are a text editor and a web browser.

When you’re past the beginning, there are two slightly-different paths to take further: dig down into the backend with frameworks like Django or Flask and databases and services, or ride the wooden rollercoaster of dynamic frontend with Javascript and React and D3 and webpack and a cambrian explosion of build tools.
posted by migurski at 10:33 AM on October 17, 2020 [6 favorites]

Coming from the other side of things (a web developer, but not someone who necessarily knows Python), I found the Python framework Masonite to be pretty good. It's geared pretty highly towards making Web apps and stuff of that nature - spinning up a simple blog is pretty simple, for instance, and is actually the "Masonite 101" type thing in the docs. It also handles a lot of things if you really want to get into adding stuff - for example, adding event handlers and broadcast messages and queues and stuff like that is real simple - but that can all be ignored until you want to use it. It's structured like and takes a lot of cues from the Laravel framework, which is pretty highly used on the PHP side of things, so a lot of the ways of doing things there can be applied to code in Masonite too, albeit sometimes with a bit of translation (from PHP to Python). (This was really the selling point for me - I do a lot of work in Laravel, so it being mostly a 1-to-1 map between frameworks was pretty nice, especially given relative unfamiliarity with the underlying language.)
posted by mrg at 12:56 PM on October 17, 2020

As with anything, a lot of this depends on what you want to get out of this. My personal stance is that the best place to start with web development (at least from the client-side tech) is learning HTML, CSS and Javascript (in that order) so that you have a good understanding of the platform you're targeting. It helps contextualize the various frameworks that have sprouted up as the vast majority of them are essentially reactions to the limitations (real or perceived) of the platform. It is often the long way to get where you're going if the object is to build something specific, but if the object is to actually learn, I feel like taking that time will pay off in the long run as you don't have to rely on non-standardized black-boxes to do the thing you want.

I don't have much experience with Python on the server side, so I can't offer suggestions for what specific frameworks or platforms to use there. It's still going to end up serving HTML/CSS/JS to the browser though, so again, having those fundamentals in place can help you evaluate the tech.
posted by Aleyn at 3:41 PM on October 17, 2020 [2 favorites]

nth-ing the advice to learn HTML, CSS and JavaScript in that order. JavaScript frameworks like React are designed to solve large-team problems, and static site generators are best for folks who already know the language the generator uses and don't want to learn HTML. (If that's you, heres a list which shows them by language: https://jamstack.org/generators/)

In addition to Eric Meyer and A List Apart, try Smashing Magazine's CSS Layout guide and Chris Coyier's quick video on Starting to write HTML. If these seem relevant to your needs, then you could work your way through the Learn web development articles at the Mozilla Developer Network (MDN) and just skip bits you already know.
posted by harriet vane at 3:16 AM on October 18, 2020 [1 favorite]

« Older More webcomics like Digger?   |   Product companies with multi-generational staying... Newer »

You are not logged in, either login or create an account to post comments