Blog do Urubatan
msgbartop
Desenvolvedor, Arquiteto, Palestrante, Coordenador do RSJUG, Patinador e Blogger
msgbarbottom

25 Jun 09 Um especialista precisa saber um pouco de cada coisa

Para quem acha que o título deste post esta contraditório, lamento informar, mas você esta completamente equivocado.
Você conhece algum especialista? De preferência algum que esteja ai pertinho de você.
Se conhece por exemplo um especialista em Java ou .NET, chega pra ele e pergunta se ele conhece algum dos seguintes assuntos:

  • XML
  • Expressões Regulares
  • HTML
  • XHTML
  • Javascript
  • Modelos de Threading
  • Como funciona uma CPU
  • Para que serve um sistema operacional
  • O que é e para que serve uma “Maquina Virtual”
  • Flash
  • XSD
  • XPath
  • SQL
  • Estrutura de bancos de dados
  • TCP/IP
  • Sockets

Acredito que a resposta vai ser sim para todos, ou pelo menos a grande maior parte destes itens. E isto são só coisas genéricas, imagina se começarmos a detalhar a sopa de letrinhas existente no mundo Java EE ou no .NET.
Pois é mais ou menos isto que estou querendo dizer, um especialista precisa saber um monte de coisas para se tornar um especialista em uma delas.
A forma mais fácil que eu conheço para melhorar muito e muito rápido a qualidade do código que você escreve em uma linguagem é aprendendo outra linguagem de programação.
Tem gente que diz que o ideal é aprender uma linguagem nova por ano, e com certeza, o período da minha vida profissional que eu mais melhorei foi quando aprendi várias linguagens em um período curto de tempo.
Quando eu era mais novo (coisa de velho escrever isto :D ) o meu chefe na época disse que um especialista é alguem que sabe cada vez mais sobre cada vez menos, e que um super especialista é alguem que sabe absolutamente tudo sobre absolutamente nada …
Ach oque este conceito esta um pouco desatualizado, até por que por este conceito, um super especialista é o cara que sabe absolutamente tudo sobre absolutamente nada.

Pelo menos na minha opinião, eu espero que um especialista em Java por exemplo, consiga criar um pacote EAR padrão Java EE para uma aplicação composta por dois módulos web e três módulos EJB além de algumas bibliotecas utilizadas por todos os módulos.
Para fazer isto, o cara vai ter que conhecer no mínimo muito XML, vai ter que saber o que são meta dados, vai ter que saber quais meta dados foram definidos via anotações no código e quais ele vai querer sobre escrever com XML. Vai ter que conhecer a estrutura de um arquivo EAR, a estrutura de um arquivo WAR e qual a diferença entre um arquivo jar de uma biblioteca e de um módulo EJB.
Para entender direito o que ele ta fazendo, ele vai ter que conhecer o protocolo HTTP, por conseqüência o protocolo TCP e o IP. Além de precisar entender de RMI que é utilizado para chamada dos EJBs, RMI também funciona sobre TCP.
Se o servidor for rodar em cluster, é necessário saber como este cluster esta configurado, a maior parte dos servidores Java EE utiliza o protocolo IIOP/IP, o mesmo do corba, já que pela especificação Java EE todo EJB pode ser chamado utilizando CORBA também, e que o IIOP/IP permite roteamento muito mais fácil do que o RMI direto.
E isto tudo só para começar.
Se o especialista em java precisar também configurar o servidor de aplicações também ai aumenta bastante a quantidade de coisas que ele vai ter que saber só para poder ser chamado de especialista em Java e nem chegamos na parte de desenvolvimento ainda …
Claro que isto ainda é só a minha opinião, mas para ser um especialista em java, o cara tem que saber muito bem Orientação a Objetos, Reflexão, Refactoring e mais Refactoring, AOP, a diferença entre excessões checadas e não checadas, para que serve cada tipo de collection, todas as classes no mínimo dos pacotes java.lang e java.util e mais um monte de outras coisas.

Só para finalizar.
Vocês não vão conseguir se tornar especialistas em nada da noite para o dia. Isto vai demorar bastante, e mesmo que você queira ser especialista em .NET por exemplo, você vai ter que estudar muitas outras coisas.
A pior coisa que tem é programador bitolado que acha que a única linguagem/ferramenta/time/religião que presta é a que ele conhece agora …
(isto foi um misto de dicas com desabafo :D )

If you enjoyed this post, make sure you subscribe to my RSS feed!

Tags: , ,

