
Ask HN: What tech stack would you choose to bootstrap a side project in 2020? - yagodragon
I&#x27;m a college student trying to choose a language&#x2F;framework to build some side projects. Other than the classic CS languages(java,python,c&#x2F;c++), I&#x27;ve learned some JS and Vue.js and now I&#x27;m looking into a proper backend language and framework.<p>After searching online and asking friends I&#x27;ve gathered some feedback on the most popular solutions.<p>Rails: Proven and mature. 3rd party gems that can help you with anything web-related. The ecosystem is thriving and most developers are happy using it.<p>Laravel: Made PHP cool again. Took lessons from Rails and probably provides the best Developer Experience when it comes to building a monolith app from development to deployment. PHP is also the most popular backend language.<p>Django: People love python. I hear that Django Rest Framework is a great tool, plus, the ability to add ml features on your existing app is a big plus.<p>Node.js: Full-stack Javascript is great but the backend landscape is a mess. Probably a thin backend without complex rails-like structure.<p>Phoenix&#x2F;Go&#x2F;Rust: Good options for specific use cases where performance matters.<p>Java&#x2F;C#: Complex and enterprisey. C# is gaining traction but the 3rd party ecosystem is still lacking behind other options.<p>Backendless: SPAs, Next.js&#x2F;Nuxt.js&#x2F;Ember, JAMstack. Use services like Firebase&#x2F;Auth0 and 3rd party APIs for backend logic or serverless functions.<p>What would you suggest someone learn in 2020? I know the answer is &quot;it depends&quot; but I know that for example Rails, Laravel and Django are basically tools for the same job, building CRUD applications on the server. Would you suggest someone to learn Ruby or PHP in 2020, though many consider them dead?
======
mindcrime
It doesn't matter. Pin a bunch of names on a dart board, throw a dart, and
pick the one closest to the dart. Seriously, it really just doesn't matter.
Not even a little bit. At least not in terms of whether or not your side
project succeeds. You will NOT succeed or fail based on whether you chose Node
over Ruby, or Java over Erlang, or Angular over React, or PostgreSQL over
MySQL, or Mongo over CouchDB, etc., etc., yada, yada, yada.

Now if the question you're really asking is "which one should I learn from a
long-term career standpoint?" or something along those lines, the equation
changes a little bit. BUT even there, the simple reality is, you can be
gainfully employed, making good money, doing fun work, using any technology
you listed, and plenty you didn't.

If you're coming at it from the career / long-term perspective, and want an
objective measure, then scan the job boards, and see what you find the most
open reqs for. Go with that. Otherwise, pick two or three off your list,
dabble in each, and see which one feels right to you.

The only thing I'd explicitly advice against is going with something really
outside the (modern) mainstream, like COBOL, or some really new'ish languages
which may or may not catch on (Nim, something like that), or any "esoteric"
languages: Brainfuck, Intercal, Whitespace, Befunge, etc.

As to what _I_ personally would pick? Groovy and Grails, along with
PostgreSQL, and one of the popular JS frameworks for front-end (React, Vue,
Angular, etc.). But that's just down to familiarity and personal preference.

Edit: let me add one bit of clarification... I don't mean to slag Nim, or any
of the other newer'ish languages. And I don't mean "don't learn it" in the
general sense. I just wouldn't "bet the farm" one of those just yet. By all
means, dabble with lots of different languages, and constantly pay attention
to how they are evolving over time, and how they are (or are not) gaining
industry acceptance.

------
omarhaneef
If I wanted to answer your question, I would basically repeat everything you
said. Not sure what you need to know beyond what you know. It depends, and
depending on your use case you should pick from the options you laid out for
the reasons you laid out!

Having said all that, obviously the right answer is Django.

------
otras
What are your goals?

If your goal is to build something to have a product/service/business, build
what you know. That will let you build and iterate quicker. Startups don't
fail only because they were built on <framework A> instead of <framework B>.

If your goal is to learn a new framework, just pick one and give it a shot!
There are many concepts you can learn that extend across stacks.

If your goal is to list languages/frameworks on your resume, that's a little
tougher. One not very scientific way to decide is to do a brief search for job
listings in your target location and pick the BE mentioned most frequently.

------
davidw
Rails is hard to beat for getting something up and running quickly and then
iterating on it.

> though many consider them dead?

Anyone who says that, you can safely ignore.

