Hot Posts

6/recent/ticker-posts

A queda do engenheiro de software, a ascensão do técnico programador






A maioria das pessoas que conheço são engenheiros de software ou cientistas da computação, de uma forma ou de outra. A maioria deles é muito experiente e vem de uma época em que uma dessas coisas exigia uma educação muito séria em ciência da computação. É claro que esse ainda é o caso de ser um cientista da computação, mas aparentemente não o é para a programação. Muitas das minhas faculdades mais experientes lamentam o declínio nas habilidades e na educação de seus colegas mais jovens. Também vi essa mudança no conjunto de habilidades e na educação dos candidatos a programas iniciantes, tanto no trabalho quanto na sala de aula. Parece que a engenharia de software, como disciplina e profissão, deu lugar a desenvolvedores de "hackers" e "cowboys" que conhecem muito pouca ciência da computação. Algo mudou? Se sim, o que?

História 101

Se você voltar aos primórdios da ciência da computação, ela não era chamada de ciência da computação e não havia departamento de ciência da computação em nenhuma escola. A ciência da computação como disciplina era um subconjunto de matemática e / ou engenharia. O primeiro departamento de ciência da computação foi criado em 1962 na Universidade de Purdue, e foram necessários mais 15 anos antes que houvesse apenas alguns poucos departamentos de ciência da computação da Universidade. Nos anos 80, a ciência da computação ainda era considerada um subcampo da matemática ou da engenharia geral. No entanto, tivemos programadores de computador desde os anos 40. Quem foram esses pioneiros e o que eles fizeram?

Augusta Ada King, condessa de Lovelace; tcp Ada Lovelace . O primeiro de nós. Mãe.

Os primeiros programadores foram matemáticos. Eles geralmente não eram chamados de programadores. Eles eram analistas, engenheiros, matemáticos, ou simplesmente " aquelas mulheres realmente inteligentes ali na geladeira " (a maioria dos primeiros programadores eram mulheres e a maioria dos computadores estava em "câmaras frias"). Esses "programadores" tinham que ter extensa educação formal e conhecimento em matemática e / ou engenharia. A maioria estava mais intimamente relacionada aos cientistas do que pensamos hoje como programadores. Com o tempo, e no final dos anos 60, o campo cresceu e as pessoas envolvidas na programação de computadores ficaram conhecidas como engenheiros de software. Eram pessoas muito educadas (ainda principalmente mulheres), geralmente com graus avançados em matemática. Isso continuou por algum tempo.

Margaret Hamilton , uma das primeiras verdadeiras engenheiras de software e uma das maiores.

Na década de 1980, os departamentos e diplomas de ciência da computação começaram a se estabelecer em faculdades e universidades. Alguns consideram isso a idade de ouro da ciência da computação. Computadores pessoais apareciam em residências nos Estados Unidos, filmes como a WarGames intrigavam pessoas e os faziam querer aprender mais sobre computadores, e rumores sobre algo chamado "A Internet" estavam assustando as pessoas. Durante esse período, vimos a ascensão do engenheiro de software formal e tradicional. Era um título cobiçado e respeitado, e somente aqueles com formação formal em matemática, ciência da computação e / ou engenharia elétrica tinham permissão para carregá-lo. Isso também durou algum tempo.

Alguma coisa mudou

No final da década de 90, começamos a ver o primeiro de quem agora chamamos simplesmente de “programadores”, “codificadores” e “desenvolvedores”. Essas eram pessoas que, em vez dos diplomas formais da universidade, tinham credenciais como treinamento técnico militar ou um diploma de associado na programação prática, ou simplesmente foram autodidatas graças à Internet. Lentamente, esse novo grupo entrou no campo da engenharia de software com novos títulos, como "programador" ou "desenvolvedor", em vez de "engenheiro". Também vimos uma explosão nos campos técnicos relacionados a computadores, como especialistas em redes e administradores de sistemas.

Até o início dos anos 2000, como gerente de contratação, eu quase nunca vi nenhum pedido de emprego em engenharia de software em que o candidato não possuía um diploma de quatro anos relacionado. Se o fizesse, teria jogado fora sem pensar nisso. Avanço rápido para o final de 2010 e pelo menos metade das aplicações que vi eram de pessoas sem diploma formal. Agora, como professor de ciência da computação, eu regularmente tenho alunos que abandonam uma ou duas aulas porque conseguiram um emprego como programador de algum tipo (geralmente não é um bom trabalho, e não um trabalho para o qual estão prontos, mas um emprego com o título "desenvolvedor", no entanto).