Reader's Comments

  1. |

    Devemos lembrar também do LINUX, tem muito profissional de TI, que ainda treme diante de um console, oque é um erro muito grande. Se voce trabalha com windows, pq não utilizar unix, mac, linux ? É uma vantagem enorme saber um pouco de tudo, mesmo q seja impossivel saber 100% … mas saber o caminho já ajuda !

    Reply to this comment
  2. |

    Só porque tá aprendendo rails :D

    Reply to this comment
    • |

      Pior que não é por causa do Rails, desde que comecei a programar com Delphi, já programei em C++, Visual Basic, PHP, ASP, Leather, Assembly, ColdFusion, Power Builder, SQL, Javascript, HTML, XML, ….
      E tenho certeza de que cada vez que aprendo uma linguagem nova me torno um desenvolvedor melhor :D

      Reply to this comment
  3. |

    Com sua permissão, assino embaixo.
    Abraço.

    Reply to this comment
  4. |

    Cara, muito bom seu artigo e a forma como você atacou assuntos tão importantes.
    Eu só não entendi como um programador/desenvolvedor pode programar melhor (com mais qualidade) aprendendo mais uma linguagem de programação. Eu vim do Basic, passei pelo Assembly, Clipper, Delphi e hoje estou com o Java. Meus códigos só melhoraram na questão da qualidade quando comecei a estudar Eng. de Software de forma mais séria.
    Realmente não entendo como um desenvolvedor Java, por exemplo, pode criar códigos de maior qualidade depois que estudar Python, por exemplo.
    Entenda que não estou fazendo uma crítica com relação a saber mais de uma linguagem (sair do bitolamento), pois acredito que isso seja bom para, por exemplo, aumentar seu leque de informações perante um problema (tem um post recente muito bom na Caelum sobre isso – do Paulo Silveira).
    Abraços.

    Reply to this comment
    • |

      Você começou no basic, quando aprendeu Assembly, com certeza a utilização de memória dos teus códigos em basic melhorou.
      no clipper deve ter vindo um pouco de flexibilidade e criatividade no acesso a dados (com aqueles indices malucos, criatividade é o mínimo esperado).
      No delphi, exceto se você ficasse só arrastando componentes, deve ter começado a aprender orientação a objetos, e se lembrou do assembly quando programava em Dephi, deve ter utilizado com criatividade os ponteiros do pascal (eu pegava qualquer objeto, transformava em um ponteiro, depois em um inteiro e guardava isto na propriedade “tag” de qualquer objeto para poder recuperar o valor quando necessário).
      E assim por diante …
      Claro que é possível programar em basic usando delphi, e neste caso não se aprenderia nada, mas fora esta situação, aprender um paradigma novo faz o teu código nas outras linguagens melhorar :D
      Hoje meu código assembly utiliza macros para se organizar como código estruturado do pascal (não do object pascal do delphi, pascal mesmo), e isto faz o meu código assembly ser mais legível :D
      Entendeu o que eu quis dizer?

      Reply to this comment
  5. |

    Ótimas dicas, falou tudo !

    Reply to this comment
  6. |

    Entendi… explicação perfeita.

    Parabéns pelo post e pela aula!

    Reply to this comment
  7. |

    ola depois de tantas pessoas baterem na tecla que um programador tem que aprender uma linguagem por ano resolvi sair do normal!!
    mas 1 acada dois anos assim eu irei aprende la bem !!
    php e java ja foram agora é a hora do ruby comprei seu livro para aprender o framework rails depois e logico
    abraço t+

    Reply to this comment
  8. |

    Concordo com tudo dito pelo Urubatan, e em um ponto concordo com Celso Martins: Não sei se é possível um programador Java conhecer Python e escrever códigos melhores em Java!.

    E quanto as linguagens, acho que tudo tem seu tempo. Eu como iniciante não pretendo aprender Fortran ou Delphi(5 linhas no fortran para escrever um ‘helloworld’, o que se faz em python e ruby com 1)mas sim estudar linguagens que eu considero realmente significantes. Vai a lista:

    *C
    *C++
    *Java => Mal necessário
    *Python
    *Ruby
    *Perl
    *PHP
    *Scala

    Reply to this comment
  9. |

    Concordo plenamente ! Já encaminhei para os colegas ! Mas gostaria de acrecentar que analista deveriam seguir o mesmo caminho, vejo que ainda segue o modelo em cascata e não fazem a mínima idéia das várias metodologias que se fala atualmente, ou pior, já ouviram falar mas não entendem, ou não querem entender. Não estou generalizando, mas como disse o urubatan, também serve como um desabafo.
    abraço a todos.

    Reply to this comment
  10. |

    Parabéns pela aula. Aprender uma linguagem por ano deve ser demais. Mas, será que realmente aprende de verdade, ou apenas consegue fazer duas ou três coisas? Não estou falando mal dos comentários, por favor não me entendam errado! É que pelo menos com java, que estou estudando a um pouco mais de um ano, ainda não tenho coragem de dizer “Eu sei programar em Java” porque quanto mais eu estudo a linguagem, mais eu vejo que preciso me dedicar. Então eu acho que o correto seria dizer “Conhecer outras linguagens!” saber o que elas possuem de vantajoso e o que elas deixam a desejar! Também não sou um programado bitolado, mas acho que um bom programador deve conhecer a fundo a linguagem com que trabalha, se dedicar mesmo em aprender, conhecer, compartilhar o que sabe… E sempre que tiver um tempo, se aventurar a conhecer um outro ambiente, sem ficar maluco em “programar” em tudo quanto é tipo de linguagem, se não você nunca será realmente bom em nada, sempre será um “quebra galho” em Java, .NET, C, C++ etc…
    Um grande abraço a todos! E parabens pelo Blog.
    Deus abençõe.!

    Reply to this comment
  11. |

    Concordo com o Gleyson. Mesmo porque cada linguagem/plataforma tem um universo de apis e frameworks a serem desvendados. Veja o Java e o .NET por exemplo.

    Reply to this comment

Leave a Comment