
“Às vezes acontece que o círculo do horizonte de um homem se torna cada vez menor, e quando o raio se aproxima de zero, ele se concentra em um ponto. E então isso se torna o ponto de vista dele.
David hilbert
"Quando pensei que havia atingido o fundo do poço, alguém bateu de baixo."
Stanisław Jerzy Lec
Prefácio
Um programador precisa de um ensino superior? O fluxo de opiniões sobre esse tópico, sem dúvida urgente, não secou, por isso decidi expressar minha opinião. Parece-me que o desapontamento geral na educação se deve aos inúmeros processos e mudanças na profissão e precisa de estudos sérios. Abaixo discutirei os equívocos, mitos e causas subjacentes mais comuns do fenômeno.
Talvez você veio ao lugar errado
Mais uma vez, lembro: a universidade não é uma escola profissional. As universidades produzem cientistas e engenheiros, não trabalhadores e técnicos de colarinho azul.
A universidade fornece conhecimentos fundamentais, que não se tornarão obsoletos quando você terminar seus estudos. Um biólogo do National Institutes of Health escreveu para mim:
"Os tempos mudam, mas os fundamentos não mudam" . Excelentes palavras! É por isso que é melhor escolher a direção geral da educação e tentar fazer o número máximo de cursos eletivos, e é por isso que, nas universidades, os estudantes de graduação em física recebem (como muitas pessoas imaginam) tantos cursos
"desnecessários" , como biologia, química ou literatura, em vez dos especiais.
Carl Sagan, famoso astrônomo, mencionou em seus livros que estava trabalhando no laboratório de genética e fez experimentos para testar a hipótese da abiogênese enquanto estudava. É ótimo que, nos EUA, seja possível (além da principal principal) adicionar algumas outras especialidades (menores). Esta é uma oportunidade maravilhosa que muitos outros países como a Rússia não oferecem. Portanto, se você tiver uma escolha entre a teoria da evolução e a programação Java - escolha a primeira, talvez, algum dia esse conhecimento será útil na sua carreira ou na sua vida. Você ainda aprenderá o Java - se realmente precisar dele -, mas é improvável que aprenda a história do nosso planeta. Além disso, a evolução é uma idéia tão geral e universal que pode ser aplicada a quase qualquer disciplina de engenharia. Lembre-se, estreitar seus horizontes é sempre mais fácil do que expandi-los.
Até o ponto, a situação nas universidades estrangeiras não é fundamentalmente diferente. Como resultado de muitos anos de evolução paralela, o mundo desenvolveu requisitos semelhantes para profissionais. Você está certo de que em outros países será ensinado de uma maneira diferente, mas errado se pensar que aprenderá coisas diferentes. As universidades de outros países diferem nos processos educacionais, nos nomes e nas quantidades de cursos, na qualidade das práticas e na ciência real, mas a base teórica é semelhante em todos os lugares. A razão para tal unificação é bastante clara: as leis da natureza são invariantes em todos os países. Portanto, especialistas de um país são capazes de trabalhar em todo o mundo.
Quem são os programadores?
Para ilustrar a importância da pergunta, voltarei a uma analogia. Imagine que você pergunte a alguém qual é a profissão dele e ele diz que é construtor. Você consegue adivinhar o que ele faz sem nenhuma informação adicional? Não. Ele poderia ser um arquiteto com educação artística, engenheiro, capataz, trabalhador qualificado ou faxineiro. Agulhas a dizer, muitas dessas áreas têm suas próprias especializações. E ainda todos eles seriam chamados de construtores, mas é óbvio que eles são tipos muito diferentes de construtores. Para fazer uma casinha de cachorro, não é preciso ter uma educação especial, mas sem ela ninguém pode construir um arranha-céu.
No entanto, aqueles que constroem casinhas de cachorro geralmente não são chamados de construtores. Por outro lado, quase todo mundo agora é chamado de programador. Um cientista da computação que inventa novos algoritmos; desenvolvedor de software de navegação da NASA; um especialista em linguagem Assembler que estuda vírus; um estudante que cria páginas HTML - todos eles são programadores agora. Portanto, antes de responder à pergunta: “Um programador precisa de ensino superior?”, Você deve esclarecer - que tipo de programador? Talvez, no seu caso particular, a educação obviamente não seja necessária.
Quer gostemos ou não, os sonhos dos
irmãos Strugatsky de um mundo de jovens assistentes de pesquisa estão em colapso. A grande maioria das pessoas não vai se tornar cientista ou engenheiro e definitivamente não precisa de um diploma universitário. O grau de associado de dois anos atende completamente às suas necessidades. Porque, em regra, seus desejos e necessidades não atendem aos objetivos da educação universitária e seu trabalho proposto tem pouco a ver com ciência ou engenharia. Isso não é terrível, pois o número de engenheiros em qualquer campo em um determinado momento sempre foi menor do que os técnicos e trabalhadores de colarinho azul. Não há nada de humilhante na profissão de colarinho azul, especialmente se você gosta, mas não faz sentido que uma dessas pessoas se chame de engenheiro. Em vez disso, você precisa admitir honestamente quem você quer ser e não exigir que as universidades sejam o que não deveriam. Apenas uma coisa, por favor, não se chame de programador, porque um programador é um engenheiro.
Os engenheiros não podem ser colares azuis. Mesmo para desenvolver um programa simples, você deve ser um bom engenheiro, ou seu programa será grande e lento, consumindo recursos do computador e produzindo tráfego desnecessário, inundando a rede. Por outro lado, os colarinhos azuis fazem trabalhos não criativos, geralmente não tomam decisões e não resolvem problemas; se eles seguem as instruções, eles fazem seu trabalho muito bem.
No entanto, já houve trabalhadores de colarinho azul na programação há muitos anos. Eles eram tipógrafos, que codificaram programas escritos por engenheiros em um papel. E eles desapareceram muito rapidamente quando os computadores obtiveram terminais mais convenientes.
Meça três vezes e corte uma vez
Cada profissão possui um conjunto mínimo de conhecimentos obrigatórios. Em ciência da computação e programação, essa base são os cursos de matemática; então a pergunta "Um programador precisa de educação?" geralmente se transforma em "O programador precisa de matemática?" ou "O programador precisa de tanta matemática?" Dado que um programador no sentido clássico é um engenheiro, a pergunta pode ser formulada de maneira diferente: "Um engenheiro precisa de educação?" Discussões sobre essa forma de pergunta geralmente não surgem. O problema, talvez, é que nem todo mundo quer ser cientista ou engenheiro. Se o limite dos seus sonhos é publicar um jogo simples na App Store e não projetar inteligência artificial, algoritmo criptográfico ou software de engenharia CAD, você pode facilmente ignorar a universidade para iniciar sua carreira, mas mesmo neste caso, é bom. a educação o ajudará.
As universidades não sabem quem você se vê no futuro, e mesmo você nem o conhece na idade de sua inscrição. Acredita-se que é melhor ensinar todos os conceitos básicos do que perder algo importante. Além disso, os cursos básicos geralmente são interdependentes, e você não pode simplesmente pegar e remover alguns deles. Seu principal objetivo não é ensinar a você todo o conhecimento do mundo, pois isso é impossível em princípio, mas fornecer um mapa aproximado da ciência e da engenharia modernas; assim, quando você se deparar com algo desconhecido de vez em quando, poderá (provavelmente) decisão certa, em que direção seguir.
Vamos voltar à matemática. Quase todos os livros sobre algoritmos requerem alguma cultura matemática do leitor. Os algoritmos e as estruturas de dados - como disse
Niklaus Wirth - são os programas de computador e, se você não conseguir trabalhar com eles, não poderá ser chamado de programador. Essa não é necessariamente a capacidade de projetar seus próprios algoritmos, geralmente você precisa alterar os existentes, adaptando-os a casos individuais, mas também a capacidade de provar sua validade e aplicabilidade a uma variedade de condições e a capacidade de analisar seu comportamento em certas situações. A matemática é usada ativamente em áreas como criptografia, computação gráfica, reconhecimento de padrões, vídeo, som, processamento de imagens e sinais, física da computação, química e biologia e assim por diante. Mesmo na programação do sistema (que geralmente fica longe da matemática) sem conhecimentos matemáticos sérios, você não pode escrever compiladores, agendadores e drivers de sistema de arquivos.
A matemática é a base de todos os outros conhecimentos. Mas muitas pessoas começam a aprender a profissão desde o final. Programadores que estudaram linguagens de programação, ferramentas de desenvolvimento, várias tecnologias e padrões, mas não dominaram os fundamentos matemáticos, parecem artistas, que têm um entendimento perfeito das tintas e pincéis, aprenderam muitos truques, mas não conhecem a cor teoria, composição, perspectiva, anatomia humana e outros conceitos básicos. Eles podem ter muitas idéias brilhantes, mas não serão capazes de expressá-las. E tudo o que eles podem fazer é trabalhar como assistentes ou repintar as fotos de outras pessoas.
Ocasionalmente, a ignorância do básico cria novos estilos, como no caso de Vincent Van Gogh (para meu crédito, devo dizer que ele estava ciente de seus problemas e fazia aulas de pintura com profissionais), mas geralmente se torna um obstáculo à criatividade. E se na arte é possível justificar as imagens irônicas do artista dizendo que
"ele vê dessa maneira" , na indústria aeroespacial, tais casos (como quando o algoritmo de geração de números aleatórios errado levou a milhões de dólares de contribuintes honestos que erraram o alvo ), não pode ser justificado por nada.
Ao mesmo tempo, não devemos esquecer que, em grande parte, a matemática para programadores é uma caixa de ferramentas e não uma ciência, e os professores devem ensiná-los adequadamente, especialmente os cursos do primeiro ano, explicando aos alunos a razão de estudá-los.
Quanto às ciências sociais e outros cursos não essenciais, sua importância é marcada não apenas pelo fato de que alguém deve ser bem cultivado e educado, mas também porque a mente humana é extremamente imprevisível e às vezes se inspira em fontes incomuns. Meu professor de língua russa me contou uma história da época soviética, quando um instituto de aviação decidiu economizar dinheiro e assim se livrou dos cursos de literatura. E o que você acha que aconteceu depois? Logo o nível de engenheiros graduados havia diminuído. Posteriormente, os cursos de literatura foram devolvidos ao instituto. Portanto, todos esses cursos são necessários. Infelizmente, eles geralmente são mal ensinados, o que não aumenta sua popularidade; mas estamos falando da ideia, certo?
Portanto, se você não usar o conhecimento adquirido na universidade, provavelmente o problema não está na sua universidade, mas no seu trabalho, o que não lhe dá a chance de usá-lo. É tolice culpar a universidade por dar cursos
"errados" , quando você estudou como projetar algoritmos de criptografia, mas agora você cria páginas da web simples ou trabalha como gerente de vendas.
Por que universidades?
Bem, você disse, mas por que a educação regular é melhor do que a auto-educação? Afinal, a programação não é engenharia genética - você não precisa trabalhar em laboratórios especiais caros e pode aprender todas as teorias sentadas em casa. De fato, os programas educacionais das universidades são conhecidos, muitos cursos são abertos, você pode comprar qualquer livro, retirá-lo da biblioteca pública ou lê-lo na Web. No entanto, nem tudo é tão simples quanto parece. A matemática, em contraste com as tecnologias e linguagens de programação, geralmente é muito difícil de aprender. Você pode não saber que está fazendo algo errado, a menos que seja informado sobre isso. Os contatos pessoais são muito importantes e podem economizar muito tempo e nervos. Por exemplo, você pode ouvir a palestra por algumas horas e entender muito pouco, enquanto durante o intervalo, em alguns minutos, encontra todas as respostas do professor. Alguns programadores ainda precisam de laboratórios e condições especiais, por exemplo, aqueles que desejam trabalhar com microprocessadores de arquitetura única, supercomputadores, robôs industriais ou satélites.
Estudar em uma universidade também é uma oportunidade de ganhar experiência prática em empresas e organizações, que de outra forma não seriam possíveis. Esta é uma oportunidade para fazer ciência, escrever artigos e participar de conferências, condição necessária para o trabalho nos laboratórios de pesquisa de muitas empresas, como Samsung, Phillips ou IBM. Quase todas as tecnologias de mudança mundial foram desenvolvidas nas universidades e algumas, como a famosa
LLVM , cresceram a partir de projetos de estudantes. Empresas conhecidas foram fundadas por cientistas e graduados dentro dos muros das universidades: Silicon Graphics, Sun Microsystems, Yahoo, Adobe e muitos outros.
Por último, mas não menos importante, sem educação formal, as portas de muitas organizações de pesquisa (como NASA, NIH, CERN ou ARPA-E) serão fechadas para você. Você precisa provar seu profissionalismo e ser muito melhor que os concorrentes, porque quando todas as outras qualificações forem iguais, a educação formal será uma vantagem para eles. Além disso, sem um diploma, é muito difícil obter uma permissão de trabalho em outros países. (Não é muito importante para os EUA, mas ainda é útil.)
Quando alguém bate por baixo
O problema é global, mas o mais acentuado na programação. E é por isso. Reduzir a barreira do nível de entrada fez uma piada cruel sobre a profissão. Inicialmente, todas as ferramentas de desenvolvimento foram escritas por programadores experientes para simplificar seu trabalho. Essas tecnologias foram úteis apenas se você entender quais processos ocorrem nelas. Assim, eles permitiram que você escrevesse mais programas em menos tempo, mas a qualidade deles dependia exclusivamente de seus conhecimentos e habilidades, porque as ferramentas de desenvolvimento ainda não sabem como pensar e tomar decisões por você. Então alguém decidiu que a simplificação da programação atrairia mais pessoas para a profissão. Muitas pessoas sonhavam com uma época em que todos seriam capazes de escrever programas, independentemente de suas habilidades.
Medo dos seus desejos. Infelizmente, seus sonhos agora são amplamente uma realidade, e não como foi planejado nos anos setenta. Agora você pode criar programas a partir de blocos de construção, mesmo sem entender como eles funcionam. Se você não é profissional, será um programa ruim, mas (infelizmente) funcionando. A disseminação de tecnologia barata e a facilidade de desenvolvimento levaram ao fato de que o mercado agora está inundado por programadores pouco qualificados. Como
diz a lei de Say, "a oferta cria sua própria demanda". Muitas empresas contratam esses "programadores" não porque realmente precisam deles, mas apenas para não serem piores que seus concorrentes. A regra é simples: se você não pode contratar programadores profissionais, não precisa deles. Basta comprar o produto existente ou encomendá-lo a uma empresa de software profissional.
Mas não basta escrever um programa, você ainda precisa publicá-lo. E, novamente, o surgimento de muitas lojas online proporcionou uma oportunidade para todos. Google, Apple, Microsoft e outras empresas de software estão interessadas principalmente no maior número possível de programas para suas plataformas e também estão lançando ferramentas de desenvolvimento para elas. Em tais circunstâncias, o processo de desenvolvimento é ainda mais simplificado, o que levou a uma diminuição ainda maior na barreira de entrada da programação.
O resultado de tudo isso é a ilusão de facilidade de programação, as pessoas começaram a pensar nisso como algo não sério, que não requer conhecimento e educação especiais. Essa opinião foi formada não apenas pelos iniciantes, mas também (o que é muito pior) por clientes e empregadores inexperientes. Muitos de vocês viram as vagas com uma lista impressionante de habilidades, idiomas, bibliotecas e tecnologias necessárias, muitas responsabilidades (com a possível exceção dos serviços de limpeza), mas todas oferecidas com um salário modesto (se não para dizer ridículo).
É difícil imaginar em setores como a engenharia aeroespacial, onde o preço dos erros é a vida humana. Em tais profissões, a seleção é muito difícil. Ninguém quer perder milhões de dólares em pagamentos de seguros, retirada de licenças e má reputação. Assim, um engenheiro aeroespacial pode ser bom ou inexistente, porque ninguém deseja contratar o ruim, mesmo que ele peça um salário muito pequeno. Muito diferente da programação, na qual não há limite inferior, e todo programador, mesmo com pouca qualificação, não ficará sem emprego. Nossa civilização ainda está viva apenas porque a maior parte do trabalho realizado pelos programadores não é crítica, podemos viver facilmente sem ela e quaisquer problemas não levam ao desastre. Imagine que todos os jogos de computador de repente parassem de funcionar no mundo, seria um desastre? Claro que não! Sem dúvida, este será um problema global, mas certamente não um desastre. No entanto, se o mesmo destino acontecesse com aeronaves, o resultado seria trágico.
No entanto, o perigo está chegando. A programação agora está em quase todos os lugares e se espalha muito rapidamente. Os erros dos programadores em software já custam muito, e o preço desses erros aumentará até atingir a vida humana. Você pode se lembrar das falhas da
sonda espacial Mariner I (28 de julho de 1962), do
voo 501 da Ariane 5 (4 de junho de 1996), do
Mars Climate Orbiter (10 de novembro de 1999), do
Patriot Missile (25 de fevereiro de 1991) e finalmente do
Therac-25 que expôs seis pessoas a sobredosagens massivas de radiação, matando quatro e deixando outras duas com ferimentos ao longo da vida (1985-1987). Portanto, o dia em que seu bule programável pode matá-lo, porque o firmware é escrito por programadores pouco qualificados de uma empresa de terceirização sem nome (localizada em algum lugar no Laos) não está longe de hoje. Você é avisado.
Vida real
Obviamente, isso não significa que uma excelente educação ou conhecimento perfeito de matemática o transformarão em um programador de classe mundial (pode ser necessário, mas não suficiente). Todo mundo sabe que muitos dos graduados da universidade não estão trabalhando em seu campo. E eu pessoalmente conheço muitos matemáticos que escrevem programas horríveis. A propósito, você pode simplesmente não ter habilidades em programação, uma situação muito comum. Portanto, sou contra o uso de critérios simplificados. Na vida real, tudo é importante: educação formal, conhecimento, pesquisa, prática e, por último mas não menos importante: seu desejo.
As pessoas costumam pensar que a universidade é um elevador, o que os ajudará a subir ao topo de sua carreira, enquanto na realidade é mais como escadas, e para alcançar seus objetivos, você precisa se mudar. A educação não garante um bom emprego se você não se esforçar, mas pode ajudá-lo a conseguir um, se você se esforçar. E se você durante seus estudos não participou de nenhuma pesquisa ou projeto comercial e começou a procurar trabalho somente após a sua graduação, a programação (como qualquer outra engenharia) não é a profissão para você.
Como eles fizeram isso?
Bill Gates, Mark Zuckerberg, Larry Ellison. Lendo histórias de sucesso de pessoas famosas, muitas mentes imaturas pensam assim: "Se eles poderiam fazer isso, então eu posso fazê-lo." Talvez. Mas lembre-se de que o sucesso é um conceito muito versátil, uma coisa é ser um profissional de marketing bem-sucedido e outra é ser um engenheiro de destaque. No entanto, não é segredo que alguns programadores mundialmente famosos não têm educação formal, mas antes de você experimentar suas vidas, lembre-se de que são raras exceções entre muitos perdedores desconhecidos. Se alguém pular de uma janela e sobreviver, isso não implica que você não deva usar as escadas. Da mesma forma, a educação não deve (um erro muito comum) ser confundida com o diploma, o fato de alguém não ter concluído a educação, não significa que eles não tenham ganho nada com ela. É provável que eles tenham estudado por vários anos, frequentado cursos e adquirido algum conhecimento. Alguns deles (como Steve Wozniak) ainda voltaram e concluíram seus estudos muitos anos depois.
Igualmente importantes são suas habilidades e caráter mentais: como regra geral, são todos brilhantes, inteligentes, talentosos e um tanto brilhantes, pessoas que sabiam desde o início o que precisavam, têm um propósito e têm uma eficiência de trabalho fenomenal. Eles não pedem a opinião de outras pessoas e não impõem a sua. E, no entanto, alguns deles, por exemplo,
John Carmack (o autor dos jogos DOOM e Quake) lamentam não ter recebido uma educação formal e serem muito autoconfiantes.
Se você é o mesmo que eles são, sinceramente desejo-lhe sucesso, caso contrário, não é melhor usar uma maneira mais clara e comprovada?
O futuro dos empregos de colarinho azul
A questão é que as profissões de colarinho azul se extinguem lentamente porque são substituídas por robôs e máquinas automáticas. Agora fábricas inteiras são governadas por alguns engenheiros e técnicos qualificados. Isso é bom porque nenhum trabalho industrial deve ser realizado manualmente mais de uma vez. E isso é especialmente verdadeiro na programação, porque na programação o trabalho não criativo pode ser automatizado com muita facilidade. O mundo atual não precisa de mais colarinhos azuis, porque as máquinas fazem seu trabalho muito bem, precisa de mais cientistas e engenheiros que inventarão o nosso futuro. Da mesma forma, o mundo não precisa de mais programadores pouco qualificados (mesmo que não sejam colarinhos azuis em nenhum sentido), porque serão substituídos muito rapidamente por máquinas e programas inteligentes. Em vez disso, o mundo precisa de mais programadores altamente qualificados, verdadeiros engenheiros, que mudarão nossa vida, tornando-a melhor, mais segura e por mais tempo.
Veja as posições em aberto nos departamentos de pesquisa de muitas empresas. Como mencionado anteriormente, há muitos programadores e a concorrência é muito alta; entretanto, essas empresas e instituições não conseguem encontrar bons pesquisadores e engenheiros de programação! Muitas posições estão abertas por anos. Então, onde está a concorrência e o excesso? Eles estão em grande parte nos níveis baixos. A triste verdade é que, à medida que a programação se torna mais fácil para os não profissionais, os níveis baixos serão mais transbordados. O salário diminuirá até que os programadores pouco qualificados não recebam mais do que os funcionários do McDonalds.
O bom ensino superior é muito caro e leva muitos anos, mas é a base do seu futuro, que se estenderá ao futuro de sua família. Portanto, é hora de escolher se você
“codificará por comida” a vida toda ou se trabalhará em uma boa empresa por um salário mais alto. Além disso, a recompensa não é apenas o seu salário, mas também um trabalho interessante para mudar o mundo.