Coisas que não sei em 2018

Olá Habr! Apresento a você a tradução do artigo "Coisas que não sei a partir de 2018", de Dan Abramov .


As pessoas geralmente pensam que eu sei muito, mas isso não é verdade. Não é tão ruim e não reclamo. (Uma pequena parte das pessoas geralmente sofre de crenças preconcebidas, apesar de merecerem mais, o que é terrível).


Neste post, mostrarei uma lista incompleta de tópicos de programação que as pessoas assumem erroneamente que eu conheço. Não estou dizendo que você não precisa estudá-los ou que não conheço outras coisas úteis. Mas como não me coloquei em uma posição vulnerável, posso ser sincero sobre isso.


Por que eu acho isso importante


Primeiro, muitas vezes há uma expectativa irreal de que um engenheiro experiente conheça todas as tecnologias em seu campo. Você já viu o "mapa de aprendizado", que consiste em centenas de bibliotecas e ferramentas? Isso é útil, mas assustador.


Além disso, não importa o quão experiente você seja, você ainda pode alternar entre um senso de habilidade, inadequação ("Síndrome do Impostor") e autoconfiança ("Efeito Dunning - Krueger"). Depende do seu ambiente, trabalho, personalidade, colega, estado mental, hora do dia e assim por diante.


Desenvolvedores experientes às vezes falam sobre sua insegurança para animar iniciantes. Mas há uma enorme diferença entre um cirurgião experiente que ainda está nervoso e um aluno que segura um bisturi pela primeira vez!


Ouvir que “somos todos desenvolvedores iniciantes” pode ser desencorajador e parecer uma conversa vazia com os alunos que enfrentam uma lacuna de conhecimento real. Confissões de profissionais benevolentes como eu, que não conseguem superar isso.


No entanto, mesmo engenheiros experientes têm muitas lacunas de conhecimento. Este post é sobre o meu, e exorto aqueles que podem pagar essa fraqueza a compartilharem os seus. Mas não vamos desconsiderar nossa experiência neste momento.


Somos capazes de reconhecer nossas lacunas de conhecimento, podemos ou não nos sentir impostores, e ainda temos uma experiência muito valiosa para dizer que anos de trabalho duro levam desenvolvimento.


