Hi guys,
lately I’ve been thinking about my skills and decided that becoming a developer will help me a lot professionally, but I need help to decide where should I go with it.
For a little context: I’m a business student who really likes tech, I work as a PM at a Brazilian startup. I’m pretty comfortable with the general logic of development and I can code a little too (all the things I code today are done with Google Apps Script and Google Sheets, that is Javascript).
My goal to becoming a “developer” (whatever that means to you) is to gain freedom with not only my job but my side projects, today I need a technical person to help me make things. Also I know that it will help me better work with a developer team if I have a good understanding of the technologies they’re using.
So in summary I want to have the skills to build cool and useful things for me and become a better PM (I know PMing goes way beyond coding, I’m considering those other skills too). My goal is not to be the best developer in town or change my career path.
With that in mind, I’ve done some research and it seems to me that the best things for me to focus on are React JS and Node JS.
Since I already have a good background with Javascript and it’s one of (the?) most important and versatile language out there I think it’s kinda of a natural path to head in this direction. I also got the impression that these two technologies I’ll be all that I need to build everything I want (frontend, backend, web app, mobile apps, desktop, …)
Do you have any takes on that? Does my logic make sense? What do you think I should learn first? Is there something I’m missing?
Thanks!
PS: I’m also interested in Electron, it seems to me it’s connected to what I want right? I know it uses Node.JS.
My pick: https://github.com/getify/You-Dont-Know-JS
Yes, Javascript is used for a lot of stuff. It doesn't mean it's the best language. There are no best language. There is your best language though: the one which fit your needs. You want to build mobile app? Learn Swift. You want to do some content related website quickly coded? PHP is were you want to go. Terminal app cross plateform? Learn Go.
Coding is easy. Coding big applications with complicated domain logic is hard. If you go this way, learn everything you can on code architecture. Read Clean Code from Uncle Bob. Code Complete. And so on.
Stop asking yourself questions and code. Learn from your mistakes. Don't try to avoid them and don't try to code everything good the first time. Coding is a question of iteration, first you code nonsense, then you test it, then you refactor it, then you do the same thing again and again. You can even test before coding (TDD).
You need more practice than theory, even if theory is very important as well.
I agree. Gains from learning a language are more durable than those from learning a framework. Languages stick around longer and help you learn frameworks built on them, too. And higher-level architecture is even more portable.
Thanks for all the replies guys 👍. I've read all of them and I'm taking your suggestion into account.
Since you said you already know Javascript, I think those tools are a good place to start. I found Vue and Angular to be a little simpler, but all are great front end frameworks. Rails or Laravel or .NET MVC might be easier or better suited, especially for someone more focused on the business side of things. But if you're dedicated to learning these tools(node and react), then I don't see a problem.
React (if you buy into its whole ecosystem)and especially Node are both terrible choices for a solo dev. I learned this myself having used both in larger companies and then having tried using both for personal projects.
The most important thing at the beginning is speed of iteration.
You don't need a full-blown front-end framework at the beginning. Do that once you have 3+ full-time engineers. If you want to sprinkle in React or Vue for a few components, that's fine, but making a SPA is a big mistake for 90% of solo projects.
Node is low level and there's no MVC framework on it with a lot of steam. It will take far longer (like 4 times longer) than if you used something like Rails or Laravel. You don't need to worry about scaling the server at the beginning (and even when you do, Node is a mediocre choice).
I've seen so many people on this board go into architecture astronaut mode, making a SPA, using not just React but also Redux and half a dozen other frameworks, setting up server-side rendering, dockerizing everything, using half a dozen Amazon services, etc... for months on end when they don't even have a single customer who wants what they're building.
Build a simple monolithic app and make some money. Then worry about the rest. I highly suggest the @levelsio IH podcast: https://www.indiehackers.com/podcast/043-pieter-levels-of-nomad-list.
It depends on your goals.
My side project (https://www.sharetoall.com) has Vue.js on the frontend and I use Symlex on the backend (simple PHP framework with Doctrine DBAL, not the full blown horrible Doctrine ORM). It's very oriented automatic testing.
Why?
Trying to be a good developer is not necessarily bad since a good developer, I think, should know his goals and decide what he's using accordingly.
If you are only trying to make money indeed you can go for other quicker solutions. If you think you are a developer who can work for company with complicated domain model with these solutions, I think you're going into a wall.
Stripe has a plenty complex domain. They built with Rails (and was fully manual at the very start!) and are now valued at 20 billion. Coinbase is newer, chose the same stack and has plenty of great engineers! Many other unicorn scale companies started off of PHP, sometimes even WP and a teetering pile of plugins and and Zapier integrations!
I don't at all agree with the idea that "trying to be a good developer" equates to choosing JavaScript on the back-end.
A good developer to me is somebody technically who knows what he's speaking about (he knows basics, has theoretical knowledge and experience), knows what technology to use and when and know how to communicate effectively.
I don't know the details about all these stories worse a billion but it doesn't mean they could not do better. We have no clue most of the time of the struggle they face, even if it's more interesting to me that their revenue.
Now if somebody only knows how to code quickly without thinking about testing / good practices, he will have a hard time in a company's team. Obviously developing your own startup alone is something totally different.
Long story short: being good in development or being successful is nothing related to framework, language and technical stuff in general. Actually, with the qualities I described, a developer should be able to adapt to anything.
I agree with this 100%: Pick the Pieter Levels way of building: Very simple tools and no framework to iterate quickly
Until recently, Nomadlist was 100% pure PHP + SQLite
AdonisJs is an amazing MVC framework built on node, perfect to build and deploy your app quickly.
It's a monolithic Rails/Laravel like
How does it compare/hold up to Rails though? I was previously using express and I got so fed up with how minimal it was and how messy everything became that I just started learning ruby to get away from it all.
I wrote a small post about how AdonisJS compare to Rails:
https://hackernoon.com/my-takeaways-from-building-a-job-board-with-adonisjs-4-f4071d98a929
IMO, it's very decent and a great Node clone
I'll keep an eye on Adonis. Previously, I've built some apps with Sails.js which was relatively good but suffered from a small, fragmented community.
I started with freecodecamp.org
Node is great, but if you go that route, do yourself a favor and learn Promises with async/await. Avoid callback hell from the beginning and you'll be much better off.
If you are just starting out, pick languages, frameworks and platforms with a good mix of popularity, longevity and approachability.
The JavaScript ecosystem is notoriously unstable. Developers like jumping from shiny new thing to shiny new thing, and this culture of novelty seeking can be a real pain if you want your skills to stay current over multiple years. That said, react is definitely the popular choice for frontend development these days, hopefully to the point that it isn’t going to evaporate when the next shiny thing comes along (web components? Wasm?). It’s a good choice, but beware that the choice of stack supporting react is also important, again you’ll want to try to pick the most mainstream options available.
Doing react or another JS framework will be difficult and skills from other domains will not carry over very readily, so be prepared for something of a learning curve there. You may even want to put off doing a JS framework initially in favour of a server-side MVC framework, which is arguably easier to understand and learn. You can then add on your bells and whistles later, and even migrate to a JS framework if it becomes necessary.
On the backend node is popular, but arguably not as popular as a more established backend platform like java spring or dot net. If I were you I would pick one of these. Personally I think C# is a better developer experience than java so I’d go with dot net core. However while the job market for dot net is large it’s still smaller than it is for java.
Basically there are many directions you could go in, but you should pick something which is popular, has longevity and is beginner friendly. That’s most likely going to be a MVC framework, which one you pick depends on your preferences. Try a few and see which one you like the most in terms of language and developer tools.
I'm not sure what the others are trying to sell you here when they say these are "terrible" choices. That's a misguided generalization. Pros and cons to all approaches, even the best.
Not a fan of React - I'd ask "what features of ReactJS are so important that you really need to use a framework over having the freedom/flexibility of writing code in Native JS (or using a few separate libraries - not frameworks - to help you along)?".
Vanilla.js is related to this. (Note: It's satire but contains hard truths.)
For Node: Super. Great stuff to get an API up and running real quick. Even PHP is less fast/adaptable to iterate - if your back-end fits in an API-structure without heavy processing tasks).
I've used Node effectively to very efficiently handle millions of requests (HTTP), and to handle 5k concurrent websocket connections (and handle the messaging).
Don't try to use Node to be everything at once. If you abuse Node to fit it into the idea of having to simultaneously be the web server + routing + static asset delivery + template engine + back-end processing API + ... then you're being a fool, you're re-inventing the wheel for every single part of the bicycle, you'll punch yourself every day and you'll eventually wish you hadn't tried. But this isn't Node's problem: abuse any language and eventually you'll wish you hadn't.
(Node is single-threaded so heavy processing saturates the main thread. Processing-heavy tasks could be received in Node but should be off-loaded to a separate process [a "worker"] w/ faster languages/implementations [usually C- or C++-based implementations, even Python has modules written in C to "fix" this problem].)
PHP is also a productive choice.
Wrong impression. It's not that simple. The language gets reused, the environments, contexts and framework are different (in such a massive way that it's more effort than learning the basics of a new language).
I'm not sure I've ever met a single person with expertise in Golang, an Erlang VM language, or a JVM language who believes this. Node gets you mediocre performance, no true concurrency story, mediocre scalability and poor language ergonomics.
It's also not particularly productive (even for bare APIs) vs the Rails-inspired frameworks I and others have already mentioned in this thread. Play (Java/Scala) and Phoenix (Elixir) win on both perf and productivity.
Phoenix can handle over 2 million concurrent websocket connections on a single box. I've also set up a tiny $5/month droplet to handle millions of HTTP requests a month (at 1k+ rps). Horizontal scaling (and communicating between the nodes) is trivial as well.
I use react and node.js for readit. You can see the full tech stack of how I built it in 2 weeks here. As many people said, you need to pick what you think you will iterate fastest on. Back then I peronsally chose node and react because context switching is very hard for me and using Javascript on server and client side was a godsend
It really depends on what you think you might build. I find that Node is great for quick and dirty prototypes, as well as small applications. NPM is great, and you can install all the packages you need really easily. With the help of a framework like Express, you can have a webserver up and running in moments.
It's not all fun and games though. Visualising asynchronous code can be tricky to get used to. Callbacks and promises are a paradigm shift, especially if you're used to more traditional "top down" languages. Error handling in Node is also pretty weak and requires you to know exactly how each package will present errors to you so that you can deal with them safely. For larger projects, I would probably fall back to PHP because Node just feels "messy".
On the client side, I never really got along with React. After trying a few frameworks, I eventually settled on Vue and it just works.
Yes its a good combination, NodeJS on the backend, ReactJS on the front. ReactJS takes some time to understand and master.
For react this guys tutorials will greatly help you
https://www.robinwieruch.de/javascript-fundamentals-react-requirements/
Yes, if you know ReactJS you can quickly develop mobile apps with ReactNative.
You can develop desktop app using Electron with ReactJS (as front end) and NodeJs.
One more advantage of NodeJS is you can host your application on Google Firebase, and forget about server side.
Right now I have Watermark.ink, DearEle.com both hosted on Firebase. Feel free to ask me any thing you want to know about my sites.
In your situation you want to side with the winner. Yes, JavaScript is basically the current winner in web development. This means it has the largest community and ecosystem, the most modules and libraries, the most activity on stack overflow, the fastest pace of evolution, the most innovation happening.
That's why Node.js is a winner, because of JavaScript and in particular the vast ecosystem of NPM modules.
You'll hear from proponents of other backend stacks like Python with Django, Ruby on Rails, PHP with Laravel, and lots more. I've worked with all of those and they're great. But in your case you won't gain much by learning another language alongside JavaScript, it'll just slow you down (although learning multiple languages is a very good path to becoming a better overall developer in the longer run).
On the front-end side, React is the winner. You'll hear a lot of enthusiasm for Angular and Vue.js, among many other frameworks, but React will have more community, more modules and more support.
Electron is a good fit as well, because it's based on Node.js and you can easily use React with it.
"Is ___ a good way to learn how to code?"
Yes. To learn how to code, it doesn't matter what tech you decide to use. Learning to write code is like learning to walk. Once you learn to walk, you can run, dance, jump, play sports. But in order to do any of these extra activities, you need to learn how to walk first.
Learn the basics of programming and you can learn everything else. Pick a language and stick with it.
You got this!