No que experiências em outras áreas podem contribuir para alguém que está entrando na área de programação?
Pergunta orignalmente respondida no Quora
Resposta rápida:
Pode ajudar na definição da solução, tanto no levantamento do requisito do usuário quanto na escrita do algoritmo em si.
Resposta longa:
Situação, experiência e vivência:
Inicialmente temos que diferenciar claramente o que é passar por uma situação, o que é experiência e o que é vivência. Passar por uma situação, seja ela pontual ou por um longo tempo, pode levar ou não à experiência, que é quando você efetivamente obtém conhecimento de algo sofrido, passado ou experimentado. Do simples fato de passar por situações até efetivamente obter experiência, cabe somente ao indivíduo e ao seu interesse pessoal de obter conhecimento. Já quanto à vivência, vamos definir aqui como passar por um conjunto de situações diferentes porém correlacionáveis em uma dada área de conhecimento. A vivência costuma levar à experiência, até mesmo nos animais, mas quando o indivíduo tem mais interesse em aumentar seu conhecimento, mais profunda será a experiência com a vivência.
Experiência ao longo da carreira de programação:
Quando o indivíduo é iniciante na carreira de programação, ou júnior como se diz, a experiência em outras áreas pode lhe ajudar tanto a programar um algoritmo mais facilmente quanto a compreender a situação problema apresentada (especificação técnica ou funcional). Acho que essa é a resposta que esperava com a sua pergunta. Para ilustrar meu ponto de vista, queria lhe contar uma história pessoal:
Sou Engenheiro Mecatrônico de formação, e quando comecei numa empresa de consultoria, recebi uma demanda de programar um sistema de atualização de créditos. Ao ver o problema, me veio à mente instintivamente uma situação problema de níveis de líquido (como encher uma caixa d'água), e desenvolvi o código com esse conceito. O arquiteto de software da época me perguntou por que não fiz de outra forma, apenas subindo o valor com um temporizador (a cada 5 minutos, por exemplo). Daí expliquei que isso fazer com que o saldo estouraria (a caixa d'água iria transbordar), além disso a cada atualização de saldo haveria um registro da operação, inviabilizando a leitura do extrato do cliente (vendo com os olhos de engenheiro, eu iria ligar e desligar toda hora a bomba d'água, fazendo com que ela queimasse mais rápido). Assim, implementei um controle de níveis alto/baixo, com dois sensores: valor máximo e valor mínimo. Dois if's (condição se, em programação). Ele ficou impressionado como tive uma ideia tão brilhante (para ele) e como ele não tinha pensado nessas questões. Daí dei o crédito à minha formação, à minha experiência prévia e a caixa d'água de minha mãe que tive que trocar a boia. Controle auto/baixo com on/off é o primeiro tipo de controle que um estudante de Controle e automação aprende na faculdade.
Quando o indivíduo é experiente na carreira de programação, ou sênior, a experiência em outras áreas ajuda a se comunicar, entender e se fazer entender com seus clientes. Entenda cliente como uma pessoa que te pede um "sitezinho" num freelance ou um usuário de marketing que te leva uma solicitação de desenvolvimento de um mega sistema numa empresa multinacional. Quase sempre seu cliente não vai saber programar, não vai entender nem as siglas nem os jargões, não vai entender porque mudar a cor de um botão vai demorar 2 semanas. Nesse momento entra a experiência, e cada vez mais sênior em programação, você vai precisar de mais vivência em áreas de não programação. O arquiteto de soluções entende tanto um cliente de marketing, um cliente da área médica, da área de indústria de carros, um cliente do setor financeiro, um cliente da área educacional ou um cliente do setor de telecomunicações. Cada um desses usuários tem grande experiência nas suas áreas, mas vão te parecer ignorantes na área de programação. Com certeza a conversa será mais fluida e você irá compreender melhor o que cada um necessita se você tiver conhecimentos nessas áreas. Também você irá se fazer entender melhor, ao falar que sabe o que é um lead para o marketing, ou que é o TMForum para telecomunicações, e assim sucessivamente. Você também precisará de conhecimento de psicologia para entender melhor o seu cliente, para se entender. Vai ter que ter melhores capacidades de argumentação. E como isso influencia na programação? Você precisa interagir com outras pessoas, seja outros desenvolvedores, sejam clientes ou seja pessoas de outras equipes, como testadores, mantenedores de ambientes, etc. Não saber como entender e se fazer entender fará que um código lindo seja inútil, seja mal utilizado, ou seja até mesmo odiado.
Também cabe ressaltar que como sênior, cada vez mais outros programadores irão te perguntar como resolver seus problemas de programação. Perceba que programar ele já sabem, ter idéias também, escrever algoritmos também. Então porque eles iriam te pedir ajuda? Por causa da sua experiência. E experiência nesse caso não vai se restringir apenas na programação, mas também em como resolver um problema de uma forma nova, diferente, "fora da caixinha", e que pode ser tão simples para um estudante de engenharia, mas pode parecer algo totalmente inovador na área de programação.
Só para ilustrar meu exemplo, um desenho: