DEV Community

Christian Kozalla
Christian Kozalla

Posted on

What "second" language would you recommend a JS Full-Stack Developer?

Hey friends! Nice to meet you :)
I primarily work as a frontend developer, but have already gained some experience in backend development with JavaScript - mostly in side-projects.

Recently, I'm feeling kinda interested in learning another server-side language for web development. Plus, I want to increase my backend skills in general.

Apart from JavaScript, what is your server-side language of choice? Or what language would you recommend me?

Discussion (51)

Collapse
natescode profile image
Nathan Hedglin • Edited on

Something different: statically typed, OOP, lower level etc.

  1. Typescript: good intro to static typing for JS developers
  2. C# : good intro to full fledge enterprise cross-platform OOP statically typed language.
  3. C, C++, Rust : understanding low level code, memory management etc.
  4. Haskell, Purescript, Elm : learn functional programming

Going for PHP, Ruby, Python and the like won't really teach you all that much new as far as concepts go.

As always, languages are just tools.

I'd suggest C# or Java for your next language.

Collapse
codewander profile image
codewander • Edited on

Along these lines, I would go for one of these (assuming larger ecosystem is essential):

  • Rust - writing fast, low level utilities and services, large and growing number of packages for it's age
  • Go - highly concurrent services and web apps with static types, intentionally provides limited ways to do most tasks in order to emphasize familiar, universal code style when working on teams, strong adoption of standard library, large number of packages but doesn't provide rich frameworks like ruby, python, and node. The community philosophy seems to reject frameworks in favor of smaller libraries.

I like Haskell and Clojure, but their ecosystems are small and don't have the trajectory of growth of rust. Some people count java libraries when considering clojure ecosystem, but I don't.

Java has a large ecosystem, but I don't know how much of it has been kept current and whether people are still creating new Java libraries. I usually found the libraries in ruby and python more interesting than java libraries for equivalent tasks.

Scala tries to support too many paradigms. It's ecosystem is stagnant in size, and it's java++ community seems to have moved to kotlin or java, and it's Haskell on the jvm community has remained, but I am not sure why someone who had the management freedom would select scala over haskell. Within scala, zio is interesting since it presents an easier entry point into learning pure functional programming.

I think elm is a great stepping stone to Haskell, but you wanted server side languages.

Ruby and python don't seem different enough from js.

Collapse
christiankozalla profile image
Christian Kozalla Author

Thank you for these awesome recommendations! ❤️

Collapse
blockchainorama profile image
Blockchainorama

When I hear JavaScript my brain instantly jumps to TypeScript :D

Personally, I write my "centralized" backends mainly in C# (ASP.NET) and the "decentralized" ones in Solidity and Vyper (on an Ethereum-based Blockchain as a Smart Contract for Web3 Applications ;))

Collapse
christiankozalla profile image
Christian Kozalla Author

Wow, Solidity and Vyper :)

Collapse
errorgamer2000 profile image
ErrorGamer2000

Definitely go for C or C++. Both languages can be used to make native Node addons that can give you a lot more power when working with node. You could even use it to make steam games with electron because the steameorks API is in C. Also, sounds relatively high profile jobs require a language such as python or C++, but I personally think that C++would be best.

Collapse
christiankozalla profile image
Christian Kozalla Author

Is C++ like C regarding the need to handle memory usage?

Collapse
natescode profile image
Nathan Hedglin

Yes, though there are smart pointers etc now. C++ is a superset of C but really nothing like it anymore.

Collapse
errorgamer2000 profile image
ErrorGamer2000

Yes. C++ is quite literally the same as C, but tweaked for OOP rather than function-based programming.

Collapse
optimisedu profile image
optimisedu

Presume you already know PHP? There will be nore and more money in legacy languages.

Ruby is the language of GitHub, it is beautiful(imo) and intuitive.

Then there is python, or java if you want to follow the traditional path of growth, or go/rust if you want something more modern. Remember the more languages you know the quicker you pick them up because of pattern recognition eventually it is all down to syntax.

Dart and flutter are a strong choice if you are looking to be an app dev.

See all these languages have their uses. Python ai and data science, go ai, flutter apps. I am about to learn rust, my understanding is it is an unforgiving multitool.

Collapse
peerreynders profile image
peerreynders • Edited on

Remember the more languages you know the quicker you pick them up

Only as long those languages reside within the same neighbourhood (paradigm).

