Plan A was to just learn front-end development (HTML, CSS, JS, framework, UI/UX) and use a baas like Firebase or AWS for the back-end.
Now, I'm a little concerned that relying on front-end and baas will bottleneck me in some way that isn't obvious to me as a newbie.
Given the above, how valuable would a back-end education be (node/express or ruby on rails), even if I end up going the baas route?
Notes: My product ideas are run of the mill Reddit for dogs, news aggregator, to-do list app type stuff.
I'll be following one of the Odin Project's curriculums. They offer both front-end and full stack learning tracks.
-Front end https://www.theodinproject.com/tracks/3
-Full stack Javascript https://www.theodinproject.com/tracks/2
-Full stack Ruby on Rails https://www.theodinproject.com/tracks/1
If your hope is to learn how to write code for other peoples products and have them pay you, it would benefit you to get a more full stack education. Node would be good. Rails is nice. Django is nice. .Net works well. Java is good.
It just depends on what your goals really are.
Your plan sounds good to me. There are quite a few all-in-one ish solutions that can help you with this, usually with pretty modern technology, like Gatsby. https://www.gatsbyjs.org/ Do a bit of research, learn what you think you need to get shipping, and ship.
Once you learn how it works, Firebase will get you from 0 to 10 really fast but will slow you down as you struggle to go from 10 to 100. By then your app/product will have so much Firebase specific code that you will need to rewrite a significant portion of code to move out of it. Let me know if you want me to expand with specifics on why Firebase is bad.
If you need something easy to start fast I'd say go with Hasura. It will give you one-click GraphQL API over Postgres. Your front end will simply use standard GraphQL so you can change your backend without touching the front end. And Postgres is still Postgres. Even if you decide to completely rewrite your product you could keep using the same database.
The technicals can always be learned later, or you can pay someone to do it. These days, there's a LOT of apps that can build apps/websites for you.
On the other hand, if you want to become an engineer, then by all means, learn the technical stuff and ignore the rest. try to make a conscious choice: 1) i want to build a business or 2) I want to learn engineering.
My experience with managing servers, doing deployments by hand, setting up automated deployments has been 100% not enjoyable. So I prefer to pay AWS to handle as much of that as possible for me.
For myself, I started with HTML and CSS, and had a lot of fun with that. Then when I decided it was time to learn JS, I hit a brick wall. I almost quit then and there thinking programming was not for me. But I was also determined to do something different with my life than I was currently doing. So I switched gears and jumped into Ruby on Rails. Ruby really clicked with me in a way that JS did not, perhaps because it was somewhat more readable and less syntax getting in my way. I got into it enough that I signed up for an online bootcamp. That's a whole different story but the short of it is I learned Ruby on Rails and that enabled me to get a job at some point soonish thereafter.
And you know what? In the end I came back to Javascript and I actually enjoy working in the frontend (with typescript mostly now) more than the backend side of things. I think maybe Ruby taught me how to rewire my brain for programming and then Javascript felt a lot more friendlier than it had previously. It's a lot of the same paradigms, just re-wrapped in different syntax.
I guess, my point is, try to start somewhere, but don't be afraid of exploring. There's no right answer for all of us.
Html/CSS/JS is a good starting point. Firebase or AWS Amplify is a good augment to that although I'd try just purely static sites with maybe some serverless functions sprinkled in if needed. Netlify Functions are an easier entrypoint into that, and I believe they are just AWS Lambda's underneath: https://www.netlify.com/products/functions/
Try to find your niche and focus down on what gets you excited. I dove into some obscure frameworks and languages at times that might have seemed ill-advised to focus on during that stage in my career. Some of these paid off by becoming popular but even when they didn't, I learned a ton.
But I'll never underplay the importance of having both backend and frontend skills -
- It's a core set of skills which will pay off multiple times in the future. - Easier to pay off the tech debt in the long run. People seriously underestimate the capabilites of postgresql + ruby on rails/express + a frontend like react. - It's much better to be dealing with the problems of an open source software than a proprietary one. - Learning how everything works together - how to frontend is wired to the backend and how the backend models the data in the database and how to deploy all of it together - is invaluable. - Almost always cheaper than proprietary solutions.
Learning between the two is a matter of tradeoffs. If time is of essence, then you probably should choose things which are easier to learn and manage. However, in the long run, proprietary solutions rarely beat the combination of postgresql + rails/node + react.
I've decided to press ahead with plan A and complete the front-end dev track.
Then I'll choose a project, spec it out as best I can, and choose from Hasura or Firebase as back-end solutions.
Assuming you actually enjoy programming, fun and self development will likely come rather naturally as you build and break, find problems and develop solutions. If you have people looking at your products, even if they're just friends, learning to listen to their problems and solve them will also take you far.
Profit, on the other hand, is more difficult because that has far less to do with technology than it does with marketing and business. You could know every language, paradigm, framework, API, methodology, whatever and you'll not make a dime unless people see value in what you're building. Thus, if you actually have a real profit motive consider spreading your time between learning web development and business development.
> [...] how valuable would a back-end education be (node/express or ruby on rails), even if I end up going the baas route?
Even if you go the BaaS route you'll likely need some degree of backend knowledge to either a) have the BaaS do the right thing in the first place or b) actually understand the limitations of your BaaS, why those may be, and effectively evaluate alternatives.
In most cases, a BaaS will provide you easier ways of doing things like creating your own APIs or performing database operations. But at some level - even if basic - you need to understand your own APIs and how you're storing/retrieving data. You don't need to go particularly deep on any given topic (plenty of time for that) but you should be comfortable being able to explain your front- and back-end architecture to a fellow web developer.
> My product ideas are run of the mill Reddit for dogs, news aggregator, to-do list app type stuff
These are great starter projects; don't get discouraged because they are "run of the mill" because - as a developer - the value of novelty lags behind the value of productivity. A mediocre implementation of a mediocre concept showcases more progress as a developer than an amazing concept that doesn't exist.
Don't think of each idea as "Product with N engineers and X DAU", just build a thing and then add incremental improvements.
With that said, building a toy API with authenticated data (user registration and the like) will help you understand the various ins and outs and will give you a better understanding of what services like Firebase offer and what their value is.
Don't focus on premature optimization - by doing things in a naive way at first, you'll understand why various engineering practices became commonplace and you'll be able to more judiciously apply them instead of cargo culting.
There's tons of ways to skin that cat, best thing to do is pick one and go for it.
So: you do not need more than front end and a Firebase education to ship product, because Firebase was created to enable front end devs to do this.
Can this be phrased differently by asking the other questions:
- What value can I deliver with what I already know?
- What things should I learn to overcome the difficulties encountered trying to deliver value (through a product) with what I thought was sufficient but clearly is not?
In other words, one wants to deliver value and start building a product as a vehicle of delivery with the skills they possess. At some point, the skills are insufficient to complete the vehicle to deliver value, and they either change the vehicle or acquire the skill.
Everyone is different of course but trying to install Git and use the command line before I even started the first lesson should have been my first clue that I needed just a little more of a foundation.
[1] As in my entire “programming” knowledge was the CSS I had used to customize MySpace a decade earlier.
It's not so much how you build it is the real world problems you solve. Yes there are considerations as to the quality of you product and the costs associated with low quality code. But if you solve problems well for people you will have the revenue to clean that up.
Learn to code well, don't sorry that you don't have enough tools in your tool box right now. You probably don't need them. Just focus on solving problems for people.
I'd suggest reading the pragmatic programmer before looking into a new backend stack.
Firebase auth is supremely easy to implement, and you can write your own backend services (in node, rails, Go, whatever) and auth your clients against it using the firebase sdk. Chat makes it supremely easy as well for simpler use cases, and if you do find it limiting, you can always swap it out for something better suited.
In my case, I use firebase client sdk on mobile (react-native) and web (react). My backend (go + node) services use firebase admin sdk to authenticate requests, and my database is postgres.
You pass the token to the DB via HTTPS decrypt and off you go.
Pretty sure you can do a to-do list in Firebase, maybe even Reddit for dogs.
Best of luck.