Conselhos dos gringos: Até que ponto devo seguir?

Mas esse é exatamente meu ponto. Vejo muita moçada nova saindo xiita em uma tecnologia quando sai da faculdade. Ficam maravilhados em como aquela tecnologia tem frameworks para resolver todos os seus problemas.

Brincar de playmobil é diferente de escrever software. Especialmente se você quiser ir para os softwares complexos.

Finalmente, vale lembrar que além da tecnologia existem as práticas: código unitário, saber usar bem o debugger, um profiler, conhecer uma ampla gama de algoritmos e ser capaz de identificar no dia-a-dia as situações onde você pode usá-los, saber estimar as tarefas, saber onde, de que tipo e como gerar logs, etc…

PS: Não precisa ir longe para ver que os fundamentos são mais importantes, até porque eles são mais resistentes a mudanças. O livro de design patterns do GOF existe desde 1995, foi feito para C++ e Smalltalk, e ainda exerce muita influência nos dias atuais. Vários conceitos de estruturas de dados, que ainda são usadas, beiram a época do mainframe (como o quicksort, da criado em 1960).

Vejo como exemplo minha saga com banco de dados:

  • Comecei lendo Projeto Banco de Dados do Carlos Alberto Heuser, me senti perdido.

  • Comprei e li o livro Modelagem Lógica de Dados do Eduardo Bernardes, gostei da abordagem mas ainda não o suficiente para conseguir produzir alguma coisa.

  • Comprei o curso de Banco de Dados da Devmedia, lá dizia que Banco de Dados Orientado a Objeto nasceu e morreu quase que no nascimento.

  • Segui o conselho do pessoal aqui do fórum e comecei uma faculdade, lá eu vi que o Modelo Relacional é importante, mas o pulo do gato está no Modelo Lógico e Modelo Físico. Meu professor também mostrou Banco de Dados Orientado a Objeto essa semana, vou criticá-lo por ter aprendido inicialmente que isso está morto? Penso que não, afinal não há verdade absoluta nesse meio (TI), tudo que surge é para resolver problemas. O que tem de mais atual hoje é REST (como tecnologia) e AngularJS com uma nova visão, correto? Isso faz com que aplicações feitas em outras tecnologias, que possivelmente era o que tinha de melhor na época, feito da maneira correta, com código de qualidade, seguindo a especificação, seja obsoleta? Eu discordo, meu pensamento quando surge algo “novo” é esperar um pouco para ver onde vai dar e ai sim começar um movimento naquela direção, mas não simplesmente abandonar o que é considerado obsoleto e partir como um caminhão sem freio para o “atual”.

A maioria de vocês sabem, eu sou novo em programação, mas cuido de coisas relacionadas a computação desde meus 11 anos de idade, por isso pergunto: meu pensamento é muito incorreto?

[quote=fggs]Vejo como exemplo minha saga com banco de dados:

  • Comecei lendo Projeto Banco de Dados do Carlos Alberto Heuser, me senti perdido.

  • Comprei e li o livro Modelagem Lógica de Dados do Eduardo Bernardes, gostei da abordagem mas ainda não o suficiente para conseguir produzir alguma coisa.

  • Comprei o curso de Banco de Dados da Devmedia, lá dizia que Banco de Dados Orientado a Objeto nasceu e morreu quase que no nascimento.

  • Segui o conselho do pessoal aqui do fórum e comecei uma faculdade, lá eu vi que o Modelo Relacional é importante, mas o pulo do gato está no Modelo Lógico e Modelo Físico. Meu professor também mostrou Banco de Dados Orientado a Objeto essa semana, vou criticá-lo por ter aprendido inicialmente que isso está morto? Penso que não, afinal não há verdade absoluta nesse meio (TI), tudo que surge é para resolver problemas. O que tem de mais atual hoje é REST (como tecnologia) e AngularJS com uma nova visão, correto? Isso faz com que aplicações feitas em outras tecnologias, que possivelmente era o que tinha de melhor na época, feito da maneira correta, com código de qualidade, seguindo a especificação, seja obsoleta? Eu discordo, meu pensamento quando surge algo “novo” é esperar um pouco para ver onde vai dar e ai sim começar um movimento naquela direção, mas não simplesmente abandonar o que é considerado obsoleto e partir como um caminhão sem freio para o “atual”.

A maioria de vocês sabem, eu sou novo em programação, mas cuido de coisas relacionadas a computação desde meus 11 anos de idade, por isso pergunto: meu pensamento é muito incorreto?[/quote]

Não. As vezes entender o que teve de bom durante a pesquisa de uma tecnologia morta, e o que levou ela a morrer é tão útil quanto estudar uma tecnologia viva. Até porque, algumas tecnologias novas e que estão se tornando populares (como o MongoDB) são produtos de uma abordagem diferente para resolução do mesmo problema. Mesmo sendo novas, ainda compartilham muitas características em comum com seus antecessores falecidos.

