Sobre o que é este artigo
De fato, o artigo é sobre como minha maneira de pensar deveria ter mudado com a mudança de profissão, a compreensão do contexto e em quais momentos deveria ser prestada atenção, bem como com que intensidade a escolha de "o que devo ensinar" afeta os anos subsequentes do meu desenvolvimento pessoal na carreira.
Devo dizer imediatamente que não considerarei significativo iniciar, como na maioria dos artigos, qual linguagem de programação escolher. Isso não faz sentido. Não, você não escolhe uma linguagem de programação. De fato, você escolhe seu futuro, nem mais nem menos. Sua escolha futura será baseada em seu aplicativo e plataforma.
Um pouco para mim
Tornei-me programador no início de 2016, aos 35 anos, isto é, se você olhar para o histórico de atividades no meu perfil do GitHub e aceitar o primeiro trabalho sério. Idade bastante decente para uma mudança de profissão. Sim, este não é um momento sem importância - eu deixei o design. Essa é, na verdade, uma mudança muito radical, e não apenas porque, pela primeira vez, você lida com a profissão de maneira humanitária, com fotos, design, composição e até usabilidade no meu caso, e de repente você pula no código, na tecnologia, na compilação, na base. dados e assim por diante. Isso é essencialmente apenas a ponta do iceberg, visível do lado de fora. Vou falar sobre conclusões pessoais mais profundas um pouco mais no texto.
Como isso aconteceu e por quê? Há duas razões - desta vez não gerenciei o design, a depressão é duas. Para me tornar um designer de sucesso, tanto quanto eu gostaria, eu precisava de um efeito WOW, e não apenas de UX lógico, composição concisa, cenários operacionais para usar o produto e algumas habilidades do gerente de produto novamente. Precisávamos de fotos legais e suculentas. Para eles, eu não possuía propriedade suficiente da composição de cores e, por causa da depressão ou por algum outro motivo, não consegui dominá-la. E então ... primeiro, assistindo o filme Ex Machina, algo me virou e eu me matriculei em um curso de Machine Learning de Andrew Ng. Eu realmente gostei, apenas selvagem, apesar de noites sem dormir e olhos vermelhos pela manhã.
Em seguida, tomei a decisão mais trivial e mais simples em minha opinião - fiz a escolha inevitável pelo volume e qualidade do conhecimento da indústria moderna de TI e pelos meus recursos que possuía na época. Decidi mudar gradualmente da programação front-end para front-end de aplicativos baseados em navegador em JavaScript. E a partir daqui, podemos dizer o caminho real da tentativa e erro, caminhando no rake e uma série de inúmeras descobertas surpreendentes começou.
Agora cheguei ao ponto em que já posso expressar em ordem meus pensamentos sobre essa transição, quais poços e ancinhos devem ser esperados no caminho. Espero que alguém que enfrenta a mesma escolha que eu fiz alguns anos atrás seja útil. Então vá em frente!
Sobre um ancinho e erros do iniciante
Quando mudei de profissão, não sabia algumas coisas e cometi alguns erros pelos quais tive que pagar com nervosismo, noites sem dormir e dinheiro.
Em primeiro lugar, como penso, há uma certa escala na qual você pode definir um programador e provavelmente uma pessoa também. Tudo é interessante para ele em um extremo, ele quer ajudar a causa comum, no outro extremo ele se concentra completamente em uma coisa, ele cavará uma trincheira por anos, décadas e está bem com isso (provavelmente). Lá e há vantagens, desvantagens e armadilhas que você precisa conhecer. Eu próprio pertenço ao primeiro tipo, o "Tiger louco", para poder falar mais sobre ele. Mas o que importa exatamente é entender a que tipo você pertence o mais cedo possível.
Se você gosta de cavar uma coisa, é improvável que tenha problemas para encontrar um emprego no mercado de trabalho aberto - especialistas estreitos obtêm uma experiência mais profunda e mais rápida em seu campo ao mesmo tempo, é mais fácil para o empregador levá-lo, porque ele até sabe que você comeu um cachorro em uma coisa que é muito importante para ele - por exemplo, otimizar a animação de botões em um navegador de um site. Mas não é tão simples. Ao contratar, é claro, você ficará muito feliz, mas poderão surgir dificuldades durante o trabalho, porque é muito provável que os colegas esperem envolvimento no produto como um todo e em toda sua pilha tecnológica. Disposição de ajudar, inclusive indo além do escopo de suas funções diretas - trabalhar sem um TK específico, atacar um supermercado, falar com um defensor em seu idioma, etc. E aqui provavelmente será um local. Você provavelmente não será criado, e você mesmo não desejará. Pelo que entendi, aqueles que se sentam à beira dessa escala mudam de emprego uma vez por ano ou dois para indexar os salários. Porque essa é basicamente a única maneira de trabalhar no escritório. A segunda maneira é freelancer, com acesso a mercados mais desenvolvidos, embora, no final, se você realmente precise de muito dinheiro, ainda precise expandir seu arsenal de habilidades.
Se é mais provável que você tenha prazer em ajudar colegas, prepare-se. Depois que você tiver o suficiente (para a primeira contratação) para aprender uma coisa, então, com o que decidir entrar no mercado pela primeira vez, você será transferido de pilha em pilha, de tecnologia em tecnologia. Você pode encontrar-se no papel de devops, gerente de projetos, designer de produtos (não quem desenha), arquiteto e o diabo sabe quem mais. Você terá uma experiência muito diversificada e terá algo a dizer. E se você entrar em uma boa equipe versátil com um ótimo produto interessante - mantenha-me sete. O problema é que os projetos estão terminando, as empresas vão à falência, os chefes se enganam e aqui está você sem trabalho, com um mercado de trabalho aberto e não precisa dele, ele precisa de especialistas estreitos e confiáveis. Todas as portas estarão fechadas. Bem, porque mesmo se você passar por todas as entrevistas técnicas em uma especialização, elas dirão que você poliu os botões apenas seis meses nos últimos anos e que precisa de um polidor de botões. Acontece que você precisa ir ao desenvolvedor principal ou superior, mas uma chatice - eles geralmente não tiram da rua. A única maneira de conhecer é construir uma marca pessoal. Não importa se você trabalha em um escritório ou remotamente sob contratos - faça alguma coisa. Referências não irão ajudá-lo a propósito. Até agora, conheço duas opções: participar de conferências do setor, apresentar chiques em geral e escrever um blog pessoal. Qualquer coisa, pelo menos qualquer bobagem, mas para começar a fazê-lo no primeiro ano a partir do momento em que você foi contratado pela primeira vez. Isso é importante.
Aqui, sim, há uma contradição com o mercado de trabalho - eles querem ver uma coisa na contratação, mas depois querem trabalhar em equipe com outra.
Sobre tecnologia e "qual idioma devo escolher?"
Aqui temos a escala de gradação novamente. Nem mesmo uma escala, espaço multidimensional. Existem tecnologias da moda que são frequentemente discutidas em conferências, elas escrevem muito em blogs e redes sociais. Existem tecnologias que não têm concorrentes, como JavaScript e suas variações nos navegadores da web. Existem dinossauros antigos nos quais muitas coisas são escritas e isso deve ser apoiado. E entre esses pontos, existem diferentes interseções na forma de casos específicos.
Quando você escolhe, terá que decidir, e quanto mais cedo melhor - perceber que sua pilha escolhida limita você não é muito legal. Decida o que você quer: confiabilidade, dinheiro e uma boa base de conhecimento, ou eu nem sei de mais nada. Se o primeiro - me parece melhor escolher entre os dinossauros que ainda estão vivos e se desenvolvendo bem. Como eu próprio sou toda sobre a web, posso dizer que existem duas tecnologias confiáveis. C # e Java. Os desenvolvedores de PHP podem ficar indignados, mas sugiro deixar essa questão de gosto e cor, por assim dizer ... A peculiaridade é que os projetos podem viver e se desenvolver por um longo tempo sem dificuldades adicionais apenas quando escritos em linguagens maduras com ferramentas suficientes para estruturar o código. Desta vez. A segunda opção será uma estrutura específica. .Net ou Spring ou qualquer outra coisa é possível. Aqui o critério é este - ele deve ser encontrado com frequência, usado em grandes corporações e em projetos de vida longa e, idealmente, deve ser conveniente trabalhar. Por exemplo, o Spring Boot agora permite que você protótipo de serviços rapidamente, além de gravar coisas sérias com uma arquitetura muito sofisticada e muita funcionalidade necessária para os negócios, e implementa-o imediatamente.
Pelo contrário, tudo o que está “na moda” - em geral, é muito jovem, tem uma infraestrutura fraca ou ingênua, mas a comunidade de fãs com olhos ardentes está pronta para vender qualquer coisa por gentileza. O problema com todas essas tecnologias novas ou não amplamente usadas é que elas não têm ferramentas prontas suficientes - você provavelmente precisará escrever muitas das funcionalidades triviais, por exemplo, autorização através de redes sociais. Isso é realmente monstruoso. Uma empresa raramente quer pagar por bicicletas. E então você ainda precisa manter esse código. Exemplos? Para o Python, não existe uma única estrutura da Web completa (exceto o Django, com algumas reservas) com a qual você pode viver e não enlouquecer trabalhando em um projeto por mais de um ano ou dois. Seus problemas começarão imediatamente e são bastante triviais, como a importação cíclica de módulos. Sinto muito por ter ignorado o PHP, eles fazem muitas coisas nele, mas há um ponto - não ouvi dizer que nenhuma das grandes empresas o usou, e não um garfo refeito, como o Facebook.
Linhas separadas são uma espécie de monopólio. Rápido para o ecossistema da Apple, que por sua vez cria suas próprias estruturas de desenvolvimento de aplicativos. Google com Android (a propósito, também Java / Kotlin). Linguagem R e ambiente de desenvolvimento para análise de dados. JavaScript como a única linguagem de programação em execução nos navegadores.
Com Swift, tudo parece estar claro. Existem poucos programadores, eles pagam bem (de acordo com os rumores), a linguagem está se desenvolvendo rapidamente, está na moda, mas difere do hype por ser compatível com o dinossauro ObjC e tudo o que está escrito nele há muitos anos. A Apple também está por trás disso e está desenvolvendo rapidamente estruturas de plataforma. Além disso, ele pode ser compilado em outros sistemas e parece prometer compatibilidade com o C / C ++. Se isso acontecer, eu nem sei ... haverá algo ou muito bom ou algo mais. Como já foi escrito tanto em C / C ++ que você pode mudar de idéia, esse é um recurso enorme.
Javascript Idioma como idioma. Muitos o consideram uma linguagem inferior. Ele tem muitos problemas, isso é verdade. São principalmente lesões de nascimento que são quase impossíveis de serem superadas em um sentido técnico. Pode ser usado para aplicativos de servidor, mas eu não recomendaria seguir esse caminho. O NodeJS é puro hype sobre o qual seu próprio criador disse diretamente que erros fundamentais foram cometidos durante a sua criação. Quanto ao desenvolvimento do navegador, eu recomendaria pegar o que é mais usado agora, isso é React em conjunto com o Redux. Apenas muito disso. Ele é necessário em todo lugar. Você encontrará um emprego. Embora você esteja apenas no navegador, mesmo se estiver com pilha cheia, um lacaio de uma grade de cerâmica sempre será suficiente no filé.
Como resultado, suas conclusões pessoais
Se eu selecionasse novamente, levaria um monte de Java / Spring + React. É claro que a primavera não é mais a primavera agora, e o mesmo se aplica ao React, mas os critérios são os mesmos.
O que pessoalmente me toca nesta pilha. É relativamente fácil "vender" para um cliente React, é bem conhecido por todos, porque é um hype que, ao mesmo tempo, tem uma infraestrutura excessiva e está firmemente entrincheirado no mercado, para que possa ser usado em projetos sérios. Ao mesmo tempo, não há contradições preocupantes em relação ao desenvolvimento e futuro da programação de navegadores - ela é orientada a componentes, a comunidade está bem ciente da programação reativa, que agora é bastante relevante, e a utiliza. Novas versões do React não quebram o código antigo sem avisos; as regras de composição do aplicativo não mudam drasticamente. Você não pode dizer sobre a Angular que já manchou sua reputação muitas vezes (espero que agora esteja tudo bem e não mais tempestades). Bem, exceto Vue, tudo o mais é melhor para não tocar, parece-me.
O Java, por outro lado, fornece um enorme campo de soluções prontas, e quase toda a "Lista de Desejos" do seu cliente ou empregador pode ser, se não for fácil, mas pelo menos não realizada através de uma cerca de muletas. Sinceramente, acredito que, com o .Net e, especialmente, o desenvolvimento da plataforma .Net Core, tudo está bem, mas pessoalmente não gosto muito de C #, bem, acabou.