NextRiot

В чем я не шарю в 2018

January 1, 2019 • ☕️ 4 min read

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

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

Зачем вообще о таком писать?


Во-первых, распространено нелепое представление, что опытные разработчики лично знают каждую закорючку в пределах своего поля. Диаграммы типа «фронтэнд в 2018» по изощренности напоминают черновики Толкина. Но ведь сайты делать — это не в Мордор ходить.

Даже фронтэндеры стопятьсотого уровня находятся в суперпозиции трех состояний: «вроде работает», «ай да Пушкин», и «сейчас коллеги спалят, что я не знаю флексбокс». Настроение зависит от проекта, команды, склада ума, времени дня, зарплаты и фазы Сатурна.

Иногда среди твиттерати начинается пьянка за то, как «мы все новички». Но есть большая разница между опытным хирургом, у которого в животе бабочки, и студентом, впервые взявшим скальпель. Когда не берут на работу за незнание монгореактангуляра, сердечные признания удобно устроившихся профессионалов звучат пусто.

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

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


Ну поехали. Вот неполный список технологий, в которых я не шарю:

  • Юникс и Баш. Мой уровень владения командной строкой ограничивается хождением туда-сюда с ls и cd. Остальное я гуглю. Я понимаю пайпы в теории, но никак не могу запомнить синтаксис.

  • Низкоуровневые языки. Я понимаю, что в ассемблере можно прыгать по коду и манипулировать регистрами, но это только в теории. Я написал пару строк C и могу задереференсить указатель, но ручное управление памятью — темный лес. До Rust как-то руки не дошли.

  • Сети. Я знаю, что у компьютеров есть IP адреса, и что DNS позволяет находить хосты по доменам. Есть протоколы типа TCP/IP которые дают нам абстракцию над ненадежными соединениями. Глубже я не вникал.

  • Контейнеры. Никогда не использовал Docker или Kubernetes. (Они как-то связаны?) Похоже на способ предсказуемо запускать и изолировать VM?

  • Серверлесс. Тоже не пробовал. Бэкэндом я только занимался пять лет назад, и мне не очень понятно, как именно лямбды эту модель меняют.

  • Микросервисы. Если я правильно понял, это просто «смерть монолиту». Не пробовал и не знаю, в чем плюсы и минусы на практике.

  • Питон. Тут немножко стыдно — я работал на питоновом бэкенде пару лет, но так и не разобрался толком в языке. Например, семантика импортов для меня все еще загадка.

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

  • Нативная разработка. Я как-то пытался выучить Objective C, но забил. До Swift не добрался. С джавой не сложилось. (Хотя после C# я бы наверное в ней разобрался.)

  • Алгоритмы. Если я выспался, я наверное смогу написать сортировку пузырьком или квиксорт (если очень хорошо выспался). Могу пройтись по графу, если задача мне понятна практически. Я понимаю O(n) нотацию, но не намного глубже, чем «остерегайся цикла в цикле».

  • Функциональные языки. Я не пишу бегло ни на одном традиционно функциональном языке (если конечно вы не относите к ним JavaScript). Вообще, бегло я пишу только на JavaScript и C#, и то C# я уже подзабыл. Чтобы продраться через код, написанный на лиспах, хаскелах, или наследниках ML, мне требуются усилия.

  • Функциональная терминология. Я не погружался глубже map и reduce. Мне трудно запомнить моноиды, функторы и так далее. С монадой я вроде разобрался, но может быть мне показалось.

  • Современный CSS. Пока не знаю флексбокс и грид — пилю на флоатах.

  • Методологии CSS. Я знаком с BEM (в смысле конвенции), но не разбирался в OOCSS и подобных.

  • SCSS / Sass. Не разбирался.

  • CORS. От этих ошибок у меня холодный пот. Я знаю, что надо просто ставить правильные заголовки, но когда-то я убил на это кучу времени.

  • HTTPS / SSL. Никогда не настраивал. Я понимаю идею про открытый и закрытый ключ, но толком не разбирался, как они работают.

  • GraphQL. Я могу прочитать запрос, но мне нужно будет с головой погрузиться в туториалы, чтобы сделать что-то полезное. Например, я понятия не имею, как с ним работает пагинация.

  • Сокеты. Вроде бы это способ компьютерам общаться вне модели «запрос-ответ». На этом мое понимание заканчивается.

  • Потоки (Streams). Я только работал с Rx Observables, но это немного другая абстракция. А вот с нодовыми стримами у меня всегда были проблемы — вечно забуду закрыть или по пути ошибки растеряю.

  • Electron. Руки не дошли.

  • TypeScript. Я могу читать код на нем, но еще ничего толком на нем не писал. Пару раз пробовал, но не стал разбираться с ошибками.

  • Деплоймент и devops. Я могу послать себе файлы по FTP или прибить зависший процесс, но на этом мое владение серверами заканчивается.

  • Графика. Будь это канвас, SVG, WebGL или низкоуровневые апи, я не чувствую себя комфортно и мне сложно нарисовать ими что я хочу.

Само собой, этот список неполный. Я много в чем не шарю.


Про это странно писать. Неуютно. Я что, хвастаюсь своим невежеством? Вот главное, что я хочу сказать:

  • Можно сделать что-то популярное, и все равно много чего не знать.

  • Психологический комфорт скачет независимо от знаний и умений.

  • Пробелы в знаниях не обесценивают приобретенный с годами опыт.

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

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

Апдейт: я написал другой пост о том, в чем разбираюсь.