Вещи, которых я не знаю в 2018

Вещи, которых я не знаю в 2018
Вещи, которых я не знаю в 2018

Привет, дорогой читатель! Представляю вашему вниманию перевод статьи «Things I Don’t Know as of 2018» автора Дэна Абрамова.

Люди обычно думают, что я знаю многое, но это не так на самом деле. Это не так плохо и я совсем не жалуюсь. (Некоторая малая часть людей часто страдает от предвзятого убеждения, не смотря на то, что они заслуживают большего, что ужасно).

В этом сообщении я покажу незаконченный список тем программирования, который люди ошибочно предполагают, что я знаю. Я не говорю, что вам не нужно их изучать или я не знаю других полезных вещей. Но поскольку я не поставил себя в уязвимое положение, я могу быть честным по этому поводу.

Почему я думаю, что это важно

Во-первых, часто существует нереалистичное ожидание, что опытный инженер знает каждую технологию в своей области. Вы видели «карту обучения», которая состоит из сотни библиотек и инструментов? Это полезно, но пугает.

Более того, неважно насколько вы опытны, вы все равно можете обнаружить, что переключаетесь между чувством способности, неадекватности (“Синдром самозванца”) и самоуверенности (“эффект Даннинга–Крюгера”). Это зависит от вашего окружения, работы, личности, коллеги, психического состояния, времени суток и так далее.

Опытные разработчики иногда говорят о своей неуверенности, чтобы подбодрить новичков. Но есть огромная разница между опытным хирургом, который все еще нервничает, и студентом, который держит скальпель впервые!

Слышать, что “мы все начинающие разработчики”, может быть обескураживающим и звучать как пустой разговор с учащимися, столкнувшимися с фактическим пробелом в знаниях. Признания от доброжелательных практиков, таких как я, которые не могут превозмочь это.

Тем не менее, даже опытные инженеры имеют много пробелов в знаниях. Этот пост о моих, и я призываю тех, кто может позволить себе подобную слабость, поделиться своими. Но давайте не будем обесценивать наш опыт, в этот момент.

Мы в состоянии признать наши пробелы в знаниях, можем или не можем чувствовать себя самозванцами, и все же обладаем очень ценным опытом, чтобы сказать, что на разработку уходят годы напряженной работы.

