Lutando como programador. Precisa de alguns conselhos [fechado]

20

Sou desenvolvedor agora há vários anos. Sou muito bom no que faço e posso "fazer o trabalho".

Mas há uma diferença entre "fazer o trabalho" e "fazer o trabalho corretamente". Vamos usar um exemplo.

Recentemente, desenvolvi um site a partir do zero. O site funciona bem e não tive problemas. Olhando através do código, pensei comigo mesmo que poderia ter feito melhor. Eu poderia ter diminuído minhas consultas MySQL. Eu poderia ter usado o MVC, tornando mais fácil estender (ele precisa ser estendido agora).

Decidi reescrever o projeto usando o CodeIgniter. Eu gosto da estrutura. Mas então fui desviado porque, para reduzir minhas consultas no MySQL, tive que aprender junções avançadas.

E esse é o problema. Sempre que faço um trabalho corretamente, estou em constante aprendizado. E tópicos como junções avançadas do MySQL levam tempo para aprender e, em seguida, tempo para implementar.

Eu não trabalho para uma empresa. Eu faço tudo sozinho. Então, eu imaginaria que, se estivesse trabalhando como desenvolvedor PHP para uma empresa, haveria equipes separadas lidando com o SQL.

Ser solo é difícil. E às vezes, embora meu conhecimento seja avançado, eu me pego fazendo perguntas, após perguntas. Provavelmente tenho muito orgulho do meu trabalho. Mas se eu tivesse que trabalhar para uma empresa que lida com projetos completos, poderia imaginar projetos demorando um pouco, porque precisaria aprender cada vez mais para satisfazer meu orgulho e garantir que estou fazendo as coisas "corretamente".

Eu pretendo conseguir um emprego depois do ano novo. Eu preciso da segurança do emprego. É por isso que estou fazendo essa pergunta.

Que conselho você pode dar em termos de auto-desenvolvimento e auto-aperfeiçoamento? Devo me preocupar menos? Ou talvez procure um emprego como desenvolvedor PHP quando não vou lidar com consultas SQL diretamente?

James Guvna Jeffery
fonte
54
se você não quer aprender constantemente, está no campo errado #
6
@ JamesGuvnaJeffery: se eles não permitirem (nenhum) tempo para aprender durante um projeto, eu não gostaria de trabalhar lá porque, como desenvolvedor, pararia de me aperfeiçoar.
Marjan Venema
3
o trabalho é o aprendizado, eles não dão a você esse tempo mágico para estudar, na verdade eles fazem, isso é chamado de "seu tempo pessoal". Eles não o chamam de "treinamento no trabalho" sem motivo. Se você não se sente confortável em ser um aprendiz auto-iniciado e aprendendo o tempo todo sem remuneração, como eu disse, você provavelmente está no campo errado.
5
O código antigo deve ser péssimo. Não se mate por isso; apenas tente melhorar com o tempo. Reescrever um projeto de trabalho dificilmente faz sentido prático. Os clientes não pagarão mais por isso. codinghorror.com/blog/2006/10/…
Job
2
Você não entende o que estou dizendo, trabalhar para uma empresa é exatamente o OPOSTO do que você está defendendo que gosta de fazer. Ele está trabalhando no cronograma de outras pessoas, usando o que eles ditam e como eles ditam sem nada além de compromissos e sem tempo para estudar coisas novas em seu tempo e sem tempo para implementar coisas em coisas interessantes que você aprende em seu tempo pessoal. Essa é a realidade de ser um desenvolvedor de software corporativo. Duvido que você seja tão dedicado ao ambiente corporativo quanto diz ao seu estilo experimental de pesquisa e desenvolvimento ao qual está acostumado.

Respostas:

33

Conselho: Não tenha medo de aprender coisas novas - você deu um bom primeiro passo ao reconhecer que poderia fazer melhor e depois se esforçou para aprender como poderia fazer melhor. Sim, leva mais tempo no início, mas a recompensa geralmente vale a pena a longo prazo. Agora que você conhece o CodeIgniter, pode usá-lo para os próximos projetos futuros. Você pode colocá-lo em seu currículo. Agora que você conhece técnicas avançadas de SQL, seus futuros projetos serão beneficiados. Se você parar de aprender, ficará estagnado.

FrustratedWithFormsDesigner
fonte
21

O que você está passando parece bastante normal para mim. É assim que trabalhamos em nosso ofício e melhoramos cada vez mais no que fazemos.

grokus
fonte
10