Talvez mais algumas aulas de programação fossem uma boa ideia? Nah!

O título "engenheiro de software" caiu em desuso ou está reservado para funções tradicionais e seniores em grandes empresas de tecnologia. Agora é geralmente "desenvolvedor" ou "programador" que você vê anunciado como um cargo, ou o "hacker", infelizmente absurdo e cômico, "code-ninja" ou "code-guru". Também vemos a ridícula " pilha completa " desenvolvedor ”lançado, como se isso tivesse algum significado especial (não tem). Um diploma não é mais necessariamente um indicador de aptidão para um trabalho de programador e, de fato, nenhuma educação formal é necessariamente necessária.Os padrões parecem estar em acentuado declínio, a ponto de qualquer pessoa que possa digitar agora ser um "programador".

O que aconteceu?

Para muitos alunos antigos, a conclusão e o argumento típicos são que os padrões simplesmente declinaram. É óbvio que a demanda por quem pode programar (mesmo de forma rudimentar) disparou. O argumento típico é que alguém precisa fazer isso, então abaixamos a barra apenas para colocar os corpos atrás dos teclados. Na superfície, faz sentido. Pouquíssimas pessoas se enquadram em cursos de quatro anos nas ciências exatas e menos ainda em cursos avançados em disciplinas como matemática, engenharia e ciência da computação.

Obviamente, tornou-se sobre números simples. A demanda por desenvolvedores é absurdamente alta, o número de pessoas capazes de obter um diploma de quatro anos em ciência da computação é relativamente baixo e precisamos de programadores no campo agora. Temos que atender à demanda de alguma forma, então reduzimos os padrões. Aparentemente, agora deixamos qualquer um "engenheiro" e esperamos cegamente o melhor. Aparentemente, a verdadeira engenharia de software está desaparecendo enquanto “codificação” e “hacking” com pouca educação formal estão ocorrendo. Essa é uma resposta simples na qual muitos engenheiros treinados formalmente gostariam de acreditar (inclusive eu). No entanto, como a maioria das respostas simples, devemos examinar mais profundamente antes de concluir.

O que realmente aconteceu é que a tecnologia de computadores amadureceu, modularizou e produziu. Costumávamos exigir engenheiros de software altamente treinados e formalmente formados em todos os aspectos da computação porque o número de computadores em uma empresa ou instituição era ... um. Um computador muito grande, muito complicado e muito caro. Não havia redes como as pensamos hoje e nem Internet. Os indivíduos que trabalharam nessas máquinas tinham que ser cientistas, engenheiros e matemáticos completos. Os rigores desses primeiros trabalhos foram incrivelmente intensos porque a própria tecnologia era imatura e amplamente experimental. À medida que a tecnologia do computador amadureceu, tornou-se modular, produtiva e empacotada (como qualquer tecnologia). Uma pessoa não precisaria mais ser matemático, engenheiro, programador, administrador de rede e administrador de banco de dados. As tecnologias se tornaram plug-and-play e os trabalhos para eles também. Os papéis técnicos (como a própria tecnologia) foram divididos entre muitos especialistas treinados em foco, em vez de alguns generalistas altamente instruídos.



Encontrei o bug! É uma mariposa .

