Qual é o melhor ambiente para tornar um programador melhor

Primeiro,esqueçam faculdade,curso tecnico,treinamento,o cara sabe a sintaxe da linguagem,já leu varios livros e apostilas,já desenvolveu mil e um projetos proprios,programa a mais ou menos um ano,mas ainda não desenvolveu nada profissional,o cara tem duas escolhas,ou ele pega um estagio ,desenvolve pequenas rotinas dentro do sistema da empresa que o contratou,trabalha em equipe,sempre tem um cara lá pra ajudar aonde for precisso,ou ele é contratado para desenvolver um sistema aonde só ele vai trabalhar,não vai ter ajuda de ninguem,vai ter que se virar pra fazer.
Qual dos dois ambientes vocês,que já são programadores experientes,acham que ajuda o cara a se tornar um programador melhor?

eu imagino o seguinte,
o cara que começar a trabalhar com estagio vai aprender a codificar com um nivel melhor de organização,pois vai ter sempre alguem lá para alertar ele quando tiver algum problema,porém ,como ele vai trabalhar em equipe vai desenvolver pequenos pedaços do codigo do sistema,então ele vai perder experiencia de configuração do projeto em si.

já o cara que pegar um projeto para fazer vai aprender a se virar sozinho,configurar o projeto,codificar as classes,resolver problemas pois não terá ninguem para ajudar ele porém
ele não terá um nivel maior de organização porque ele fará o sistema sem aquela visão de uma pessoa mais experiente,podendo ocorrer até sistemas ruims em questão de perfomace e segurança.

Qual é a opinião de vocês?

Bom, eu já vivi os 2 mundos, e não sei dizer se um é melhor ou não.

No primeiro projeto que trabalhei, tinham os “crânios” lá que tiravam muita dúvida minha, eu aprendi muita coisa, e aprendi rápido porque eles já tinham o conhecimento vindo da experiência, que vem praticamente mastigado.

Saindo desse projeto fui para outro onde não havia ninguém com conhecimento superior, não existiam seniors nem plenos. Só eu e mais um cara com conhecimento equivalente. A gente se ajudava, mas um não tinha conhecimento superior ao do outro, então muita coisa a gente aprendeu na porrada, com erros e acertos, sempre buscando melhorar.

Não sei dizer qual dos 2 é melhor, mas sei que as 2 experiências foram ótimas, mas de jeitos diferentes :slight_smile:

Cara, eu nunca vi um programador codificar um sistema sozinho.

E essa de não ter nenhuma ajuda eu também nunca vi. Até porque pra se programar sempre tem que ter o apoio do analista. Salvo casos onde o programador também é analista, mas nesses geralmente é alguém com certa experiência já.

Olha, eu acho que pode ser o ambiente que for, o cara só vai ser bom se ele gostar do faz.

Aqui onde estou estagiando, não seria o ambiente mais propício a formar bons programadores. A gente dificilmente tem serviço, e quando tem, somos obrigados a tirar leite de pedra. Sem falar que a rotatividade entre setores é grande aqui.

Já tive colegas que entraram pra fazer estágio com C#, foram pra suporte, tiveram treinamento em PeopleSoft, participaram de um projeto, tiveram treinamento em ABAP e agora estão trabalhando com isso…

Tem gente que adora isso, sempre estar vendo coisas novas. Eu não gosto, prefiro me especializar numa linguagem e programar direito nela. Não que eu não goste de lidar com novas plataformas e linguagens, mas acho que a gente sempre deve se focar em alguma coisa. O cara que não tem foco dificilmente faz algo direito.

Estou trabalhando atualmente com uma linguagem que não gosto, mas me esforço pra fazer meu serviço direito. E sempre estudando Java, que é o que realmente gosto. E acho que pela minha experiência eu programo muito bem. Cansei de fazer trabalho da faculdade com carinha que trabalha há mais de 3 anos com Java, e faz cagada de iniciante(nomear métodos do modo errado, criar um monte de get/set que nem vai ser usado, fazer validação dos dados no lugar errado, etc, etc, etc.).

A questão central disso, na minha opinião é a seguinte. Se o cara se acostumou só a fazer sistema do zero, ele não vai ser tão bom quanto alguém que faz isso mas que também já penou prestando manutenção em sistema mal escrito. As vezes você passa 10 anos fazendo uma coisa errado, mas que na sua cabeça tá certo, até pegar o código de alguém que faz do jeito certo e reparar nisso.

É muito importante existir essa “troca” de códigos, ter que ler um código bagunçado(o que não é raro) e procurar a melhor forma de consertá-lo. Isso é quase como montar um quebra-cabeças, é algo que apura seus sentidos e te dá mais “skills” na programação. Eu achava que tinha um bom raciocínio de lógica. Me enganei quando comecei a dar manutenção em sistemas. Você vê cada coisa que as vezes parece que vale mais a pena apagar tudo e fazer de novo, e esse tipo de análise te faz pensar, montar ambientes imaginários e pensar na melhor forma de consertar aquilo.

