Como se tornar um programador: orientação para futuros profissionais

Então, vamos lá...

image

Você está prestes a concluir o primeiro ano (e acredite, nada vai mudar em um ano ou em dois). Mas, ao mesmo tempo, na sua cabeça, praticamente não há conhecimento algum. E mesmo quando você terminar a faculdade, poderá esperar um salário de 250, no máximo 300 unidades monetárias no primeiro ano. É difícil até te chamar de júnior, pois você sabe muito pouco de teoria e não tem prática.

Você vai ter um conhecimento teórico fraco por quatro razões:

  1. É uma área muito ampla, e estudar tudo isso no decorrer do curso é impossível.
  2. Na maioria das vezes, o material estudado é ultrapassado.
  3. Nas aulas, é provável que você esteja nas redes sociais, conversando com colegas e apenas aparecendo para marcar presença. Você absorve apenas 30-40% do que acontece, e mesmo que a matéria seja fácil e você memorize 80%, isso não é confirmado na prática após as aulas, quando você fica no computador durante seu tempo livre. Nas aulas prãa;a;micas, por exemplo, eu costumava jogar Counter-Strike em rede (e, mesmo assim, consegui fazer as tarefas de forma mínima para passar).
  4. Para estudar e absorver conhecimento, é necessário ter o estado de espírito ideal, o interesse e o ambiente adequados. Às 8-10 da manhã, é improvável que qualquer estudante tenha isso, e, como resultado, o material é mal assimilado. Assistir a uma aula na faculdade e ver a mesma aula em casa, à noite, no sofá, no YouTube, são coisas diferentes.
image

Assim, como resultado, você terá mais de 20-22 anos após a faculdade. Você não sabe nada e não tem habilidades. No melhor dos casos, no último ano, você encontrará algum trabalho temporário e, pelo menos lá, começará a ganhar alguma experiência.

Você passa todo o seu tempo livre passeando, assistindo a séries e arrumando sua vida pessoal? Se você está entrando na área de TI, esse modo de vida definitivamente não é para você.

Eu já não estudo mais na faculdade, passei pelo ensino técnico e pela universidade em cursos de TI, e tenho uma compreensão e percepção totalmente diferentes de tudo isso. A primeira coisa que vou te dizer é que lá você não vai aprender nada, e já citei quatro razões importantes para isso. A segunda é que, se você realmente gosta dessa área, precisa se acostumar a trabalhar em si mesmo e a se autoeducar. Autoeducar-se sempre e todos os dias. Raramente consigo encontrar um dia em que não estou assistindo ou estudando algo novo (às vezes isso acontece no trabalho em segundo plano), mais muitas vezes é no meu tempo livre.

image

Eu também saio para passear todos os dias, tenho minha vida pessoal, pratico esportes, como correr e jogar futebol, além de outros interesses, hobbies e viagens. É preciso apenas planejar seu tempo. Às vezes, vale a pena fazer planos para a semana, mas planeje de forma que algo possa mudar. E o mais importante: acostume-se a aprender... sempre e quase todos os dias.

image

Programadores, em geral, são pessoas preguiçosas... É melhor aprender com livros, mas como também sou preguiçoso, ouço podcasts e assisto ao YouTube (e agora já alcancei um entendimento bastante bom sobre programação, e é difícil encontrar algo realmente interessante e novo no YouTube, mas ainda assim encontro e assisto, e de vez em quando leio livros). Portanto, acostume-se a se dedicar à autoeducação todos os dias. Você pode escolher podcasts sobre programação que ressoem com você e ouvir os novos episódios — assim você estará por dentro das novidades e tecnologias no mundo da TI como um todo.

image

Não espere que, após a defesa do seu diploma, algo mude... Você se tornará mais inteligente e receberá uma ligação de alguma empresa oferecendo um emprego, mesmo que seja por 400 dólares. Apenas imagine que você recebeu seu diploma ontem e precisa seguir em frente.

image

