Trajetória do programador: de estagiário a diretor de TI. Três maneiras de desenvolver uma carreira como programador O inglês é importante?

11.12.2023

O livro “Carreira de Programador” é baseado na experiência da participação prática do autor em diversas entrevistas realizadas as melhores empresas. É a essência de centenas de entrevistas com muitos candidatos, o resultado de respostas a milhares de perguntas feitas por candidatos e entrevistadores nas principais empresas do mundo. Dos milhares de possíveis problemas e questões, 189 dos mais interessantes e significativos foram selecionados para o livro.
A sexta edição deste best-seller global ajudará você a se preparar melhor para uma entrevista de emprego como programador ou gerente em uma grande organização de TI ou em uma startup promissora. A maior parte do livro consiste em respostas a perguntas e tarefas técnicas que os candidatos costumam receber durante entrevistas em empresas como Google, Microsoft, Apple, Amazon e outras. Considerado erros típicos que os candidatos admitem, bem como técnicas eficazes de preparação para uma entrevista. Usando o material deste livro, você pode se preparar facilmente para um emprego no Google, na Microsoft ou em qualquer outra empresa.

Gostou do artigo ou livro? Compartilhe com seus amigos:

Todos os livros apresentados no site são apenas para fins informativos.

Qualquer uso deles por você é permitido apenas para fins informativos. Se você planeja usá-los no futuro, deverá adquiri-los dos detentores dos direitos autorais. A administração do site não é responsável pelo uso deles.
Tenho quase 40 anos e pertenço a uma geração de programadores artesãos e autodidatas que receberam educação técnica superior em uma universidade soviética no início e meados dos anos 90, quando o treinamento era diferente e até mesmo um conceito como ciência da computação ainda era ausente em nossas universidades. Foi só no exterior, e nada sabia sobre esse termo e a disciplina correspondente até 2007, quando comecei a ir ativamente a entrevistas e a me posicionar no mercado de trabalho.

Talvez esta história seja útil para jovens profissionais que estão ingressando no setor de TI para evitar alguns erros e construir sua carreira de forma diferente.