С этим не несу ответственности, вот лишь несколько вещей, которые я не знаю:

  • Команды Unix и Bash. Я умею ls и cd, но также подсматриваю все остальное. Я понял концепцию трубопровода(piping), но использовал ее только в простых случаях. Я не знаю, как использовать xargs для создания сложных цепочек или как составлять и перенаправлять различные потоки вывода. Я никогда как следует не изучал Bash, поэтому могу писать только очень простые (и часто глючные) сценарии оболочки.
  • Языки низкого уровня. Я понимаю, что Assembly позволяет вам хранить вещи в памяти и перемещаться по коду, но это все. Я написал несколько строк на C и понимаю, что такое указатель, но не знаю, как использовать malloc или другие методы ручного управления памятью. Никогда не баловался с Rust.
  • Сетевой стек. Я знаю, что у компьютеров есть IP-адреса, и DNS — это то, как мы работаем с именами хостов. Я знаю, что существуют протоколы низкого уровня, такие как TCP / IP для обмена пакетами, которые (возможно?) гарантируют целостность. Вот и все — в деталях не разбираюсь.
  • Контейнеры. Я без понятия, как использовать Docker или Kubernetes. (Связаны ли они?) У меня есть смутное представление о том, что они позволяют мне разворачивать отдельную виртуальную машину. Звучит круто, но я не пробовал.
  • Serverless. Также звучит круто. Никогда не пробовал. У меня нет четкого представления о том, как эта модель меняет бэкэнд-программирование (если оно вообще это делает).
  • Microservices. Если я правильно понимаю, это просто означает, что «многие конечные точки API общаются друг с другом». Я не знаю, каковы практические преимущества или недостатки этого подхода, потому что я не работал с ним.
  • Python. Мне всегда плохо вспоминать это — я работал с Python в течение нескольких лет, и я никогда не удосужился изучить его. Есть много вещей, таких как поведение при импорте, которые для меня темный лес.
  • Node JS. Я понимаю, как запустить Node, использовал некоторые API, например fs, для сборки инструментов, и могу настроить Express. Но я никогда не общался через Node с базой данных и не знаю, как написать в ней бэкэнд. Я также не знаком с React фреймворками, такими как Next, дальше «hello world».
  • Native платформы. Я пытался изучить Objective C в какой-то момент, но это не помогло мне. Свифт я тоже не учил. То же самое и с Java. (Я, вероятно, смог бы осилить их, так как работал с C#.)
  • Алгоритмы. Максимум, что вы добьетесь от меня, это пузырьковой сортировки(bubble sort) и, возможно, быстрой сортировки(quicksort ) в лучшем случае. Я, вероятно, могу выполнять простые задачи обхода графа, если они связаны с конкретной практической проблемой. Я понимаю нотацию O(n), но мое понимание не намного глубже, чем «не помещайте циклы в циклы».
  • Функциональные языки. Если вы не посчитаете JavaScript, то я не владею каким-либо традиционно функциональным языком. (Я свободен только на C # и JavaScript — и уже подзабыл C#.) Мне с трудом удается прочитать вдохновленный Лиспом (как Clojure), вдохновленный Хаскелем (как Elm), или ML-вдохновленный (как OCaml) код.
  • Функциональная терминология. Map и reduce знаю сколько нужно. Не знаю моноидов, функторов и т. д… Я знаю, что такое монада, но, возможно, это всего лишь иллюзия.
  • Современный CSS. Я не знаю Flexbox или Grid. Floats — это моё всё.
  • Методологии CSS. Я использовал БЭМ (имеется в виду как часть CSS, а не оригинальный БЭМ), но это все, что я знаю. Я не пробовал OOCSS или другие методологии.
  • SCSS / Sass. Никогда не принимался изучать их.
  • CORS. Я боюсь этих ошибок! Я знаю, что мне нужно настроить заголовки, чтобы их исправить, но в прошлом я потратил на это уйму времени.
  • HTTPS / SSL. Никогда не настраивал это. Не знаю, как это работает, кроме идеи закрытых и открытых ключей.
  • GraphQL. Я могу прочитать запрос, но я на самом деле не знаю, как выразить вещи с помощью nodes и edges, когда использовать fragments и как там работает пагинация.
  • Сокеты. В моем понимании они позволяют компьютерам общаться друг с другом вне модели запрос / ответ, но это все, что я знаю.
  • Потоки. Кроме Rx Observables, я не работал с потоками так близко. Я использовал старые Node потоки один или два раза, но всегда получал ошибку в обработке.
  • Electron. Никогда не пробовал его.
  • TypeScript. Я понимаю концепцию типов и умею читать аннотации, но никогда не писал ее. Несколько раз я пытался, но столкнулся с затруднениями.
  • Развертывание и devops. Я могу отправить несколько файлов по FTP или убить какие-то процессы, но это предел моих навыков в devops.
  • Графика. Будь то canvas, SVG, WebGL или низкоуровневая графика, я не смышлен в этом. Я понял общую идею, но мне не нужно изучать простые вещи.

Конечно, это не полный список. Есть много вещей, которых я не знаю

Это может показаться странным для обсуждения. Об этом даже не стоит писать. Я хвастаюсь своим невежеством? Мой вывод к этому посту заключается в следующем:

  • Даже ваши любимые разработчики могут не знать многих вещей, которые вы знаете.
  • Независимо от вашего уровня знаний, ваша уверенность может сильно отличаться.
  • Опытные разработчики очень компетентные, несмотря на пробелы в знаниях.

Я знаю о своих пробелах в знаниях (по крайней мере, части из них). Я могу заполнить их позже, если мне станет интересно или они понадобятся для проекта.

Это никак не принижает мои знания и опыт. Есть много вещей, которые я могу сделать хорошо. Например, изучать технологии, когда я в них нуждаюсь.

Автор

MIIIG

Занимаюсь разработкой сайтов, знаю php, js, html, css, gulp, bash, увлекаюсь разработкой на микроконтроллерах(esp, arduino), перевожу статьи, также увлечен графическим дизайном, типографией, знаю также немного арабский, люблю минимализм, простоту и material design