Planejamento financeiro > planejamento de carreira.[/quote]

Certamente ! Planejamento de Carreira sem o Planejamento Financeiro não seria possível pois não teria como bancar faculdade , cursos de especialização , livros e as viagens que fiz pois ninguem é de ferro :slight_smile:
[/quote]
Se fez tudo isso, o que não pode ser considerado planejamento de carreira?[/quote]

Você não precisa “planejar carreira” pra vislumbrar uma possibilidade de retorno financeiro numa determinada tecnologia (no caso Delphi) e aproveitar a oportunidade. Foi isso que ele fez. Não sei de onde você tirou que isso é planejamento de carreira? Na verdade, ele disse que nem programa mais… :confused:
[/quote]
Você é que não leu o que ele postou, neste e depois.[/quote]

Planejamento financeiro + planejamento de carreira = Sucesso

[quote=ViniGodoy]
Mas esse é exatamente meu ponto. Vejo muita moçada nova saindo xiita em uma tecnologia quando sai da faculdade. Ficam maravilhados em como aquela tecnologia tem frameworks para resolver todos os seus problemas. [/quote]

Não vejo motivo pra ninguém ficar deprimido tb.

Qualquer principiante escreve software complexo. O negócio é escrever software simples e modular. Mas aquele que pagar mais ta bom pra mim. :slight_smile:

[quote]
PS: Não precisa ir longe para ver que os fundamentos são mais importantes, até porque eles são mais resistentes a mudanças. O livro de design patterns do GOF existe desde 1995, foi feito para C++ e Smalltalk, e ainda exerce muita influência nos dias atuais. Vários conceitos de estruturas de dados, que ainda são usadas, beiram a época do mainframe (como o quicksort, da criado em 1960). [/quote]

Se é resistente a mudança não existe pressa pra quem está começando aprender depois, na medida que vai ganhando experiência. Até pq ela não vai conseguir provar o valor de mercado do seu conhecimento da teoria, só depois, na medida que desenvolver um portfólio/network, e até lá o “fundamental” mudou, pode acontecer apesar de levar alguns anos a mais que franeworks, nem todos os conceitos na tecnologia duram uma carreira inteira.

[quote=Júlio Murta]Em T.I podemos ter dois direcionamentos principais : gerencial e técnico. Eu sempre tive mais interesse pelo lado técnico, então sempre me foquei mais em aprender programação do regra negócio. E mais, eu sempre me foquei em uma tecnologia específica. Não que eu saiba apenas aquela tecnologia, mas eu tentei aprender o máximo com ela. Afinal, sempre considerei que melhor que saber fazer um CRUD em 10 linguagens é saber fazer de tudo com uma linguagem.

Porém, atualmente eu estou começando a ter problemas com essa abordagem. Eu dei totalmente as costas para Java, PHP, Ruby e as demais linguagens, e sinto que com isso reduzi minhas oportunidades de colocação no mercado.

Atualmente também estou querendo aprender regra de negócio.
[/quote]

Você pode ficar trabalhando numa tecnologia atual e acompanhando por alto as demais cogitadas. Quem trabalha por exemplo em ASP.NET MVC/Web.Api, está na mesma onda que Java com Spring MVC, PHP com Zend Framework, Ruby com Rails, etc, pois seguem as mesmas abordagens. Então nestes casos que voce citou seria mais você se adaptar as particularidades de cada linguagem e plataforma. Mais complicado é quem fica em mundos ilhados como JSF, WebForms, GWT, etc.

O mais importante mesmo é ir ganhando experiencia em resolver problemas para o cliente, independente da tecnologia, desde um Excel gerado na hora por SQL pra atender um decreto extraordinário ou até participar na melhoria de processo do Negócio. Em sistemas de informações tecnologia é só o meio. No dia a dia com pessoas mais antigas se aprende as partes mais avançadas. Com o tempo vai ver que tecnologias vem e vão, onde você vai mudar conforme aproveitar oportunidades melhores.

O Negócio se aprende melhor analisando a rotina dos clientes envolvidos. Livros são muito genéricos.

Graças a Deus eu não posso me considerar ilhado a JSF, apesar de estar aprendendo JSP que é ainda mais antigo, mas não é uma coisa que eu pensei “Nossa, que legal! Quero aprender isso”, eu vejo como uma maneira de entender um fluxo, no meu caso o MVC.

A apostila FJ-21 me deu várias dicas importantes que posso aplicar em outras tecnologias. É do meu entendimento terminar a apostila para fechar um conceito antes de conhecer outro, até para ver as diferenças de forma clara, o que evoluiu, que problema foi resolvido, porque tal coisa não é mais utilizada.

