Вещи, которых я не знаю в 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 или низкоуровневая графика, я не смышлен в этом. Я понял общую идею, но мне не нужно изучать простые вещи.

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


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


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

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


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

Поделиться публикацией

Комментарии 61

    +1
    Это важно еще для цифровой социологии, из подобных профилей можно собрать большие данные и делать сумашедшие выводы из практики. Для развития в целом это может быть также важно как приаттаченые портфолио, статьи или код, описанные здесь компетенции про другое измерение.
      +7

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

        0
        страдаю любознательностью

        По-моему, это великий дар. Хуже, если тебе ничего не интересно, по опыту скажу. Ни в чем не видишь смысл
          +4
          А это может быть обычная депрессия или выгорание.
            0

            В моём случае противовесом является лень. Вот в вечной борьбе и живу.

            +2

            Поискал, нашел кучу устаревших и/или спорных картинок. О какой именно матрице речь?

                0

                Спасибо. А как относится дата оригинала к переводу? Перевод дополняется? Речь о

                Версия документа от 17.05.2013
                  +1
                  Относительно своей области (корпоративная разработка) могу сказать, что она неактуальна и крайне субъективна.

                  Часть из этих знаний узкоспециализированная и нужна не всем, часть переоцененная, часть недооцененная (то, что в последнем уровне я бы на первый перенес, а во 2 и 3 добавил бы требований), а часть — сомнительные и даже вредные практики.

                  Я считаю, что подобная матрица может иметь смысл только внутри какой-нибудь области, причем с каждым годом эта область будет сужаться.
              +5
              Пост спорный и лично для меня интересный. И я хочу обратить внимание минусующих, что мы ставим оценку переводу — то есть тому человеку, который потрудился принести нам небезынтересный пост. Поэтому минусы смотрятся странно, честно! Автору — спасибо, май инглиш из бед, и я рад переводам.
                +4

                Вот лично я именно переводу и поставил минус. Потому что он очень некачественный. Ну и как уже написали ниже, есть официальная русская версия, ссылка на которую находится в самом начале оригинальной статьи. Т.е. смысл поста не совсем понятен (и по-моему на хабре вообще не приветствуются переводы в песочнице, во всяком случае, раньше так было).

                0

                Дело именно в низком качестве перевода, оно бросается в глаза с первых строк.

                  0

                  Перевод — отвратительный, пример:


                  Я свободен только на C # и JavaScript — и уже подзабыл C#.
                  +11
                    +2
                    не просто перевод, а авторский перевод
                    +27

                    Я вот не знаю кто такой Дэн Абрамов и почему то, что он не знает так важно для нас. А ещё почему люди думают, что он много знает. И почему люди вообще о нем думают.

                      –1

                      У него есть большая группа обожествляющих его группи.

                      +6
                      Этот чувак неимоверно крут, он знает много слов, которые типовой одинэсник даже не слышал.
                        0
                        Вот не надо, довольно много 1сников о перечисленном представление имеют. Пусть на уровне автора оригинальной статьи или чуть меньшем. Говорю как недавний 1сник.
                          0
                          недавний — вы им стали, или перестали быть?

                          Обычно те одинесники которые начинают понимать значение этих всех слов, очень быстро уходят из 1с
                            0
                            4.5 года был с 1с. С нового года на kotlin под андроид пишу. Но я некоторое время вращался в 1с коммьюнити в телеграме и там встречаются люди которые о перечисленном имеют вполне неплохое представление.
                              0
                              1C неплохо оплачивается
                                +1
                                Не сказал бы. Больше 200к мало кто имеет в 1с даже в москве. В моей провинции джун андроид или веб получает как среднетоповый 1с.
                                  +1
                                  У меня одинесный стаж около 10 лет, в т.ч. на 7.7

                                  Могу точно сказать что обычному программеру надо существенно меньше знать и иметь меньшую квалификацию чтобы получать денег больше одинесника. я уж молчу об особенностях работы не на фикси (разъезды)
                            0
                            Хорошо что вы знаете что именно вы не знаете:)
                            Я вот честно не знаю, как придумать и сделать себе пассивный источник дохода в интернете, который приносил бы мне приличный стабильный доход и позволил бы заниматься тем что мне нравится и жить там где нравится. Вот это главное чего я не знаю. А все остальное…

                            Современный стек веб технологий это вообще бурлящая хрень, в которой технологии появляются быстрее чем их в принципе можно изучать. Поэтому не проще ли ориентироваться на результат а не на технологии? Нечто подобное было с десктопом когда-то, когда все кричали «COM», «ActiveX», еще какие-то слова, и где оно теперь? Смешалось до уровня неотличимости от прочих низкоуровневых API. Думаю, то же и с вебом будет.
                              0
                              Хорошо что вы знаете что именно вы не знаете:)

                              «Мы не знаем того, чего мы не знаем.» А. Курпатов.
                                +1
                                Думается мне, что пассивный доход в интернете — это несбыточные мечты. Слишком быстро все меняется, слишком большая конкуренция, невозможно сделать, запустить и забыть. Любой сервис придется поддерживать, развивать, продвигать и это требует постоянного внимания. Для пассивного дохода проще заработать денег на обычной работе, купить несколько квартир и сдавать.
                                +1

                                Алло, это что за кодер такой? Я знаю 90% из того что он не знает.

                                  +4

                                  Просто он пишет на JS под браузер. А там нет сокетов, шелла, пайпов, доступа к настройкам TCP/IP, malloc, настройки SSL…

                                    +1
                                    А там нет сокетов
                                    Есть, ещё как есть! Вебсокетами зовутся.
                                      +12

                                      Оно ими только зовётся. Примерно как джаваскрипт зовётся джавой.

                                    +1
                                    Ну, допустим. :) А так знаете? Вот есть сокеты. Есть функция select.
                                    Почему в Windows вызов select(0, &readfds, NULL, NULL, &tv); работает (и именно так и вызывается, с нулём в первом параметре), а в Unix нет? :)
                                      +2
                                      С чего вы взяли что он кодер? Мне вот видится что его основная роль это самохайп и евангелизм реакта поощряемые компанией в которой он работает тк очевидно копания представляется как желаемое место работы для кодеров с горящими глазами. Кто-то на самом деле должен этим заниматься в больших околотехнологических компаниях, почему не он. Вот пококетничал он в блоге написав провокационную статью, привлек большое внимание, очень многие ресурсы упоминули его в очередной раз.
                                        +1
                                        С чего вы взяли что он кодер?

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

                                      Вот на самом интересном месте… (( Тут есть пространство для отдельной статьи, о том, как нужно изучать технологии. (Особенно если ты не знаешь (список), но понимаешь где у тебя пробелы.
                                        +11
                                        Типичная ситуация. Меня зовут… и я алкоголик самозванец. Не знаю как писать многопоточные приложения. Каждый раз, когда нужно — пишу одну очередь задач, формируемую из разных потоков и обрабатываемую в одном потоке. Когда приходит время сделать из этого нормальное много-поточное приложение, собираюсь залезть в книги, но мне уже достается другой проект, а этой задачей занимается кто-то другой.
                                        Не знаю правильный ли я код пишу и правильно ли использую объектное программирование. Потому что никогда никому нет до этого дела — руководство хочет, чтобы все работало и уже вчера и как только начинает работать, дают следующую кучу задач. Потом мой код достается людям, которые его сопровождают и не берутся меня судить или судят, но я об этом не узнаю.
                                        Не знаю ничего про алгоритмы, даже про пузырьки. Когда нужен какой-нибудь алгоритм поиска и оптимизации того не знаю чего с 20 критериями просто импровизирую. Не уверен эффективно ли это в итоге, или можно было сделать лучше, если знать больше.
                                        Не знаю тонкостей и нюансов ниодной технологии из всех с которыми работал. Каждый раз откладываю изучение и просто использую базовые возможности для которых очевидно как они работают.
                                        Когда проектирую приложения, иногда до меня доходит фидбэк, что все плохо и пользователи ничего не могут понять, иногда что пользователи довольны. У меня есть ощущение, что я каждый раз горожу излишне сложные системы, но я не знаю наверняка так ли это и каждый раз нет времени и возможности разобраться.
                                        Не знаю в итоге, программист ли я, или мне достаются проекты просто потому что я за них берусь и потом достаются следующие, потому что все знают что я занимался предыдущими с переменным успехом.
                                        Расскажите кто еще чего-то не знает и ощущает себя «самозванцем».
                                          +7
                                          — не знание всего того, чего не знает Дэн, не делает вас Дэном Абрамовым
                                          — знание всего того, чего не знает Дэн, не делает вас Дэном Абрамовым
                                            +3
                                            А кем меня делает/не делает незнание того, кто такой Дэн Абрамов?
                                              0
                                              Ох, счастливым человеком я надеюсь. Держитесь подальше от этого фронтенда.
                                            +1
                                            Чел реально правду написал вот и все. Человеки склонны преувеличивать.
                                              +1
                                              Если бы разработчики в самом деле знали технологии, с которыми работают, Skype бы не занимал 300 Mb оперативки, Gmail бы не тормозил, а Facebook бы не хранил вообще никакие пароли в plain text. И это я «по верхам» сейчас. Что «в низах» происходит, даже представлять не хочется.
                                                +3
                                                Склонен считать что все перечисленные примеры были осознанным и намеренным выбором компаний, а не незнанием технологий.
                                                  +3
                                                  Нет никаких компаний. Компании — это люди. В таком случае все же кто-то выбирал стек, и это вовсе не компания, а люди. И скорее всего — один-два человека. Так вот они похоже совсем ничерта не понимают в том что выбрали. Не им же писать на этом. И уж они совсем не разбирались в том, разбираются или нет в этом стеке подчиненные. В итоге вы видите то что видите. Ничего толком не работает. А даже если и работает — то крайне не оптимально.

                                                  Выводы…
                                                    0

                                                    А может просто оптимальность работы не была важным критерием при выборе?

                                                      0
                                                      Дайте определение не оптимальной работе. Только без матов, пожалуйста.
                                                        0
                                                        Вы написали «крайне не оптимально». И что бы вы не имели в виду, критерием могла быть не ваша метрика оптимальности. Пример: вы считаете что на PHP писать не оптимально бэкенд SPA, потому что сильно нагружает сервер это «родился чтобы умереть» или просто долго писать и много багов. А выбирающие стэк оптимизировали его по стоимости рабочей силы.
                                                0
                                                Очень странный пост. Что автор хотел сказать? Что можно не имея даже фундаментальных знаний на уровне первокурсника работать прогером и иметь хорошую репутацию в узких кругах?
                                                Допустим это возможно, если под программировнием понимать верстку формочек на модном js фрейме, или настройку тем для Wordpress.
                                                Да только вот все сильные программисты ИНЖЕНЕРЫ волей не волей знают большинство из того что тут перечисленно. И дело тут не в задротстве теории, просто чем больше опыт и чем больше твоя заинтересованность проектом, тем чаще тебе приходится вылазить из своей зоны ответственности и сталкиваться с проблемами, которые весьма косвенно относятся к твоей основной специальности.
                                                В общем, если верх ваших амбиций — это тупо делать задачи из бэклога, списывая время потраченное на кофебрейки и настольный тенис, то ок. А если хотите серьезного развития(как профессионального, так и технического) то рано иили поздно вам придется унать чем отличаетя виртуализация от контейниризации и чем TCP/IP отличается от OSI.
                                                  +2

                                                  Ну автор, грубо говоря, автор одного из модных js-фреймворков. Настолько модного, что некоторые считают его неотъемлемой частью другого.

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

                                                      Соглашусь с тем, что программисты должны знать OSI модель (если работают в каком-то виде с сетями), но для чего frontend разработчику знать в чем отличие виртуализации от контейниризации?
                                                      Учиться приходится всегда, но объем знаний на столько большой, что всегда найдется человек, который скажет вам "как это вы это не знаете, это же банальные вещи".
                                                      Вещи описанные Деном я на каком-то уровне знаю, но только по причине того, что раньше занимался десктопным программированием а позже фуллстеком. Но во frontend разработке, например работа с потоками уже не нужна (работа с web-worker'ами это не то).

                                                        0
                                                        Не то, чтобы знать OSI должен, а представлять её в общих чертах.
                                                          +1

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

                                                      +2
                                                      Комментарий к переводу: не бойтесь выражать мысли своими словами, это гораздо лучше чем перевод слово в слово. Например:
                                                      Некоторая малая часть людей

                                                      Можно вполне заменить на «немногие люди». И таких примеров много по статье.
                                                      Т.е основная задача при переводе должна быть именно передать мысли автора, а не перевести каждое слово.
                                                        +2
                                                        Существует также авторский перевод, там слог посочнее: https://overreacted.io/ru/things-i-dont-know-as-of-2018/
                                                          +5
                                                          Невозможно знать все! Это факт. Если пытаться «быть в теме» во всех направлениях, то вы ничего никогда не добьетесь и будете висеть на уровне джуниора. Поэтому выбираете свое направление -> развиваетесь в нем по полной -> параллельно и чуть чуть без фанатизма затрагиваете общие аспекты = успех.
                                                            +1
                                                            Спасибо за перевод.

                                                            На самом деле, скорость изменения технологий в ИТ реально обескураживает. Пока я пишу этот комментарий, наверняка в мире появилась еще одна новая библиотека. Те платформы и технологии, которые я использовал лет 10 назад (Windows Mobile, MFC, WTL) сейчас не нужны никому от слова «совсем», еще лет через 10 наверняка случится то же самое с тем, что я использую сейчас.

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

                                                            Хотя в узкой специализации нет ничего плохого… пока не начинаешь искать новую работу, и не обнаруживаешь, что ближайшая вакансия по твоей специализации территориально в 200км :)
                                                              0
                                                              интересно, как его взяли в Фейсбук с незнанием алгоритмов
                                                                +3
                                                                Серьезных специалистов никто не отправляет к айчарам и не тестирует. Их собеседуют руководители и обсуждается в основном портфолио.
                                                                0
                                                                Я не парюсь на счет того, что что-то не знаю. У каждого своя «клаузула».
                                                                Ну, не нужно мне уметь хорошо варить металл — зачем лезть в это?
                                                                Зато я умею хорошо считать сметы строительные.
                                                                  0
                                                                  А король то голый

                                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                  Самое читаемое