e.g. Python would do little to prepare you for Haskell (do notation notwithstanding).

Enough people seem to find the transition from an imperative language to SQL difficult enough.

Collapse
christiankozalla profile image
Christian Kozalla Author

Can't say I know PHP, just worked on a PHP project's frontend - i.e. with HTML, CSS and JS.. Just occasially read some PHP, never wrote it myself yet.

Have fun learning Rust, gonna check it out, too :)

Collapse
optimisedu profile image
optimisedu • Edited on

Learn PHP. He who can maintain legacy projects - and 40% of the internet has a promissing future. You should pick it up fairly rapidly. I would say that is very important. Also check this free resource. It's examples are java and C, however in teaching you how interpreters are built it will make you a real full stack dev. It is the best computer science tutorial I have found, and because of that the language isn't important.
I don't know what level you are but rust is a low level language meaning you need some experience in recognizing what it is actually doing. You will know very quickly if you are ready and if you are then crack on my friend but it is similar to going from JS to C but without 40 years of tutorials behind you - a different beast.

craftinginterpreters.com/introduct...

Thread Thread
christiankozalla profile image
Christian Kozalla Author

Thank you so much for your solid advice! I'll check out the book about building interpreters!

Collapse
peerreynders profile image
peerreynders • Edited on

I'm feeling kinda interested in learning another server-side language for web development. Plus, I want to increase my backend skills in general.

From a pragmatic perspective Golang would be the contemporary choice. It seems to have the mass appeal of Python with a C-style syntax capable of producing binary executables.

"It must be familiar, roughly C-like. Programmers working at Google are early in their careers and are most familiar with procedural languages, particularly from the C family. The need to get programmers productive quickly in a new language means that the language cannot be too radical."

Go at Google: Language Design in the Service of Software Engineering

While language-level concurrency primitives are nice they somehow seem to have missed including the complementary error handling primitives (Erlang).


However if you are looking to improve as a programmer it's probably necessary to look in a completely different direction. Pick a LISP or Scheme (Racket) and go with it.

Systematic Program Design

Given that

"I was recruited to Netscape with the promise of “doing Scheme” in the browser" [ref]

the experience will feed back into your JavaScript style.

Collapse
christiankozalla profile image
Christian Kozalla Author

I like your pragmatic perspective and already have a small tendency towards Go :)

Collapse
henryong92 profile image
Dumb Down Demistifying Dev

I would think the same for Golang and Rust.
For server side performance and general community support.
Even though both languages are relatively young they are definitely proven technologies that are extremely performant as well.
Developer and business perspective both are wins.

Collapse
annietaylorchen profile image
Annie Taylor Chen

I'd say go for your work projects' main backend language as you have a chance to learn in a context.

Otherwise I'd say Golang (more used for big scaled, projects that need speed or optimizing) or Python (more related to projects with ML or data processing).

I talked to other very senior devs, one likes Clojure, another likes Rust.. but they both know various other languages already.

Collapse
christiankozalla profile image
Christian Kozalla Author

Many backends at work are written in Roby on Rails, so that is close. One project written in Elixir, some PHP Symfony ^^ I believe there are even some teams that use Go

Collapse
liamjoneslucout profile image
liam-jones-lucout • Edited on

I would definitely recommend Go.

It's a great language that gently introduces aspects of lower level languages and it's used a lot for AWS lambdas. It's also getting a lot of popularity and jobs using it are (in the UK at least) very well compensated.

Beyond that, I'd say C# python, Java.

Edit: if you don't know Typescript, learn that first.

Collapse
jesterxl profile image
Jesse Warden

Python or Ruby. Before Node.js, they were the dynamic language programmer's friend for doing back-end things.

If you're interested in front-end, definitely recommend Elm and/or ReScript. While Elm is front-end only, ReScript can be used for both UI and API.

Lua if you're super bored.

Collapse
christiankozalla profile image
Christian Kozalla Author • Edited on

Thanks for your great advice. I'm never bored! :D

I've already heard good things about Elm, so I'll add that to my list, too!

Collapse
tbroyer profile image
Thomas Broyer

My go-to stack is Java, but that's because I'm already proficient with it. I personally don't like PHP or Ruby but they might be a good choice for you if you already have access to existing projects using them.