A única coisa que realmente fez meus olhos brilharem foi quando vi o PrimeFaces, mas não pela tecnologia, mas pela beleza mesmo do visual, só que isso mudou quando vi que jQuery UI tem coisas muito semelhantes, com uma linguagem mais simples e menos caixa preta. Se eu ainda tenho vontade de aprender JSF/PrimeFaces? Tenho sim! Assim como tenho vontade de ver esse tal de AngularJS, entre muitas outras coisas que ouvi falar.

Supondo que eu me sinta tão bem com o PrimeFaces e ganhe muito em produtividade, não vejo problema em executar um projeto com prazo curto para alguém, mesmo sabendo que é algo caindo em desuso, faz sentido as coisas que eu disse?

E pra quem não tem bola de cristal:

Planejamento financeiro + estar atualizado com novas tecnologias = Sucesso

[quote=fggs]Graças a Deus eu não posso me considerar ilhado a JSF, apesar de estar aprendendo JSP que é ainda mais antigo, mas não é uma coisa que eu pensei “Nossa, que legal! Quero aprender isso”, eu vejo como uma maneira de entender um fluxo, no meu caso o MVC.

A apostila FJ-21 me deu várias dicas importantes que posso aplicar em outras tecnologias. É do meu entendimento terminar a apostila para fechar um conceito antes de conhecer outro, até para ver as diferenças de forma clara, o que evoluiu, que problema foi resolvido, porque tal coisa não é mais utilizada.

A única coisa que realmente fez meus olhos brilharem foi quando vi o PrimeFaces, mas não pela tecnologia, mas pela beleza mesmo do visual, só que isso mudou quando vi que jQuery UI tem coisas muito semelhantes, com uma linguagem mais simples e menos caixa preta. Se eu ainda tenho vontade de aprender JSF/PrimeFaces? Tenho sim! Assim como tenho vontade de ver esse tal de AngularJS, entre muitas outras coisas que ouvi falar.

Supondo que eu me sinta tão bem com o PrimeFaces e ganhe muito em produtividade, não vejo problema em executar um projeto com prazo curto para alguém, mesmo sabendo que é algo caindo em desuso, faz sentido as coisas que eu disse?[/quote]

Trabalhar com tecnologia que está caindo em desuso não é uma boa idéia, se você espera obter retorno financeiro, a não ser que seja uma tecnologia que alguma indústria depende. Mas acho que não é o caso de tecnologias para criação de aplicações front-end na web.

Software complexo != código complicado.

[quote=fggs]Graças a Deus eu não posso me considerar ilhado a JSF, apesar de estar aprendendo JSP que é ainda mais antigo, mas não é uma coisa que eu pensei “Nossa, que legal! Quero aprender isso”, eu vejo como uma maneira de entender um fluxo, no meu caso o MVC.

A apostila FJ-21 me deu várias dicas importantes que posso aplicar em outras tecnologias. É do meu entendimento terminar a apostila para fechar um conceito antes de conhecer outro, até para ver as diferenças de forma clara, o que evoluiu, que problema foi resolvido, porque tal coisa não é mais utilizada.

A única coisa que realmente fez meus olhos brilharem foi quando vi o PrimeFaces, mas não pela tecnologia, mas pela beleza mesmo do visual, só que isso mudou quando vi que jQuery UI tem coisas muito semelhantes, com uma linguagem mais simples e menos caixa preta. Se eu ainda tenho vontade de aprender JSF/PrimeFaces? Tenho sim! Assim como tenho vontade de ver esse tal de AngularJS, entre muitas outras coisas que ouvi falar.

Supondo que eu me sinta tão bem com o PrimeFaces e ganhe muito em produtividade, não vejo problema em executar um projeto com prazo curto para alguém, mesmo sabendo que é algo caindo em desuso, faz sentido as coisas que eu disse?[/quote]
É por ai mesmo, investir mais em algo seguido por várias plataformas em evidência. Usando REST com um framework MVC JavaScript por exemplo o desenvolvimento do lado client fica igual para todas as plataformas do lado servidor, se considerado aplicação web HTML.

Geralmente é uma ilusão esse prazo curto de entrega ao usar soluções particulares e amarradas como Primefaces. Geralmente é pensando só na fase de desenvolvimento inicial.

[quote=A H Gusukuma][quote=ImpossiveI][quote=A H Gusukuma]
Continua estudando e se esforçando que um dia, quem sabe, você consegue…[/quote]

O quê? negócios? tecnologia? teoria?[/quote]

Depende do seu interesse e/ou necessidade.[/quote]

Isso é o que não pode ser chamado planejar carreira?

Software complexo != código complicado.

[/quote]

Então o que seria software complexo?

O pessoal daqui (NZ) tem uma boa fundacao teorica, universidades sao de boa qualidade com bons professores (bem pagos).
Muitos dos estudantes de TI depois de terminar a universidade acabam indo para o UK / AUS / USA.