Agora, no primeiro (ou segundo, não importa) ano, é muito importante entender o que você vai fazer nessa área. Já que você escolheu programação em TI, e não SEO, por exemplo, ou design, existem algumas áreas:

  • Programação de sistemas (escrita de sistemas operacionais, drivers, etc.) — é programação de baixo nível, que, na minha opinião, é um pouco chata, mas também complexa.
  • Desenvolvimento de jogos — aqui não há muito o que comentar... É bom saber física.
  • Desenvolvimento web — não é tão complicado, é bastante interessante, mas posso dizer que você precisa saber uma quantidade incrível de coisas (embora em outras áreas, provavelmente, também seja assim).
  • Desenvolvimento mobile — também não diria que é difícil (aqui, na verdade, há uma divisão em duas áreas: Android ou iOS, embora existam outras áreas menores também). No desenvolvimento web, aliás, também há duas direções: backend e frontend.
  • Programação aplicada — escrita de programas para notebooks e PCs — também é de complexidade e interesse comuns. Geralmente, é por aqui que se começa nas universidades.
  • Programação científica — algo específico, voltado para um perfil estreito e para a ciência: seja biologia, química, matemática, etc.
image

Na minha opinião, as áreas mais demandadas são desenvolvimento web, mobile e aplicações desktop. Você pode mudar de direção a qualquer momento. Mas se você é sênior em programação aplicada, isso não significa que, ao entrar no desenvolvimento mobile, você será sênior lá também. Seu nível pode cair para mid-level por alguns anos (ou, na melhor das hipóteses, um ano), pois é um campo totalmente diferente com suas próprias particularidades.

Os programadores também têm sua classificação por níveis de conhecimento:

  • Júnior — não sabe nada, comete muitos erros. Todas as tarefas precisam ser revisadas, possivelmente corrigidas. Sem experiência de trabalho ou com experiência muito limitada.
  • Mid-level — um programador razoavelmente bom, capaz de resolver tarefas médias e, às vezes, desafiadoras (como algoritmos). Tem de 1 a 2 anos de experiência. Já sabe algo e pode ser confiável.
  • Sênior — um especialista muito competente, que sabe tudo ou quase tudo. Tem pelo menos 4 a 5 anos de experiência. Às vezes, para alcançar esse nível, pode ser necessário mais tempo (depende das qualidades pessoais da pessoa e, possivelmente, da área de atuação).

Novamente, quanto à experiência e todas essas classificações — tudo isso é relativo. Um sênior em nossa empresa em Minsk pode ser apenas um júnior no Google.

Além disso, podemos destacar o team lead (vamos chamá-lo de "líder de equipe" :) ). Ele distribui as tarefas entre os membros da equipe, verifica tudo e também realiza algumas tarefas mais complexas. Toda a responsabilidade pelas tarefas da equipe recai sobre ele. Normalmente, eles são mais experientes, mas também podem ser mid-level muito bons.

Ainda há os arquitetos de software — pessoas extremamente inteligentes, que também são sêniores, ou até mais (eu ainda não alcancei esse estado de "zen", então não posso afirmar com certeza :)). Tudo depende do nível. Por exemplo, para projetar a arquitetura de um sistema web de forma adequada, não basta ser um sênior em backend; é necessário ter um bom conhecimento em frontend — e isso já o torna um desenvolvedor full-stack.

Não dê ouvidos a pessoas que tentam impor suas tecnologias e linguagens de programação, dizendo que uma é melhor que a outra... Tudo depende das situações e das tarefas. E no mercado, existem de 5 a 10 linguagens que não mudam há cerca de 20 a 25 anos e continuam a se manter relevantes (às vezes, apenas trocam posições entre si quando algo novo surge em termos de recursos, atualizações ou, por exemplo, frameworks para essas linguagens, mas todas essas linguagens ainda estão em desenvolvimento). Eu destacaria as seguintes linguagens: C, C++, C#, Python, Java, JavaScript e PHP. Entre as mais novas, podemos mencionar Go e talvez Rust. E as linguagens de desenvolvimento mobile, como Kotlin ou Swift — as duas últimas são realmente relativamente novas (provavelmente, têm cerca de 4 a 5 anos de uso ativo) — isso tem uma explicação lógica, já que o desenvolvimento mobile é uma das áreas mais novas em comparação com web ou aplicações desktop, então algumas linguagens específicas surgiram mais tarde do que em outros lugares.

