Оригинальный автор: Дэн Абрамов
Переводчик: Джоти, UC International R&D
Написано спереди: Добро пожаловать в официальный счет «UC International Technology», мы предоставим вам высококачественные технические статьи, связанные с клиентом, сервером, алгоритмом, тестированием, данными, интернет-концом и т. Д., Не ограничиваясь оригинальностью и перевод.
Примечание редактора: сегодняшний пост — это новый пост члена команды React и автора Redux Дэна Абрамова, и это отличный пост. По случаю 2019 года я хотел бы поздравить всех с наступающим Новым годом этой статьей!
Люди всегда думают, что я много чего знаю, но это не так. Я ни на что не жалуюсь, и это тоже неплохо. (Несмотря на с трудом заработанные доказательства, меньшинства всегда предвзяты, что отвратительно.)
В этой статье я собираюсь составить список тем программирования, которые люди часто неправильно понимают, но которые я знаю очень хорошо. Не то, чтобы вам не нужно было их учить, или что я не знаю ничего другого полезного. Но поскольку моя позиция сейчас не слаба, я могу сказать правду.
Вот почему я думаю, что это важно.
Во-первых, существует нереалистичное ожидание, что опытный инженер должен знать каждую технологию в своей области. Вы видели «Дорожную карту обучения», которая включает 100 библиотек и инструментов? Это полезно, но запретительно.
Более того, какими бы богатыми вы ни были, ваши эмоции могут быть хорошими, уверенными («СИНДРОМ САМПОСТОРА») и чрезмерно самоуверенными («Эффект Даннинга-Крюгера»). Это зависит от окружения, работы, личности, товарищей по команде, психического состояния и тому подобного.
Опытные разработчики иногда открыто выражают свою неуверенность, чтобы подбодрить новичков. Но на самом деле между ними огромная разница, как между опытным хирургом, который все еще нервничает, и студентом, который впервые держит скальпель!
Разочаровывает, когда люди говорят: «Мы все младшие разработчики», как если бы вы разговаривали с учеником, у которого есть пробелы в знаниях. Такие доброжелательные практикующие, как я, не могут решить эту проблему с помощью того, насколько хорош диктант.
Тем не менее, даже у опытных инженеров есть много пробелов в знаниях. Этот пост описывает мои пробелы в знаниях, и я призываю тех, кто может позволить себе подобные уязвимости, поделиться своими. Но при обмене помните, что нельзя недооценивать нашу ценность.
Мы можем щедро признавать пробелы в наших знаниях, но также помнить, что у нас все еще есть ценный опыт, на который уйдут годы напряженной работы.
Сначала хороший отказ от ответственности, вот некоторые вещи, которые я не знаю:
- Команды Unix и Bash. Я помню ls и cd, но мне нужно искать другие команды, чтобы использовать их. Я понимаю концепцию канала, но использую его только в простых сценариях. Я не знаю, как создавать сложные цепочки с помощью xargs, как комбинировать и перенаправлять разные потоки вывода. Я также никогда не изучал Bash систематически, поэтому я могу писать только очень простые (и часто неправильные) сценарии оболочки.
- Язык низкого уровня. Я знаю, что Assembly может хранить содержимое в памяти и переходить к выполнению кода, но я знаю только это. Я написал несколько строк c, что такое указатель, но я не знаю, как использовать Malloc или другую технологию ручного управления памятью. Я никогда не играл в Раст.
- Сетевой стек. Я знаю, что у компьютеров есть IP-адреса, и DNS — это то, как мы разрешаем имена хостов. Я знаю, что существуют протоколы низкого уровня, такие как TCP/IP, для обмена пакетами (вероятно?) для обеспечения целостности. Это все, что я знаю, и я не уверен в деталях.
- контейнер. Я не знаю, как использовать Docker или Kubernetes. (Они связаны?) Я имею о них смутное представление, зная, что они позволяют мне запускать одну виртуальную машину предсказуемым образом. Звучит круто, но я еще не пробовал.
- Без сервера. Тоже круто, но не пробовал. Я не совсем понимаю, как эта модель меняет бэкэнд-программирование (может быть, и нет).
- Микросервисы. Если я правильно понимаю, это просто означает «многие конечные точки API, взаимодействующие друг с другом». Я не знаю, каковы фактические плюсы и минусы этого подхода, так как я его не использовал.
- Питон. Мне это не очень нравится — я много лет работаю с Python и никогда не удосужился его изучить. Его поведение при импорте и многое другое для меня полный черный ящик.
- Серверная часть узла. Я знаю, как запускать Node, создавать инструменты с использованием таких API, как fs, и могу использовать Express. Но я никогда не использовал Node для подключения к базе данных и не знаю, как с его помощью написать бэкенд. Я также не знаком с фреймворками React, такими как Next, которые реализуют «hello world».
- Родная платформа. Я безуспешно пытался изучить Objective C. Я не изучал ни Swift, ни Java. (Хотя я мог выучить Java, потому что знаю C#, я не изучал Java.)
- алгоритм. Максимум, что я знаю, это пузырьковая сортировка и быстрая сортировка. Я могу сделать простой обход графа, если они привязаны к конкретной практической задаче. Я понимаю нотацию O (n), но мое понимание не намного глубже, чем «не вкладывать циклы в циклы».
- функциональный язык. Я не использую свободно какой-либо традиционный функциональный язык, если только не включен JavaScript. (Я разбираюсь только в C# и JavaScript — чуть не забыл о C#). Чтение кода в стиле LISP (например, Clojure), в стиле Haskell (например, Elm) или в стиле ML (например, OCaml) также вызывает у меня затруднения.
- функциональный термин. В моем случае Map и Reduce являются наиболее важными. Я не знаю о моноидах, функторах и т.д. Я знаю, что такое монада (но может это моя галлюцинация 🤣).
- Современный CSS. Я не знаю ни Flexbox, ни Grid. Поплавки - это мое.
- Методология CSS. Я использовал БЭМ (имеется в виду часть CSS, а не сырой БЭМ), но это все, что я знаю. Я не пробовал OOCSS или что-то еще.
- СКСС/САСС. Я никогда не учился.
- КОРС. Я так боюсь этих ошибок! Я знаю, что мне нужно установить некоторые заголовки, чтобы исправить их, но в прошлом я тратил на это часы.
- HTTPS/SSL. никогда не устанавливал. Не уверен, как это работает с закрытыми и открытыми ключами.
- ГрафQL. Я бы использовал запрос, но я действительно не знаю, как использовать такие выражения, как node и edge, когда использовать фрагмент и как работает нумерация страниц.
- Розетки. Моя мысленная модель заключается в том, что они реализуют взаимосвязь компьютеров вне модели запрос/ответ, но это все, что я знаю.
- Потоки. Я не обращал пристального внимания на потоки, отличные от Rx Observables. Я использовал старые потоки узлов один или два раза, но это всегда портит обработку ошибок.
- Электрон. непроверенный.
- Машинопись. Я понимаю концепцию типов и могу читать комментарии, но никогда не пишу об этом. Я пробовал несколько раз и столкнулся с трудностями.
- Разворачивайте и развивайтесь. Я могу отправлять файлы по FTP или убивать процессы, но мои навыки devops ограничиваются этим.
- графика. Будь то холст, SVG, WebGL или низкоуровневая графика, я не использовал их продуктивно. Я понимаю общую идею, но нужно изучить примитивы.
Конечно, этот список не является исчерпывающим. Есть еще много вещей, которых я не знаю.
Обсуждение может показаться странным, и даже эта статья написана неправильно. Я хвастаюсь своим невежеством? Мое намерение:
- Даже ваш любимый разработчик, вероятно, не знает многого из того, что знаете вы.
- Независимо от вашего уровня знаний, ваша уверенность время от времени сильно меняется.
- Несмотря на пробелы в знаниях, опытные разработчики имеют опыт работы в отрасли.
Я знаю, что мои пробелы знаний (хотя бы частично). Если мне интересно определенные технологии, или проект должен использоваться, то я могу учиться у него.
Это не обесценивает мои знания и опыт. Я могу многое. Например, выучить его, когда вам нужно.
Хорошая рекомендация статьи:
«UC International Technology» стремится делиться с вами высококачественными техническими статьями.
Добро пожаловать, чтобы подписаться на наш официальный аккаунт и поделиться статьей с друзьями