¿Qué lenguaje nos beneficia más aprender a los Full-Stack para 2020?

Zerokkk

Sé que hace unos meses, sino casi un año, hice un hilo similar, pero esta vez quiero enfocar la pregunta de forma diferente:

Si tenemos en cuenta las siguientes variables:

  • Salario medio por lenguaje.
  • Comodidad de uso.
  • Utilidad y casos de uso (es decir, en qué contextos se puede usar el lenguaje).
  • Madurez, performance y estabilidad.

... ¿qué lenguaje creéis que beneficia más aprender a un full-stack dev en vistas a 2020?

Lo digo porque en mi cabeza lleva algún tiempo la idea de meterme con un lenguaje nuevo, sobre todo (pero no exclusivamente) para backend. En backend me manejo bien con JS (NodeJS), y me gusta, pero todos sabemos que Node puede ser insuficiente para ciertos casos donde hace falta una gran performance, o donde podemos querer un lenguaje más fuertemente tipado. Lo uso con Typescript a veces, pero sigo pensando que hay muchos casos donde "se me queda corto". Sé de Java también, pero francamente, es un lenguaje que cada vez me gusta menos, no me gusta su tooling, y me gustaría tener otra alternativa seria a Nodejs.

He pensado en Scala, pues es uno de los lenguajes mejor pagados (tengo un amigo en Amsterdam cobrando 5k netos al mes en Scala), además de que parece un buen lenguaje. Lo mismo pensé en Go, que está de moda, parece estar guapísimo, y también está bastante bien pagado.

Por otra parte, me ha sorprendido el proyecto que hizo @_rAiDeN_ en Flutter, que usa el lenguaje Dart. Lo he estado viendo ahora y es un lenguaje que promete mucho, que además compila a nativo y también puede compilar a JS para proyectos web, y por si fuera poco, vale para backend también. Una pasada, sin duda, y me gusta la orientación del lenguaje a OOP.

Finalmente, Python también me parece un lenguaje interesante porque es el que más rápido parece estar creciendo en todas las encuestas, vale para muchas cosas, y me vendría bien conocerlo mejor ahora que me estoy metiendo bastante de lleno en data science / IA.

¿Qué opináis? ¿Cuál es el mejor lenguaje que un full-stack dev debe aprender para 2020, obviando JS/TS?

HeXaN

Ninguno a no ser que quieras cambiar tu orientación laboral. Si no, la especialización en lo que ya haces es lo mejor.

1 respuesta
Nedaim

Si haces lo que dice #2, aprende sobre SEO y diseño que da mucho valor añadido.

Si no, yo iria a por python.

1 respuesta
NeV3rKilL

O pides especialización o para fullstack estás jodido porque has de ser un gurú prácticamente y saber de todo. Si eres fullstack tu sabrás donde cojeas.

1 respuesta
Zerokkk

#4 Es que precisamente mi set de herramientas más acotado, está en el back.

Me gusta NodeJS y me vale para la mayoría de cosas, pero noto que podría perfectamente sustituirlo en muchos casos por un lenguaje más eficiente y con el que se puedan construir aplicaciones de servidor más robustas. Por ejemplo, hacer tareas computacionalmente intensivas con JS, no es una buena idea, lo que me obligaría a hacer un bridge entre mis instancias de Node, y scripts en Python o lo que sea para llevar a cabo las mismas. ¿No sería más cómodo poder hacerlo desde Go?

Eso es una parte, la otra es más relacionada con front: JS en front está bien pero las apps híbridas hechas en Ionic, está claro que no pueden apuntar a ciertos nichos que las nativas sí. Dart + Flutter me convencieron bastante porque, además de compilar también para web (JS), compilan también a código nativo de Android e iOS, lo que me permite la misma flexibilidad y comodidad de Ionic, pero con mayor performance. Eso me atrae muchísimo.

Entonces, es por eso por lo que me hallo en la tesitura de buscar o bien un lenguaje para front, o bien uno para back, para mejorar el skillset que ya tengo y hacerme todavía más "full-stack" que ahora, que lo soy, pero hay contextos donde estoy algo fuera (apps móviles que requieran de mucha performance, o apps de servidor robustas que no apunten a microservicios o servidores pequeños).

Otra opción sería la que comenta #3, que también me parece un buen camino que seguir.