É importante entender que as linguagens de programação podem ser funcionais ou orientadas a objetos (existem outras paradigmas também), e é fundamental perceber que elas diferem entre si em muitos aspectos... Além disso, é preciso lembrar como elas funcionam: algumas utilizam compiladores, outras utilizam interpretadores (mas isso já são nuances). É realmente incrível quando um programador compreende a nível de assincronidade, processos e threads, mais isso não acontece da noite para o dia.

Também não escute aqueles que dizem que, por exemplo, PHP é uma linguagem ruim — essa é a opinião de pessoas que demonstram sua ignorância sobre programação (essa piada surgiu devido a programadores ruins, ao baixo nível de entrada da linguagem, o que é mais um ponto positivo do que negativo, e porque, no passado, PHP realmente era ruim... mas isso foi nos anos 2000, no máximo entre 2007 e 2010. Hoje em dia, é uma linguagem muito boa, e mais de 70% dos projetos web no mundo (backend) são feitos com ela). O mesmo se pode dizer sobre JavaScript (existe até uma piada sobre prostitutas e JS). Eu também não sou fã de JavaScript, mas o utilizo com frequência. Também ouvi críticas sobre Java e Python... embora ache que para qualquer linguagem você pode encontrar piadas. Então, tudo isso é uma questão de gosto.

Assim, depois que você decidir sua direção, tentarei explicar, usando tecnologias web como exemplo, por que é tão importante começar a aprender programação o quanto antes e por que não se deve contar apenas com instituições de ensino. Para se tornar um especialista de destaque, você precisa conhecer bem apenas algumas linguagens de programação. Além das linguagens, é necessário entender uma série de tecnologias, protocolos e algumas outras coisas que são úteis não só para web, mas para todos os programadores. Eu nem vou falar do fato de que você precisa saber algoritmos e que é altamente recomendável ter conhecimentos em disciplinas matemáticas (como matemática avançada, teoria da probabilidade, matemática discreta e modelagem matemática). No entanto, ao responder honestamente a perguntas como "Os programadores modernos precisam de matemática?" (a menos que seja um trabalho específico), eu diria que é desvendamente "não, não precisam". Em 80% dos casos, o trabalho se resume a pegar dados do banco de dados e exibi-los na interface (na tela, para ser mais claro). Também pode ser o caso de gravar dados no banco de dados. O que realmente importa é fazer isso corretamente, de acordo com alguma arquitetura. Vou listar aqui o que eu acho que é necessário para um bom desenvolvedor full-stack web (e isso servirá tanto para desenvolvedores frontend quanto backend)... é uma lista enorme e indistinta, mas é algo que você precisa saber. Então, vamos lá:

image

Frontend:

  1. HTML5 (e é importante ficar de olho no que está planejado para a versão 6).
  2. CSS (idealmente, acompanhe os rascunhos). Usar seletores corretamente (lembrando que o CSS funciona da direita para a esquerda, entre outras coisas):
    • Conhecer pelo menos um framework CSS e entender como ele funciona (Bootstrap é uma boa opção).
    • Saber sobre pré-processadores CSS (Sass, Less, etc.) — entender como funcionam e como usá-los.
    • Conhecer o básico de SEO — é fundamental (entender como usar as tags HTML5, saber que elementos de bloco não podem ser colocados dentro de elementos inline, onde e em que quantidade usar as tags h1-h6, etc.).
  3. JavaScript (a partir do ECMAScript 6) — você pode passar muito tempo estudando apenas essa linguagem em sua forma pura... e há muitos outros pontos a serem considerados:
    • jQuery (uma biblioteca muito legal... mas frameworks são melhores).
    • Frameworks (React, Vue, Angular).
    • npm — gerenciador de pacotes.
    • Ferramentas de build (Gulp, Grunt, Webpack) — elas também são necessárias para SEO, garantindo que apenas os estilos e scripts necessários para aquela página sejam carregados, sem nada desnecessário.
  4. Dominar Emmet.
  5. Se voc&eceir; não gosta de scripts comuns, aprenda CoffeeScript ou TypeScript, ou algo semelhante. Depois, não esqueça de aprender Babel ou outro compilador para JS.
  6. APIs de mecanismos de busca e algoritmos de ranqueamento (isso é mais relacionado ao SEO). (+ PEP Turbo, Yandex Zen).
  7. Layout (válido, cross-browser, moderno, responsivo).