Enfim, eu acho que o cara só vai ser realmente bom se gostar de programar. Claro que existem exceções, já conheci gente que não gostava do que fazia, mas mesmo assim fazia muito bem. Aliás, pra quase tudo o que eu disse se aplicam exceções, mas deixemos claro que são exceções!

:wink:

Tem que ser os dois, na empresa ganhando experiência em equipe e por fora criar projetos do zero para se manter mais seguro sobre o todo. Tem que aproveitar cada ambiente que estiver. Mas somente começar a trabalhar sozinho não é a melhor opção.

Quando eu digo sozinho,não é exatamente sozinho,é como o Rodrigo Sasaki falou,sem ajuda de alguem experiente.
Mas no final um complementa o outro,cada ambiente tem suas vantagens e desvantagens.,se o cara trabalhar dos dois modos ,ele consegue uma bagagem melhor de experiencia.
Esperar ver se alguem tem alguma opinião diferente…

Minha opinião: os dois.
Preferencialmente, inicie sendo o que menos sabe na equipe, vai aprender com quem sabe e tem mais experiência; depois seja o que tem conhecimento intermediário, para um dia ser o líder de um projeto.
E também se aprende trabalhando dando manutenção num projeto legado e também num projeto novo.
Na vida, tem hora para ser aprendiz e para ser mestre. Aprende-se nas duas condições.

PS: link para um post do meu blog: http://agorandroid.blogspot.com.br/2013/10/receita-para-ser-um-grande-programador.html

Bem, eu não sou um cara experiente (profissionalmente eu programo há menos de um ano), mas creio que, dos dois ambientes citados por você o estágio seja infinitamente melhor.

Eu aprendi muito no meu primeiro estágio. Era uma empresa pequena mas com um trabalho notavelmente sério e bem feito. Meu chefe tinha mais de 10 anos de experiência com a linguagem usada na empresa e ele estava sempre me auxiliando. Infelizmente, eu não fiquei muito tempo nessa empresa pois ela entrou em crise e precisou mandar muita gente embora (em especial os estagiários). Concluindo: no início, ter um mentor é fundamental em sua formação profissional.

Em seguida entrei numa pequena industria como assistente de programação. Dias depois o cara que eu estava auxiliando jogou todo o projeto no meu colo, ou seja, me tornei responsável pelo desenvolvimento de um projeto inteiro. Era um lugar horrível com um TI porco, já que o responsável pelo sistema da empresa, na verdade, não sabia programar. Ele “quarteirizava” o serviço (quer dizer, pagava para que outra pessoa fizesse o serviço para ele). Não aguentei ficar dois meses nessa empresa, pouco tempo depois já havia me mudado para um lugar um pouco melhor que este. Mas o que eu aprendi desenvolvendo um sistema do zero? Foi nesse momento que descobri a importância de um Analista de Sistemas, de um Analista de Requisitos, de um Analista de Suporte, de um Desenvolvedor, de um Arquiteto, entre outros cargos existentes na área de desenvolvimento. Um software bom não é resultado do trabalho de um único programador, mas sim, de uma equipe capacitada e experiente. Eu duvido que um programador qualquer seja capaz de desenvolver sozinho um sistema grande e bom. Pode ter certeza, se tentar algo totalmente sozinho, você falhará em algum ponto.

Sim julio,mas geralmente uma equipe bem completa assim é para projetos grandes,o cara que trabalha independente ele vai pegar projetos de acordo com o conhecimento
dele e de acordo com as tecnologias que ele domina,logico que vai ter alguma coisa que ele vai ter que aprender a fazer durante o projeto e na raça,mas é essa coisa de aprender na raça que eu acho que garante um aprendizado maior para o cara,o cara termina o projeto com bastante conhecimento adquirido,não sei se você já fez algum projeto como TCC ou profissional,se você fez,deve ter notado que aprendeu muito depois de terminar esse trabalho,é esse tipo de conhecimento que estou falando.Acho que o estagio acostuma muito o cara a ficar mais tranquilo,ele não pega o trabalho pesado da coisa…
logico que como você apontou o estagio é muito importante porque vai ter sempre um cara te ensinando as coisas lá,e se você souber se aproveitar disso,vai conseguir adquirir muito conhecimento também…

Acho que depende do tipo de profissional vc quer cultivar, um programador (capaz de resolver um problema do início ao fim, ainda que não seja com a melhor solução) ou alguém capaz de desenvolver pequenos pedaços de código. :smiley:

A tendência é produzir em equipe. Dependendo do método de desenvolvimento adotado, nem um programa é “propriedade” de um programador (vide programação em par).

A tendência do mercado hoje pode não ter tanta relevância quanto vc imagina no futuro.

[quote=Slow17]Sim julio,mas geralmente uma equipe bem completa assim é para projetos grandes,o cara que trabalha independente ele vai pegar projetos de acordo com o conhecimento
dele e de acordo com as tecnologias que ele domina,logico que vai ter alguma coisa que ele vai ter que aprender a fazer durante o projeto e na raça,mas é essa coisa de aprender na raça que eu acho que garante um aprendizado maior para o cara,o cara termina o projeto com bastante conhecimento adquirido,não sei se você já fez algum projeto como TCC ou profissional,se você fez,deve ter notado que aprendeu muito depois de terminar esse trabalho,é esse tipo de conhecimento que estou falando.Acho que o estagio acostuma muito o cara a ficar mais tranquilo,ele não pega o trabalho pesado da coisa…
logico que como você apontou o estagio é muito importante porque vai ter sempre um cara te ensinando as coisas lá,e se você souber se aproveitar disso,vai conseguir adquirir muito conhecimento também…[/quote]

Mesmo que numa empresa pequena, acho que a empresa deve ter, pelo menos, um analista e um programador. Acho que programador deve apenas programar e o analista deve somente saber analisar o negócio a ser codificado. Afinal, trabalhando em par, é mais fácil descobrir onde estão os erros e corrigi-los o quanto antes.

A tendência do mercado hoje pode não ter tanta relevância quanto vc imagina no futuro.[/quote]
É claro, quase tudo é cíclico.
Mas, como a tendência são sistemas maiores e mais complexos, só pode ser tocado por equipes.
Sei, é mais uma tendência que pode mudar…Mas, não no curto/médio prazo.
A tendência do desenvolvimento em equipe é um conceito estratégico para as empresas e para os desenvolvedores. Ninguém fica “amarrado” ao outro.

[quote=Júlio Murta]
Mesmo que numa empresa pequena, acho que a empresa deve ter, pelo menos, um analista e um programador. Acho que programador deve apenas programar e o analista deve somente saber analisar o negócio a ser codificado. Afinal, trabalhando em par, é mais fácil descobrir onde estão os erros e corrigi-los o quanto antes.[/quote]
Quando eu disse programar em par, foi com o significado literal: duas pessoas programando em conjunto, discutindo a solução e codificando juntas.

Desenvolvimento em equipe não é uma tendência em projetos de software, mas de humanos que são por natureza seres sociáveis. Talvez a tendência que vc se refere seja de redução de custos com TI?

[quote=Rodrigo.Rocha]
Desenvolvimento em equipe não é uma tendência em projetos de software, mas de humanos que são por natureza seres sociáveis. Talvez a tendência que vc se refere seja de redução de custos com TI?[/quote]
Não, é o contrário. Desenvolvedores são normalmente individualistas.
O foco principal é a melhoria da qualidade do produto (software) produzido. É claro, que com isso diminui os custos, diminuindo o retrabalho.

[quote=A H Gusukuma][quote=Júlio Murta]
Mesmo que numa empresa pequena, acho que a empresa deve ter, pelo menos, um analista e um programador. Acho que programador deve apenas programar e o analista deve somente saber analisar o negócio a ser codificado. Afinal, trabalhando em par, é mais fácil descobrir onde estão os erros e corrigi-los o quanto antes.[/quote]
Quando eu disse programar em par, foi com o significado literal: duas pessoas programando em conjunto, discutindo a solução e codificando juntas.[/quote]

eu não li o que você escreveu

Ser individualista não quer dizer que a pessoa é incapaz de colaborar com um determinado grupo para alcançar algum objetivo comum. Mas acredito que o autor do tópico não está se referindo a isso. Posso estar enganado mas ele se referiu a um ambiente onde o profissional tem autonomia sobre o seu próprio trabalho, e não um ambiente individualista.

Foco de quem?

[quote=Rodrigo.Rocha][quote=A H Gusukuma]
Não, é o contrário. Desenvolvedores são normalmente individualistas.
[/quote]

Ser individualista não quer dizer que a pessoa é incapaz de colaborar com um determinado grupo para alcançar algum objetivo comum. Mas acredito que o autor do tópico não está se referindo a isso. Posso estar enganado mas ele se referiu a um ambiente onde o profissional tem autonomia sobre o seu próprio trabalho, e não um ambiente individualista.

Foco de quem?[/quote]

  1. Concordo
  2. Foco da empresa que adota o método. E em consequência da equipe que trabalhe assim.

Entendi. Então quando a estratégia da empresa é reduzir custos e o programador a uma peça substituível a qualidade aumenta?