... decidi reescrever o projeto usando o CodeIgniter. Eu gosto da estrutura. Mas então fui desviado porque, para reduzir minhas consultas no MySQL, tive que aprender junções avançadas.

E esse é o problema. Sempre que faço um trabalho corretamente, estou em constante aprendizado. E tópicos como junções avançadas do MySQL levam tempo para aprender e, em seguida, tempo para implementar ...

Bem dado acima, acho que faz sentido você se concentrar em melhorar sua capacidade de planejar com antecedência, estabelecer e priorizar a fila de trabalho, gerenciar seu tempo - coisas assim.

Realmente, isso parece ser a única coisa que falta na sua atitude. O que você chama de "desvio" é essencialmente outro trabalho ("aprender junções avançadas") que precisa ser planejado, priorizado e colocado em fila.

mosquito
fonte
Obrigado @gnat. Eu realmente aprecio essas respostas positivas. Eu posso certamente concordar com você sobre o que você disse.
James Guvna Jeffery
9

Ser um profissional nesse campo é esmagar-se constantemente contra sua própria inadequação. Faça de 8 a 5 de segunda a sexta-feira, talvez mais, se houver um prazo, tenha um bom fim de semana e volte mais na segunda-feira. Esse é o trabalho.

Criar software requer uma certa humildade. Se você é alguém que precisa estar certo e que precisa provar que já sabia tudo, talvez esse não seja o campo para você.

Não consigo entender não aprendendo algo todos os dias. Eu não acho que eu iria querer esse emprego.

Dan Ray
fonte
Minha experiência é que não há problema em ser alguém que tem que estar certo, contanto que você também consiga estomacal. Eu me chuto sobre cada coisinha que não é perfeita. É por isso que faço as coisas melhor com o passar do tempo.
Tom Anderson
Bem, esse é o paradoxo, não é? Hubris é uma das três virtudes do programador. Mas, na minha experiência, ser "impulsionado compulsivamente para provar que sou inteligente, mostrando que já sabia tudo antes de aprender" é uma tendência que os desenvolvedores novatos deixam de lado ou não duram muito neste campo.
Dan Ray
Talvez acelerar de volta em vez de largar? Felizmente, há muito tempo, perdi o hábito de proclamar que sabia coisas que não sabia. No entanto, eu ainda odeio admitir que não sei as coisas; a necessidade de fechar a lacuna entre o que eu sei e o que eu quero poder dizer que sei é um driver para mim. Não necessariamente para todos!
Tom Anderson
Eu não sei, Tom. Parece-me aquele momento de vergonha que você ainda não sabe que algo é um momento que poderia estar gastando em aprendê-lo. Eu gosto de conhecer o próximo cara, mas não tenho nenhum problema em dizer "não sei".
Dan Ray
6

Ser solo é difícil. Por outro lado, quando você trabalha com uma equipe de desenvolvedores, todo mundo está aprendendo um com o outro. Como parte da equipe, você adquirirá muito conhecimento trabalhando com outros desenvolvedores e com muito menos esforço do que quando tenta descobrir tudo sozinho.

Dito isto, como desenvolvedor, você precisa se comprometer a aprender constantemente. Seja lendo a documentação para novas estruturas ou livros sobre desenvolvimento, você deve fazer um esforço constante para manter seu conhecimento atualizado e crescente. No entanto, fazer parte de uma equipe pode esclarecer qual área você precisa aprender mais a qualquer momento.

Quanto ao seu ponto de vista sobre revisitar seu código antigo e reescrever: descobri que meu próprio código sempre representa o melhor do que eu sabia no momento em que o escrevi. Muitas vezes volto a algo que escrevi anos atrás e me bato na testa, quando vejo o quanto eu poderia ter feito melhor, considerando o que sei agora . Mas essa é a natureza da experiência, você a obtém depois de precisar ...

Por fim, ao desenvolver um aplicativo, você sempre precisa exercitar o bom senso comercial, para decidir quando é melhor cortar os cantos para terminar mais rapidamente e quando é necessário levar mais tempo para aprender algo novo que melhoraria o design e a qualidade. do aplicativo. Há um universo de coisas para aprender no mundo do software. Sem exercitar esse tipo de bom senso, você pode girar as rodas aprendendo, pensando, redesenhando, mas nunca fazendo nada.

Sam Goldberg
fonte
+1 para a segunda frase. Aprendi mais com meus colegas, trabalhando em várias organizações diferentes, do que aprendi com a leitura (livros ou online). Parece que sua pergunta é como trabalhar em equipe por um tempo faria um mundo de bem.
Dawood diz que restabelece Monica
3

Acho que suas preocupações são válidas, mas você não deve perder o sono por causa disso. É minha convicção que um ser tecnólogo vem com a seguinte bagagem:

  • Você deve aprender constantemente coisas novas. Você aprende a amar isso ou não.
  • Há muito mais coisas que você deseja dominar do que se poderia imaginar.
  • Você desenvolverá habilidades durante um projeto que gostaria de ter durante o projeto.
  • Como resultado, você sempre desejará voltar e refazer esse projeto. É tão difícil lançar algo que você sabe que poderia ser melhor.

No final, parece que você se importa com a criação de software de qualidade, algo que você não pode aprender . Saiba que você precisa diferenciar a construção de uma solução de alta qualidade com a construção de algo perfeito. Parece que você é como eu, e nunca será perfeito. Seria mais preocupante se você não sentisse que tinha a chance de melhorar a si mesmo e a seu trabalho.

É difícil ser especialista em todos os negócios (mestre de nenhum), mas você realmente precisa descobrir como identificar as coisas que são mais interessantes e úteis para você e se concentrar nelas. Descobrir a melhor forma de "terceirizar" outro trabalho para outras pessoas ou ferramentas .

Joe
fonte
2

Eu acho que você precisa se preocupar menos em "fazê-lo corretamente". Busque a perfeição, mas saiba que não é realmente possível projetar uma solução perfeita, ainda mais na primeira vez. O fato de você estar preocupado o suficiente para fazê-lo corretamente para fazer essa pergunta significa que você já está no caminho certo.

Quanto à sua frustração em aprender coisas novas, descobri que trabalhar em grupo e ser capaz de perguntar e discutir o problema com outros programadores eliminaram a dor de descobrir o que eu precisava aprender e o substituí pela alegria de descobrindo algo novo e aprendendo a aplicá-lo.

Adoro escrever software, mas às vezes há realmente dor no aprendizado real de algo novo, mas em descobrir exatamente o que você precisa aprender para conseguir o que quer fazer.

Pelo que entendi, estive em uma posição semelhante a você. Codificar algo sozinho pode ser frustrante e difícil às vezes, e gratificante e um pouco divertido em outras.

Faça exatamente o que planeja fazer, encontre um emprego em que fará parte de uma equipe (e faça o possível para garantir um emprego em algum lugar que não seja ruim). Trabalhar com outras pessoas que usam as mesmas tecnologias e projetam o mesmo software expandirá sua compreensão e aplicação dessas tecnologias e padrões de design quase da noite para o dia.

Quanto a saber como fazer algo certo na primeira vez, bem, como você saberia que havia uma maneira melhor, a menos que você já tivesse feito de certa maneira na primeira vez? A habilidade no design de software geralmente depende muito da experiência. Joel Spolsky é um gênio do software, mas se você ler muitos artigos dele, perceberá que eles resultam muito da experiência e da inteligência.

Quanto à parte SQL, como desenvolvedor .NET. Ainda não trabalho em qualquer lugar que tenha um desenvolvedor de banco de dados dedicado, todos escrevemos nosso próprio SQL, mas muitas vezes há desenvolvedores que são realmente bons em SQL e estão dispostos a ajudá-lo. com o material mais aprofundado.

Você parece um cara inteligente, não acho que deva ser tão duro consigo mesmo.

333Mhz
fonte
1

Isso é totalmente normal e não é algo com que você deva se preocupar muito. Você precisa aprender continuamente novas habilidades, mas também precisa aprender a priorizar e gerenciar seu tempo. Você também precisa evitar a armadilha de redesenvolvimento desnecessário.

O programador inexperiente geralmente é atraído para a armadilha de redesenvolvimento:

Não escrevi esse programa perfeitamente e agora preciso estendê-lo ou alterá-lo. Vai ser muito trabalhoso modificar o código existente devido à maneira como o escrevi. Aprendi muito mais desde então, tenho certeza de que a melhor coisa seria reescrever todo o programa. Tenho certeza de que poderia escrever muito melhor desta vez.

Há várias coisas erradas nessa lógica.

  • é muito trabalhoso modificar ou adicionar ao código existente, mas não será muito mais trabalho reescrever tudo?
  • se você reescrever tudo, há uma boa chance de criar novos bugs, e isso levará mais tempo do que você pensa (especialmente se você for inexperiente). Você está considerando tudo o que está envolvido na criação do sistema? (lembre-se de quanto tempo você levou pela primeira vez)
  • você aprendeu muito desde a criação original do programa (para poder aprimorá-lo), mas também aprenderá mais no próximo mês / ano. O que faz você pensar que não vai querer reescrever tudo novamente em algum momento no futuro?
  • o teste final de um programa é que ele funciona . Você não tem nada melhor para fazer?

