В чем я не шарю в 2018
2019 M01 1 • ☕️ 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 или низкоуровневые апи, я не чувствую себя комфортно и мне сложно нарисовать ими что я хочу.
Само собой, этот список неполный. Я много в чем не шарю.
Про это странно писать. Неуютно. Я что, хвастаюсь своим невежеством? Вот главное, что я хочу сказать:
-
Можно сделать что-то популярное, и все равно много чего не знать.
-
Психологический комфорт скачет независимо от знаний и умений.
-
Пробелы в знаниях не обесценивают приобретенный с годами опыт.
Я знаю, где спотыкаюсь. Когда мне будет нужно или интересно, я обязательно разберусь в этих технологиях.
То, что я говорю об этом открыто, не значит, что у меня нет других знаний или полезного опыта. Есть много чего, что у меня получается. Например, учиться на ходу.
Апдейт: я написал другой пост о том, в чем разбираюсь.