Com isso eu não sou responsável, aqui estão apenas algumas coisas que eu não sei:


  • Comandos Unix e Bash Eu posso fazer sl e cd , mas também espionar todo o resto. Entendi o conceito de tubulação, mas o usei apenas em casos simples. Não sei como usar xargs para criar cadeias complexas ou como compor e redirecionar vários fluxos de saída. Eu nunca estudei o Bash corretamente, então só posso escrever scripts shell muito simples (e geralmente com erros).
  • Linguagens de baixo nível. Entendo que o Assembly permite que você armazene coisas na memória e navegue pelo código, mas é tudo. Escrevi várias linhas em C e entendo o que é um ponteiro, mas não sei como usar o malloc ou outros métodos de gerenciamento manual de memória. Nunca mexi com Rust.
  • Pilha de rede. Eu sei que os computadores têm endereços IP e o DNS é como trabalhamos com nomes de host. Eu sei que existem protocolos de baixo nível, como TCP / IP, para troca de pacotes que (possivelmente?) Garantem a integridade. É tudo - não entendo os detalhes.
  • Contentores Não faço ideia de como usar o Docker ou o Kubernetes. (Eles estão relacionados?) Tenho uma vaga idéia de que eles permitem implantar uma máquina virtual separada. Parece legal, mas eu não tentei.
  • Sem servidor. Também parece legal. Nunca tentei. Não tenho uma ideia clara de como esse modelo altera a programação de back-end (se é que o faz).
  • Microsserviços Se bem entendi, isso significa simplesmente que "muitos pontos de extremidade da API se comunicam". Não sei quais são as vantagens ou desvantagens práticas dessa abordagem, porque não trabalhei com ela.
  • Python É sempre ruim para mim lembrar disso - trabalho com Python há vários anos e nunca me preocupei em aprender. Há muitas coisas, como comportamento de importação, que para mim são uma floresta sombria.
  • Nó JS. Entendo como iniciar o Node, usei algumas APIs, por exemplo fs, para criar ferramentas e posso configurar o Express. Mas nunca me comuniquei através do Node com um banco de dados e não sei como escrever um back-end nele. Também não estou familiarizado com estruturas do React, como o Next, mais "olá mundo".
  • Plataforma nativa. Tentei aprender o Objective-C em algum momento, mas isso não me ajudou. Também não ensinei rápido. A mesma coisa com Java. (Eu provavelmente poderia tê-los dominado desde que trabalhei com C #.)
  • Algoritmos O máximo que você obterá de mim é o tipo de bolha e, possivelmente, o quicksort, na melhor das hipóteses. Provavelmente, eu posso executar tarefas simples de passagem de gráfico se estiverem relacionadas a um problema prático específico. Eu entendo a notação O (n), mas meu entendimento não é muito mais profundo do que "não coloque loops nos loops".
  • Linguagens funcionais. Se você não conta com JavaScript, não falo nenhuma linguagem tradicionalmente funcional. (Eu sou apenas livre em C # e JavaScript - e já esqueci C #.) Mal consigo ler códigos inspirados em Lisp (como Clojure), inspirados em Haskell (como Elm) ou inspirados em ML (como OCaml).
  • Terminologia funcional. Mapeie e reduza sei quanto é necessário. Não conheço monóides, functores, etc. ... sei o que é uma mônada, mas talvez isso seja apenas uma ilusão.
  • CSS moderno. Eu não conheço Flexbox ou Grid. Carro alegórico é o meu tudo.
  • Metodologias CSS. Eu usei o BEM (ou seja, como parte do CSS, não o BEM original), mas é tudo o que sei. Eu não tentei OOCSS ou outras metodologias.
  • SCSS / Sass. Eu nunca comecei a estudá-los.
  • CORS. Eu tenho medo desses erros! Eu sei que preciso ajustar os cabeçalhos para corrigi-los, mas no passado eu gastei muito tempo nisso.
  • HTTPS / SSL. Nunca configure. Não sei como isso funciona, exceto pela ideia de chaves públicas e privadas.
  • GraphQL. Consigo ler a consulta, mas realmente não sei como expressar as coisas com nós e bordas, quando usar fragmentos e como a paginação funciona lá.
  • Soquetes No meu entendimento, eles permitem que os computadores se comuniquem fora do modelo de solicitação / resposta, mas é tudo o que sei.
  • Streams. Além de Rx Observables, não trabalhei com threads tão próximos. Usei os antigos threads do Nó uma ou duas vezes, mas sempre recebia um erro de processamento.
  • Elétron Nunca tentei.
  • TypeScript Entendo o conceito de tipos e posso ler anotações, mas nunca escrevi. Eu tentei várias vezes, mas tive dificuldades.
  • Implantação e devops. Posso enviar vários arquivos via FTP ou matar alguns processos, mas esse é o limite de minhas habilidades em devops.
  • Gráficos Seja canvas, SVG, WebGL ou gráficos de baixo nível, não sou inteligente nisso. Entendi a ideia geral, mas não preciso aprender coisas simples.

Obviamente, essa não é uma lista completa. Há muitas coisas que eu não sei


Isso pode parecer estranho de discutir. Nem vale a pena escrever sobre isso. Estou mostrando minha ignorância? Minha conclusão para este post é a seguinte:


  • Mesmo seus desenvolvedores favoritos podem não saber muitas coisas que você conhece.
  • Independentemente do seu nível de conhecimento, sua confiança pode ser muito diferente.
  • Desenvolvedores experientes são muito competentes, apesar das lacunas de conhecimento.

Eu sei sobre as minhas lacunas de conhecimento (pelo menos algumas delas). Posso preenchê-los mais tarde se me interessar ou precisar deles para o projeto.


Isso não menospreza meu conhecimento e experiência. Há muitas coisas que posso fazer bem. Por exemplo, para estudar tecnologias quando eu precisar delas.

Source: https://habr.com/ru/post/pt446088/


All Articles