Isso acontece em todos os campos. Os primeiros dias são reservados para os visionários e os mais talentosos e instruídos. Os primeiros dias são preenchidos apenas pelas mentes mais sérias com educação formal, porque cada pessoa precisa ter pleno conhecimento de todo o campo. Considere os primeiros dias da indústria automotiva (antes de ser uma indústria); somente aqueles com um conhecimento sério de metalurgia e engenharia poderiam construir, projetar ou consertar um automóvel. Construir ou consertar um automóvel no início dos anos 1900 poderia literalmente exigir conhecimento e habilidade em ferraria, metalurgia, fabricação, engenharia, física e química (educação formal ou não, você ainda precisava saber muito). Nas décadas de 1930-40, a demanda por automóveis disparou, a linha de montagem foi inventada e as peças modulares foram criadas. Hoje, o trabalhador médio em uma linha de montagem que produz automóveis tem pouco ou nenhum conhecimento da engenharia e metalurgia que entra em um automóvel, e muito menos da informática agora também necessária para controlar o veículo. Da mesma forma, temos técnicos automotivos que têm pouco ou nenhum conhecimento de engenharia ou metalurgia (ou ciência da computação). Eles usam equipamentos de diagnóstico para explicar o problema, encomendam peças on-line e trocam as peças. Esses técnicos e trabalhadores da linha de montagem são treinados e qualificados, mas de uma maneira completamente diferente de um engenheiro mecânico ou metalúrgico. Isso já aconteceu nos campos de ciência da computação e engenharia de software - porque e muito menos a ciência da computação agora também precisava controlar o veículo. Da mesma forma, temos técnicos automotivos que têm pouco ou nenhum conhecimento de engenharia ou metalurgia (ou ciência da computação). Eles usam equipamentos de diagnóstico para explicar o problema, encomendam peças on-line e trocam as peças. Esses técnicos e trabalhadores da linha de montagem são treinados e qualificados, mas de uma maneira completamente diferente de um engenheiro mecânico ou metalúrgico. Isso já aconteceu nos campos de ciência da computação e engenharia de software - porque e muito menos a ciência da computação agora também precisava controlar o veículo. Da mesma forma, temos técnicos automotivos que têm pouco ou nenhum conhecimento de engenharia ou metalurgia (ou ciência da computação). Eles usam equipamentos de diagnóstico para explicar o problema, encomendam peças on-line e trocam as peças. Esses técnicos e trabalhadores da linha de montagem são treinados e qualificados, mas de uma maneira completamente diferente de um engenheiro mecânico ou metalúrgico. Isso já aconteceu nos campos de ciência da computação e engenharia de software - porque Esses técnicos e trabalhadores da linha de montagem são treinados e qualificados, mas de uma maneira completamente diferente de um engenheiro mecânico ou metalúrgico. Isso já aconteceu nos campos de ciência da computação e engenharia de software - porque Esses técnicos e trabalhadores da linha de montagem são treinados e qualificados, mas de uma maneira completamente diferente de um engenheiro mecânico ou metalúrgico. Isso já aconteceu nos campos de ciência da computação e engenharia de software - porquetinha que acontecer.

Técnicos de Programação

Assim como no exemplo automotivo, a demanda por trabalhadores qualificados em programação disparou. Ao mesmo tempo, computadores e software tornaram-se modulares, empacotados e produtificados. Também vimos um crescimento explosivo nas áreas relacionadas à ciência da computação, como redes, administração de sistemas, criptografia, bancos de dados, engenharia elétrica etc. Simplesmente, não podemos permitir que todos na área de computadores sejam um cientista da computação e matemático altamente treinado, apenas como não poderíamos construir ou consertar carros se fosse exigido a todos os trabalhadores e mecânicos da linha de montagem um mestrado em engenharia mecânica. Simplesmente não funciona assim.

Cada vez mais, o que temos hoje atrás dos teclados de computador é análogo ao técnico automotivo qualificado e treinado (em oposição a um engenheiro mecânico formalmente treinado). O "codificador" ou "desenvolvedor" é cada vez mais alguém sem formação formal ou extensiva em ciência da computação. Em vez disso, é uma pessoa que foi treinada especificamente em programação como uma habilidade técnica e também possui alguma educação básica em ciência da computação, mas principalmente no que se refere diretamente à programação. Hoje em dia, a programação não ocorre mais em um ambiente complexo e experimental, que requer educação extensiva e formal em ciência da computação. Atualmente, muita programação exige algo análogo ao técnico automotivo, a capacidade de identificar a peça necessária, saber onde encontrá-la e conectá-la adequadamente. Um programador diário não precisa mais saber como projetar e construir um algoritmo de classificação ou pesquisa e analisar seu desempenho matematicamente antes de implementá-lo. Um programador simplesmente encontra o tipo ou pesquisa "parte" e o conecta.

O que estamos vendo não é o desaparecimento do verdadeiro engenheiro de software ou cientista da computação, o que estamos vendo é a ascensão do técnico programador.