Alguns livros que recomendo pro pessoal aqui:
http://www.amazon.com/gp/product/0132350882 (Clean Code)
http://www.amazon.com/gp/product/0201485672 (Refactoring)
http://www.amazon.com/gp/product/020161622X (The Pragmatic Programmer)
http://www.amazon.com/gp/product/1934356344 (The Passionate Programmer)

Espero que ajude :slight_smile:

[quote=keller]O pessoal daqui (NZ) tem uma boa fundacao teorica, universidades sao de boa qualidade com bons professores (bem pagos).
Muitos dos estudantes de TI depois de terminar a universidade acabam indo para o UK / AUS / USA.

Alguns livros que recomendo pro pessoal aqui:
http://www.amazon.com/gp/product/0132350882 (Clean Code)
http://www.amazon.com/gp/product/0201485672 (Refactoring)
http://www.amazon.com/gp/product/020161622X (The Pragmatic Programmer)
http://www.amazon.com/gp/product/1934356344 (The Passionate Programmer)

Espero que ajude :)[/quote]

Em algum momento você se sentiu abaixo da média diante os programadores neozelandeses?

[quote=Júlio Murta][quote=keller]O pessoal daqui (NZ) tem uma boa fundacao teorica, universidades sao de boa qualidade com bons professores (bem pagos).
Muitos dos estudantes de TI depois de terminar a universidade acabam indo para o UK / AUS / USA.

Alguns livros que recomendo pro pessoal aqui:
http://www.amazon.com/gp/product/0132350882 (Clean Code)
http://www.amazon.com/gp/product/0201485672 (Refactoring)
http://www.amazon.com/gp/product/020161622X (The Pragmatic Programmer)
http://www.amazon.com/gp/product/1934356344 (The Passionate Programmer)

Espero que ajude :)[/quote]

Em algum momento você se sentiu abaixo da média diante os programadores neozelandeses?[/quote]

pelo que entendi eles estão trabalhando na UK / AUS / USA.

Discussão interessante e que foi bem longe. Vou dar o meu pitaco também. :slight_smile:

Estamos atrasados em relação aos gringos?

Começando do começo, no geral os “gringos” (incluindo USA, UK, AUS, NZ, mas não limitado a estes) são sim mais avançados em termos de tecnologia do que nós. Claro, essa afirmação exige um contexto.

Primeiro, que em países desenvolvidos o acesso à tecnologia de ponto é muito mais fácil. Só para citar um exemplo básico, aqui no Brasil vai ser muito mais difícil alguém decidir desenvolver para iPhone por causa do custo do equipamento.

Segundo, países como EUA tentem a ter um mercado muito mais competitivo que o nosso. Não quero entrar em discussões políticas, mas para o bem ou para o mau, as empresas, o mercado e o trabalhador no Brasil são muito mais protegidos do que em países onde o empregador pode fazer um contrato específico com o empregado.

Obviamente aqui no Brasil temos pessoas excelentes, que certamente ultrapassam em muito o nível médio mundial do desenvolvedor de Software. Dois exemplos que posso citar estão presentes aqui nesta discussão, o Vini e o Hebert.

Mas no geral, acabamos seguindo muitas coisas de fora porque temos mais dificuldades de chegar à crista da onda. Os gringos tem mais tempo e recursos para investir em novas tecnologias, estudos e projetos. Quantas pessoas aqui tem tempo para, além do trabalho normal, fazer diversos experimentos técnicos ou humanos como os idealizadores de frameworks, metodologias e afins?

Como alguns já sabem em breve estou indo trabalhar na Atlassian, na Austrália. Já havia tentado uma vaga na Amazon em Seattle, WA, mas não consegui. O nível de ambas as entrevistas é incomparável com tudo o que já vi no Brasil. Primeiro, lá você passa, no mínimo por 4 entrevistas técnicas com vários membros da equipe. Os desenvolvedores e gerentes que me entrevistaram, todos demonstraram conhecimentos profundos em aspectos diversos. Mesmo sendo já experiente e bem fundamentado em computação tive dificuldades. E se eles encontrarem qualquer ponto negativo, mesmo que seja um perfil não compatível com a filosofia da empresa, eles vão recusar você. Note que não estou falando das pessoas que escrevem livros ou são conhecidas, são desenvolvedores “comuns”, exceto que de empresas renomadas.

Claro que existem algumas (poucas) empresas de nível mais alto aqui no Brasil, mas na maioria eles nem estão dispostos a investir tanto na entrevista, nem há candidatos o suficiente com um nível muito alto para o salário que pagam e por aí vai.