1 respuesta
wdaoajw

#5 Llevo un año con dotnet core y me parece una maravilla.

Por otro lado, como dice hexan, depende para qué quieras usarlo.

1 respuesta
eisenfaust

Da un poco igual. Casi todos los lenguajes que mencionas son básicamente lo mismo a excepción de Scala que es algo más complicadete.

Si ya te centras en el salario, pues lo que se suele ver por ahí arriba son Scala, Clojure, F# y Go. Con los lenguajes funcionales tendrás que competir con gente realmente buena pegándose por un puñado de puestos, no va a ser aprender OCaml y terminar con un puesto en Jane Street. Con respecto a Go el salario es alto más bien por el tipo de trabajo (cloud native tooling, infra, SRE y demás historias) que el lenguaje en sí.

1 1 respuesta
Zerokkk

#7 Sé que valen para propósitos similares, pero hay que entender que aquí mi pregunta es multicriterio: el salario es uno, pero también entra la usabilidad (véase lo increíble que parece Flutter para hacer apps nativas...), o cuánto mola cada uno de esos lenguajes (no es lo mismo programar con vanilla JS o Java 5 que con JS ES6 + TS o Kotlin).

Y todo esto teniendo en cuenta que es para un Full stack, claro.

#6 Me lo he planteado varias veces, que conste! Además, como C# tiene parecidos razonables con Java, no me costaría mucho aprenderlo. Créeme que es algo que tengo muy en mente, sobre todo al contener también Xamarin en el stack.

eisenfaust

Yo tengo .NET en mente también por algunas frustraciones que tengo con Go y OCaml. Me da un poco de vértigo pero bueno, ahora con core 3.0 parece ser un buen momento. F# da el pego y C# a muy primera vista me parece superior a Go y Java.

1 1 respuesta
r2d2rigo

Si primero no defines que significa "full stack" para ti no hacemos nada. Porque pense que era web pero te he visto que mencionas Flutter y Xamarin, asi que tienes un buen lio encima.

PD: el full stack dev no existe, o acaso vosotros sabeis como gestiona la memoria el hardware en el que se ejecutan vuestros programas?

1 respuesta
Zerokkk

#9 Gracias por la sabiduría como siempre, Eisen. Ciertamente .NET es una opción atractiva, pero me gustaría que extendieses algo más tu comentario sobre qué cosas te gustan del stack, y de C# como lenguaje. Porque hasta ahora, es la primera vez que veo a alguien poniéndolo por encima de Go.

#10 Ya tenías que aparecer con tus gilipolleces de siempre. Más de los que te crees sabemos detalles como esos, y más asuntos a niveles que a priori "no tendríamos que preocuparnos por". Y léeme bien: yo construyo a nivel de web, a nivel de servidor, y a nivel de app. Xamarin sólo para apps, pero Flutter me vale tanto para webs como apps nativas (sí, parece ser que también compila a JS plano).

2 respuestas
Troyer

Javascript dom y especializarte en cualquiera de back, no tiene más.

Wei-Yu

.net ahora será crossplatform. De base tiene un ecosistema para usuario final/escritorio bastante rico; xamarin, apps nativas windows, unity y un montón de entornos particulares que sólo son extensibles a través de cpp o c#... pero ahora además pudiendo correrlo libremente sobre linux te da margen para usar herramientas de dev e infra de verdad

c# al margen de .net es un lenguaje que con mi poca experiencia me parece bastante expresivo, mírate linq y los expression trees a ver qué te parecen, pero a mí me resulta muy cómodo todo y la gente suele estar enamorada de linq

luego ya el tema del CLR sí que no me metí nada... quería leer sobre la jvm a fondo antes pero entre hacerme pajas y jugar a mmos i me da el tiempo

edit: lo malo del crossplatform es que usa mono y me parece un pufo aunque supongo que funciona así para todo lo que va abstrayendo cosas inferiores

1 2 respuestas
Jastro

Depende de la zona supongo, en Madrid veo mucho curro de Java para backend. De front Vue/React, TS, less/sass y a disfrutar

r2d2rigo

#11 y tu demostrando como siempre que hablas de las cosas sin tener ni puta idea. Lo que compila a JS es Dart, Flutter es un runtime que solo da soporte a mobile. Y Dart como lenguaje me sorprenderia que tenga vida mas alla de 2022, teniendo en cuenta que los unicos real world uses que tiene es el equipo de Google Ads y Flutter.

