Pessoal, estou tendo um tempo livre durante a semana e gostaria de aprender uma nova linguagem. Sem ser java, qual vocês recomendariam ? Estava disposto a aprender C ou C++, mas será que vale a pena aprende-los agora ?
Bom, aguardo as opiniões.
Obrigado.
Recomende-me uma Linguagem [Off-Topic]
51 Respostas
Se você já sabe Java, c/c++ não vai ser algo tão dificil de aprender. Sugiro alguma linguagem que faça sua cabeça doer de tanto pensar.
Nessa categoria eu pessoalmente recomendo LISP, Scheme e Caml. Essas linguagens são diferentes o suficiente de Java para te dar a sensação de que sabe patavinas de programação. Essa foi a minha experiência inicial com elas, pelo menos.
Bons estudos.
Se quer outra linguagem, eu iria para o C. Mas você pode também aprender algum framework, ou ferramenta.
struts, tiles, hibernate, junit, javamail, websphere, oc4j, etc…
Bom, acho que primeiro estou mais necessitado de aprender C/C++, porque tenho perdido alguns projetos nele.
Sobre Lisp, eu dei uma olhada no Wikipedia me pareceu bastante diferente, só uma dúvida: ela “agrega” valor comercial ? Não ouço falar muito dela em projetos.
O tanto que aprendi de C++ e C em ambientes Unix e Windows me diz que é muita coisa para uma cabeça só, se quiser aprender o C++ direito.
Mas se quiser aprender apenas o trivial…
Eu diria que é sempre bom saber PHP e Python. Não se esquecer do Pascal (Delphi).
Nessa categoria eu pessoalmente recomendo LISP, Scheme e Caml. Essas linguagens são diferentes o suficiente de Java para te dar a sensação de que sabe patavinas de programação. Essa foi a minha experiência inicial com elas, pelo menos.
E não se esqueça do PROLOG!
Veja que doidera a Torre de Hanoi nessa linguagem:
hanoi(N) :- move(N, left, centre, right).
move(0, _, _, _) :- !.
move(N, A, B, C) :-
M is N-1,
move(M, A, C, B), inform(A, B), move(M, C, B, A).
inform(X, Y) :-
write([move, a, disc, from, the, X, pole, to, the, Y, pole]),
nl.
Eu tive isso na faculdade, e realmente te abre novas maneiras
de pensar como resolver um problema…
Eu recomendaria ruby … nao tem forma melhor de gastar seu tempo livre …
Se quer outra linguagem, eu iria para o C. Mas você pode também aprender algum framework, ou ferramenta.struts, tiles, hibernate, junit, javamail, websphere, oc4j, etc…
estudar struts hoje em dia ??? vc por acaso estava dormindo em uma camara criogenica e acordou esse mes ?
Aprenda Brainfuck. Depois de aprender, provavelmente você vai querer tirar o “Brain” do nome, porém.
Se vc nao souber struts hoje em dia, acabou de perder cerca de 80% no mercado de java…
Se quiser pastar para tentar entrar nos 20% restantes, td bem…se nao, aprenda struts.
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Bom, acho que primeiro estou mais necessitado de aprender C/C++, porque tenho perdido alguns projetos nele.
Sobre Lisp, eu dei uma olhada no Wikipedia me pareceu bastante diferente, só uma dúvida: ela “agrega” valor comercial ? Não ouço falar muito dela em projetos.
Comercialmente quase nada, se você achar algum emprego aqui no pais que exija LISP te pago 2 cervejas.
Entretanto aprender LISP vai ter ajudar muito a ser um melhor programador.
Eu voltaria no Ruby, linguagem simples e prazeroza de aprender. Vale apena.
Esse site aqui é bem legal, tem a implementação do mesmo programa
em quase 1000 linguagens de programação:
http://www.99-bottles-of-beer.net
Exemplo em Java:
import java.util.*;
class Verse {
private final int count;
Verse(int verse) {
count= 100-verse;
}
public String toString() {
String c=
"{0,choice,0#no more bottles|1#1 bottle|1<{0} bottles} of beer";
return java.text.MessageFormat.format(
c.replace("n","N")+" on the wall, "+c+".\n"+
"{0,choice,0#Go to the store and buy some more"+
"|0<Take one down and pass it around}, "+c.replace("{0","{1")+
" on the wall.\n", count, (count+99)%100);
}
}
class Song implements Iterator<Verse> {
private int verse=1;
public boolean hasNext() {
return verse <= 100;
}
public Verse next() {
if(!hasNext())
throw new NoSuchElementException("End of song!");
return new Verse(verse++);
}
public void remove() {
throw new UnsupportedOperationException("Cannot remove verses!");
}
}
public class Beer {
public static void main(String[] args ) {
Iterable<Verse> song= new Iterable<Verse>() {
public Iterator<Verse> iterator() {
return new Song();
}
};
// All this work to utilize this feature:
// "For each verse in the song..."
for(Verse verse : song) {
System.out.println(verse);
}
}
}
Exemplo em LISP:
(labels ((foo (x)
(and (<= 0 x) (cons x (foo (1- x))))))
(format t (format nil
"~~{~~&~~@(~~%~~R ~A ~A!~~)~~:*~~&~~@(~~R
~0@*~A!~~)~~&~~@(~2@*~A!~~)~~&~~@(~~[~A~~:;~~:*~~R~~:*~~] ~0@*~A!~~)~~}"
"bottles of beer"
"on the wall"
"take one down, pass it around"
"no more"
)
(foo 99)))
Exemplo em PROLOG:
bottles :-
bottles(99).
bottles(1) :-
write('1 bottle of beer on the wall, 1 bottle of beer,'), nl,
write('Take one down, and pass it around,'), nl,
write('Now they are all gone.'), nl,!.
bottles(X) :-
write(X), write(' bottles of beer on the wall,'), nl,
write(X), write(' bottles of beer,'), nl,
write('Take one down and pass it around,'), nl,
NX is X - 1,
write(NX), write(' bottles of beer on the wall.'), nl, nl,
bottles(NX).
Exemplo em RUBY:
puts; puts " It's beer song time!"; puts
def bottles(n)
n == 1 ? "#{n} bottle" : "#{n} bottles"
end
@count = 99
@count.downto(1) {
puts <<BEERSONG
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#{bottles(@count)} of beer on the wall
#{bottles(@count)} of beer
Take one down, pass it around
#{bottles(@count -= 1)} of beer on the wall
BEERSONG
}
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts; puts " No more beer on the wall :-("
Exemplo em SQL:
SELECT
CASE (bottlecount)
WHEN 0 THEN 'No more bottle of beer on the wall, no more bottles of beer. ' ||
'Go to the store and buy some more, 99 bottles of beer on the wall.'
WHEN 1 THEN '1 bottle of beer on the wall, 1 bottle of beer. ' ||
'Take one down and pass it around, no more bottles of beer on the wall.'
WHEN 2 THEN '2 bottles of beer on the wall, 2 bottles of beer. ' ||
'Take one down and pass it around, 1 bottle of beer on the wall.'
ELSE
rtrim (cast((BottleCount) as char(2))) || ' bottles of beer on the wall, ' ||
rtrim (cast((BottleCount) as char(2))) || ' bottles of beer. ' ||
'Take one down and pass it around, ' ||
rtrim (cast((BottleCount)-1 as char(2))) || ' bottles of beer on the wall.'
END
FROM
(
SELECT avalue * 10 + bvalue as bottlecount
FROM
(VALUES (9), (8), (7), (6), (5), (4), (3), (2), (1), (0)) a(avalue),
(VALUES (9), (8), (7), (6), (5), (4), (3), (2), (1), (0)) b(bvalue)
) as valuelist;
Bom, como estou perdendo alguns projetos, vou estudar nem que seja o básico de C/C++, Depois vou estudar provavelmente Lisp ou Ruby.
Só uma dúvida o Ruby, assim como o java é “Write once, run everywhere” ?
Obrigado pela atenção.
para estudar o Ruby você pode tentar ler o livro em:
http://www.rubycentral.com/book/
Se o Ruby é “Write Once, Run (ahem) Anywhere”? É mas também pode acessar coisas do seu sistema operacional preferido. Por exemplo, do Windows:
http://www.rubycentral.com/book/lib_windows.html
Curiosidade - embora o Ruby pareça ser novidade, ele é tão velho quanto o Java.
Then, I remembered my old dream, and decided to design my own language. At first I was just toying around with it at work. But gradually it grew to be a tool good enough to replace Perl. I named it Ruby---after the precious red stone---and released it to the public in 1995. ... Yukihiro Matsumoto, a.k.a. ``Matz''
Esse site aqui é bem legal, tem a implementação do mesmo programa
em quase 1000 linguagens de programação:
Legal, tem Brainfuck lá!
http://www.99-bottles-of-beer.net/language-brainfuck-776.html
:mrgreen:
Acho que voce deve partir do principio que é relativamente impossivel saber todas as linguagens ao mesmo tempo. Digo, relativamente por que a linguagem (semantica sintaxe) de todas é simples, geralmente a pessoa pega bem rápido. Mas todo o “ambiente” que envolve a linguagem é grande.
eu recomendaria:
- C (dá pra começar a ter noção do que é um computador, mas é para aprender messsmo saber o que é setjmp, etc)
- Java (Orientacao a Objeto, etc etc)
- Alguma coisa nova, tipo ruby, essas coisas são legais
- Por hobby, acho que entram varias outras, lisp, etc etc
- Asm basico de z80 e x86
Nao recomendaria:
- C++ (é simples, mas nem o sopa-de-pedra sabe tudo da stl)
- Pascal (isso ainda existe?)
- Se for iniciante, evite java, c# e similares - fora ruby, perl. (Eu acho que essas linguagens confundem muito quem está iniciando com computadores, principalmente nos conceitos de memoria, processo e agendamento)
No fim, acho que a linguagem que todos deveriam ser obrigados a saber é C e asm básico das maquinas onde ele trabalha. Asm é muito simples, pode ser muito util dependendo de que area de atuacao de software voce vai trabalhar.
[]s
Italiano, frances, espanhol, mandarim, japones e afrikaans sao linguas bacanas. Mas, faltando paciencia, Ruby eh o caminho.
Se vc nao souber struts hoje em dia, acabou de perder cerca de 80% no mercado de java…
Se quiser pastar para tentar entrar nos 20% restantes, td bem…se nao, aprenda struts.
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Fale por voce apenas.
Rafael
Se vc nao souber struts hoje em dia, acabou de perder cerca de 80% no mercado de java…
Se quiser pastar para tentar entrar nos 20% restantes, td bem…se nao, aprenda struts.
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
E quem eh bobo de ser parte dos 80% da massa ignorante que ainda usa um framework retrogrado e, sem medir palavras, imbecil como o Struts!?
Se vc nao souber struts hoje em dia, acabou de perder cerca de 80% no mercado de java…
Se quiser pastar para tentar entrar nos 20% restantes, td bem…se nao, aprenda struts.:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Voltando alguns anos quando estava eu em um projeto com struts, tenho calafrios de relembrar tudo que passei de assustador usando esse framework. FormBeans? DynaFormBeans? DynaMegaFUCKFormBeans? Coisas que me perseguiam das 8 as 18:00 todos os dias, nunca em minha vida um TestCase foi tão dificil de se escrever, que ideia é essa de se passar o HttpServletRequest e HttpServletResponse na action. Outra que depois de você ter um sistema analisado e modelado, tem que fazer um model-refactoring para ele se adequar e adaptar aos moldes do struts (FormBeans), além de ser uma implementaçao do MVC (model view controller) framework/pattern/xpto (chame como quiser, já cansei de discutir sobre essa titulação), onde você tem que abolir de todas suas técnicas de programacao em OO e Design Patterns e se voltar ao SOP (struts oriented programming), sem contar a escalabilidade sacrificada totalmente por uma definição errada de projeto.Até mesmo o time de desenvolvimento do struts encabeçada pelo Craig McClanahan declarou que não haverá uma implementação de um Struts 2.x (não o shale não é struts 2.x, e sim um vamos jogar fora tudo que temos fazer de novo, agora que ja sabemos onde não podemos errar). Depois de quase 6 anos de struts, vemos uma arquitetura ultrapassada de desenvolvimento, onde seria burrice utiliza-lá para um novo projeto com tantas alternativas presentes no mercado, sim existem vários sistemas rodando com struts por ai, e jáouvi comentarios deste calão (COBOL é utilizado até hoje, você acha que o struts vai sair tão cedo de cena) bem eu não diria tão cedo, mas pelo amor de Deus comparar um framework MVC com uma linguagem de programação é o cumulo. E estas aplicações vão demorar uns 2 ou 3 anos pra comecarem a ser portadas para uma nova solução, mas até lá muita agua tem para rolar.
listo varias vagas de emprego que recusei por ser struts … varias mesmo …
e sim prefiro ser um diferencial nos 20% do que pastar com struts. 
ps. nao transformem isso em uma guerra de frameworks…
… um framework retrogrado e, sem medir palavras, imbecil como o Struts!?Infelizmente o meu saco conhece muito bem os males do Struts…
Sugiro você dar uma olhada mais geral em todos os tipos de paradigma de programação existentes, assim como o pessoal já falou aqui, prolog, lisp, c, ruby, … mas realmente não sei se vale a pena se especializar em uma delas sem que tenha depois como por em prática.
Não sei se eu li direito… mas alguém hoje em dia está querendo aprender Struts (yécaaraullllll) ?
Shell Script!
Ou então AWK!
Olá, Fabricio.
Vale a pena sim. Inclusive, é indicado ter esta prática no livro Pragmatic Programmer.
Aprendendo outras linguagens você pode descobrir maneiras diferentes de resolver um problema, além de colocar isso em prática na linguagem que hoje você é especializado. Por exemplo, com o pouco que conheci do Rails, passei a tratar diferente a camada de controle em app’s web em java que utilizam MVC, deixando-as um pouco mais parecido com a arquitetura do Rails.
EDITADO: Para dar uma view no assunto, vale a pena dar uma olhada neste link. Dê uma olhada no capítulo 1, página 12 em “Your Knowledge Portfolio”. Ele trata um pouco sobre o assunto.
Abraços!
Thiago
PHP, sempre ouvi que eh um dinheiro facil e sujo… hehe
Se estah com tempo livre vc pode estudar temas interessantes como CMMI, PMI, ITIL, CoBIT e assemelhados, ou ao pode estudar metodologias ageis tambem que sao todos uma boa bagagem a mais do que “simplesmente” linguagens de programacao e tal.
E quem eh bobo de ser parte dos 80% da massa ignorante que ainda usa um framework retrogrado e, sem medir palavras, imbecil como o Struts!?
Oh, desculpe senhor espertão…
Se você refazer todas as actions e tags do struts do sistema eu prometo que convenço eles a usarem o framework q vc escolher (desde que seja em Java). 
Por isso as vezes odeio java.
2 anos atras Struts era lindo. Hoje não presta e pode até ser dificil encontrar profissionais que tenham experiencia com ele. Isso cansa
Struts apareceu e ta esfriando antes mesmo do meu atual projeto ser concluído
Cara, que projeto é esse que é da época que o Struts apareceu e ainda não acabou? :shock:
“Simplesmente”?
Aprender uma linguagem de programação bizarra como LISP (Aprender mesmo!) vai lhe fazer muito melhor do que entender quantos documentos você precisa preencher pra ter o direito pra abrir a sua IDE todos os dias de manhã no PMI :lol:
pra isso que existem estagiarios 
Oi Mauricio,
O projeto iniciou e poucos meses depois fiquei sabendo da existencia do struts, ainda não concluimos, mas varios pedaços já estão em fase de homologacao por uns orgãos. É java + fortran, era pra ser java em tudo, mas java não é aceito ainda em certos tipos de aplicação.
Por isso as vezes odeio java.2 anos atras Struts era lindo. Hoje não presta e pode até ser dificil encontrar profissionais que tenham experiencia com ele. Isso cansa
Struts apareceu e ta esfriando antes mesmo do meu atual projeto ser concluído
As coisas evoluem, não quer dizer que Struts seja a pior coisa do mundo. Mas o pessoal descobriu uma forma melhor de desenvolver aplicações web.
E assim caminha a humanidade ‘java’.
Trocar de emprego seria uma opção bem mais fácil e menos dolorosa.
Por isso as vezes odeio java.2 anos atras Struts era lindo. Hoje não presta e pode até ser dificil encontrar profissionais que tenham experiencia com ele. Isso cansa
Struts apareceu e ta esfriando antes mesmo do meu atual projeto ser concluído
As coisas evoluem, não quer dizer que Struts seja a pior coisa do mundo. Mas o pessoal descobriu uma forma melhor de desenvolver aplicações web.
E assim caminha a humanidade ‘java’.
Mas Fabricio, quando a coisa evolui/muda dessa forma pode demonstrar que há alguma coisa errada na base. Se você for comparar com outros ramos, tipo engenharia, isso fica meio bizarro. 2, 3, 5 anos é muito pouco tempo para o ciclo de vida de uma coisa que chamam de tecnologia. Acho que spring não é evolucao de struts, por que é outra coisa, outro objeto, não é a evolucao da mesma coisa.
O proprio EJB3 parece que foi um “esquece tudo e faz denovo” e não exatamente uma evolução. (ou não?)
Não quero soar rude, mas por acaso você entende de engenharia contemporânea para afirmar sobre o ciclo de vida da tecnologia de ponta usada?
Se você comparar a área de software com a de aeronautica, por exemplo, vai notar que sempre que um avião é colocado em produção todos os demais projetos estão usando tecnologia muito além.
Engraçadão vc 
Trocar de emprego por causa do framework? :shock:
Mas Fabricio, quando a coisa evolui/muda dessa forma pode demonstrar que há alguma coisa errada na base. Se você for comparar com outros ramos, tipo engenharia, isso fica meio bizarro. 2, 3, 5 anos é muito pouco tempo para o ciclo de vida de uma coisa que chamam de tecnologia. Acho que spring não é evolucao de struts, por que é outra coisa, outro objeto, não é a evolucao da mesma coisa.O proprio EJB3 parece que foi um “esquece tudo e faz denovo” e não exatamente uma evolução. (ou não?)
Não quero soar rude, mas por acaso você entende de engenharia contemporânea para afirmar sobre o ciclo de vida da tecnologia de ponta usada?
Se você comparar a área de software com a de aeronautica, por exemplo, vai notar que sempre que um avião é colocado em produção todos os demais projetos estão usando tecnologia muito além.
entendo, eu me formei em engenharia no cea/ufmg.
Cara, um projeto desses (não experimental) para entrar em produção demora 10, 15 anos… (menos de 6 é impossível, não dá tempo nem de homologar) Se voce pesquisar, vai ver que 99% dos aviões usam fortran nos avionicos. Inclusive, o projeto ao qual me referi é fortran. Dava pra usar java? Sem manager, dava. O problema é que não existe homologacao para isso. Até esses CIs que voce compra (tipo 7404) tem a versão normal e a versão para uso critico. Podem ser a mesma merda, mas uma custa 2000x mais caro, devido ao custo dos testes. Ninguem homologou java ainda, e devido ao custo disso, acho que nunca vão homologar.
Se é um framework que está te deixando infeliz com o seu trabalho, então sim, trocar de emprego por causa de um framework.
A engenharia também muda, mas existem conceitos básicos que NÃO se alteram, no entanto também as tecnologias utilizadas na engenharia, são mais estáveis justamente por serem na maioria das vezes estruturas rígidas, como casa, edifícios, ferrovias, máquinas, etc… E eles não são tão dinâmicos quanto o pessoal da computação, olha só , acho que 90% das pessoas usam AutoCad … e irão morrer usando AutoCad … Já na computação as coisas são mais maleáveis, dinâmicas e ágeis.
Durante um bom tempo você ainda vai construir aplicações usando MVC, DPs, Refactorings, etc…
Por exemplo , o Spring MVC, se basea em MVC que o Struts arduamente implementou.
Vc pode migrar EJB2.1 pra EJB3 sem muitos problemas.
Concordo com você que uma empresa que a 3 anos atrás investiu em Struts, hoje fica com certo receio de modificar grandes legados, mas quem acaba perdendo é a própria empresa que não investe em pesquisa e desenvolvimento (coisa raríssima hoje em dia nas empresas).
Conversei com um colega meu hoje e ele me falou que a empresa que ele está trabalhando, está migrando o framework de 5 anos de existência, que a empresa desenvolveu para JSF.
Estou trabalhando para uma empresa onde a política do que se tem a um tempo não se mexe, mas do que irá se criar do nada, usa-se então tecnologias novas que sejam “melhores” que as antigas.
E acho essa política boa em quase todos os modos.
mas deve tomar cuidado quando a coisa ficar “deprecated” e a atualização for realmente necessária.
Por exemplo, tenho a impressao que o Hibernate, como é, está chegando ao fim. Sera apenas uma implementacao de persistencia para especificacoes jsr que já existem. (j pesistence api, etc)
Se voce for escrever um livro sobre HQL, melhor desistir. Antes dele ficar pronto pode ser que HQL vire dinossauro. ( ou não, sei lá… acontece cada coisa doida)
Aí voce tem um monstro que usa 3 toneladas de .hbm + 1 milhao de hqls, e agora? Voce tá na mão da boa vontade da red hat.
Huh?
fabricio … nao foi apenas o numero de versao que mudou do EJB2.1 para o 3 … acho q vc precisa dar uma pesquisada por ai …
Vc pode migrar EJB2.1 pra EJB3 sem muitos problemas.
Huh?
sem ‘muitos’ problemas, não quer dizer ausência