Não sei de quem é a culpa disso tudo, nem vou arriscar, mas a verdade é que por aqui vejo muita gente boa se acomodando dentro de alguma consultoria e aceitando um salário e uma função ambos medíocres, por vários motivos. Muitos são colocados no mesmo nível de outros desenvolvedores no máximo medianos. As empresas em geral também não fazem questão de diferenciar. As consultorias e fábricas de software, principalmente, estão preocupadas apenas em vender projetos e entregá-los com o menor custo, portanto não faz diferença se você é um programador júnior ou um arquiteto.

Tipos de carreira

Foi mencionado aqui a questão de ter dois tipos de carreira: gerencial e técnica. Na verdade existem muitas outras que podem e fazem parte de empresas de software, por exemplo marketing digital, design de interfaces, usabilidade e experiência do usuário, etc…

De qualquer forma, aqui no Brasil existe quase um tabu de que para crescer na carreira você precisa necessariamente virar um gerente. Muitas tem essa noção de que o bom é quem manda, o resto é ralé e peãozada.

Felizmente estou em uma empresa (GFT) que reconhece em seu plano de carreira oficial os diferentes tipos de competências. Temos 5 planos de carreiras, dentro os quais está o tecnológico, que culmina no papel do arquiteto, assim como o gerencial, o corporativo, de relacionamento com clientes e de negócios. Portanto, existem sim lugares em que você pode crescer no papel técnico sendo uma referência na sua área de expertise.

Claro que isso não é assim tão fácil. Atingir um nível de arquiteto é muito mais difícil do que se tornar um gerente, pois em geral este último depende mais de tempo de experiência e ter um bom de relacionamento interpessoal, enquanto o primeiro precisa se especializar por anos e anos a fio.

Outro problema é que poucas empresas tem um plano de carreira para arquitetos que se equipara com o gerencial. Então os desenvolvedores ficam em segundo plano. Em razão disso, sempre recomendo para quem quer crescer tecnicamente, que escolha uma empresa de tecnologia e não as que vendem homens/hora.

Complexidade vs Complicado

Concordo plenamente com o Vini. Esse conceito é sentido na prática e provado na teoria. Leia o Mythical Man Month do Brooks, de 1975, ele já falava sobre a complexidade inerente do software. Há regras de negócio que são inerentemente complexas e vão resultar em código complexo.

Claro que, se pensarmos em nível de loops e condicionais, nada é realmente complicada, mas se considerarmos o nível de algoritmo, basta ver como existem algoritmos complicados. Você pode ter 50 anos de experiência em programação e conhecer todas as linguagens, mas se alguém lhe pedir para resolver o problema do Caixeiro Viajante, por exemplo, de anda adianta tudo isso. Para um problema complexo, é necessário um algoritmo complexo que, mesmo sendo implementado com um código simples, não é inteligível para a maioria dos programadores.

Porém, mesmo um código extremamente complexo pode ser quebrado em blocos mais simples. Você pode dividir uma implementação muito grande e complexa em diversas módulos, classes e métodos. Cada método por ser ser tão simples quanto um código que alguém no primeiro ano de faculdade pode escrever, porém a complexidade está na forma como os objetos se relacionam, nos padrões arquiteturais adotados e assim por diante.

Especialização em tecnologia

Encontrei várias afirmações muito interessantes neste tópico sobre esse assunto. Eu concordo que quem é bom tecnicamente, possui bom fundamentos e tem experiência na área, não deve e geralmente não fica preso a uma tecnologia. Eu tenho as minhas dúvidas sobre pessoas que só sabem Java, só sabem Ruby ou até só sabem Hasckell. Todos os bons desenvolvedores que conheço sabem se virar com outras tecnologias, mesmo que em geral se especializem mais em uma ou duas.

Ontem mesmo um colega aqui da empresa pegou um projeto pequeno de manutenção de código VBA criado em 1997, em uso até hoje por um setor de uma instituição financeira, e veio me pedir ajuda porque ele não conhecia nada da linguagem. Eu programei em VBA por volta do ano 2000 brincando com o Visual Basic 4/6 fazendo joguinhos. Mesmo assim consegui ajudá-lo a criar um código relativamente complexo, um parser de uma planilha Excel, o qual ficou consideravelmente organizado e flexível, não porque eu lembrasse muito de VBA, mas porque toda a minha carga de programação fez com que não tivesse dificuldade alguma de usar essa linguagem.

Java defasado?

Java não vai virar um Cobol tão cedo porque ele ainda compete com todas as linguagens mais modernas. Eu concordo que a sintaxe da linguagem é verbosa, possui limitações e muitas vezes é desagradável criar certos tipos de estruturas que em outras linguagens você tem abstrações e syntax sugars bem legais.

Porém, a vantagem do Java é que ele é fácil de aprender, justamente pela sintaxe não permitir construções absurdamente complexas como em linguagens funcionais. E mesmo que você queira fazer isso, você pode rodar praticamente qualquer linguagem dentro da JVM (Ruby, Python, JavaScript, Scala, …). O maior acerto, em minha opinião, da arquitetura do Java foi não tentar vencer outras linguagens, mas juntar-se à elas.

