Если вы — программист, то вам приходится учиться очень много. Вспомните свой первый "Hello, World!". У меня это было в четвертом классе. Мы изучали С++, и наш учитель написал программу от руки на доске. Мы использовали Turbo C++, копировали ее на дискету, чтобы экспериментировать дома.
В том время я не думал, что Turbo C++ это редактор. Я не думал о нем как об IDE. Для меня Turbo C++ был языком C++. Это был единственный известный мне способ программировать. Я не знал, что значит "компиляция", не знал, зачем нужен #include
в начале файла. Я не понимал, что делает main
и что printf
может принимать любое количество аргументов. Я просто скопировал программу с доски, нажал Run
и увидел вывод на экране.
Это круто. Так и нужно учить программированию. Нужно делать что-то до того когда еще не понимаешь, как это работает. Некоторое время нужно умышленно быть в неведении о деталях. Детали отвлекают.
В итоге, вы вырастете. Вы узнаете, что делает #include
когда напишите свою первую "большую" программу. Вы поймете, куда направляется вывод main
когда начнете запускать программы из терминала. Вы разберетесь, как работает printf
с параметрами когда изучите вариативные функции.
Долг знаний существует не только для школьников, которые делают первые шаги в этом мире. Я кодил на С++ не понимая, как работают shared библиотеки. Я написал веб-приложение до того, как изучил механизм работы веб-сервера под капотом, который обрабатывает запросы. Я программировал для встроенных Linux-систем не зная, как компилировать код для разных целевых платформ. Я написал приложение под Андроид до того, как вник в “application life cycle”. Опять же, это круто. Определенно, не нужно знать о мета-классах когда вы пишете первую программу на Питоне (а некоторые скажут, что никогда не нужно знать о мета-классах).
Всё это были мои "долги знаний", когда я уже программировал профессионально. Они позволили мне быстро двигаться вперед и не закапываться в детали. Но долг знаний, как и технический долг, должен быть временным.
Вам нужно намеренно и тактически решить, без какой части информации сейчас можно прожить. Но также нужно намеренно и стратегически решить, когда платить по долгам.
Долг знаний похож на финансовый долг. Это инструмент — нужно использовать его мудро чтобы получить прибыль. Представьте, что вы взялись за свой маленький бизнес. Взять немного в долг в самом начале чтобы заработать больше в будущем это отличное решение. Но, как и с финансовых долгом, нужно понять какие параметры применимы в вашей ситуации. Взять слишком много — опасно, но взять слишком мало — тоже. Также важно решить когда и как возвращать долг. Оставаться в долгу слишком долго — набежит большой процент, но если пытаться платить слишком большими порциями, то это плохо скажется на вашем прогрессе.
Как и с деньгами, долг знаний — не только для новичков. Большие корпорации берут огромные займы. В четвертом классе мне нужно было отложить изучение компиляторов, а сегодня мне нужно отложить изучение внутренней реализации интерпретатора CPython.
Быть программистом значит постоянно учиться.
Если позволять долгу знаний накапливаться, то это может сильно затормозить вашу карьеру и продуктивность. Если у вас есть долг знаний в важной для вас области, то со временем нужно будет прикладывать все больше и больше усилий при написании новых фич, и намного, намного больше усилий при исправлении багов. Чем дольше вы задерживаете возврат долга, тем большую "сумму времени" придется платить.
Если уделять время на понимание внутренностей используемых в работе технологий, то можно работать быстрее, с меньшими усилиями и большей уверенностью в своих профессиональных способностях.
Я считаю, что долг знаний — это то, что отличает средних программистов от крутых программистов. Крутые программисты не останавливаются на незнании; они также не помешиваются на изучении прямо сейчас. Они находятся в постоянном цикле: взять в долг, заметить это и вернуться к нему в правильный момент.
Определите свои долги знаний сегодня, найдите, что вам нужно понять чтобы стать лучше в своей области. Ищите новые возможности и платите по долгам. Становитесь круче.
Комментарии (42)
kloppspb
16.09.2016 11:37>в четвертом классе
А разве тогда TC уже не был полностью вытеснен BC++? Таким же синеньким :)silvansky
16.09.2016 11:51Не везде. Кстати, и сейчас во многих школах QBasic преподают. А ему уж сколько лет...
kloppspb
16.09.2016 12:47Так то у нас. Когда был 4 класс у этого самого Амира (и где — в Израиле?) не очень понятно. Сначала мне показалось, что ближе к 2000, но фиг знает.
aknew
17.09.2016 08:59Вы еще забываете про такую вещь как человеческий фактор, а именно, попадающихся учителей насмерть стоят на том что учить надо все на том же самом Turbo C++ и наплевать что на дворе 2016 год. У меня такое было, правда не с программированием, а с английским, причем дважды.
Кстати, в 2006 был ведь еще один Turbo C++ — урезанный С++ Builder 2006, не может быть что речь о нем? Не мог автор (не переводчик) для красного словца поместить скрин старого Turbo C++, а его воспоминания относятся уже к новому
jMas
16.09.2016 11:47+1Есть какие то базовые принципы, которые со временем очень медленно меняются.
Есть модные штуки, которые в основном решают мелкие задачи, и еще не доказали своей значимости.
Я думаю, нежно уделять больше времени первой категории, потому что если уделять много время второй — тогда когда программировать?
Sixshaman
16.09.2016 12:18+4Почему-то посты о том, что кто-то учил C++ с четвёртого класса, вызывают у меня чёрную зависть.
voidMan
16.09.2016 12:35+5Есть мнение что C++ нужно учить всю жизнь и всё равно этого будет мало :)
fireSparrow
16.09.2016 12:48+1Если уж Страуструп утверждает, что знает C++ на 7-8 балов из десяти, то что уж говорить о простых смертных…
vpetrigo
16.09.2016 13:12Есть даже очень старая картинка на эту тему:
Как выучить C++ за 21 деньdaiver19
16.09.2016 17:04Это, конечно, все смешно, вот только вопрос в том, как много этих знаний реально нужно в работе. Имхо, весьма немного.
nordmine
16.09.2016 12:48Да, по-моему сурово школьников в 4-ом классе заставлять сразу C++ учить. Я вот только в универе с Borland C++ 3.1 познакомился) А вот в школе только QBasic был…
MacIn
16.09.2016 18:30Собственно именно по той причине, которая описана в статье — QB позволяет начать программировать, понимать алгоритмику, не вдаваясь в, скажем, выделение памяти или компиляцию.
Shamov
16.09.2016 12:54+2На самом деле, это чувство правильно называется «белая зависть». И чем дольше я имею дело с С++, тем больше склоняюсь к тому, что С++ нельзя просто учить. Им нужно жить. С++ — это такой лайфстайл. Т.е. не так важно то, как давно ты начал его изучать, как то, насколько твёрдо у тебя на него стоит.
daggert
16.09.2016 13:52+1Я его «учил» со второго класса, но не совладал. Слишком был молод чтоб понять. Сейчас постепенно перехожу с php на него, почти что с нуля все учить приходиться.
pastuh9090
16.09.2016 16:38Полностью соглашусь, начал осваивать с++ в 24 года и вообще заниматься программированием. Оно открыло такие масштабы, такие просторы, что я сам себя корю, где я это всё время был, почему раньше не начал это изучать… с другой стороны такие люди дают такой пинок и стимул к жажде знаний, как никогда, нужно постоянно поддерживать в себе это, тогда есть шанс стать хорошим программистом в любом возрасте.
Durimar123
16.09.2016 12:48+1Долг это некорректное сравнение.
Если сидеть на одном IDE и на одних и тех же технологиях, то ты в любом случае будешь их осваивать все глубже и ширше.
А если с winapi я ушел на cocos на Xcode, зачем мне разбираться в параметре wNumberingTab из EM_SETPARAFORMAT?
thecoder
16.09.2016 13:03+4Есть маги и ремесленники, которые коллекционируют «приемчики», а есть инженеры, которые рано или поздно начинают понимать как и почему работает. Так выпьем же за инженеров!
Durimar123
16.09.2016 14:46-1инженеры, которые рано или поздно начинают понимать как и почему работает.
Лишь на каком-то абстрактном уровне. Например использование в разработке любого процессора уже гарантирует, что у большинства инженеров будет лишь мнение, но не гарантированное знание, как этот процессор должен работать. Тоже самое и без процессоров.
mrguardian
16.09.2016 15:15-2По-моему это исключительно порочная практика. Брать готовые решения, которые ты не понимаешь как работают и на основе них строить что-то сложное. Рано или поздно это незнание аукнется.
kloppspb
16.09.2016 15:37+2Да нормальная это практика. Интересно, сколько из использующих какие-нибудь хэш-таблицы смогут внятно объяснить как они устроены?
AlexandrRS
16.09.2016 15:38+1Это мейнстрим. Такое мнение родилось из наблюдения, сколько людей используют какие-либо фреймворки, имея весьма бытовое представление о нем. И я в их числе. Учитывая, насколько широкий профиль востребован и каково предложение на рынке труда в этих направлениях. Но цена входа будет расти и победят, конечно, те, кто знает, что такое стек и т.д.
artemt
16.09.2016 16:20+1Так об этом как раз и заметка, о том, что «аукнется», если не вернуть «долг знаний». Только дело не в том, брать или нет готовое решение, а в понимании, что ты делаешь, зачем и какими последствиями тебе это грозит.
BoogieMan75
16.09.2016 15:18-4В том время я не думал, что Turbo C++ это редактор. Я не думал о нем как об IDE. Для меня Turbo C++ был языком C++. Это был единственный известный мне способ программировать. Я не знал, что значит «компиляция», не знал, зачем нужен #include в начале файла. Я не понимал, что делает main и что printf может принимать любое количество аргументов. Я просто скопировал программу с доски, нажал Run и увидел вывод на экране.
Я вам очень сочувствую. Вообще, не понятно зачем было так учить… Короче, слов много, но писать смысла не вижу.AlexandrRS
16.09.2016 15:40+1А как надо учить, если не секрет? Я, например, не представляю иного способа.
BoogieMan75
16.09.2016 15:58-1по крайней мере зачем include, что такое компиляция и printf как бы лучше знать уже на этапе «hello, world!».
P.S. IMHO конечноMacIn
16.09.2016 18:36+1Совершенно лишние детали.
Сравните с простым Бейсиком, на котором учат (учили по крайней мере в моем детстве) детей программированию.
Вы пишете что-то вроде
a=5
print a
Все, вы можете объяснить легко, что вот есть переменная, вот вы задаем ее значение: процесс императивный — мы задаем последовательность действий, и сначала должны сделать присвоение, а потом вывод; вот здесь мы выводим на экран и т.д.
Зачем нужна деталь вида «заголовочный файл», который ппц как языко-специфична, и никак не поможет научить человека писать программы вообще. Это все «плюшки» для тех, кто уже умеет. И вариативные параметры и прочее.kloppspb
16.09.2016 18:50Вот да. Бывает, люди прекрасно ориентируются в каком-нибудь языке, библиотеке, фреймворке. Но стоит им задать вопрос уровня «в каких случаях сортировка вставками может быть эффективней» — круглые глаза. Они и слов таких не знают, и хоть какой-то алгоритмической базы не имеют в голове.
BTW, первое своё моделирование гауссовского распределения реального процесса я писал именно на QB. С C, а потом ++ познакомился уже лет через 5. Это был кошмар, столько там оказалось «ненужных» деталей…
Andronas
16.09.2016 15:18Учил в школе basic, в универе pascal, с делфи как то не сложилось, потом сам изучал java, и уже пром приложения писал на java. Немного знаю и читаю про erlang, а также си (тот который без плюсов). Статья не про с++ а про отношение к процессу изучения.
leshabirukov
16.09.2016 15:38+1Плохая идея сравнивать незнание с долгом, потому что получается что чем больше ты расплачиваешься, тем больше узнаёшь сколько ещё должен.
Vlad_fox
16.09.2016 16:27-1так и не понял что за «долг знаний»… и зачем вообще вводить это понятие.
сравнение с финансовым долгом вообще не в тему.
финансовый долг, да и вообще долг — это нечто, взятое взаймы на каких-то условиях.
Всё это были мои «долги знаний», когда я уже програ..
что именно, какие знания, технологии были взяты взаймы? на каких условиях?
если человек что-то делает не имея глубокого понимая в этом делании -то это не долг, а дилетанство. никаких знаний или умений на время он не одалживает, и потом не отдает — они при нем и остаются…
и так каша в терминах и понятиях, зачем ее еще разбавлять?MacIn
16.09.2016 18:37+1если человек что-то делает не имея глубокого понимая в этом делании -то это не долг, а дилетанство. никаких знаний или умений на время он не одалживает, и потом не отдает — они при нем и остаются…
Именно это и названо долгом — допустимое на данный момент дилетанство. Это долг перед самим собой.
fastwit
16.09.2016 19:24Вполне уместное понятие. Есть же понятие «технический долг». Это долги, которые вы берете у себя (или команды) в надежде, что когда-нибудь их отдадите. Изучение чего-либо, тем более углубленное — это время, а время деньги. Но это длинные деньги, то есть изучение приносит основные дивиденды в долгосрочном периоде, но в большем размере, как правило. Поэтому и получается, что тратя время-деньги ради текущих задач вы откладываете достижение долгосрочных целей. А долгом это называется потому, что необходимость в изучении никуда не девается и рано или поздно придется расплачиваться.
velvetcat
16.09.2016 23:40> если человек что-то делает не имея глубокого понимая в этом делании
А насколько глубоким должно быть понимание? Вот вы хорошо понимаете, как работает современный микропроцессор? Или хотя бы управление памятью?
124bit
17.09.2016 08:59А я автора понял и согласен с автором. Нельзя не барть в долг, потому что без быстрого результата медленно и не интересно. Но отдавать долг более глубоким изучением со временем всегда приходится, иначе ничего сложного сделать не выйдет. Я сам всегда так это воспринимал, спасибо, что озвучили.
Andrey_Volk
Даж не знаю что сказать. Прочитал текст, полностью состоящий из воды. Просто бесполезная инфа какая-то, даже для начинающих… Это имхо, но всё же.
limonte
А я плюсанул только из-за скриншота, в нем солидная такая часть моего детства. Я даже пустил скупую слезу ностальгии, Фритоник играет на эмоциях :)
artemt
Это не вода, это информация к размышлению. Если вас не цепляет, то хорошо. У меня из-за сокращений коллег и расширения ответственности этих «долгов знаний» накопилось ого-го сколько. Вот сижу думаю, как возвращать…
DouTro
Полностью согласен. Надеялся, что в конце хоть какой-то интересный вывод будет, но вообще пусто
keydon2
А мне понравилось. Не размышлял об этом с такой стороны.
NeverIn
Очень правильная тема, хоть и описана довольно поверхностно. Долг накапливается в основном из-за стремительного развития технологий. Порой не успеваешь применять изученное, т.к. оно уже устарело.