Если вы — программист, то вам приходится учиться очень много. Вспомните свой первый "Hello, World!". У меня это было в четвертом классе. Мы изучали С++, и наш учитель написал программу от руки на доске. Мы использовали Turbo C++, копировали ее на дискету, чтобы экспериментировать дома.


img


В том время я не думал, что Turbo C++ это редактор. Я не думал о нем как об IDE. Для меня Turbo C++ был языком C++. Это был единственный известный мне способ программировать. Я не знал, что значит "компиляция", не знал, зачем нужен #include  в начале файла. Я не понимал, что делает main и что printf может принимать любое количество аргументов. Я просто скопировал программу с доски, нажал Run и увидел вывод на экране.


Это круто. Так и нужно учить программированию. Нужно делать что-то до того когда еще не понимаешь, как это работает. Некоторое время нужно умышленно быть в неведении о деталях. Детали отвлекают.


В итоге, вы вырастете. Вы узнаете, что делает #include когда напишите свою первую "большую" программу. Вы поймете, куда направляется вывод main когда начнете запускать программы из терминала. Вы разберетесь, как работает printf с параметрами когда изучите вариативные функции.


Долг знаний существует не только для школьников, которые делают первые шаги в этом мире. Я кодил на С++ не понимая, как работают shared библиотеки. Я написал веб-приложение до того, как изучил механизм работы веб-сервера под капотом, который обрабатывает запросы. Я программировал для встроенных Linux-систем не зная, как компилировать код для разных целевых платформ. Я написал приложение под Андроид до того, как вник в “application life cycle”. Опять же, это круто. Определенно, не нужно знать о мета-классах когда вы пишете первую программу на Питоне (а некоторые скажут, что никогда не нужно знать о мета-классах).


Всё это были мои "долги знаний", когда я уже программировал профессионально. Они позволили мне быстро двигаться вперед и не закапываться в детали. Но долг знаний, как и технический долг, должен быть временным.


Вам нужно намеренно и тактически решить, без какой части информации сейчас можно прожить. Но также нужно намеренно и стратегически решить, когда платить по долгам.

Долг знаний похож на финансовый долг. Это инструмент — нужно использовать его мудро чтобы получить прибыль. Представьте, что вы взялись за свой маленький бизнес. Взять немного в долг в самом начале чтобы заработать больше в будущем это отличное решение. Но, как и с финансовых долгом, нужно понять какие параметры применимы в вашей ситуации. Взять слишком много — опасно, но взять слишком мало — тоже. Также важно решить когда и как возвращать долг. Оставаться в долгу слишком долго — набежит большой процент, но если пытаться платить слишком большими порциями, то это плохо скажется на вашем прогрессе.


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


Быть программистом значит постоянно учиться.


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


Если уделять время на понимание внутренностей используемых в работе технологий, то можно работать быстрее, с меньшими усилиями и большей уверенностью в своих профессиональных способностях.

Я считаю, что долг знаний — это то, что отличает средних программистов от крутых программистов. Крутые программисты не останавливаются на незнании; они также не помешиваются на изучении прямо сейчас. Они находятся в постоянном цикле: взять в долг, заметить это и вернуться к нему в правильный момент.


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

Поделиться с друзьями
-->