Além disso, os frameworks Java como play! e Spring Boot/Roo fazem praticamente tudo o que frameworks mais modernos como Rails fazem. E você consegue ainda trazer todos os recursos do Java também, além da performance que (por enquanto) é bem melhor.

Enquanto as tecnologias Java conseguirem competir de igual para igual com as tecnologias alternativas, não há razão para imaginar que o Java vai virar um gigante legado. Talvez as aplicações feitas com EJB 2, milhares de linhas de XML e similares possam ocupar esse papel, mas ao mesmo tempo é possível utilizar as tecnologias de ponto usando a mesma plataforma. Isso acaba sendo uma grande vantagem!

Além disso, sinceramente não vejo nada de inovador em muitas das tecnologias que alguns xiitas defendem. Um exemplo: não há motivo técnico porque Rails é melhor melhor do que um framework Java como Spring. Pode ser mais legal, escrever um pouco menos de código a princípio, mas no decorrer de meses e anos não creio que a produtividade seria tão diferente. Além disso, Rails resolve um problema muito específico do desenvolvimento de software. A maioria das tecnologias da moda só resolvem um problema muito específico e, a partir do momento em que começam a crescer e a amadurecer, geralmente elas incorrem nos mesmos problemas que as tecnologias existentes.

Só vou acreditar que o Java está realmente ultrapassado quando surgir um paradigma de desenvolvimento largamente usado que não seja atendido bem por esta plataforma.

Dito isto, sugiro fortemente e urgentemente que quem só sabe Java aprenda mais uma ou duas plataformas para sair fora da caixa. :smiley:

1 curtida

[youtube]http://www.youtube.com/watch?v=zu9W8AtZy7U[/youtube]

Sobre tudo isso:

[quote=utluiz]Discussão interessante e que foi bem longe. Vou dar o meu pitaco também. :slight_smile:

Estamos atrasados em relação aos gringos?

Começando do começo, no geral os “gringos” (incluindo USA, UK, AUS, NZ, mas não limitado a estes) são sim mais avançados em termos de tecnologia do que nós. Claro, essa afirmação exige um contexto.

Primeiro, que em países desenvolvidos o acesso à tecnologia de ponto é muito mais fácil. Só para citar um exemplo básico, aqui no Brasil vai ser muito mais difícil alguém decidir desenvolver para iPhone por causa do custo do equipamento.

Segundo, países como EUA tentem a ter um mercado muito mais competitivo que o nosso. Não quero entrar em discussões políticas, mas para o bem ou para o mau, as empresas, o mercado e o trabalhador no Brasil são muito mais protegidos do que em países onde o empregador pode fazer um contrato específico com o empregado.

Obviamente aqui no Brasil temos pessoas excelentes, que certamente ultrapassam em muito o nível médio mundial do desenvolvedor de Software. Dois exemplos que posso citar estão presentes aqui nesta discussão, o Vini e o Hebert.

Mas no geral, acabamos seguindo muitas coisas de fora porque temos mais dificuldades de chegar à crista da onda. Os gringos tem mais tempo e recursos para investir em novas tecnologias, estudos e projetos. Quantas pessoas aqui tem tempo para, além do trabalho normal, fazer diversos experimentos técnicos ou humanos como os idealizadores de frameworks, metodologias e afins?

Como alguns já sabem em breve estou indo trabalhar na Atlassian, na Austrália. Já havia tentado uma vaga na Amazon em Seattle, WA, mas não consegui. O nível de ambas as entrevistas é incomparável com tudo o que já vi no Brasil. Primeiro, lá você passa, no mínimo por 4 entrevistas técnicas com vários membros da equipe. Os desenvolvedores e gerentes que me entrevistaram, todos demonstraram conhecimentos profundos em aspectos diversos. Mesmo sendo já experiente e bem fundamentado em computação tive dificuldades. E se eles encontrarem qualquer ponto negativo, mesmo que seja um perfil não compatível com a filosofia da empresa, eles vão recusar você. Note que não estou falando das pessoas que escrevem livros ou são conhecidas, são desenvolvedores “comuns”, exceto que de empresas renomadas.

Claro que existem algumas (poucas) empresas de nível mais alto aqui no Brasil, mas na maioria eles nem estão dispostos a investir tanto na entrevista, nem há candidatos o suficiente com um nível muito alto para o salário que pagam e por aí vai.

Não sei de quem é a culpa disso tudo, nem vou arriscar, mas a verdade é que por aqui vejo muita gente boa se acomodando dentro de alguma consultoria e aceitando um salário e uma função ambos medíocres, por vários motivos. Muitos são colocados no mesmo nível de outros desenvolvedores no máximo medianos. As empresas em geral também não fazem questão de diferenciar. As consultorias e fábricas de software, principalmente, estão preocupadas apenas em vender projetos e entregá-los com o menor custo, portanto não faz diferença se você é um programador júnior ou um arquiteto.