~~~
mindcrime
Agreed. Well established technologies seem to rarely (if ever) truly _die_.
They will become diminished, to be sure, but even to this day, people are
making money writing COBOL, RPG, PL/I, etc. Somewhere out there, there are
still a few people getting paid to work on the newest iteration of "whatever
OS/2 is called now". Etc.

------
tmm84
Based on the year 2019, I think learning Python (AI/ML, Scripting, etc), Java
(legacy code, enterprise systems, etc) and JavaScript (ES6, Node and a bundler
because JavaScript has turned into something that is more than just some
simple script on a page at this point.) are worth it. I say learn PHP if you
are aiming for entry level rudimentary stuff. PHP is still out there and there
are loads of clients asking for people to work on it. Anything else will
revolve around how experienced of an engineer they want and the market you
live in.

Aside from languages/frameworks, I would say focus on the
container/orchestration area of development. This is becoming the real focus I
am seeing from someone who has been working in software development for over 5
years. More and more it is containerized micro services that are being
produced and it is people who can weave them together with kubernetes or
similar software that is the real ticket.

------
Antoninus
I don’t think it matters. Learning a stack because there are a lot of hot job
postings for it will only keep you in framework hell. If you had to choose,
choose the one with a community that you like and want to be around. I’m happy
I stuck by Node’s side all these years, sure its not perfect but part of the
journey is growing with a technology as it matures in the market. From my
experience, mid-range developers with a few years of experience working in
different stacks rarely make high quality contributions to the project. The
only exception is if they’re gifted cs students first. The devs with for eg.
10+ years working with Perl Dancer projects have so much you can learn from.

So my advice would be to pick one and commit to it for as long as you can. To
the point where you both love and hate it. Get to a point where you can
contribute to an well known open source project that is built in it’s domain.

------
cdnsteve
My advice, look at what employers are actively hiring for and work backwards.
Generally speaking, many value an MVC type frameworks, specifically
Rails/Django, they are well-known, easy enough to hire for since they are
"standard" and have broad application use and are quick to work with. Most of
the knowledge is transferable between them. Understanding database migrations,
app structure, authentication, etc is common.

I'd focus on that first, then when you're comfortable, move towards front-end.
Again, focus on what employers are hiring for, React being top of the list,
Angular is loosing market share.

Node isn't very complicated to develop in, front-end experience like ES6/7
will help you figure out JS and you can learn the event loop model later on.

This way you'll have a solid foundation in backend, front-end and can expand
out from there as needed and specialize but this is a good starting point to
be a full-stack developer. Spend time looking at development workflow, learn
Git, write tests, etc.

------
philipkiely
I built a few applications using Django in college (still am, actually) and it
gave me the foundational skills I needed to pick up other frameworks later. I
think it balances convention and configuration well for both learning and
doing and provides an intuitive learning curve for web development. While most
tutorials are for server-side rendered CRUD-based applications you can use DRF
to build an API for a single-page app and the framework is flexible enough to
build all sorts of applications.

Django set me up with the tools and skills I needed a couple years ago. The
other ones probably would too. Echoing other commenters you can build anything
in any of these frameworks and shouldn't spend too much time choosing stack.
Despite it not mattering, my vote is for Django.

------
EnderMB
I think the main thing you can take from the language/framework descriptions
above is that you should outright ignore what people say about tools they
don't actively use.

Java and C# absolutely do NOT lack a third-party ecosystem. If anything, both
have immensely powerful frameworks behind them and thriving package
ecosystems.

IMO, your choice only matters if the product you're building is tied to a
given library. For example, you might have more luck doing ML in Python/Java
than in Ruby, although there is no reason why you can't mix and match
depending on what you need to do and what you're trying to accomplish with
each.

------
snyena
If you are uncertain, perhaps one extra factor to consider would be the future
earning potential.

I am in a somewhat similar situation (albeit considerably older, almost 41)
and still considering my options. I have used plain PHP + MySQL to build web
applications in the past but I am now trying the same with Python's Flask and
liking it so far. Later down the road I'll either try Django or go fullstack
Javascript (Node, React, Express, ...) because it is in such a high demand and
not going anywhere.

------
muzani
I'm surprised Parse Server doesn't make anyone's list. It takes about 30 mins
to set up. It's easy to scale, free to start with. It fills the complexity
hole left by Node/Express. It's a lot faster to code than using APIs. It's
been used by enough people for long enough that all the stability bugs have
been ironed out.

