Hoje em dia, qual tecnologia vale aprender?

[quote=ImpossiveI][quote=Júlio Murta]
Até onde sei é perfeitamente possível se aventurar fora do mundo “CRUD web” usando linguagens imperativas.[/quote]

no front-end você fala? Sem duvida.[/quote]

No back-end também. Rotinas que abusam de estrutura de dados, programação paralela, streaming, geolocalização e outras coisas também podem ser feitas com java, c# e outras.

Cite exemplos.[/quote]

Recentemente vi alguns módulos para que fazem interface com instrumentos musicais (como teclados, baterias, etc). Há também vários algoritmos para processamento de áudio e edição de som, além de hardware específico para captura.

Não estou falando que isso vale a pena para o colega mas, certamente, valeria para mim. heheheheh[/quote]

hmm, interessante.

[quote=Júlio Murta]
No back-end também. Rotinas que abusam de estrutura de dados, programação paralela, streaming, geolocalização e outras coisas também podem ser feitas com java, c# e outras.[/quote]

não esqueça de frameworks java/c#.

[quote=ImpossiveI][quote=Júlio Murta]
No back-end também. Rotinas que abusam de estrutura de dados, programação paralela, streaming, geolocalização e outras coisas também podem ser feitas com java, c# e outras.[/quote]

não esqueça de frameworks java/c#.[/quote]

???

Desculpe, não entendi aonde você quer chegar.

Na sua opinião, o que uma linguagem funcional pode fazer além do que uma linguagem imperativa já faz no back-end?

Pelo “vale”, quer dizer aprender algo que tenha retorno financeiro rapido e direto.

Então acho que vale a pena aprender javascript, angular, webapi, entity framework, mvc 6, signalR, C# mais a fundo, coisa que as vezes nao tenho tempo, dominar melhor os generics, collections e nuances da linguagem, conhecer métodos performáticos, e dominar (criptografia simétrica, assimétrica, assinatura digital, certificação digital, tokens etc - utilizações práticas e reais)

Agora se não fosse pelo retorno financeiro rapido, acredito que Arduino, microcontroladores, programação de drivers, programação de ferramentas de baixo nível, computação gráfica, processamento de audio, e além disso também acharia interessante começar a desenvolver software que interaja o mundo real, ir um pouco mais pro campo da engenharia eletronica, mecatronica e quimica.

[quote=Júlio Murta]
Na sua opinião, o que uma linguagem funcional pode fazer além do que uma linguagem imperativa já faz no back-end?[/quote]

Na minha opinião, algoritmos, regras de negócio…

Mas praticamente todo backend vai se beneficiar de ter programadores funcionais no lugar de arquitetos OO.

[quote=ImpossiveI][quote=Júlio Murta]
Na sua opinião, o que uma linguagem funcional pode fazer além do que uma linguagem imperativa já faz no back-end?[/quote]

Na minha opinião, algoritmos, regras de negócio…

Mas praticamente todo backend vai se beneficiar de ter programadores funcionais no lugar de arquitetos OO.[/quote]

Na prática, não existe nenhum algoritmo que possa ser escrito no paradigma funcional e que não possa ser escrito em um paradigma imperativo. Mas algumas construções ficam mais elegantes quando escritas de maneira funcional,por exemplo, fornecer uma simples função como callback de um evento ao invés de um objeto que implementa uma interface listener.

[quote=rmendes08]
Na prática, não existe nenhum algoritmo que possa ser escrito no paradigma funcional e que não possa ser escrito em um paradigma imperativo. Mas algumas construções ficam mais elegantes quando escritas de maneira funcional,por exemplo, fornecer uma simples função como callback de um evento ao invés de um objeto que implementa uma interface listener. [/quote]

Infelizmente em java você só pode saber depois de contratado, se vai trabalhar com algoritmo imperativo ou CRUD na web.