Комментарии (42)


  1. Andrey_Volk
    16.09.2016 11:34
    +16

    Даж не знаю что сказать. Прочитал текст, полностью состоящий из воды. Просто бесполезная инфа какая-то, даже для начинающих… Это имхо, но всё же.


    1. limonte
      16.09.2016 12:18
      +1

      А я плюсанул только из-за скриншота, в нем солидная такая часть моего детства. Я даже пустил скупую слезу ностальгии, Фритоник играет на эмоциях :)


    1. artemt
      16.09.2016 12:48
      +7

      Это не вода, это информация к размышлению. Если вас не цепляет, то хорошо. У меня из-за сокращений коллег и расширения ответственности этих «долгов знаний» накопилось ого-го сколько. Вот сижу думаю, как возвращать…


    1. DouTro
      16.09.2016 12:48
      +1

      Полностью согласен. Надеялся, что в конце хоть какой-то интересный вывод будет, но вообще пусто


    1. keydon2
      16.09.2016 18:02

      А мне понравилось. Не размышлял об этом с такой стороны.


    1. NeverIn
      16.09.2016 21:19
      +1

      Очень правильная тема, хоть и описана довольно поверхностно. Долг накапливается в основном из-за стремительного развития технологий. Порой не успеваешь применять изученное, т.к. оно уже устарело.


  1. kloppspb
    16.09.2016 11:37

    >в четвертом классе

    А разве тогда TC уже не был полностью вытеснен BC++? Таким же синеньким :)


    1. silvansky
      16.09.2016 11:51

      Не везде. Кстати, и сейчас во многих школах QBasic преподают. А ему уж сколько лет...


      1. kloppspb
        16.09.2016 12:47

        Так то у нас. Когда был 4 класс у этого самого Амира (и где — в Израиле?) не очень понятно. Сначала мне показалось, что ближе к 2000, но фиг знает.


        1. aknew
          17.09.2016 08:59

          Вы еще забываете про такую вещь как человеческий фактор, а именно, попадающихся учителей насмерть стоят на том что учить надо все на том же самом Turbo C++ и наплевать что на дворе 2016 год. У меня такое было, правда не с программированием, а с английским, причем дважды.

          Кстати, в 2006 был ведь еще один Turbo C++ — урезанный С++ Builder 2006, не может быть что речь о нем? Не мог автор (не переводчик) для красного словца поместить скрин старого Turbo C++, а его воспоминания относятся уже к новому


  1. jMas
    16.09.2016 11:47
    +1

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


  1. Sixshaman
    16.09.2016 12:18
    +4

    Почему-то посты о том, что кто-то учил C++ с четвёртого класса, вызывают у меня чёрную зависть.


    1. voidMan
      16.09.2016 12:35
      +5

      Есть мнение что C++ нужно учить всю жизнь и всё равно этого будет мало :)


      1. fireSparrow
        16.09.2016 12:48
        +1

        Если уж Страуструп утверждает, что знает C++ на 7-8 балов из десяти, то что уж говорить о простых смертных…


      1. vpetrigo
        16.09.2016 13:12

        Есть даже очень старая картинка на эту тему:


        Как выучить C++ за 21 день

        cpp-21days


      1. daiver19
        16.09.2016 17:04

        Это, конечно, все смешно, вот только вопрос в том, как много этих знаний реально нужно в работе. Имхо, весьма немного.


    1. ijsgaus
      16.09.2016 12:48
      +1

      Еще попадаются те, кто учил фортран с перфокартами в 6. Поверьте завидовать нечему :-)


      1. MacIn
        16.09.2016 18:29

        О, практически мой случай. Ничего особого. Учить С++ в четвертом классе — много хуже, это уже жестокость.


    1. nordmine
      16.09.2016 12:48

      Да, по-моему сурово школьников в 4-ом классе заставлять сразу C++ учить. Я вот только в универе с Borland C++ 3.1 познакомился) А вот в школе только QBasic был…


      1. MacIn
        16.09.2016 18:30

        Собственно именно по той причине, которая описана в статье — QB позволяет начать программировать, понимать алгоритмику, не вдаваясь в, скажем, выделение памяти или компиляцию.


    1. Shamov
      16.09.2016 12:54
      +2

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


    1. daggert
      16.09.2016 13:52
      +1

      Я его «учил» со второго класса, но не совладал. Слишком был молод чтоб понять. Сейчас постепенно перехожу с php на него, почти что с нуля все учить приходиться.


    1. pastuh9090
      16.09.2016 16:38

      Полностью соглашусь, начал осваивать с++ в 24 года и вообще заниматься программированием. Оно открыло такие масштабы, такие просторы, что я сам себя корю, где я это всё время был, почему раньше не начал это изучать… с другой стороны такие люди дают такой пинок и стимул к жажде знаний, как никогда, нужно постоянно поддерживать в себе это, тогда есть шанс стать хорошим программистом в любом возрасте.


  1. Durimar123
    16.09.2016 12:48
    +1

    Долг это некорректное сравнение.

    Если сидеть на одном IDE и на одних и тех же технологиях, то ты в любом случае будешь их осваивать все глубже и ширше.
    А если с winapi я ушел на cocos на Xcode, зачем мне разбираться в параметре wNumberingTab из EM_SETPARAFORMAT?


  1. thecoder
    16.09.2016 13:03
    +4

    Есть маги и ремесленники, которые коллекционируют «приемчики», а есть инженеры, которые рано или поздно начинают понимать как и почему работает. Так выпьем же за инженеров!


    1. Durimar123
      16.09.2016 14:46
      -1

      инженеры, которые рано или поздно начинают понимать как и почему работает.

      Лишь на каком-то абстрактном уровне. Например использование в разработке любого процессора уже гарантирует, что у большинства инженеров будет лишь мнение, но не гарантированное знание, как этот процессор должен работать. Тоже самое и без процессоров.


  1. mrguardian
    16.09.2016 15:15
    -2

    По-моему это исключительно порочная практика. Брать готовые решения, которые ты не понимаешь как работают и на основе них строить что-то сложное. Рано или поздно это незнание аукнется.


    1. kloppspb
      16.09.2016 15:37
      +2

      Да нормальная это практика. Интересно, сколько из использующих какие-нибудь хэш-таблицы смогут внятно объяснить как они устроены?


    1. AlexandrRS
      16.09.2016 15:38
      +1

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


    1. artemt
      16.09.2016 16:20
      +1

      Так об этом как раз и заметка, о том, что «аукнется», если не вернуть «долг знаний». Только дело не в том, брать или нет готовое решение, а в понимании, что ты делаешь, зачем и какими последствиями тебе это грозит.


  1. BoogieMan75
    16.09.2016 15:18
    -4

    В том время я не думал, что Turbo C++ это редактор. Я не думал о нем как об IDE. Для меня Turbo C++ был языком C++. Это был единственный известный мне способ программировать. Я не знал, что значит «компиляция», не знал, зачем нужен #include в начале файла. Я не понимал, что делает main и что printf может принимать любое количество аргументов. Я просто скопировал программу с доски, нажал Run и увидел вывод на экране.


    Я вам очень сочувствую. Вообще, не понятно зачем было так учить… Короче, слов много, но писать смысла не вижу.


    1. AlexandrRS
      16.09.2016 15:40
      +1

      А как надо учить, если не секрет? Я, например, не представляю иного способа.


      1. BoogieMan75
        16.09.2016 15:58
        -1

        по крайней мере зачем include, что такое компиляция и printf как бы лучше знать уже на этапе «hello, world!».
        P.S. IMHO конечно


        1. MacIn
          16.09.2016 18:36
          +1

          Совершенно лишние детали.
          Сравните с простым Бейсиком, на котором учат (учили по крайней мере в моем детстве) детей программированию.
          Вы пишете что-то вроде
          a=5
          print a

          Все, вы можете объяснить легко, что вот есть переменная, вот вы задаем ее значение: процесс императивный — мы задаем последовательность действий, и сначала должны сделать присвоение, а потом вывод; вот здесь мы выводим на экран и т.д.
          Зачем нужна деталь вида «заголовочный файл», который ппц как языко-специфична, и никак не поможет научить человека писать программы вообще. Это все «плюшки» для тех, кто уже умеет. И вариативные параметры и прочее.


          1. kloppspb
            16.09.2016 18:50

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

            BTW, первое своё моделирование гауссовского распределения реального процесса я писал именно на QB. С C, а потом ++ познакомился уже лет через 5. Это был кошмар, столько там оказалось «ненужных» деталей…


  1. Andronas
    16.09.2016 15:18

    Учил в школе basic, в универе pascal, с делфи как то не сложилось, потом сам изучал java, и уже пром приложения писал на java. Немного знаю и читаю про erlang, а также си (тот который без плюсов). Статья не про с++ а про отношение к процессу изучения.


  1. leshabirukov
    16.09.2016 15:38
    +1

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


  1. Vlad_fox
    16.09.2016 16:27
    -1

    так и не понял что за «долг знаний»… и зачем вообще вводить это понятие.
    сравнение с финансовым долгом вообще не в тему.
    финансовый долг, да и вообще долг — это нечто, взятое взаймы на каких-то условиях.

    Всё это были мои «долги знаний», когда я уже програ..

    что именно, какие знания, технологии были взяты взаймы? на каких условиях?
    если человек что-то делает не имея глубокого понимая в этом делании -то это не долг, а дилетанство. никаких знаний или умений на время он не одалживает, и потом не отдает — они при нем и остаются…

    и так каша в терминах и понятиях, зачем ее еще разбавлять?


    1. MacIn
      16.09.2016 18:37
      +1

      если человек что-то делает не имея глубокого понимая в этом делании -то это не долг, а дилетанство. никаких знаний или умений на время он не одалживает, и потом не отдает — они при нем и остаются…

      Именно это и названо долгом — допустимое на данный момент дилетанство. Это долг перед самим собой.


    1. fastwit
      16.09.2016 19:24

      Вполне уместное понятие. Есть же понятие «технический долг». Это долги, которые вы берете у себя (или команды) в надежде, что когда-нибудь их отдадите. Изучение чего-либо, тем более углубленное — это время, а время деньги. Но это длинные деньги, то есть изучение приносит основные дивиденды в долгосрочном периоде, но в большем размере, как правило. Поэтому и получается, что тратя время-деньги ради текущих задач вы откладываете достижение долгосрочных целей. А долгом это называется потому, что необходимость в изучении никуда не девается и рано или поздно придется расплачиваться.


    1. velvetcat
      16.09.2016 23:40

      > если человек что-то делает не имея глубокого понимая в этом делании
      А насколько глубоким должно быть понимание? Вот вы хорошо понимаете, как работает современный микропроцессор? Или хотя бы управление памятью?


  1. 124bit
    17.09.2016 08:59

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