Esses novos trabalhadores qualificados são aqueles com conhecimentos básicos de ciência da computação, mas apenas no que se refere diretamente à programação, juntamente com treinamento prático em programação.

Verdadeira Ciência da Computação e Engenharia de Software: Viva e Bem

Cientistas da computação e verdadeiros engenheiros de software não foram substituídos por "codificadores", "desenvolvedores" e "hackers". Estamos simplesmente reorganizando nossas profissões e posições no que é um setor em amadurecimento. Graças a cientistas da computação, engenheiros e matemáticos, em primeiro lugar, o técnico de programação (ou seja, o moderno "desenvolvedor" ou "codificador") agora é possível. Agora, o software de construção é modular e, principalmente, pré-empacotado e prescrito, graças aos avanços da ciência da computação que levaram a extensas bibliotecas de software, gerenciadores de pacotes, gerenciadores de dependência, ambientes de desenvolvimento integrados, software como serviço, infraestrutura como um serviço, repositórios de códigos distribuídos e, claro, a Internet; tudo isso começou com PhDs e engenheiros em laboratórios de pesquisa em ciência da computação. Além disso,

Os cientistas da computação ainda estão trabalhando duro na construção de novas teorias e novas tecnologias. Engenheiros de software formalmente formados com ciência da computação ainda estão transformando essas teorias em realidade. No entanto, agora que essas novas tecnologias se filtram para aquelas nas linhas de frente; são os técnicos programadores que realizam a maior parte do trabalho pesado diário no desenvolvimento de software.

Cientistas da computação, matemáticos e engenheiros de software formalmente formados em ciências da computação ainda estão aqui, e a demanda por eles é maior do que nunca, é apenas um pouco mais difícil de identificar como proporção do número total de pessoas no campo. Engenheiros e cientistas formais costumam representar 100% das pessoas do setor. Agora eles compõem uma porcentagem cada vez menor. Não porque eles estão sendo substituídos, mas porque, graças a cientistas de computação e engenheiros de software treinados formalmente, é criado um novo emprego de alta demanda; o técnico programador.

Não apenas o verdadeiro engenheiro de software e cientista da computação não caiu, ainda estamos aqui e estamos melhor do que nunca. Temos apenas um novo colega que devemos receber de braços abertos, porque vamos ser sinceros, eles estão nas trincheiras fazendo a maior parte do trabalho agora.

Agora é sua escolha

Graças ao crescimento explosivo da tecnologia e ao trabalho daqueles pioneiros em engenharia de software, uma geração inteira de pessoas agora pode ter carreiras lucrativas e envolventes no que costumava ser um campo quase inacessível. Assim como a revolução automotiva e de manufatura das décadas de 1930-40 levou à criação da classe média e a um aumento sem precedentes nos padrões de vida, a revolução de TI da década de 2000 está fazendo a mesma coisa. Estamos vendo a democratização da ciência da computação e isso é uma coisa boa.


A escolha agora é sua. Quase todos podem fazer parte da contínua revolução técnica e garantir uma carreira bem remunerada e envolvente em tecnologia. A escolha agora não é se você pode estar no setor de tecnologia, agora é sobre onde e qual nível do setor você deseja estar e comovocê chega lá? Doutorados em ciência da computação ainda estão pesquisando e apresentando novas teorias todos os dias. Aqueles com diplomas avançados em matemática e ciências da computação ainda estão testando e implementando essas teorias em tecnologias reais e práticas. Engenheiros de software formalmente treinados e com formação em ciências da computação são os arquitetos e líderes de software. Técnicos de programação (isto é, codificadores, desenvolvedores e programadores modernos) estão na linha de frente, colocando as peças no lugar, montando e mantendo os sistemas, enquanto analistas e administradores as apoiam.

Ao contrário dos primeiros dias em que apenas os mais altamente treinados e instruídos poderiam sequer pensar em entrar no campo da computação, agora você pode escolher seu nível de ensino e escolher ou mudar seu lugar à vontade, avançando sua educação. No entanto, só para esclarecer, se você deseja ganhar a vida codificando, ainda não consegue obter algum conhecimento básico em ciência da computação e ainda precisa ter uma afinidade com as habilidades e o estilo de vida . Ainda não é fácil. Agora é só agora que você decide onde começar e até onde irá