[quote=ImpossiveI][quote=rmendes08]
Na prática, não existe nenhum algoritmo que possa ser escrito no paradigma funcional e que não possa ser escrito em um paradigma imperativo. Mas algumas construções ficam mais elegantes quando escritas de maneira funcional,por exemplo, fornecer uma simples função como callback de um evento ao invés de um objeto que implementa uma interface listener. [/quote]

Infelizmente em java você só pode saber depois de contratado, se vai trabalhar com algoritmo imperativo ou CRUD na web.[/quote]

Se o entrevistador combina uma coisa e cumpre outra é um problema da empresa, o que a tecnologia que ela utiliza tem a ver com isso ?

[quote=rmendes08]
Se o entrevistador combina uma coisa e cumpre outra é um problema da empresa, o que a tecnologia que ela utiliza tem a ver com isso ?[/quote]

E uma coisa que o profissional tem que se preocupar caso trabalhe com Java ou .net. :frowning:

[quote=ImpossiveI][quote=rmendes08]
Se o entrevistador combina uma coisa e cumpre outra é um problema da empresa, o que a tecnologia que ela utiliza tem a ver com isso ?[/quote]

E uma coisa que o profissional tem que se preocupar caso trabalhe com Java ou .net. :([/quote]

então se uma empresa trabalha com Ruby, PHP ou uma tecnologia hype é absoluta certeza que ela vai cumprir com o combinado ?

realmente, a relação causa-efeito nesse caso faz todo sentido …

Nunca trabalhei com essas linguagens.

Estou falando de empresa que escolhe tecnologia pq é mais popular (hype), como java e .net.

[quote=ImpossiveI][quote=rmendes08]
então se uma empresa trabalha com Ruby, PHP ou uma tecnologia hype é absoluta certeza que ela vai cumprir com o combinado ?
[/quote]

Nunca trabalhei com essas linguagens.

Estou falando de empresa que escolhe tecnologia pq é mais popular (hype), como java e .net.

[/quote]

1 - eu não disse que você trabalha ou algum dia trabalhou com essas linguagens (e você tem um sério problema para interpretar exemplos/analogias), o que eu questionei foi a relação de casualidade do seu raciocínio:

SE uma empresa utiliza Java ou .net LOGO ela não vai cumprir com combinado

sendo que uma coisa não tem nada a ver com a outra.

2 - pelo visto você também não entende o que é hype.

Node.js

Dá pra melhorar esta pergunta. Eu perguntaria: o quê uma linguagem funcional proporciona com muito menos custo com relação à imperativa?

Eu começo analisando diferenças não apenas entre linguagens funcionais x imperativas, mas sim tecnologias.

A grosso modo uma linguagem funcional tem características que nos permitem ter um modelo de concorrência adequado se comparar com uma linguagem imperativa. Mas no mundo imperativo foram desenvolvidas diversas tecnologias que permitem abstrair este problema de modo a não nos preocuparmos com isso. Mesmo assim, em vários casos, a base imperativa pode ser um fator limitador e você termina com mais código a dar manutenção, mais propensão a bugs e claro mais custos.

Por isso o importante é avaliar o custo de implementar uma solução funcional para um determinado problema, pois podem sim surgir casos onde faz todo sentido partir pro funcional se trazer benefício tecnológico e econômico. Um rápido exemplo é a resiliência suportada na VM do Erlang. Pra ter resiliência de verdade (coisa de gente grande) em alguma tecnologia imperativa você pode ter muito mais trabalho, implementar dezenas de fw’s, algoritmos, patterns e por aí vai. Algo que já é resolvido de forma simples na própria linguagem do Erlang e você implementa rápido com pouco custo. E pelo que sei até o momento, mesmo comparando Erlang com outras linguagens funcionais, resiliência é algo que esta faz bem feito.

De novo, por este motivo, o foco seria comparar tecnologias, e não (apenas) paradigma de linguagem :slight_smile:

EDIT: E respondendo a principal pergunta do tópico: sim, IMHO hoje em dia vale a pena aprender a programar (e pensar) o paradigma funcional. Alguns shots como já citaram nesta thread, Haskell, F#, Clojure, Erlang e Node.