Tipos de carreira

Foi mencionado aqui a questão de ter dois tipos de carreira: gerencial e técnica. Na verdade existem muitas outras que podem e fazem parte de empresas de software, por exemplo marketing digital, design de interfaces, usabilidade e experiência do usuário, etc…

De qualquer forma, aqui no Brasil existe quase um tabu de que para crescer na carreira você precisa necessariamente virar um gerente. Muitas tem essa noção de que o bom é quem manda, o resto é ralé e peãozada.

Felizmente estou em uma empresa (GFT) que reconhece em seu plano de carreira oficial os diferentes tipos de competências. Temos 5 planos de carreiras, dentro os quais está o tecnológico, que culmina no papel do arquiteto, assim como o gerencial, o corporativo, de relacionamento com clientes e de negócios. Portanto, existem sim lugares em que você pode crescer no papel técnico sendo uma referência na sua área de expertise.

Claro que isso não é assim tão fácil. Atingir um nível de arquiteto é muito mais difícil do que se tornar um gerente, pois em geral este último depende mais de tempo de experiência e ter um bom de relacionamento interpessoal, enquanto o primeiro precisa se especializar por anos e anos a fio.

Outro problema é que poucas empresas tem um plano de carreira para arquitetos que se equipara com o gerencial. Então os desenvolvedores ficam em segundo plano. Em razão disso, sempre recomendo para quem quer crescer tecnicamente, que escolha uma empresa de tecnologia e não as que vendem homens/hora.

Complexidade vs Complicado

Concordo plenamente com o Vini. Esse conceito é sentido na prática e provado na teoria. Leia o Mythical Man Month do Brooks, de 1975, ele já falava sobre a complexidade inerente do software. Há regras de negócio que são inerentemente complexas e vão resultar em código complexo.

Claro que, se pensarmos em nível de loops e condicionais, nada é realmente complicada, mas se considerarmos o nível de algoritmo, basta ver como existem algoritmos complicados. Você pode ter 50 anos de experiência em programação e conhecer todas as linguagens, mas se alguém lhe pedir para resolver o problema do Caixeiro Viajante, por exemplo, de anda adianta tudo isso. Para um problema complexo, é necessário um algoritmo complexo que, mesmo sendo implementado com um código simples, não é inteligível para a maioria dos programadores.

Porém, mesmo um código extremamente complexo pode ser quebrado em blocos mais simples. Você pode dividir uma implementação muito grande e complexa em diversas módulos, classes e métodos. Cada método por ser ser tão simples quanto um código que alguém no primeiro ano de faculdade pode escrever, porém a complexidade está na forma como os objetos se relacionam, nos padrões arquiteturais adotados e assim por diante.

Especialização em tecnologia

Encontrei várias afirmações muito interessantes neste tópico sobre esse assunto. Eu concordo que quem é bom tecnicamente, possui bom fundamentos e tem experiência na área, não deve e geralmente não fica preso a uma tecnologia. Eu tenho as minhas dúvidas sobre pessoas que só sabem Java, só sabem Ruby ou até só sabem Hasckell. Todos os bons desenvolvedores que conheço sabem se virar com outras tecnologias, mesmo que em geral se especializem mais em uma ou duas.

Ontem mesmo um colega aqui da empresa pegou um projeto pequeno de manutenção de código VBA criado em 1997, em uso até hoje por um setor de uma instituição financeira, e veio me pedir ajuda porque ele não conhecia nada da linguagem. Eu programei em VBA por volta do ano 2000 brincando com o Visual Basic 4/6 fazendo joguinhos. Mesmo assim consegui ajudá-lo a criar um código relativamente complexo, um parser de uma planilha Excel, o qual ficou consideravelmente organizado e flexível, não porque eu lembrasse muito de VBA, mas porque toda a minha carga de programação fez com que não tivesse dificuldade alguma de usar essa linguagem.

Java defasado?

Java não vai virar um Cobol tão cedo porque ele ainda compete com todas as linguagens mais modernas. Eu concordo que a sintaxe da linguagem é verbosa, possui limitações e muitas vezes é desagradável criar certos tipos de estruturas que em outras linguagens você tem abstrações e syntax sugars bem legais.

Porém, a vantagem do Java é que ele é fácil de aprender, justamente pela sintaxe não permitir construções absurdamente complexas como em linguagens funcionais. E mesmo que você queira fazer isso, você pode rodar praticamente qualquer linguagem dentro da JVM (Ruby, Python, JavaScript, Scala, …). O maior acerto, em minha opinião, da arquitetura do Java foi não tentar vencer outras linguagens, mas juntar-se à elas.