Nunca é demais contemplar e planejar uma reconstrução. Isso significa considerar como você deseja reescrever seu programa e tentar identificar os problemas que ocorrerá. Nesse caso, você identificaria as 'junções avançadas do SQL' necessárias agora e investigaria como elas funcionam e aprenderia sobre elas.

Se você acha que não teria identificado a lacuna avançada de conhecimento de junção por meio do planejamento (sem iniciar o desenvolvimento), precisará melhorar suas habilidades de planejamento. Tente pensar sobre qual parte do plano não foi detalhada o suficiente. Você deve entrar em todos os detalhes necessários até ter certeza de que todo o sistema é tecnicamente possível.

Essa abordagem permitirá que você aprenda com antecedência .

Finalmente, aprender no trabalho é uma parte normal da programação. No entanto, isso não significa que você inicia uma tarefa e percebe que precisa parar por uma semana para aprender, digamos, sobre HTML básico. Você pode parar por algumas horas para aprender algo, mas seu empregador está pagando apenas para você fazer o trabalho. Aprenda com eficiência - não leia a introdução e o histórico, apenas como ele funciona e como ele se encaixará no seu programa. Se você precisar parar de trabalhar por dias a fio para aprender como concluir uma parte do programa, estará fazendo errado.

Kirk Broadhurst
fonte
1

Você pode pensar que aprender novas tecnologias e problemas consome muito tempo. Mas não entre em pânico. É normal. É parte de sua prática como programador aprender ... ou então estaríamos todos presos ao COBOL.

Profissionais freelancers ajustam suas comissões de acordo e períodos de aprendizado são, entre outras coisas, algo que deve ser levado em consideração nas estimativas de tempo. Na próxima vez que você decidir criar uma nova estrutura, planeje com tempo suficiente para aprendê-la.

Spoike
fonte
0

Mas há uma diferença entre "fazer o trabalho" e "fazer o trabalho corretamente".

Não, não existe, e acho que essa é a raiz do seu problema aqui. Parece-me que você está muito preocupado em fazer as coisas "corretamente" porque, como desenvolvedor individual, você não vê como os outros operam. Mas corretamente de acordo com quem? Quem é essa pessoa mágica que decide decretar que o que você está fazendo é "correto"? Tome 100 dos melhores programadores do mundo e garanto que não dois concordarão 100% em todos os tópicos de programação.

Em última análise, o que importa é se seus clientes estão felizes. Se os programas que você cria estão resolvendo os problemas que deveriam e fazendo de uma maneira econômica, você está fazendo corretamente. Não é mais inerentemente correto, por exemplo, usar o codeigniter do que usar sua própria estrutura. O corolário disso é que, se você produz um monte de porcaria, está fazendo algo errado, independentemente dos processos ou das "melhores práticas" seguidas.

Você está revisitando seu código e vendo maneiras de aprimorá-lo é uma parte normal do processo de desenvolvimento. Não é sinal de que você não está fazendo as coisas "corretamente". É um sinal de que você se dedica a aprender e melhorar. De tudo o que vejo na sua postagem, você não tem nenhum problema.

Agora vá chutar alguns * * *

GrandmasterB
fonte
Eu discordo disso. Existem maneiras de programar que são muito mais fáceis de manter e de fácil leitura do que outras, e há pilhas de livros dedicados a melhorar o programador para que eles possam escrever um código melhor.
TehShrike
Obrigado @grandmasterB. TehShrike, e referência a esses livros?
James Guvna Jeffery
3
" não há dois que concordem 100% em todos os tópicos de programação " - talvez, mas pelo menos 80% concordem em pelo menos 80% dos tópicos de programação. Esse é o consenso profissional. Não existem "direitos" absolutos, mas existem boas práticas e vale a pena conhecer.
precisa
1
Tudo muito bem, mas se o seu programa não está resolvendo o problema, é recomendável, com práticas recomendadas ou não, que foi feito incorretamente. Há um meio objetivo de saber se um programa é executado corretamente - se o cliente entregar tiras de papel verdes ou outro pagamento em troca de seu trabalho. Qualquer outra medida é simplesmente opinião.
GrandmasterB
2
E quando seu cliente sente que sua cotação é excessiva e encontra outro especialista para confirmar esses sentimentos por ter sido mal codificado, você fica sem trabalho.
29411 JeffO