If you had to learn again from 0, what would you do?
Posted by Fabulous_Variety_256@reddit | learnprogramming | View on Reddit | 39 comments
Hey,
So I want to learn full stack development. I know a bit of php/laravel/nodejs/react/vue but I prefer to learn again from 0.
I want to learn React + TS for the front end, and I'm not sure about the backend - if I should go with Express/Next + TS or something else.
For the DB - I prefer MySQL or Postgres.
Where should I learn from?
Whsky_Lovers@reddit
If I had learned cobol I would now be making bank...
I would maybe have focused on smalltalk a little more. It's always been the language that I have wanted to learn but never have.
Putnam3145@reddit
Frankly, exactly what I did the first time: make mods in games with Lua, branch out to other stuff.
People are always looking for an "optimal path", but it doesn't... matter. Time spent trying to find the optimal path is time not walking the good-enough path, which is only 1% slower anyway.
AmSoMad@reddit
I'd probably start by going through Harvard's CS50X. I completed it retroactively, and it was a mistake. I should have just done it first. You can also stop early, when you get to the last few lectures that cover Python (unless you want to learn/practice Python).
Then, I'd go through University of Helsinki's Full Stack Open. It doesn't have you build a complete project, so you can essentially consider each section independent from one another.
Then, I'd probably switch from Node/Express to Bun/Hono, because the syntax/code is almost identical, but Bun/Hono is way more powerful and fully-featured.
Then, I'd move into Next.js (React) or SvelteKit (Svelte), and start building full-stack applications using severless functions, so I don't even need a Bun/Hono server (unless I want one, or it's more cost-efficient).
I'd use cloud-managed databases, especially ones with generous free-tiers like Turso (SQLite). Vercel offers a free Postgres instance. And I'm sure there are other options out there. I use to use PlanetScale (MySQL), but they got rid of their free tier.
I'd pick up Prisma or Drizzle, so I could define database schemas and queries easily, without having to write raw SQL.
As for TypeScript, the best way for me to learn it was by converting my JS files to TS files one-by-one. You can go through one of the free courses (there are tons of them, I'm not going to list them), but turning your JS into TS is definitely the best way to get a handle on it.
RexTheWriter@reddit
https://www.theodinproject.com/
Then
https://fullstackopen.com/en/
rednoodles@reddit
appacademyopen goes into way more depth than those.
RexTheWriter@reddit
Ok
rednoodles@reddit
No reason to downvote lol. I just think it's a better recommendation since you learn more than just web development: how to learn efficiently, communicate in the workplace, algorithms, data structures, clean code, build a portfolio, interview, etc. Plus it includes videos instead of here's an article now go read it and do this like odin does.
FaithlessnessDull179@reddit
Is fullstackopen free?
RexTheWriter@reddit
Yes
FaithlessnessDull179@reddit
I'm currently with full stack js path on odin project so i continue along side fullstackopen then?
Calazon2@reddit
I second The Odin Project. If I had to learn web development all over again, that is absolutely what I would do.
ToThePillory@reddit
If I was starting from zero, I wouldn't learn full stack development. Web development is the most oversaturated area of software development, just too much competition for too few jobs.
If your aim is to get a job, I'm not sure I'd be learning any web stuff, I'd be looking in the job ads near me and seeing what jobs companies are struggling to fill.
RadicalLocke@reddit
But web development (front + backend) is by far the largest portion of SWE job market. If you talk to people in other subfields (mobile, data x, devops, embedded, compiler, graphics, etc.) they all say that getting into their field is much much more difficult than a generic front/back/fullstack dev.
obp5599@reddit
Difficult is good. Weeds out a lot of the people looking for a paycheck and you get to work with people who are actually knowledgeable. If no one wants to learn x thing, and you go learn it, you are now a valuable asset
ToThePillory@reddit
Never been my experience.
AmazingInflation58@reddit
What you be learning then? any roadmap and advice for that?
ToThePillory@reddit
For me, it would probably games, or maybe embedded, or maybe desktop apps, really anything other than web. The problem with the web is that it's area where most beginners and juniors get into first and there are just too many people vying for not enough jobs.
Look at the jobs in your area, look at what companies are asking for. That might end up being Delphi or Visual Basic, or COBOL, or it might end up being web after all, or maybe embedded. I'd rather be a full time COBOL programmer than an unemployed web developer. Actually I'd rather work in COBOL in general, but that's another thing.
Fa1nted_for_real@reddit
See paragraph 2 for more details on "what you be learning"
Jokes aside, its gonna depend on your area.
stoic_suspicious@reddit
I’d start with a MEAN app and then learn Java. Maybe Python last.
sovlex@reddit
Id go for Data Science/System programming. Web is so overdone.
leon8t@reddit
Which courses would you go for if starting from zero?
Rare_Instance_8205@reddit
Make your foundations string first. Do statistics+probability+linear algebra from MIT/Stanford/Caltech all the while learning python and DSA alongside.
Then puck on any good course in the market.
leon8t@reddit
Thank you
Clean_Channel1305@reddit
im not sure which way to go...
Koromae@reddit
Honestly, if I could take all the time I've wasted in my life picking the perfect language and apply that to getting really good at a single language, no matter what it is, I'd be leagues ahead of where I am now. It took me far to long to realize that all the discussion about things like "TS replacing JS" or "Python is too slow for [insert problem here]" are all problems that do not apply to 99% of problems and people, and doubly so for anyone in the learning phase (well we're all constantly in the "learning phase", so a better label would be "beginner" phase)
Anyone is welcome to disagree with me here, but for arguments sake, lets pretend we have two bright eyed and bush tailed CS students in their first year who want to get hired after graduating. Student A did a bunch of projects in a bunch of different stacks while jumping around between languages until finally settling on TS to focus on in his Junior year, and proceeds to learn as much as he can to become hire-able after graduating. Student B is a jokester and spends 4 years outside his coursework studying and making things in SPL (the joke Shakespeare Programming Language ), not something any company is looking for at all, and Student B only ventured outside that single language when necessary (ya know, the usual suspects, SQL, HTML, etc etc)
If I was hiring freshers for a Typescript role, I'm already expecting them to come in pretty damn useless. No offense, but that's the expectation, and what you study doesn't always translate to what you do on the job. Now I'm looking at Student A and Student B, from an "experience" level you would assume that Student A is the obvious pick (and HR to be fair would probably also agree, but ideally they have less input than "me" who is on the tech team...) But, if asked who I believe is a better programmer, I would very likely say Student B every single time, and there's a very real chance that I would suggest that he be hired, because Student B likely has much more in depth knowledge about "programming". Additionally, if I saw someone do some crazy shit with something as dumb as SPL, I know that they likely ran into problems that required some actual thought and cleverness to be able to work around that were caused entirely due to the language choice being suboptimal, and that shows the devs actual engineering prowess if they are able to make something work in spite of those obstacles.
Tangentially related, we all know Javascript sucks and it's slow. Yet Vampire Survivors was made by some mad man in Javascript, idk what that dudes got going on in that mind to have convinced him to do that.... but he now has millions of dollars more than I do.... If you saw the article on HackerNews about huge Zendesk vulnerability found by some 15 year old, he used Javascript as well. Go and ask a game dev community if you should use Javascript, or a hacking community if you should use it, they won't recommend it....
We all want to choose the right tool for the job of course, but often we focus too much on that and end up not learning or building anything. I upgraded my GPU last week, and for the life of me could not find the right screw driver.... The "correct" thing to do was probably to go out and get the exact tool I needed... Instead I used a knife and and moved on with my life, and when I logged into Discord to chat with my buddies no one at all cared that I solved my problem using a tool that was technically less optimal.
TL;DR: In the learning stage I would throw a dart at a dartboard with a piece of paper listing every popular language on it, and study just build things using only that language, no matter how suboptimal. And then branch out when necessary (stuff like HTML, CSS, SQL, yadayada)
Alive-Bid9086@reddit
Yeah, many years ago, we had a candidate for an electronic design position arriving to the interview in an old Citroën. We saw him park.
We told the manager straight ahead to hire this guy!
These old Citroëns were really backward to work with and students do not have the funds to have a workshop to do the work, because Citroëns are also expensive to service. So by just getting the car to run, he had shown his engineering competence.
ibzo_io@reddit
I second this
Laugh_tale1@reddit
Can u guide me i am cs 4 semester student stuck on that what i should learn currently learning java
armahillo@reddit
Get really solid on your web fundamentals — HTML, CSS, JS, and HTTP.
No matter what frontend or backend you use, you will always need to interact with those basics
contentcontentconten@reddit
You want to learn react and ts, so go learn it. In the end you’ll know multiple languages and which one you start with is irrelevant. However if you’re doing something you don’t want to or like because someone told you it was “right” then you’ll quit programming all together. Do what you like that keeps you going.
Anecdotally I knew a great programmer who wrote in C. He said Python is trash and should never use it. I spent the next 4 years of my career writing python and he eventually reached out having inevitably tried it saying what a mistake he made because Python is great. So your opinions will change from time to time.
minneyar@reddit
I've been thinking about this a lot lately, and I think that if I could start all over, I'd become an illustrator instead. Take a few art classes and invest in learning how to draw or paint. It doesn't pay as well, but it's a lot more fulfilling.
But if I still went into software engineering, I'd at least avoid web development. Robotics is a good field. A dual ME/CS degree would be a good start. Most robotics software nowadays is written in C++ or Python, but there's definitely growing support for Rust.
gus_the_polar_bear@reddit
Just to be a bit contrarian, I think you can’t go wrong sticking with PHP.
It’s the COBOL of the internet age, people have been calling it “dead” for 20 years, but it’s not going anywhere. Not in our lifetimes at least
Rare_Instance_8205@reddit
Yeah, it won't be dead alright but getting into a PHP team would be very difficult.
PoMoAnachro@reddit
A 4 year CS degree, absolutely. I mean I already did that years ago, but that would absolutely still be in the cards. I self-taught myself a lot of stuff in my teens and twenties that I don't touch any more, but the foundations from my CS degree are still relevant decades later.
I'd recognize that learning specific technologies aren't really important, but developing problem solving skills and the ability to read documentation is. So I'd make sure to always have a hobby project on the go, but not hop around as much as I did starting out. Pursuing one thing til you get something solid out of it probably would teach me more - there's the classic saying that 20% of the effort gets you 80% of the results...and that means the last 20% of the result is 80% of the effort, and therefore 80% of the learning.
Overall I'd try to focus less on rushing my capabilities and more on learning fundamentals really, really deeply.
PoMoAnachro@reddit
Oh, and in keeping with that "learning fundamentals deeply" theme - I'd learn C a lot earlier in my career. Learning C taught me a lot about how programming languages work.
Fun hobby project that'll teach you a lot about languages? Once you know C, write a compiler for it. There's lots of books that'll walk you through it, though try to think through and solve some of the problems on your own.
Learning an assembly language was also super useful for me, but I'm not necessarily sure I'd want to try teaching that to myself - a computer architecture class in college is probably the best place to learn it. Unless you get super into it and decide you want to go the hardware route you'll probably never use it on the job, but, again, it'll help you learn stuff more in depth.
Lazuliv@reddit
Something else
DecentRule8534@reddit
Spend more time doing the thing and less time thinking about doing the thing, preparing to do the thing, talking about doing the thing, and just generally avoiding all of the procrastination traps that are everything but doing the thing.
notjshua@reddit
This is pretty misleading, you're not starting from zero unless you have a time-machine. You're asking for beginner guides or courses for React or Express/Next and TS, and for MySQL or Postgres, I guess? I feel like you'd get better responses if you'd create a post asking for the thing you're actually asking for..
IndigoTeddy13@reddit
Asuming infinite free time and no consequences for starting later, I'd start with either Python or C, then the other one of the two, build up a decent foundation for vanilla HTML+CSS+JS, jump over to C# w/ Unity and maybe make a simple desktop app or two for learning's sake, and then likely dig into Golang. Maybe pick up Lua along the way so I can have fun tinkering with WezTerm and NeoVIM (not that you realistically need to know Lua intimiately to configure these tools, it's just a useful language with a simple enough syntax to embed in other projects). As for DBs, I'd learn SQL to use SQLite, as well as learn MongoDB and Redis (at least the latter for session storage in a fullstack app). Other technologies I'd experiment with are Docker/Kubernetes, NGINX, VPSes, and maybe NixOS (I currently use Arch Linux, but this distro seems interesting too). After that, maybe delve into ML or Info Security (maybe both). There are other things in mind, but this seems like a decent way to get to a similar place to where I am rn (dev-wise), give or take a few tools, while not having to spend time on things I don't like (like MATLAB or Confluence).