Além disso, os frameworks Java como play! e Spring Boot/Roo fazem praticamente tudo o que frameworks mais modernos como Rails fazem. E você consegue ainda trazer todos os recursos do Java também, além da performance que (por enquanto) é bem melhor.

Enquanto as tecnologias Java conseguirem competir de igual para igual com as tecnologias alternativas, não há razão para imaginar que o Java vai virar um gigante legado. Talvez as aplicações feitas com EJB 2, milhares de linhas de XML e similares possam ocupar esse papel, mas ao mesmo tempo é possível utilizar as tecnologias de ponto usando a mesma plataforma. Isso acaba sendo uma grande vantagem!

Além disso, sinceramente não vejo nada de inovador em muitas das tecnologias que alguns xiitas defendem. Um exemplo: não há motivo técnico porque Rails é melhor melhor do que um framework Java como Spring. Pode ser mais legal, escrever um pouco menos de código a princípio, mas no decorrer de meses e anos não creio que a produtividade seria tão diferente. Além disso, Rails resolve um problema muito específico do desenvolvimento de software. A maioria das tecnologias da moda só resolvem um problema muito específico e, a partir do momento em que começam a crescer e a amadurecer, geralmente elas incorrem nos mesmos problemas que as tecnologias existentes.

Só vou acreditar que o Java está realmente ultrapassado quando surgir um paradigma de desenvolvimento largamente usado que não seja atendido bem por esta plataforma.

Dito isto, sugiro fortemente e urgentemente que quem só sabe Java aprenda mais uma ou duas plataformas para sair fora da caixa. :D[/quote]

E parabéns por ir para a Atlassian. Sou fã de carteirinha dos produtos deles.

Infelizmente comecei tarde na programação, completarei 31 anos em setembro e posso dizer que não sei nenhuma linguagem, apenas consigo ler códigos simples e fazer uma edição simples.

No que vou me tornar? Não sei, não fui atrás de certificação ainda, é uma coisa que as vezes penso ser dispensável, e as vezes penso que devo tirar alguma para “ter um título”.

Acho que não posso considerar um diferencial, mas quando preciso aprender uma coisa vou a fundo, vou atrás de quem começou, do porque começou, essa abordagem tem me ajudado bastante pois envolve o conceito da coisa em si.

Não tenho nenhum exemplo em termos de programação, mas tenho vários com relação a hardware e linux.

Só me sinto um pouco desapontado por não ter encontrado ainda um “mestre Yoda” por assim dizer, um mentor, alguém disposto a passar os conhecimentos para alguém com muita vontade de aprender como eu, alguém com quem eu pudesse expor ideias, abordagens e ter os meus “porques” esclarecidos rapidamente.

Não sei o caminho que alguns de vocês trilharam, ViniGodoy, utluiz, Hebert, entre muitos outros aqui do fórum, mas pela segurança com que falam e pelas coisas que já alcançaram, se tornaram minha referencia, só não sei se terei tempo de vida hábil para alcançar tal nível, acho que isso também envolve personalidade e muitos outros elementos além da inteligencia, por isso a minha duvida.

De qualquer forma como já disse, fico grato por poder ter a participação de vocês por aqui, sempre tão rica, muito obrigado!

1 curtida

ótimo post!

Algumas observações:

Concordo. Mas isso significa menos competição para desenvolver iPhone no Brasil comparando com Java, onde qualquer um pode lançar um blog e se tornar “arquiteto consultor”, portanto desenvolver para dispositivos da Apple me parece muito mais viável do ponto de vista de “carreira” (10 anos em TI rs) no Brasil, do que uma plataforma “sem custos” e que o mercado aproveita pra explorar a quantidade, ignorando a qualidade do profissional.

Meus aplicativos são vendidos em todos os países, e eu só precisei fazer um contrato com a Apple. No futuro, caso veja necessidade de vender meus serviços, você acha que teria dificuldade de ser contratado remotamente para um cliente em outro país?

Mas concordo com relação ao mercado de serviços no Brasil. Por isso falei que não da pra planejar carreira, tendo em vista as empresas daqui.

[quote]Mas no geral, acabamos seguindo muitas coisas de fora porque temos mais dificuldades de chegar à crista da onda. Os gringos tem mais tempo e recursos para investir em novas tecnologias, estudos e projetos. Quantas pessoas aqui tem tempo para, além do trabalho normal, fazer diversos experimentos técnicos ou humanos como os idealizadores de frameworks, metodologias e afins?
[/quote]

Quem não tem tempo e recurso para investir em adquirir conhecimento esta atrasado em relação a quem tem. O fator determinante aqui é tempo e recurso, e não o fato de ser gringo.

Nem todo mundo sonha em crescer como programador. Muitos não vêem a hora de se tornar gerentes pra serem os chefes e mandar nos programadores. :wink:

Esses tem que ficar e aceitar o que for preciso!