TI na minha vida.
  • Aqui estão os principais marcos da minha “gloriosa” biografia de TI. O mais interessante, talvez, tenha sido no período 1990-1995 e 2000-2010.
  • 1981. Vi uma microcalculadora e fiquei impressionado com suas “funcionalidades”. Eu mesmo queria fazer o mesmo, mas, naturalmente, não deu em nada dessa ideia.
  • 1985. Sonhei com uma microcalculadora programável BZ-34. Assinou a revista “Ciência e Vida”, onde foram publicados programas para ele (seção “Homem com Microcalculadora”, posteriormente alterada para “Homem e Computador”). Mais tarde, em 1990(?), compraram-me uma calculadora MK-52, com PROM e um conjunto ampliado de comandos. Eu inseri programas nele. Eu não tinha ideia de nenhum outro computador. Eu só sabia que existia um computador ES, mas não sabia realmente o que era. Acho que tínhamos um assim na escola e eu vi na 4ª série.
  • 1987. Um diagrama apareceu na revista “Modelist-Constructor” computador pessoal"Especialista". Comecei a preparar uma placa para isso, mas não tinha microcircuitos. Eu vi o “Mikrosha” de um amigo carregado em um gravador de fita cassete. Esta é uma versão melhorada do “Especialista”. Eu realmente gostei. Jogos, Tetris, Cobra, BÁSICO. Eu mesmo aluguei o Mikrosha. Entrei nele todos os programas que estavam lá. Tentei escrever algo sozinho em BASIC. Fui ver meus amigos, eles tinham um computador Spectrum e carregaram de um gravador. Eu joguei.
  • 1988-1989. Ensino médio. 9º ano. Informática. "Ágatas". Escreveu programas em BASIC para o curso escolar (geometria - os pontos ficam na mesma linha, todas as escolas - "Damas", "Tolo" (jogo de cartas). Escola de física e matemática no MIEM. KUVT "Yamaha". 1 ano - " BASIC" ". 2º ano - "Pascal" e ambientes instrumentais (DOS, Norton Commander). Escreveu trabalhos de laboratório e cursos ("MSX Basic" - um programa para determinar por 4 pontos se a figura formada por eles é um quadrilátero convexo, o programa " Tic Tac Toe", Turbo-Pascal - programas para trabalhar com arquivos).
  • 1988. Palácio dos Pioneiros, grupo de radiocomunicação por pacotes. Eu vi o IBM PC AT pela primeira vez.
  • 1990. Ingressou no Instituto Estadual de Eletrônica e Matemática de Moscou.
  • 1990-1992 MSXYamaha. Básico. Pascal. Trabalho de laboratório.
  • 1991. Finalmente, com muita dificuldade, comprei Mikrosha. Tentei apresentar lá um programa para jogar xadrez (da revista “Modelist-Constructor”). Passei muito tempo descobrindo isso, desenhando um fluxograma durante vários dias e analisando o algoritmo de operação. Depois de entrar no programa não funcionou. Provavelmente cometi um erro de digitação em algum lugar. O computador congelou e teve que ser reiniciado. Todos os resultados de muitas horas de “recheio” desapareceram. Eu deveria ter gravado o que inseri em um gravador, mas não adivinhei. De agora em diante eu era mais inteligente. Eu gravei usando o comando Salvar.
  • 1992. Vi 286 e Windows 1.0 ou 2.0 na sala do laboratório do instituto. Eu realmente gostei.
  • 1993. “Estudos pessoais” do 3º ano. IBM PC XT. IBM PC AT. Ambiente Turbo C 2.0. Palestras e cursos. Programa compositor para DOS. Ele “compõe” uma fuga com o número necessário de vozes, na tonalidade necessária e no modo necessário. Escrevi durante vários meses no trabalho do meu pai em um IBM PC AT. Computadores mainframe. Unix. Os programas mais simples em C (encontrar um caractere em uma string, substituir, etc.)
    Claro, estudamos Prolog, Turbo Basic, programamos em Pascal e a partir do 3º ano em C. Ainda antes, em 1988-1989, programamos em MSX Basic, e foi realmente maravilhoso! Houve também um curso intensivo de arquitetura assembler e de microprocessadores (então ainda 80286). Havia algumas disciplinas sobre computação paralela e supercomputadores, das quais nunca mais precisei na prática.
  • 1994. IBM PC AT. Turbo Básico. Turbo Pascal. Turbo C. Trabalho de laboratório (programa “Resolvendo a equação de Cauchy”). Curso "Computação Gráfica". Laboratório Um programa para desenhar uma figura tridimensional de um elefante. Programação de adaptadores EGA/VGA. Curso “Bancos de Dados”. Dbase 3, 4. Clipper. Trabalho de laboratório. Escrevi bancos de dados no instituto e para meu pai no Clipper. Vi o Windows 3.1 e o MS Access 2.0 no local de trabalho de um amigo, fiquei chocado e gostei muito (não entendi nada ali e fiquei surpreso como ele entendeu). Um amigo estava programando bancos de dados em Access para uma agência de viagens.
  • 1995. Unix. OP. Borland C++. Prólogo. Turbo Prolog e ARITY-Prolog. Inteligência artificial. Trabalho de laboratório. Reelaboração do programa “Composer” em C++, adicionando classes e operadores.
    Depois de me formar na universidade, todos os meus colegas seguiram caminhos separados: alguns foram para o exterior e outros conseguiram um emprego como programadores escrevendo em C++ para bancos de dados. Alguns dos mais “avançados” até começaram a escrever software para placas de vídeo em linguagem assembly (naquela época ainda era uma espécie de miséria como S3 Trio e Trident com 256 kB de RAM integrados). Só fiz um estágio de pré-diploma e diploma em uma determinada organização governamental, onde recebi minha experiência inicial de trabalho, estudei Unix e MS Access e me familiarizei com os princípios das redes de computadores. Foi em meados dos anos 90.
  • 1995 - 1997. Decidiu se tornar programador ou, na pior das hipóteses, administrador de sistemas. Trabalhe em um instituto de pesquisa em design como algo como um programador-administrador de sistema. Sistema operacional VAX/VMS. DECNet. Ethernet espessa. “Computadores grandes”, VAXClusters, terminais VT-220, VT-330, DECServers, DECPrintServer. Realizado backup, instalação de novo software, administração (direitos de usuário, direitos de discos, arquivos). Sun SparcStation, 32 MB de RAM (isso é uma quantidade irreal e maluca), disco rígido de 2 GB, Silicon Graphics, Alpha DecServer (DecWindows). Pela primeira vez trabalhei bem com Windows, aprendi (no 386DX, depois no Pentium). OS Solaris, Irix, DecWindows.
  • 1996. Defendeu diploma no tema “Design de plataforma cruzada rede de computadores" Modelo OSI de sete camadas. Emparelhamento tipos diferentes redes usando protocolos comuns (TCP/IP). Seleção de hardware (roteadores, hubs, repetidores), avaliação de seus custos, cálculo de diversas características (comprimento do segmento, distância entre repetidores, etc.).
  • 1996-1997. No trabalho fiz os cursos “SQL para usuários finais”, “Biblioteca gráfica XGL”, “Programação Motif”, “Programação OpenGL”, “Programação Xlib”, “Programação XView”.
    Havia todos os cursos, tanto para gráficos (havia muitos programas CAD, para os quais foram adquiridos Silicon Graphics) quanto para usuários de banco de dados (a Oracle estava lá).
    Administrei Novell Netware 3.11 e 4.0 (em outro prédio). Grande rede para aproximadamente 100 computadores pessoais, 2 servidores Novell Netware, thin Ethernet.
    Envolvi-me no desenvolvimento do “Catálogo de Banco de Dados de Equipamentos para Aplicações Industriais”, que posteriormente desenvolvi de forma independente (quando todos os especialistas valiosos já haviam deixado esse trabalho :). Foi assim que começou meu conhecimento do Access.
    Lançamento do Windows 95, introdução ao mesmo.
  • 1996. Ligação de uma empresa à Internet (dialup na Elvis-Telecom).
  • 1996 (?) Compra de um computador para casa (486DX2-66). Melhorou o programa Composer com a capacidade de imprimir partituras. Tentei programar no Windows 3.1 (Borland C++ 3.0, Win 3.1 SDK). É complicado e confuso, mas consegui escrever um programa simples que exibe uma janela (eu estava familiarizado com os conceitos básicos de programação em ambientes multitarefa - fila de eventos, recursos, janelas, controles, manipuladores de eventos - em parte do instituto, em parte de cursos sobre Motif e OpenGL, mas no Windows é tudo diferente). Tentei refazer o programa Composer para Windows usando bibliotecas multimídia. Foi muito difícil, não consegui.
  • 1996. Surgiram um modem, FIDO e a Internet. Comecei a procurar novo emprego. Tentei conseguir um emprego em uma empresa que tinha UNIX, Informix, NT, etc. Eles me perguntaram o que são “modelo”, “agrupar por” e quais shells UNIX eu conheço. Eu não sabia nada dessa lista e eles não me levaram.
  • 1997, janeiro-fevereiro. Tentei escrever um programa de warehouse no Access 2.0 e aprender Excel. Lembro que o Office 97 tinha acabado de ser lançado e eu estava tentando me acostumar com ele.
  • Fevereiro de 1997 - dezembro de 2000. Fui contratado para meu segundo emprego por um completo estranho e sem qualquer entrevista, simplesmente através de um anúncio em mo.job (provavelmente, ele ainda de alguma forma verificou implicitamente minha adequação, mas passei com sucesso neste teste). O salário era incrivelmente alto para um jovem especialista no início de 1997. Quando questionado por que me contratou e por que sem entrevista, ele disse: “Eu só precisava de um Accessista. Você é Acessista? Eu disse: “Sim, claro, sou Acessista”. Nunca mais fiz perguntas tão estúpidas. Programado em Access 2.0. Eles imediatamente nos deram tarefas difíceis. No começo foi difícil, mas depois peguei o jeito. Domine completamente o Access 2.0 e Excel 5.0. Em seguida acesse"97 e Excel"97. ERWin. “1C-Trade” foi lançado. Eu realmente não gostei. Dei uma olhada no Access "2000 e no Powerbuilder 6.0. Gostei muito do Powerbuilder, transferi algumas bibliotecas para ele. Transferi o programa do MSA 2.0 para o MSA 97. Também trabalhei no anykey, Administração do Windows NT Server, implementação do sistema de correio no MS Exchange 5.5, implementação do Office"97, WINS, DHCP, MS Proxy 2.0, RRas e (a principal conquista desta empresa, na minha opinião) transferência do sistema para MS SQL 7.0/ MSA"97 com replicação de dados para um escritório remoto. Eu mesmo instalei 3 novos Servidor Windows NT (SQL, Exchange, WINS, IIS, MS Proxy, RRas), implementou Faxmaker para Exchange Server. Escreveu scripts para MS Exchange Server usando VBScript. Tendo trabalhado maravilhosamente para esta empresa durante vários anos e tendo escrito muitos softwares, comecei a pensar em um novo emprego.
  • Os tempos mudaram. Foi no ano 2000. Para evitar a estagnação da parte superior do cérebro e o domínio do 1C, fui para uma startup, onde trabalhamos em coisas interessantes até 2010. Eles também me levaram para lá sem nenhuma entrevista, depois de completar um teste simples. Ao longo de 10 anos, muitas dezenas de megabytes de código-fonte foram escritos em várias linguagens de programação (C++, Python, Assembler) e vários projetos maravilhosos foram criados. Aprendi muito bem Linux, C++, Python.
  • É 2007. Pela primeira vez, comecei a me preocupar porque meu trabalho não era mais satisfatório. Começou a me parecer que meu trabalho era uma preparação para algo “real”; era apenas um ensaio, praticando habilidades antes de algo importante. Mas o tempo passou e o “verdadeiro trabalho” nunca começou. O real, no qual posso ser plenamente realizado. Começou a parecer que ela simplesmente não existia. Achei que meu salário e o interesse do trabalho cresceriam na proporção direta com o tempo, mas isso não aconteceu. A armadilha salarial começou a me estressar. Ao entrar no mercado livre em 2007, talvez pela primeira vez senti a minha inércia, falta de competitividade e atraso desesperado em relação à tecnologia. Tendo ficado preso em uma startup, fiquei bastante ossificado. Comecei a procurar um novo emprego. Minha saída fora do marcador me incomodava cada vez mais. Visitei muitas empresas, incluindo grandes players do ramo de software (Rambler, Yandex, Kaspersky, etc.). Mas em todos os lugares o resultado é o mesmo - recusa total e indubitável. Nesta altura, pela primeira vez coloquei-me a pergunta: “Porquê?”, à qual ainda não recebi uma resposta clara. Finalmente descobri que existe informática, que todos perguntam e da qual ouvi falar pela primeira vez. É porque não conheço ciência da computação? Mas escrevi uma grande quantidade de software funcional de alta qualidade, conheço muitas tecnologias e desenvolvimento industrial! Comecei a correr para lá e para cá, me agarrando a inúmeras novas tecnologias, estudando com urgência essa mesma informática, não tinha tempo de estudar nada e ficava chateado por não poder fazer nada. No final, não conseguindo encontrar um novo emprego, resignei-me ao meu triste destino. Eu ficava “desafinado” o tempo todo: quando todo mundo usava stl e boost, eu praticamente não usava, porque não precisava para trabalhar; quando os pythonistas mudaram completamente para o Django em 2008, eu teimosamente ignorei isso, porque usei a melhor estrutura do meu ponto de vista, editei arquivos persistentemente no FAR, embora houvesse muitos editores maravilhosos e convenientes por aí e minha produtividade não sofreu disto. No final, comecei a usar todas essas tecnologias, mas apenas para me adequar ao mercado.
  • Mas vejam só! – Fui convidado para uma startup, novamente sem nenhuma entrevista. E, novamente, trabalho diligente por vários anos, design, planejamento e agilidade, montanhas de código-fonte, testes e correções de bugs, esperança pelo melhor, a sensação de que este foi um ensaio para algo importante e novo, decepções e buscas malsucedidas por um novo emprego , que foi exatamente assim como em 2007, mas em condições de competição mais acirrada, que senti literalmente atrás de mim.
  • E agora os tempos mudaram novamente. Já estamos em 2013. Ainda sou jovem, mas a idade está começando a cobrar seu preço. Pareceu-me que durante este tempo acumulei uma enorme experiência, que podia fazer qualquer coisa, que estava numa área competitiva e tinha um nível de competência bastante elevado, que podia trabalhar, que era um “programador .” “Agora”, pensei, “certamente chegou a hora do meu trabalho mais valioso e importante, do trabalho de toda a minha vida”.

Na verdade, não é tão simples. Não sei que tipo de trabalho procuro. Não tenho ideia de que trabalho será valioso e importante para mim. Devemos tentar de tudo. A concorrência é alta. Muitos jovens. Os formandos de ontem conhecem muito bem a informática e conhecem todas essas palavras misteriosas, passes mágicos e conseguem falar com clareza. As regras do jogo mudaram, embora Unix, C++ e OOP permaneçam. Surgiram entrevistas longas, significativas e em vários estágios, entrevistas cansativas. Os requisitos para os candidatos estão sendo reforçados. Agora ninguém contrata um “aluno sem experiência” nem por um salário ridículo. “Estranho”, pensei. “No início dos anos 90, havia um buraco demográfico no qual os meus potenciais concorrentes tinham de cair.” Mas isso não é verdade. Revelam-se as minhas lacunas e falhas de conhecimento, as consequências de muitos anos de “prática artesanal” e a falta de um sistema de conhecimento. Acontece que eu não sei em detalhes como funciona qualquer algoritmo de classificação (há 20 anos venho classificando com a “classificação” usual em todos os tipos de variantes e em todos os tipos de linguagens de programação, que, na minha opinião, classifica muito bem, mas como exatamente depende de mim nunca me importei, porque classifica da melhor maneira!), não conheço os princípios da OOP (uso desde o ensino médio, mas, aparentemente , incorretamente, pois não conheço os princípios corretos), o formato dos pacotes TCP/IP (por que preciso disso? sabe? Eu sabia quando escrevi meu diploma na universidade e depois esqueci!), algoritmos em gráficos e muito mais... Mas de alguma forma trabalhei durante esses 20 anos e escrevi um software excelente e funcional, que ainda está em uso e será usado por muito tempo! Como pode ser isso? Eu mesmo estou surpreso.
E a segunda ronda de entrada no “mercado livre” decorreu na mesma “atmosfera calorosa e amigável” da primeira.
Kaspersky novamente me convidou para um “brainbench” com ele, como nos bons e velhos tempos (“Obrigado, cara, mas eu não jogo mais esses jogos, já fiz brainbench por toda parte”), Yandex rejeitou todas as minhas inscrições em todas as vagas , desta vez silenciosamente, sem nem convite para entrevista (em 2007 entrevistei e “rejeitei”), e parece que ele me incluiu em um banimento vitalício, pois já estou bastante cansado do RH deles, já que respondo a quase todas as suas vagas ; mail.ru fez o mesmo, e Parallels, Mirantis e outros “tubarões” do mercado de software já me “rejeitaram” na entrevista. não éramos mutuamente adequados e não nos adaptamos há muito tempo  Somos muito diferentes, por exemplo. língua Inglesa. Mas será que Yandex gosta disso? Não tenho certeza.
Do lado dos empregadores: eles podem ser compreendidos. Sua tarefa é descobrir o conhecimento do candidato sobre a maior variedade possível de tópicos no menor tempo possível. Eu mesmo recrutei programadores e sei por experiência própria como isso não é trivial. Perguntas prontas exigem modelos de respostas prontas. Como Zhvanetsky: “...aqui está uma lista das suas perguntas, aqui está uma lista das minhas respostas”. Técnicas favoritas utilizadas em entrevistas, que coletei ao longo de muitos anos de entrevistas e que me confundem, me confundem (ainda não sei as respostas para algumas delas), e, parece-me, algumas delas têm pouca relevância à programação e eles são simplesmente solicitados porque é um “método comprovado” e “todo mundo pergunta”. Minhas respostas, que não agradam aos empregadores, estão entre parênteses:

  1. Imagine que você está dando uma palestra para alunos. Como você explicaria o termo “X” aos alunos? (X == “impasse”, “gramática livre de contexto”, “máquina de estados”, “bloqueios otimistas e pessimistas”, “paradigmas de programação”, “barramento de dados”). (Desta lista, só posso explicar claramente “impasse”, também conhecido como impasse, porque muitas vezes lido com isso. Não lido com os outros termos e, portanto, não posso explicá-los).
  2. Descreva com o máximo de detalhes possível o que acontece quando você insere um endereço na barra de endereços do seu navegador (opção: quando você clica em um link). (Que tipo de detalhe queremos dizer? Minha história pode durar um dia inteiro, e temos tempo limitado. Primeiro, se estivermos no Windows, a mensagem do Windows WM_CHAR é enviada ao inserir texto no controle... não, mais precisamente , primeiro WM_NCHITTEST,... mas se você começar do início, o pressionamento de tecla vai para o buffer do teclado...).
  3. Descreva quais pacotes TCP/IP são trocados quando uma conexão HTTP é estabelecida. (Infelizmente, observei o tráfego TCP/IP muitas vezes usando ethereal, mas não me lembro do formato do pacote nem aproximadamente).
  4. Descreva quais pacotes TCP/IP são trocados quando uma conexão HTTPS é estabelecida. (Infelizmente, não observei o tráfego TCP/IP em uma conexão HTTPS). É verdade que o HTTPS funciona sobre o HTTP ou o oposto é verdadeiro? (Não sei, mas acho que HTTPS sobre HTTP. Ou HTTPS sobre TCP? Quem sabe...).
  5. Descrever como os pacotes são entregues por transporte Protocolo TCP. Como sabemos para qual computador físico entregar o pacote? Como é garantida a entrega garantida? (O endereço de entrega é determinado pelo endereço MAC computador físico, os pacotes serão entregues por meio do gateway especificado nas configurações do sistema, se for um host externo. Externo ou não externo - é calculado a partir do endereço IP e da máscara).
  6. Qual é a complexidade algorítmica do melhor e do pior algoritmo possível para classificar uma matriz de N elementos? (A pior complexidade é O(N^2), porque você precisa comparar cada um com cada um, o melhor é O(N * ln(N)). Por que é tão melhor? Não me lembro. Eu li em um livro. não me lembro qual).
  7. Desenham-se retângulos com setas, diz-se que os retângulos são módulos, e as setas são as dependências entre eles, e se pergunta: “Como carregar todos esses módulos? E de qualquer forma, como se chama? (Pegamos e carregamos recursivamente primeiro as dependências do módulo, depois o próprio módulo. Não sei como se chama e não tenho a menor ideia. Chama-se “retângulos com setas”).
  8. Descreva as diferenças entre um demônio e um processo normal (me fizeram essa pergunta em 2007 e ainda não sei uma resposta abrangente para ela - o tópico é realmente inesgotável e não o entendo completamente, embora eu tenha escrevi um grande número de demônios em minha prática de trabalho, sem entender completamente se eles têm memória comum ou não, se a pilha é comum ou não e se os descritores de arquivo são comuns ou não. Esqueci, em geral, isso foi há muito tempo.).
  9. Cite cinco princípios de programação orientada a objetos. (Infelizmente não sei, embora use OOP desde 1993).
  10. Como fazer uma fila usando duas pilhas? (não sei, mas você pode procurar na internet).
  11. Quais métodos de sincronização de processos você conhece (opção: quais primitivas de sincronização você conhece) (mutexes, semáforos, eventos)?
  12. Quais padrões de design você conhece (opção: quais padrões de programação você conhece) (singleton, fábrica de objetos)?
  13. Como otimizar uma consulta SQL (opção: quais técnicas para otimizar consultas SQL você conhece) (veja o plano de consulta, remova subconsultas se possível, adicione índices ausentes)?

Os empregadores estão fazendo absolutamente a coisa certa, é claro. Eu entendo por que eles fazem isso. Eles selecionam e selecionam os candidatos fazendo-lhes perguntas básicas para começar. Depois passam para outros mais complexos, depois cada vez mais. O problema é que as nossas abordagens nunca coincidem com as deles. Apesar de ter a certeza de que na maioria das empresas onde fui para uma entrevista pude trabalhar sem problemas, mas os empregadores sabem melhor, e com razão.
PS. Na verdade, não tenho problemas com o trabalho. Esta é apenas uma desculpa para descrever minha carreira bizarra. Finalmente, foi encontrado um empregador que “passou o sinal vermelho”, ignorando todos esses numerosos avisos sobre o que eu não sabia, não fez uma única pergunta sobre ciência da computação e simplesmente me ofereceu um emprego.

Atualização. Mesmo assim, há problemas com o trabalho, porque o único empregador que me queria acabou por se recusar a contratar-me. Alguém tem emprego?..

No artigo descrevo minha opinião sobre as prioridades na escolha de um empregador para programadores. Indiquei o tamanho do salário como principal fator, justificando pelo fato de sobrar mais tempo para a vida. A seguir, apresento meus motivos pelos quais você não deve se deixar levar pela reciclagem. Continuo o artigo dando uma olhada no desenvolvimento de projetos residenciais, o que, na minha opinião, ajuda a acompanhar as tendências da profissão e, além disso, traz prazer. Cheguei a esses pensamentos depois de trabalhar como programador em tempo integral por 8 anos.


Encorajo pessoas experientes que sabem trabalhar e viver a comentarem meus pontos de vista e expressarem suas opiniões sobre questões nas quais foram encontradas diferenças. Para aqueles que iniciaram recentemente sua jornada de programação ou simplesmente nunca pensaram nessas coisas, recomendo não tomar este artigo como um guia sério. Escrevi sobre meus sentimentos sobre essas questões na esperança de que alguém possa encontrar algumas idéias úteis caso esteja se sentindo desanimado como programador.

Prioridades

Ao escolher um emprego, defino para mim as seguintes prioridades.

  1. O valor da receita em dinheiro recebida. É simples.
  2. Conforto do espaço de trabalho. É assim que pode ser conveniente ou inconveniente o que o rodeia no trabalho: distância de casa, pessoas no escritório, desempenho do computador de trabalho, clima próximo ao local de trabalho, uma câmera de vigilância em seu monitor, seu monitor voltado para o corredor, relacionamento com gestão, multas por atraso e afins.
  3. Oportunidade para seu desenvolvimento profissional. Isso inclui a experiência que você ganha no trabalho. Trata-se de aprender tecnologias que são novas para você, aprimorar o que aprendeu anteriormente e adquirir novas habilidades que serão úteis para você. Qualquer coisa que o torne mais experiente profissionalmente.

Muito pouco desta lista pode ser aprendido antecipadamente sobre a empresa antes de se candidatar a um emprego. Mas dada a ordem de prioridades, você pode facilmente comparar seu emprego atual e outro potencial, sabendo o valor do salário. Às vezes você pode sacrificar parte do segundo e do terceiro, em prol de um bom salário. Claro, esse equilíbrio é diferente para cada pessoa.


Algumas pessoas têm vergonha de dizer isso em voz alta, mas o dinheiro é o primeiro e principal fator na escolha de um local para trabalhar. Se você receber bem, não terá que trabalhar horas extras e horas extras, o que significa que terá mais tempo para aproveitar a vida. Meu ponto de vista é o seguinte: se você é um programador com mais de 3 anos de experiência e sente que gostaria de receber mais, comece a conseguir isso sem deixar para mais tarde. Muito provavelmente, não há razão para você não receber mais, se possível.

Como aumentar seu salário

Há uma opinião de que você pode simplesmente pedir isso à sua administração. Pode funcionar. Mas sugiro primeiro descobrir quanto outros empregadores estão dispostos a pagar a você. Se você não tem ofertas de emprego prontas, precisa começar a procurar vagas por conta própria. Considere opções que sejam consistentes com sua experiência e salário acima do atual. Esteja preparado para fazer testes, entrevistas por Skype ou entrevistas presenciais. Veja isso como um lucro potencial, não se isole do seu ego.


Considere não apenas os empregadores da sua cidade, mas também o trabalho remoto. Existem muitos artigos sobre as desvantagens do trabalho remoto, mas se você ainda não experimentou, ainda pode considerar essas opções. Lembre-se disso trabalho remoto– isso não significa necessariamente trabalhar em casa. Com o salário de programador, você pode alugar um escritório ou mudar para um espaço de coworking.


Você precisa se preparar para entrevistas. Você pode encontrar uma lista de perguntas que podem ser feitas online. Aproveite o tempo para estudá-los, pense nas respostas. A ordem das entrevistas é importante. Comece com o empregador cujos termos e condições lhe parecem menos atraentes e, em seguida, vá aumentando para tornar o novo emprego potencial mais atraente. A questão desse procedimento é que é muito mais fácil falhar nas primeiras entrevistas. Durante as primeiras entrevistas, é provável que você se preocupe mais, esqueça mais e aja com menos confiança. Além disso, se você receber perguntas que falhou em uma entrevista, poderá estudá-las e respondê-las nas subsequentes. Assim, você aumentará suas chances de receber uma oferta da empresa que for mais atrativa para você.


Se antes de uma entrevista em uma empresa você acha que definitivamente não irá trabalhar lá, leve essa entrevista a sério, pois com isso poderão ser revelados novos detalhes que tornarão esse empregador mais atraente. Vale sempre lembrar que você está escolhendo um novo emprego, apesar de tudo ter começado com o objetivo de aumentar seu salário.


Se você está começando a sentir que está levando a próxima entrevista muito a sério e está muito preocupado por causa disso, então o conselho é o oposto do anterior: perceba o empregador não como um potencial, mas simplesmente como um meio de aumentar seu salário no emprego atual, sabendo que se não der certo nada mudará. Mas encontre o equilíbrio para parecer um profissional e não um cara agressivo com um ego inflado.


Depois de receber uma oferta de emprego atraente, não deixe seu empregador silenciosamente. Discuta a situação com a pessoa que toma a decisão de aumentar seu salário. Este é um momento muito emocionante; na primeira vez você pode não ter determinação suficiente. Se você não se sentir confiante o suficiente para discutir essas questões, tente iniciar uma discussão correspondência por e-mail. Mas, muito provavelmente, você ainda terá que se comunicar por voz.


Se você não tem ideia de como ganhar coragem para pedir aumento de salário, sugiro o seguinte. Comece a focar em todas as deficiências do seu local de trabalho atual: o quanto você não gosta que alguém esteja sempre esquentando peixe na hora do almoço, que o ar condicionado esteja funcionando logo acima das suas costas, como a multa por chegar atrasado no trabalho te enfurece . local de trabalho por um minuto, como você está cansado de implementar recursos que ninguém realmente precisa, como você está cansado da atual pilha de tecnologias usadas, como você não aprende algo novo há muito tempo. Mas o mais importante: imagine se você pudesse ganhar +X% de dinheiro, mas não o conseguisse por causa do seu empregador. Você gosta quando seu empregador fica com seu dinheiro? Não? Vá em frente e converse com ele sobre isso. Só não vá trabalhar ofendido, faça o seu trabalho de alguma forma, esperando que o gerente perceba e ofereça algo. Isso não é profissional.


Se o seu gerente negar uma promoção e deixá-lo ir, é hora de ir embora. Com que frequência você pode pedir um aumento? Contanto que você receba ofertas significativamente melhores do que a sua situação atual. Mas não tente trapacear, você deverá receber uma oferta de emprego válida depois de passar em todas as entrevistas.

Ao longo do tempo

Um emprego de tempo integral significa que você trabalha 40 horas por semana. Se lhe pedirem para trabalhar mais do que isso, lembre-se de que o trabalho já ocupa cerca de um terço de toda a sua vida diária. Se você não tem mais nada na vida além de trabalhar e dormir, pode matar o tempo trabalhando. Caso contrário, pense nas suas prioridades. Não concorde em fazer horas extras se não pagar o suficiente. Mas mesmo neste caso, pode acontecer que você simplesmente não tenha tempo para gastar seu salário. Você pode pensar que agora economizará para comprar um apartamento, depois para um carro, depois para férias com a família e então a vida seguirá em frente. Mas a vida já segue em frente e você está envelhecendo. Afinal, tente começar a ganhar mais pelas mesmas 40 horas semanais, e não por horas extras. Gaste seu tempo livre fazendo coisas que você gosta e aprendendo coisas novas para acompanhar as tendências em sua profissão.

Projetos Domésticos

Existe uma opinião comum que é mais ou menos assim: “Já programo o dia todo, não tenho mais energia para voltar para casa e desenvolver um projeto favorito ou me comprometer com o código aberto”. Entendo que nem todo mundo é um grande fã de programação pelo bem do processo, e para eles a opinião acima é verdadeira. Mas, para alguns, presumo que o motivo é que eles simplesmente não tentaram programar nada interessante para si próprios. Talvez eles simplesmente não tenham pensado em algo interessante que pudesse ser criado, e talvez nem tenham tentado pensar nisso.



Pode parecer que você não terá tempo para isso. Mas desenvolver projetos domésticos tem muito mais a ver com criatividade do que com seu trabalho diário como programador. E há uma ótima história em quadrinhos sobre a hora da criatividade. A questão é que quando você programa para se divertir, você fica com uma pressa que torna difícil parar, até mesmo para comer ou dormir. Mas lembre-se que existem outras coisas interessantes na vida além da programação, procure o seu equilíbrio.

A profissão de programação é relativamente nova, portanto há poucos caminhos conhecidos nela. Especialistas nesse perfil costumam encontrar o caminho para o sucesso por meio de tentativa e erro.

De que forma eles podem implementar a experiência acumulada?

Carreira horizontal como programador executivo

A melhor escolha para um geek é (ou seja, treinamento direcionado sem alterar o status do trabalho). Um programador que melhora constantemente é um funcionário valioso.

É improvável que ele se ofenda ao distribuir o fundo salarial. Ele se tornará um candidato digno a uma vaga em alguma empresa de maior reputação, até organizações internacionais.

Dica a ser observada:

Não é realista ser generalista em TI. Para mover-se horizontalmente rapidamente, selecione direção específica(bancos de dados, C++, java, etc.) e tente se tornar o melhor nisso.

Promoção como especialista

Tendo alcançado um certo nível, você entenderá que está pronto para compartilhar sua experiência. Nesta fase, uma nova perspectiva se abre diante de você - a autorrealização no papel de consultor.

Você pode consultar tanto clientes offline (por exemplo, empresas municipais que criam um site de vendas para vender produtos) quanto clientes do espaço virtual. Bom trabalho esse tipo de coisa fará de você um nome e, por sua vez, gerará renda.

Você sonha em se tornar um especialista respeitado? Não se concentre apenas na programação. Aprenda facilmente comunicar com as pessoas, competente e figurativamente expressar pensamentos.

Trabalho de gestão

Se você atingiu o nível de especialista, mas não deseja registrar um empreendedor individual, tente construir uma carreira vertical em uma empresa de renome.

Você terá a tarefa de planejar e supervisionar o trabalho de outros especialistas.

Essencialmente, você será o chefe. Portanto, desenvolva em você mesmo qualidades de liderança, aprenda a motivar as pessoas.

Inicialização própria

Outra opção de carreira – talvez a mais difícil – é dar vida ao seu próprio projeto (por exemplo, lançar algum serviço original pago).

As startups são bem-sucedidas apenas para os programadores que têm espírito empreendedor ou encontrar um parceiro de negócios experiente.

Não entre imediatamente em um grande projeto que exija um enorme investimento de tempo e dinheiro. Primeiro, experimente um negócio que inicialmente lhe permitirá manter sua antiga fonte de renda.

Talvez, depois de ler o artigo, você comece a procurar uma vaga. Aproveite os publicados em nosso catálogo.

Você deve começar seu caminho para uma carreira como programador respondendo à pergunta: você precisa mesmo de programação? Essa questão não se aplica a quem está estudando ou já cursou alguma especialidade próxima à programação. Se você era melhor em matemática na escola do que em humanidades, se gosta de passar muito tempo no computador, se quer aprender algo novo, então programar é para você.

Por onde começar

Existem várias opções para o desenvolvimento de eventos, a partir dos quais uma pessoa se torna programador. O primeiro são os pais-programadores que ensinaram tudo aos filhos. Essas crianças nem precisam ir para a universidade. A segunda opção é a profissão da moda de programador. Depois da escola, tivemos que escolher onde estudar e escolhemos a área da moda de TI, da qual parecíamos gostar. E última opção- um hobby que virou trabalho.

Se nenhuma das situações acima aconteceu com você, você terá quatro opções para escolher:

  • Autoeducação. Esta opção pode ser usada de forma independente ou em combinação com outros métodos. A Internet está repleta de aplicativos que ajudam você a aprender diversas linguagens e tecnologias de programação. Mas este é o caminho mais difícil para iniciantes.
  • Universidade. Se você terminar a escola e quiser ser programador, vá para a universidade. Se não for pelo conhecimento, então pela crosta. Pode servir como um bônus na hora de se candidatar a um emprego. Embora você também ganhe algum conhecimento. Mas não se esqueça de se educar. A escolha de uma universidade deve ser abordada com muita responsabilidade. Estude cuidadosamente os programas de treinamento e escolha as melhores universidades técnicas.
  • Mentor. Será muito bom se você encontrar uma pessoa que concorde em ajudá-lo e indicar a direção certa. Ele irá sugerir livros e recursos adequados, verificar seu código, fornecer dicas úteis. A propósito, já escrevemos sobre onde você pode encontrar um mentor. Você pode procurar um mentor entre programadores conhecidos, em festas e conferências de TI, em fóruns online e assim por diante.
  • Cursos práticos especializados. Tente procurar cursos em sua cidade que ensinem alguma linguagem de programação ou tecnologia. Fiquei agradavelmente surpreso com o número de cursos desse tipo em Kiev, inclusive gratuitos e com posterior emprego.

Qual idioma, tecnologia e direção escolher

Quando você se tornar um programador, depois de um ou dois anos você estará livre para escolher a linguagem que desejar. Mas ao escolher uma primeira linguagem de programação, um iniciante deve considerar os seguintes critérios:

  • Disponibilidade de vagas no mercado. O objetivo final deste caminho é encontrar um emprego como programador. E isso será difícil de fazer se ninguém estiver procurando desenvolvedores na sua linguagem de programação no mercado de trabalho. Verifique os sites de emprego, veja quem é mais procurado, anote uma dezena de idiomas. E passe para o próximo critério.
  • Baixo nível de entrada. Se você tiver que passar muito tempo aprendendo uma linguagem, isso pode desencorajá-lo de programar. Leia sobre os idiomas que você selecionou acima. Revise a literatura que você precisará ler para aprender esses idiomas. E escolha aquelas que são descritas como fáceis ou que lhe pareceram fáceis. Essas linguagens podem ser PHP, Ruby, Python.
  • A emoção do processo. Se você não gosta de escrever código na linguagem escolhida, não gostará do processo, do seu trabalho ou da sua vida. Você precisa disso? Faça as escolhas certas.

Você também terá que decidir sobre a direção da programação. Mobile, desktop, jogos, web, programação de baixo nível e assim por diante. Os setores mais populares e relativamente fáceis são o desenvolvimento para clientes web, móveis e desktop. Um idioma pode ser adequado para cada direção e outro não. Ou seja, na hora de escolher uma linguagem de programação também vale partir desse fator.

De qualquer forma, aprenda tecnologias da web. Esta é a linguagem de marcação HTML, estilos CSS e , que tornarão sua página dinâmica. O próximo passo é aprender uma linguagem server-side (Python, PHP, Ruby e outras) e frameworks web adequados para isso. Estude os bancos de dados: quase todas as vagas de programador mencionam isso.

Como obter experiência inicial

Sem experiência você não conseguirá um emprego. Sem trabalho você não obterá experiência. Um círculo vicioso da vida real. Mas está tudo bem, vamos sair dessa.

Primeiro, não espere até ler todos os livros sobre a linguagem de programação escolhida. Comece a escrever suas primeiras linhas de código após o segundo capítulo do livro. Complete todas as tarefas dos livros, redigite os exemplos, entenda-os. Complique os exemplos e tarefas dos livros com suas próprias ideias. Crie suas próprias tarefas para o material abordado. Resolva esses problemas.

Em segundo lugar, você precisa encontrar seus primeiros projetos. Esta é provavelmente a opção mais difícil, mas funciona. Você mesmo terá que procurar os pedidos, atendê-los e se preocupar com o pagamento. Para um iniciante, isso é extremamente difícil, mas todas as outras opções parecerão moleza. Os projetos concluídos podem ser registrados como experiência e mostrados ao seu futuro empregador. Projetos reais são uma grande vantagem no seu currículo.

Se você sabe inglês, é melhor se cadastrar em intercâmbios de língua inglesa. O mercado é maior lá. Se você não sabe inglês, aprenda. Enquanto isso, intercâmbios freelance em russo estão disponíveis para você. Procure projetos pequenos que estejam no mesmo nível ou um pouco acima do seu nível de habilidade. Candidate-se a algumas dezenas desses empregos. E prepare-se para receber um mar de recusas. Mas se uma ou duas aplicações derem certo, você terá a chance de ganhar experiência real.

Outra boa opção para obter experiência real é o código aberto. Esses projetos sempre precisam de gente nova, até mesmo iniciantes. Você pode procurar bugs no projeto ou procurar no rastreador de bugs e sugerir métodos para resolvê-los. Você pode encontrar facilmente esses projetos no GitHub ou no . Fique à vontade para fazer perguntas lá.

A quarta opção para ganhar experiência é ajudar outros programadores. Peça-lhes que entreguem tarefas pequenas e simples para você. Se algo não der certo, você sempre terá alguém a quem recorrer. E ao mesmo tempo você participará de um projeto real.

A última forma são seus próprios projetos, vários hackathons ou trabalhando em um espaço de coworking. É difícil iniciar seus próprios projetos sozinho; é melhor procurar conhecidos ou amigos.

Por que escolher Python

Vamos conversar um pouco mais sobre como escolher sua primeira linguagem de programação. A primeira linguagem deve ser simples e popular no mercado. Tal linguagem é Pitão. Eu recomendo fortemente escolhê-la como sua primeira linguagem de programação.

O código do programa Python é legível. Você nem precisa ser um programador para ter uma compreensão básica do que está acontecendo em um programa. Devido à sintaxe descomplicada do Python, você levará menos tempo para escrever um programa do que, por exemplo, em Java. Um enorme banco de dados de bibliotecas que economizará muito esforço, nervosismo e tempo. Python é uma linguagem de alto nível. Isso significa que você não precisa pensar muito nas células de memória e no que colocar nelas. Python é uma linguagem de propósito geral. E é tão simples que até as crianças podem aprender.

Para ser justo, vale a pena mencionar outras linguagens de programação. Java pode ser uma boa escolha para um iniciante. Essa linguagem é mais popular que Python, mas também um pouco mais complexa. Mas as ferramentas de desenvolvimento estão muito mais desenvolvidas. Basta comparar Eclipse e IDLE. Depois do Java, será mais fácil passar a trabalhar com linguagens de programação de baixo nível.

PHP- outra linguagem muito popular. E acho que é ainda mais simples que Python. É muito fácil encontrar um mentor ou uma solução para um problema no fórum. Isso ocorre porque existe um grande número de programadores PHP de diferentes níveis no mundo. Não existe importação normal em PHP; existem muitas opções para resolver o mesmo problema. E isso complica o aprendizado. E o PHP foi projetado exclusivamente para a web.

Idiomas C E C# muito difícil para um iniciante. Rubi- uma boa escolha como segunda língua, mas não como primeira. JavaScript- uma linguagem muito simples, mas que não vai te ensinar nada de bom. Mas a tarefa da primeira linguagem de programação ainda é ensinar algo correto, definir algum tipo de lógica.

Inglês é importante?

Importante! Não sabe? Ensinar. Você sabe? Melhorar. Aprenda a ler, escrever, ouvir e falar inglês. Concentre-se na literatura técnica. Ouça podcasts em inglês. Leia livros didáticos de programação em inglês.

O que você precisa saber além da linguagem de programação

Claro que além da linguagem de programação e do inglês, você precisa saber mais alguma coisa. Mas o que depende da direção que você escolher. Um programador web deve conhecer HTML, CSS, JavaScript. Um programador de desktop ensina APIs de sistemas operacionais e várias estruturas. Um desenvolvedor de aplicativos móveis aprende estruturas Android, iOS ou Windows Phone.

Todo mundo precisa aprender algoritmos. Experimente fazer um curso no Coursera ou encontrar um livro sobre algoritmos adequado para você. Além disso, você precisa conhecer um dos bancos de dados, padrões de programação e estruturas de dados. Também vale a pena conferir os repositórios de código. Pelo menos com um. É necessário conhecimento de sistemas de controle de versão. Escolha Git, é o mais popular. Você precisa conhecer as ferramentas com as quais está trabalhando, sistema operacional e ambiente de desenvolvimento. E a principal habilidade de um programador é saber pesquisar no Google. Você não viverá sem isso.

Últimos passos

Você precisa preparar um currículo. Não apenas um currículo, mas um arquivo . Você não deveria escrever lá, mas também não precisa ficar calado sobre suas habilidades. Depois de ser convidado para uma entrevista, você deve se preparar para ela. Consulte o material listado em seu currículo. Você deve estar confiante em seu conhecimento. Analise os projetos em que você trabalhou, pense nas tecnologias que você usou. E siga em frente - para um futuro brilhante com uma nova profissão como programador.