image

Backend (usando PHP como exemplo):

  1. PHP puro.
  2. Sistemas de gerenciamento de conteúdo (trabalhei com muitos, mas recomendo WordPress).
  3. Frameworks (Laravel, Symfony, Yii ou qualquer outro). Os dois primeiros são os mais populares.
  4. PSR — padrões sobre como escrever código corretamente, onde colocar aspas, onde colocar espaços (tabs), como nomear variáveis e muito mais.
  5. REST — assim como o ponto 4, é uma maneira cuidadosa de programar e nomear métodos.
  6. Segurança. Não sei ao certo quanto se dá atenção à segurança em aplicativos móveis, mas na criação de sites isso é frequentemente um grande problema. E isso faz sentido, pois o melhor debugger para um desenvolvedor web é o navegador. Ele pode fornecer muitas informações sobre uma página, e se você instalar algumas extensões, pode realizar algumas manipulações úteis. Assim, ao desenvolver sites, é necessário saber como se proteger contra, pelo menos, injeções SQL, vulnerabilidades XSS e falsificação de solicitação entre sites (CSRF) — embora essas não sejam as únicas ameaças (também incluiríamos DoS e DDoS — mas isso está mais relacionado à configuração do servidor).
  7. Sistemas ORM (Doctrine é adequado) e PDO.
  8. Console (eu o uso quase todos os dias).
  9. Configurações do servidor (pelo menos o básico, saber como o servidor funciona e o que acontece no backend durante as requisições).
  10. Docker (seria bom conferir o armazenamento em nuvem e "containers" já configurados para projetos. Também saiba o que são Kubernetes e OpenShift. Pode ser mais fácil contar com a nuvem do que configurar uma grande pilha de tecnologias por conta própria).
  11. Composer.
  12. (li.cURL).
  13. Protocolos — este ponto deveria estar acima, junto dos pontos 4-6. Mas não vou reescrever nada agora. É importante saber como funcionam as diferenças e como trabalhar com HTTP, HTTPS, FTP, SSH e alguns outros.
  14. Aprenda um IDE, como o PhpStorm, ou bons editores de texto (com extensões instaladas) — isso também se aplica ao frontend.
  15. Linux — a maior parte dos servidores funciona com esse sistema operacional, então é altamente recomendado conhecê-lo.

Além disso, você precisa entender Programação Orientada a Objetos (POO). Existem linguagens funcionais onde você pode escrever um startup inteiro sem uma única classe. Mas o PHP (assim como a maioria das linguagens modernas) é orientado a objetos, então é importante entender POO. Quanto mais profundo seu conhecimento, melhor (quanto a classes, interfaces, traits). Também é bom conhecer diferentes paradigmas de programação. Você deve entender que o mesmo código em uma única linguagem pode ser escrito de maneiras diferentes, dependendo do paradigma. Seu projeto deve seguir um paradigma. Isso também se aplica à padronização de nomeação de variáveis, ou seja, você deve usar camelCase ou snake_case de maneira consistente.

você deve conhecer padrões de projeto — admito que quando estudei isso na universidade, considerei que era o tópico mais inútil. E devo confessar que é o mais difícil (para mim). Qualquer padrão pode ser interpretado de várias maneiras (você pode descobrir várias implementações de um padrão somente na criação de sites. Se você chegar a aplicativos ou programas móveis, a implementação pode ser um pouco diferente). Em resumo, este é um tópico que muitas vezes é escrito de forma ambígua. Mas é extremamente importante.