Yo tambien tengo web como target con Xamarin, otra cosa es que sea un frankenstein que no vaya a tocar ni con un palo habiendo otras partes de la stack mucho mejor pensadas para ello.

#13 Mono esta en desuso, aunque sigue teniendo bastante uso por los productos legacy que siguen corriendo sobre el, la idea es sustituirlo por .NET Core progresivamente.

3 respuestas
B

#15 Que tecnologías recomiendas tu para un perfil full-stack? Por curiosidad.

1 respuesta
Wei-Yu

#15 pero core no usa mono por debajo en linux?

1 respuesta
Wasd

Sin ser un gran aporte, dejo el dato igualmente. Atentos a Deno que de cara al futuro cercano puede ser muy interesante.
https://deno.land/

Como apuntes rapidos, lo está desarrollando Ryan Dahl (creador de NodeJS), lo está construyendo pensando en TypeScript y quiere arreglar todos los errores de node, incluyendo npm.

Tema aparte, veo que habláis mucho de Flutter pero no de React Native. Llevo un par de apps hechas en React Native y bastante contento.

2 respuestas
miky96es
#13Wei-Yu:

la gente suele estar enamorada de linq

enamoradísimo cosas complicadas se convierten en "fáciles", es terriblemente potente.

1 respuesta
Wei-Yu

#19 puedes desarrollar? curiosidad genuina

JohnVoiden

#18 Deno, aún es demasiado joven y la comunidad demasiada comoda en NodeJS.

r2d2rigo

#16 a mi no me mires, yo soy de mobile. Supongo que MSSQL/ASP .NET Core/cualquier frontend que use TypeScript (Angular? alguno mas?), pero claro esto no suele barato respecto a ciertas licencias.

#17 no, Core es un runtime completamente nuevo que corre en todos lados: https://stackoverflow.com/a/39740592

1
B

#18 Cada día que pasa más enamorado de React Native. La verdad que era muy reticente pero estoy colaborando en un par de proyectos tochos y es una pasada. En cuanto a Deno... Destronar a nodejs va a ser complicado. Mucho va a tener que cambiar el paradigma para que se haga el trasvase

1 respuesta
Wasd

#23 Yo empecé un proyecto hace unos 4 meses y me dio bastantes problemas a la hora de hacer builds, tanto con android como con ios (problemas que no tenían nada que ver los de una plataforma con la otra).

Ahora hace cosa de un mes he empezado otro y la verdad que todo super fluido. Supongo que es una mezcla entre la experiencia aprendida y que habrán mejorado el core (de la 0.59 a la 0.60), pero vaya, bastante contento.

Grise

Vaya por delante que odio muy fuerte todo lo que es el uso de un lenguaje para algo que no espera cubrir y me parece que la búsqueda de la comodidad en el desarrollo es inversamente proporcional a la calidad de los productos desarrollados. Dicho esto y como tampoco se muy bien que campo quieres cubrir pongo cosas al tuntún.

Front:
Por demanda de trabajo yo seguiría por JS, que ya lo dominas, y pillaría cualquier librería popular. Supongo que React, Angular y Vue seguirán siendo las que más se usan. En mi opinión usar JS para cualquier cosa que no sea manipular el DOM es querer morir, pero hay curro así que cada cual que decida.

Dart/Flutter. Creo que a Flutter le están metiendo soporte para web en las últimas versiones, imagino que por petición popular. Si al parecer necesitas cubrir webs+apps te va a tocar tener dos bases de código para el front, una con Flutter y la otra solo con Dart, que además tampoco está muy maduro. Todo esto si es que el proyecto no se va al garete antes, que dependerá de Fuchsia OS.

Móvil nativo: Hay pocas opciones, así que la que más rabia te de.

PC: C# es lo más top para Windows. Delphi mola, es cómodo y tiene un performance muy decente, pero hay menos curro que en C#. Lo bueno que tiene es que permite compilar apps para móvil, pero buena suerte para encontrar un sitio que lo usen con ese objetivo. Mac es Mac, así que no hay mucho que hablar. Linux lo ignoro porque no te van a pedir en casi ningún sitio que hagas una aplicación con ventanitas para ese OS.

