Recomende-me uma Linguagem [Off-Topic]

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.

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…

Olá:

Neste momento a moda é falar de linguagens de script, visto a incorporação da API de scripting no Java. Se for basear-se nisso, talvez seja interessante dar uma olhada em Ruby (bastante valorizada pelo pessoal do GUJ), Groovy, Jython, entre outras.

Grato,

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).

[quote=louds]
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.[/quote]

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 …

[quote=Samuel_Pessorrusso]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…
[/quote]

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:

[quote=lucao]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.[/quote]

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''

[quote=boaglio]
Esse site aqui é bem legal, tem a implementação do mesmo programa
em quase 1000 linguagens de programação:[/quote]

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: [/quote]

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: [/quote]

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!?