Os princípios SOLID decidem como escrever código. E o SOLID não é o único conjunto de princípios. A propósito, o REST e o PSR (que mencionei antes) também podem ser considerados princípios de boas práticas de programação.

Testes — devem ser realizados testes de unidade em PHP. Idealmente, você deve escrever testes... embora eu raramente faça isso, mesmo que sejam necessários. Também é importante entender que há testes diferentes: testes funcionais, testes de aceitação, testes de unidade, etc.

Informe-se sobre Git, Mercurial ou qualquer outro sistema de controle de versão.

Lembre-se de trabalhar com formatos de dados: JSON, XML, YAML.

image

Acostume-se a acompanhar atualizações nas linguagens e tecnologias com as quais você trabalha. As linguagens normalmente não atualizam com grande frequência, mas pode haver mudanças fundamentais de vez em quando.

image

Quinta-feira eu estudava em instituições de ensino, eu pensava que o problema dos grandes dados e otimização de código não me afetaria ou seria apenas muito depois. Na verdade, não é assim. Já trabalho com dados por muito tempo, que têm até algumas dezenas de milhares de registros. Embora um conhecimento básico de bancos de dados e normalização de tabelas me ajude no backend (onde problemas raramente surgem), no frontend isso acontece com mais frequência. Os mecanismos de busca são extremamente rigorosos quando trata do código, tanto em termos de otimização quanto de desempenho (desempenho, especialmente). Aqui, você precisa entender como fazer tudo carregar de forma assíncrona ou diferida. Você pode ter um núcleo semântico perfeitamente elaborado, mas qual é o sentido se não há otimização para a velocidade de carregamento das páginas — então isso precisa ser levado em consideração também.

Escreva o código corretamente, para que, ao longo dos anos (ou meses), quando os módulos serão removidos (ou desativados), não reste nenhum código no projeto. Isso pode, por exemplo, acontecer no frontend com CSS e JS, se o código não estiver organizado corretamente. Chamo esse código de "morto". Ele é desnecessário, mas os mecanismos de busca o encontram e reclamam dele.

Ao mesmo tempo, quase não toquei em bancos de dados... isso implica que você já sabe trabalhar com eles. Qual banco de dados específicamente não é importante.

você precisa conhecer abordagens arquitetônicas e arquitetura de aplicativos... novamente, difere completamente: web, móvel e programas de desktop. Por exemplo, considere um grande projeto da web: o backend é composto de três partes. Uma é escrita em Symfony, a segunda em Laravel, e a terceira em PHP puro. O frontend, por exemplo, consiste em duas partes, que são escritas em React e Vue. Se você se aprofundar em qualquer uma dessas partes, existe sua própria arquitetura e seus próprios padrões — tanto grandes quanto pequenos. Você precisa dividir grandes blocos de código em camadas (por exemplo, encapsulando modelos em repositórios e chamando repositórios em vez de modelos, usando observadores, etc.) — tudo isso torna o código arrepiante e torna os aplicativos modulares e facilmente extensíveis. Mas, ao mesmo tempo, você deve lembrar que quanto mais fina a camada, mais rápido o aplicativo funciona (por exemplo, você não precisa usar sistemas ORM entre o banco de dados e a linguagem onde o PDO normal é suficiente). Todas essas coisas são compreendidas ao longo do tempo.

image

Outra coisa muito importante: você deve usar frameworks (pelo menos em grandes projetos). Normalmente, é mais difícil escrever com frameworks do que com código puro. Mas os frameworks oferecem vários benefícios muito bons:

  • Aceleram bastante o desenvolvimento de aplicativos;
  • Muitas vezes, declaram um estilo e filosofia que você deve seguir — e tudo isso resulta em menos código ruim;
  • Existem muitos módulos prontos (por exemplo, para autenticação), e você não precisa se preocupar com o que acontece sob o capô (autenticação básica, por token, JWT ou qualquer outra forma);
  • Segurança. Como mencionado antes, na web, segurança é um problema que requer muito tempo e esforço. E os frameworks geralmente já resolvem isso por você.
