I’d like to expand my skill set but I have trouble visualizing all the moving parts of a “big” web app and all the tools that go into it—when people talk about containers, or testing, or deploying such-and-such, I don’t have a clue. With HTML/CSS/JS, I can spin up a little demo to play around and learn on another personal/toy project, but how do I, as a solo person, learn about larger-scale technologies?
I’m a visual artist and print-based technician so front-end would probably be the place to focus. Is there a recommended path for going from hobby projects & small sites to larger-scale best practices in React/another important platform?
1. Learn React and Typescript. React has taken root in the enterprise and it seems to be the frontend equivalent of Java.
2. Learn about CI/CD: Github Actions is a good starting place. If you're hosting your projects in something like Vercel, try running separate staging and production environments.
3. Look at popular open source frontend projects. The newly released Supabase dashboard[0] seems to be a pretty good starting point to figure out modern best practices. Excalidraw is another[1].
4. Frontend masters has some pretty good courses regarding React and enterprise Typescript. Would give those a try (the price is $39/month).
5. Where I'm from (Finland) Spring Boot (Java/Kotlin) seems to be the most popular backend framework. Node and Python frameworks share the second place. If you want to learn backend, I'd suggest picking one of those three. Rails if you really want to.
6. At some point you'll probably want to work with AWS. If React is the Java of the frontend then AWS is the Java of infrastructure.
7. It's never a bad idea to know SQL.
[0]: https://github.com/supabase/supabase/tree/master/studio
Tools are tools. They solve some problem. Many of the large-scale companies have problems you as a single frontend developer might not. If we better understand what is your motivation maybe we can better advise you which techniques are worth your time.
Are you interested because you would want to join a big company? Then it is a question of how to get a portfolio which you can use to get through the filters.
Are you interested because you have trouble keeping up with some aspects of your solo developed projects?
Are you perhaps feeling that your simple solutions are bad just because they are simple? In that case it is important to know that what is best practice for a team with 200 developers might be a terrible waste of time for an individual.
But yes, some rare sites do need to scale above >1M unique users, that's where the trouble begins. You can start by benchmarking everything you build. Think of every line of code and optimize it, or you just build your stack in smaller pieces and scale out using modern tech Stack. The question is, what do you want to learn. The first way would learn you how to build efficient software, the second one would teach you how to waste lots of resources but be new, modern and a hipster. And in addition, now a days employees are so expensive, that a company don't care about Cloud costs if this makes dev faster.
The best thing I did was grab a Rails book and study it, building the sample project all the way through. Then I came up with a web app I wanted for myself and built that using what I had learned. This took some time, but taught me so much. First, it forced me to learn another ecosystem, which made me much more aware of what was “common” or “universal” among web applications versus what was environment-specific. It also made me learn a new language, which similarly gave me a much better understanding of how computer programs work (seeing the same basic things implemented differently helped me understand the fundamental concepts that every language is abstracting over).
I would definitely still recommend this approach today, specifically because Rails is such a well-documented full-stack framework, it’s really easy to learn. Start here: https://www.railstutorial.org/
Another advantage is Rails is the tech underlying many of the web giants (GitHub, Shopify, AirBNB, etc), and the Ruby ecosystem inspired many of the other cool new technologies out there today. Even though it’s not the “hot new thing” anymore it’s extremely marketable. React devs are a dime a dozen, but people with Rails experience are in high demand and much harder to find.
The last thing is you just need to get a job at a place with other good engineers who can mentor you. Ultimately everything else is just getting your skills up enough to get in the door, once you clear that hurdle you’ll be able to learn as you go.
Best of luck on your journey, it’s hard work but very, very rewarding! Happy to answer questions if you have any :)
You’ll have more success (and fun) doing things where you can leverage your creative skill alongside your code learnings.
One source of deep admiration for many Ruby programmers was the artist/coder “Why the Lucky Stiff”. They created digital works of art that were a serious of small coding projects most of them fun, a couple highly useful.
The seminal book “Why’s Poignant Guide to Ruby” (http://poignant.guide) is still a beautiful read. Pair it with the website Try Ruby (https://try.ruby-lang.org) and you can plug in the examples from the poignant guide as you read along.
I’d recommend learning Hotwire and Rails 7 and then making small Rails apps to create small artistically interesting sites.
Ruby and Rails is highly attractive to people who value asthetics and beauty, and helps you integrate your creative impulses with how you code. Most languages don’t account for or attempt to address beauty in how you code. It’s by no means necessary but has been delightful for me finding a language and community that often highly values deep inner creativity along side coding principals.
You can also look around for overviews of web architectures. You're gonna wanna lean about software design/architecture in general, and branch out to learn about all the components of a modern web application. You can find all the components used in MediaWiki I'm sure!
Personally I've been wanting to learn how to build Progressive Web Applications so I can make some apps for my phone without having to learn Java.
How are you doing deployments right now? Do you have a bunch of manual steps that have to happen in the right order, can you do a rollback quickly if you have to? Try learning some better deployment technologies that fix those problems. You might not have been bitten hard by any of them yet, but you never know when it could happen.
How about logging and monitoring, have you integrated with any tools that could allow you to monitor performance and error rates from all of your sites? That's also worth doing if you haven't already.
Are you using source control best-practices and CI/CD systems? Are your repos set up such that a new contributor could get onboarded to them easily? If not, do that. Try spinning up a VM or something and getting your repos set up on them, and fix or clarify as many manual steps as possible.
It helped me understand what stuff I still needed to learn, and how to work in a team. Also helped my confidence, seeing that I was able to work with other people, some of them had already jobs as programmers, and solve problems with them.
After that I decided to work for others, but I could as well had continued doing frontend master courses and stuff like that, I think the Bootcamp taught me the "glue" between technologies, and how to think like a programmer.
There are a lot of online Bootcamps now, so no need to go to another country like I did, I'd look for some bootcamp where you work together with other students, and that has great mentors with industry experience.
as a solo person
There are plenty of good resources online, free and paid. Paid options like Pluralsight have the most easy to find quality curated content that can guide you; alternatives like Cloud Academy will give you hands on labs.
That's obviously in addition to the endless stuff on YouTube (the difficulty here is separating the wheat from the chaff) and in books and articles.
Only by diving into dedicated, expert resources like those will you get the context, but mentoring within a team will be the fastest and surest way to competence on larger systems. Look for a job in a team.
Keep it simple for your own. Use git, but you don't need CI. ( VS has an awesome publish option for example)
Know the tools you know and use them required. Sometimes there are frameworks that help you speedup coding *5 ( eg. A screenshot from a web page is much easier through node), but i know c# the best. So 85% of my projects are in. Net.
If you don't know a backend framework. Consider RoR because of it's scaffolding. Do you work on Windows, give Visual Studio community a try. Pick a framework that is batteries included ( registration, login ) without jwt in the beginning.
For my projects after work, using asp.net MVC with EF and using scaffolding is a 500% quicker turnaround ( easy) than using any SPA framework.
Don't do cloud, it's expensive and for enterprise. Self-Host with a cheap VPS. Maintenance isn't as much as many claim. Implement some security measures! ( Private key ssh, firewall ( is always free)... )
What's your goal? Create your projects as cheap as possible and as fast as possible, if it doesn't gain traction. Then you could take above into consideration and use boring technology ( http://boringtechnology.club/ )
Is it purely to learn? Do some certifications about the cloud and spend halve a year learning non transferable skills with vendor lock in ( AWS, Azure, GKE, ...)
I would like to also offer a different perspective on the idea of "big" web apps or more "professional" setups. If what you want is to be able to do more complex projects for your customers or for yourself, just do that. Solve the problems you need to accomplish your goals. Maybe your development cadence could improve from getting better at testing. Maybe you're not happy not knowing how to maintain or deploy your code. Focus on your path and your problems and forget about what you "should" be doing. That's how most people become proficient engineers. Meanwhile keep up with industry news and read a few books per year, and know that the best way to really kick this into overdrive is working alongside more experienced people in a team.
If you don't know where to begin, you can start by reading the issues and pull requests for the project on GitHub, where there is often a discussion of how to solve problems from multiple different perspectives. When you've lurked around for a while and feel like you have something to say, consider commenting and starting communication with other people working on the project. When you hang around long enough and even start making pull requests of your own, you'll have newfound expertise and new contacts to ask questions who might already be experts in the technology you wish to become an expert in.
Try React or Vue with some database component and go from there.
And before you start, look up a resource for how to write good tests with the tech you choose, and work on that as you go as well.
Good luck!
The Passionate Programmer (2nd edition) Creating a Remarkable Career in Software Development by Chad Fowler https://pragprog.com/titles/cfcar2/the-passionate-programmer...
You can check it out before buying at either of the following:
https://www.pdfdrive.com/search?q=chad+fowler&pagecount=&pub... OR https://u1lib.org/s/chad%20fowler
Scales wonderfully.
Scaling backend data structures is a difficulty itself and potentially different for every problem.
A lot of "serious" tech skills is either cargo-cults building engineering playgrounds to benefit their own career - they are truly only necessary in very narrow cases you're unlikely to see unless you operate at actual FAANG scale (VC-funded FAANG wannabe doesn't count).
If your intent is to work at FAANG or a FAANG wannabe building engineering playgrounds then fair enough, these skills would be useful, however if you want to learn to solve your own problems keep in mind that most of the cargo culting is not necessary; I suggest you learn solutions as you encounter actual problems and it's fine for these solutions to be old-school and "uncool" such as Rails/Django or God forbid, PHP.
I believe the best way to learn is from people better than you. The problem with small projects is that it never make it to the point where certain skills/practices become important or even critical.
In this spirit, my recommendation is in this order: 1. Get a job. Learn how to work in a team. 2. If for some reasons, this is not possible, watch conference talks especially on those problems faced by big companies, and what do they do to solve it. Learn about this problem, and figure out other ways.
The technical excellence road has a lot of dead ends and false prophets. Be aware!
The biggest thing is understanding that you may work on a single tool in ~10/100 people, so you must develop and work with other people in mind. So, modularity, enforcing code clarity and writing good tests, understanding product decisions and so on... Personally, I learnt this stuff on the job pretty fast - still newbie, but can autonomously solve medium/complex projects without senior help, which should be a base goal.
Larger-scale technologies is mostly larger-scale organization - just apply to one of those and I am sure you'll catch up fast
One of the main things I would say is that nothing can really prepare you for the jump because a large web app made by many developers over years is a very different kettle of fish to your own small projects.
That said, making and deploying your own things start to finish gives you a great foundation to build from, your core skills will be fine, you will just need to learn how to orientate yourself in a big app and that’s a skill you learn through doing.
Good Large-scale best practices are always born out of specific practical challenges
And the only way to face this kind of challenges is to join a real world project, team, company.
Try to score as complicated job as you can with your current skills (in terms of technical challenges) and then move up the ladder.
This, more than any particular tech or approach, helped me more than anything. Just working with and learning from/with really talented people.
Practice your database skills by implementing some project using indexedDB [1]. Practice your parallelization/efficiency skills by implementing some webworkers [2]. Practice your IAM skills by implementing some oauth2 API for some website [3]. And so forth.
Look here [4] for most (if not all?) the web stack things which you could experiment with, many of which will reflect back at "the real thing". I've done this and it introduces concepts in a good way. It also forces a "natural" progression towards backend when you have to deal with stuff like https/self signed certificates, websockets and so forth.
[1]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_A... [2]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers... [3]: https://developers.google.com/identity/protocols/oauth2 [4]: https://developer.mozilla.org/en-US/docs/Web/API
Tbh at work I see people who can deploy a container on the cloud but have no clue how to start the program quickly to check something lol, so ...
The easiest way find and learn big tech is to work for a big-ish tech company with a big problem to solve.