quarta-feira, 29 de agosto de 2012

As próximas cinco linguagens para você aprender... e por quê?

O título desse post é o mesmo de uma palestra ministrada pelo professor Fernando Castor do CIN-UFPE. Na palestra, ele aborda toda a problemática de comparar as diversas linguagens de programação. Dizer qual é a melhor linguagem de programação ou mais usada não são perguntas fáceis de responder. Para definir as próximas cinco linguagens que você deve aprender, o palestrante considerou os seguintes aspectos:


  1. Primeira linguagem de programacão para aprender
  2. Linguagem Pós-Java
  3. Programacão multi-núcleo e sistemas confiáveis
  4. Desenvolvimento para a Web
  5. Software de baixo nível e de alto desempenho

Primeira linguagem de programacão para aprender
Escolhida: Python
Outras: Lua, Groovy e Ruby
Motivos:
  • Sintaxe amigável
  • Dinamicamente tipicada
  • Multiparadigma
  • Muito popular na prática
  • Usada como primeira linguagem em v ários cursos de computa cão
O grande trunfo da linguagem Python é a sua legibilidade. Além disso,a linguagem Python tem estrutura de dados nativas poderosas e otimizadas (lista, hash, string).  Uma característica interessante do Python é que muitos operadores funcionam de maneira similar em todas as sequências. Um bom exemplo de ortogonalidade dos
operadores.

STRING
LISTA
TUPLA

 Operação        
 Operação        
 Operação        
interpretação
  s1 + s2          
L1 + L2      
t1 + t2    
Concatenação
  s1 * 3         
L1 * 3       
t1 * 3                 
Repetição
  s1[i]            
L1[i]        
t1[i],t2[i][j]
Indice
  s1[i:j]          
L1[i:j]      
t1[i:j]        
Fatia (slice)
  len(s1)          
len(L1)      
len(t1)        
Tamanho(length)
 for x in s1      
for x in L1  
for x in t1    
Iteração
  'm' in s1        
3 in L1      
for 3 in t1  
(Pertinência)Membership

Essa caracteristica facilita o aprendizado e faz com que os chutes geralmente sejam certos.

A filosofia do Python
Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Plano é melhor que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o bastante para se quebrar as regras.
Embora a simplicidade supere o purismo.
Erros nunca deveriam passar silenciosamente.
A menos que explicitamente silenciados.
Ao encarar a ambiguidade, recuse a tentação de adivinhar.
Deveria haver uma – e preferencialmente apenas uma – maneira óbvia de se fazer isto.
Embora aquela maneira possa não ser óbvia à primeira vista se você não for holandês.
Agora é melhor que nunca.
Embora nunca, seja muitas vezes melhor que pra .
Se a implementação é difícil de explicar, é uma má idéia.
Se a implementação é fácil de explicar, pode ser uma boa idéia.
Namespaces são uma idéia estupenda – vamos fazer mais deles!


Referências:

Linguagem Pós-Java
Linguagem Escolhida: Scala
A idéia é escolher uma linguagem que utilize a plataforma Java mas não utilize a linguagem Java. Mais ou menos como acontece com a plataforma .NET que suporta várias linguagens. 
  • Compatibilidade retroativa com Java: roda na JVM
  • Menos verborrágica
  • Inclui inferência de tipos!
  • Imperativa, OO, funcional e concorrente.
Programa cão multi-núcleo e sistemas confiáveis
Escolhida: Erlang
Motivos:
  • Filosofia Let It Crash
  • Puramente funcional e sem estado compartilhado
  • Processos leves  unidades nas de quebra de trabalho
  • Concorrência e distribuicão são inerentes a linguagem e impossível construir sistemas não-triviais ignorando isso
Desenvolvimento para a Web
Premissas: 
  • JavaScript é a linguagem Assembly para web
  • JavaScript tem várias falhas.
  • Entender o escopo de JavaScript é complicado
Escolhida: DART

Motivos:
  • Menos caos
  • sem protótipos, objeto global ou atributos adicionados dinamicamente
  • Possibilidade de usar anotacões de tipo
  • Escopos intuitivos, baseados em blocos
  • Compilável para JavaScript
  • Desenvolvida pelo Google


Links:

Software de baixo nível e de alto desempenho

Premissas:
  • a linguagem permite ter acesso direto a memória RAM
  • a linguagem permite  gerenciamento memória manualmente
  • a linguagem permite  guardar valores de variáveis explicitamente em registradores
  • a linguagem produz código extremamente e ficiente
  • a linguagem faz isso tudo  de forma portável?
Escolhida: C

Motivos:
  • Porque permite tudo mencionado nas premissas
  • Porque é muito menos complexa que C++
  • Porque Assembly s ó é uma opção quando e a unica opção
  • Gerenciamento de memória manual
  • Tipificação fraca
  • Manipulação de ponteiros é fundamental mesmo para as operações mais básicas, complexa e insegura
  • ausência de suporte decente a programação paralela
Até as características negativa da linguagem C fornecem lições importantes. Leia esse artigo:

Flamewar:
Nilo Araújo: o texto fala que C fornece a opcao de guardar valores diretamente em registradores. Ate onde eu sei, entretanto, é que voce pode PEDIR isso, mas o sistema pode nao atender se nao quiser..

Resposta:

A palavra reservada register é modificador que avisa para o compilador que ele deve usar o registrador mesmo quando a opção de otimização está desabilitada. Quando a opção de otimização está habilitada, o compilador ignora o seu pedido e faz o que ele quer. 
http://tigcc.ticalc.org/doc/keywords.html#register

GNU C tem uma extensão que permite a manipulação explícita da seguinte maneira: 

register int *foo asm ("a3");

Observe que esta notação é cpu-dependente , você precisa saber o nome do registrador.

http://tigcc.ticalc.org/doc/gnuexts.html#SEC98


Links:
http://meiobit.com/107326/no-o-sistema-operacional-da-curiosity-no-linux-mas-voc-provavelmente-j-o-usou/

2 comentários:

geovanny disse...

Assistir a palestra desse rapaz semana passada sobre esse assunto. Acho que a palestra era no Campus Party.

Anônimo disse...

ohhhh