image

Existe a opinião de que um desenvolvedor fullstack sempre fica no nível intermediário. Acho isso verdade em parte, e dedico muito do meu tempo livre para aprender e me desenvolver, de modo que esse ditado não se aplica a mim e que eu possa criar projetos chave na mão bons, tanto no front-end quanto no backend — não de qualquer modo, mas usando algo novo e original.

É possível que eu tenha esquecido de mencionar alguma coisa, pois é difícil manter tudo em mente. E sim, eu não vou falar sobre inglês... quanto melhor, melhor!

Você não precisa aprender ambas as áreas, pode escolher uma para começar. Além disso, lembre-se: se você considera o código que escreveu no ano passado ruim e pensa que poderia reescrevê-lo melhor, isso significa que você está pensando na direção certa e se desenvolvendo.

Então, eu descrevi o desenvolvimento web... talvez eu tenha esquecido algo... mas acredite, cobre cerca de 90% do que você precisa saber para ser um bom especialista. A questão é que tudo isso pode levar anos para estudar.

Como você pode ver, na verdade, eu praticamente uso apenas duas linguagens de programação, mas, além delas, como mencionei acima, há uma série de outras coisas realmente necessárias.

Em termos de outras áreas de programação, não acho que algo mudará fundamentalmente... cada uma tem suas próprias tecnologias e linguagens... mas o princípio e o volume são mais ou menos os mesmos.

Nem tudo o que eu aprendo (especialmente se for algo completamente novo ou complexo) é compreensível para mim na primeira vez... muitas vezes, eu preciso pesquisar e revisar várias vezes até entender completamente como algo funciona. Então, vale a pena continuar, e algo pode não ficar claro na primeira tentativa. Muita coisa também depende da fonte que apresenta o material (alguns autores e palestrantes explicam melhor, outros explicam pior).

Agora você sabe o que está à frente, e você tem apenas duas opções: ou pegar o documento agora mesmo ou começar a aprender programação já hoje.

image

Há muita terminologia aqui que é extremamente difícil de entender, mesmo para um estudante do 2º ou 3º ano, mas tudo isso está disponível na internet. Agora você sabe por onde começar e o que estudar. Esta lista pode ser considerada um mosaico, onde cada item é apenas uma peça do quebra-cabeça, e ao dominar algo desta lista, a imagem geral da programação web na sua mente ficará um pouco mais clara e precisa. Talvez esta lista confusa ajude a direcionar você na direção certa, mas ela já existe. Quando pela primeira vez comecei a estudar tudo isso, para montar o mosaico, tive que pesquisar as menores peças sozinho na vastidão da internet e em livros, através de tentativa e erro, filtrando muita informação desnecessária e repetitiva.

image

Para concluir, resumiremos a profissão de programador.

Vantagens:

  • Uma profissão promissora. Um bom especialista não ficará sem trabalho.
  • Salário alto. Mas não imediatamente.
  • Trabalhando em TI, você está em contacto com os últimos eventos da TI.
  • Muitas vezes, o horário é mais flexível do que em outras áreas sociais. A possibilidade de trabalhar não apenas em horários convenientes, mas também remotamente de outros países.

Desvantagnes:

  • É necessário saber muito. Você deve sempre aprimorar seus conhecimentos e usar metodologias e abordagens atualizadas.
  • É altamente recomendável saber inglês.
  • Impacto negativo na saúde. Dizem que a visão se torna pior. A programação é sua vida sedentária que deve ser equilibrada com esportes ou outros hobbs ativos.
  • Grande responsabilidade (por exemplo, trabalhando com dados bancários e financeiros).
  • Às vezes, é difícil encontrar terreno comum com clientes e gerentes.
image
Вверх