eu sei ejb2, comecei a mexer com ejb3 em casa, cara… eu considero como se fossem duas coisas diferentes. Parecidas, mas diferentes, ehehee.
Vc pode migrar EJB2.1 pra EJB3 sem muitos problemas.
fabricio … nao foi apenas o numero de versao que mudou do EJB2.1 para o 3 … acho q vc precisa dar uma pesquisada por ai …
Ok
sem ‘muitos’ problemas, não quer dizer ausência![]()
Qualquer aplicação grande (e se tratando de EJB mesmo as aplicações pequenas foram construídas como se fossem enoooormes) vai ter centenas de problemas para migrar para EJB 3.
O único caso que imagino que migrar de EJB 2.1 pra 3.0 seria simples é com sistemas que nem precisavam de EJB 2.1 e são, no fundo, simples. Mesmo neste caso migrar é apenas uma opção, refazer talvez seja mais útil já que ambas se baseiam em trabalho manual e os paradigmas são completamente diferentes.
Esse artigo que você linkou mostra basicamente as diferenças entre um e outro. Migração é muito mais que isso.
mesmo pelo artigo, praticamente nao da pra comparar o 2.1 com 3.
Na verdade, não sei o que eles tinham na cabeça quando aprovaram esse trambolho do 2
O trambolho do 1?
graças a deus nunca tive contato com o 1
ehhehehhe
“Simplesmente”?
Aprender uma linguagem de programação bizarra como LISP (Aprender mesmo!) vai lhe fazer muito melhor do que entender quantos documentos você precisa preencher pra ter o direito pra abrir a sua IDE todos os dias de manhã no PMI :lol:
por isso as aspas!!! 