Back:
Omito Node.

Soy un enamorado de PHP, pero hurr durr, lenguaje de dinosaurios.

Go no lo he tocado mucho más lejos de un hola mundo, pero parece gracioso.

Rust mola, pero no hay trabajo.

Python, que lo mencionas, está creciendo mucho pero no por su uso en Web/apps sino por su uso en ciencia de datos. No es famoso por ser el lenguaje más optimizado del planeta pero mola.

Otros lenguajes de uso generalista (C++, C#, Java, etc.) son todos primos hermanos, sabes uno sabes todos a no ser que quieras entrar en las tripas de la bestia, que para un Fullstack no suele ser necesario nunca.

Lenguajes funcionales no vas a encontrar trabajo fácilmente y, normalmente, se los quedan los de mates/estadística.

Conclusiones: Como creo que lo que más te interesa es el Back y te importa el performance yo tiraría por Go. Para Front en web, a no ser que quieras aprender Dart (que te va a costar encontrar trabajo) tienes que morir en JS. Para Front en móviles (apps) yo tiraría siempre a Nativo, pero si no quieres/puedes la única alternativa madura es JS, porque con Flutter no vas a encontrar trabajo. El mejor consejo que se puede dar es no currar de Fullstack.

1 respuesta
eisenfaust

#11 mi interes viene por https://github.com/ixy-languages/ixy-languages

donde basicamente se ven varios tiers, empezando por debajo tienes memes como python, luego lenguajes dinamicos a medio optimizar como js, o swift donde el conteo de referencias te come gran parte de los ciclos de cpu, despues factorias de basura ya sea por el uso del paradigma funcional o por ausencia de value types, a continuacion lenguajes con tracing gc + value types y finalmente lenguajes sin runtime o manejo manual de memoria

no puedo decir mucho porque de .net y c# se entre poco y nada, pero ya solo por tener generics me tiene ganado con respecto a go. lo que tengo por ver es si tiene m:n threading que imagino que si y si el rollo kernel vs user thread esta tan abstraido como en go, que es algo que no me gusta. y lo mismo con value types, programacion a bajo nivel y rendimiento de ffi, que en go deja mucho que desear y todo el rendimiento que se le pueda ara;ar a librdkafka es bienvenido

la duda es tambien que tal se porta f# que es en lo que pasaria la mayor parte del tiempo

ya comentare algo si saco tiempo

1 1 respuesta
s4suk3

yo estoy aprendiendo minería y desuello

3 1 respuesta
r2d2rigo

#26 en C# por lo general se suele usar el ThreadPool o la TPL como atajos, pero tienes threads de bajo nivel de toda la vida. Al correr en un runtime solo vas a poder ejecutarlos en userland o hybrid, los de kernel no estan expuestos.

Respecto a interop, todos los lenguajes del runtime (VB, C#, F#) compilan al mismo MSIL aunque unos expongan distintas abstracciones que otros, asi que la compatiblidad es completa.

EDIT: tambien soporta cosas mas hardcore como SIMD, unmanaged memory (aunque ahora exista Span<T> para facilitar las cosas), interop con C...

EDIT2: #27 sentado espero el dia que os deis de lleno con la escalabilidad de Flutter. Muy bonito para hacer cuatro cosas genericas pero cuando tienes que tirar de funcionalidad nativa no expuesta ya tal.

1 2 respuestas
s4suk3

#28 en mi empresa antes hacíamos apps nativas y desde que pillamos flutter volver a nativo es como viajar al pasado, a mí me sorprendería que en 2022 se siga desarrollando las apps full nativas, dart enamora

#28 puedes poner algún ejemplo de cosas que creas que no se pueden hacer?

1 respuesta
r2d2rigo

#29 no digo "cosas que no se puedan hacer", porque al final con paciencia y saliva todo entra. Digo cosas que son un dolor de huevos en Flutter respecto a cualquier otro framework que te deja acceder mas facilmente a las cosas nativas. Acceder a hardware (que supongo que Flutter ya tendra varios plugins), local storage, etc.

Usuarios habituales

  • Zerokkk
  • Kaledros
  • Wei-Yu
  • HeXaN
  • r2d2rigo
  • s4suk3
  • eisenfaust