If you're looking at learning something new, then try a statically typed language: Java, C#, Kotlin, you name it. Learn what static typing brings on the table, and its "limits" (it's sometimes frustrating but it can really save your ass too)

Collapse
mistval profile image
Randall

I would say C#. It has a lot of similar language features to JavaScript (though they often look quite different) and has great tooling and overall feature set. It will also give you a much more genuine statically-typed language experience than TypeScript could.

Collapse
eneaslari profile image
EneasLari • Edited on

I think that a good choice would be C#(ASP .Net Core ) as back end option. You will see how well structured is in comparison with Node.js for back end solution.
I also use Node js as back end for my side projects but C# is more clear and elegant for someone new.
Node js needs more experience in order to write nice architectured code.

Collapse
christiankozalla profile image
Christian Kozalla Author

That is an interesting thought. Thank you so much ❤️ :D

Collapse
imthedeveloper profile image
ImTheDeveloper

Personally I kept to node for backend apps and coding. Some python but not too much.

That being said, I'd steer away from learning another language (I see lots of go / ruby / c# posts in the comments) and I'd get yourself accustomed to databases, containerisation, queues, workers etc.

Learn more about back end concepts and patterns for scaling, redundancy, performance and focus less on a specific language. You'll find that if you do want to code for the back end you'll be able to use your JavaScript skills already as an example:

Ruby like apps - use sails.js
Microservice - check moleculer.js
Etc.

There will always be a framework or comparative so dive into concepts more. Databases, orchestration and deployment will be far more reaching for you

Collapse
christiankozalla profile image
Christian Kozalla Author

You've got a point there! Really, that's what I am going to focus on aswell - learn some concepts of backend 👍

Collapse
karanpratapsingh profile image
Karan Pratap Singh

Personally, I would recommend Go!

Collapse
thisiscetin profile image
M. Cetin • Edited on

I recommend Elixir, it has many gems for any software developer.

tbroyer profile image
Thomas Broyer

But it's not possible (or easy) with every language. Meta-programming is hardly possible with Java or Go for instance, but is built into Groovy or Python.

Collapse
soli_rsa profile image
Soli Tsaagane
Collapse
christiankozalla profile image
Christian Kozalla Author

Love it! ❤️

Collapse
devcamke profile image
devcamke

I would go for Ruby then Rust later 😏

Collapse
oumaymasghayer profile image
Oumayma JavaScript Developer

Depends on the work you relate to. Could be python, Java, c# , rust, go ...

Collapse
uzair004 profile image
Muhammad Uzair

Python or Dart. (Period)

Collapse
devcamke profile image
devcamke

I would recommend Ruby it is simple to read and easier to learn.
Also, Ruby on Rails is a Fulllstack framework built on Ruby.

Collapse
spaboi profile image
SPABOI

Bro server side language I would definitely recommend node JS. An additional language that you can learn would be C# because it’s similar to JS and has similar workflow.

Collapse
hdgk profile image
HDGK

After Java try python, vice versa, and if you want to do something more advanced in the game section, c++

Collapse
etienneburdet profile image
Etienne Burdet

Python, Go, Ruby or Elixir would be great for learning new backend frameworks! Python is really broadly use, hardly a bad bet (but less risk, less reward… 😇)

Collapse
nilrae profile image
Nils Räfle

As a second language, besides JS, I often use Python for prototyping.
Nice post about advantages of Python -> Pitch me on Python

christiankozalla profile image
Christian Kozalla Author

Alright, thanks! So basically it is a concept agnostic to any particular language(?)

Collapse
christiankozalla profile image
Christian Kozalla Author

Could you briefly explain what's meta programming, please?

Collapse
davenguyenhuy profile image
Nguyen Huy Cuong

I am learning ruby and ruby on rails cause my new company uses it for BE, I see it is more simple and even more dynamic than JS, rails is greate in term it supports almost everything you need to build BE app.

Collapse
jeremymonatte profile image
Mbenga

Is it off topic to answer SQL ?
I'm got nearly zero experience about Javascript backend (i'm a PHP guy) but i think knowing how to buiold good query should always be usefull

Collapse
christiankozalla profile image
Christian Kozalla Author

SQL might be a little off-topic, but I am glad you mention it!

Since I've only used an ORM to talk to databases yet, I'd absolutely want to extend my knowledge of SQL.. Like writing queries with JOIN. Much to learn in this area ^^

Collapse
alaindet profile image
Alain D'Ettorre