Comments 40

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

Мне тоже, первое в голову что пришло — это плюсы. Учил я их до коммерческого применения года 3. Писав свой С++ компилятор попутно.

Если изучить — это прочитать книгу, все понять, и даже сделать несколько задач из книги, то да, хватит месяца. А вот уметь применить в правильном месте — вряд ли. Нужен опыт работы с той или иной технологией, ну, хотя бы 3-4 месяца.
В 1992-93 году мне в руки попалась брошурка за авторством (очевидно, это псевдоним) «Слава Чип», в которой было довольно много полезностей по Turbo Pascal 5.5 и общей алгоритмике. Так вот, автор брошурки утверждал, что минимальный срок освоения незнакомой технологии — 3 месяца ежедневной практики по 2-4 часа.

Потому что:

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

— нужно полистать примеры кода и сырцы, если они доступны. Чтение библиотеки в 20к строчек — это месяц работы.

— нужна практика «на кошках», особенно если технология меняет привычные вам шаблоны. На примере того же Elm, я регулярно наблюдаю в slack-чате одни и те же вопросы: как отправить HTTP-запрос, как распарсить JSON. Как работают Subscriptions. И это всего лишь Elm — примитивный коцый язык, охаскеллированный бейсик для веба.

Если говорить про смену технологического стэка, например, перескакивая с JS на Python (или наоборот), то добавьте сюда время на изучение доступных конкурирующих между собой решений (фреймворки, библиотеки, better practices, инструменты для скаффолдинга, разработки, поддержки кода проекта) — это никак не меньше 3 месяцев, несмотря на обилие готовых ответов на SO.

Сколько времени у вас займет/заняло разобраться с borrowing & lifetimes в Rust? Сколько времени понадобится, чтобы начать уверенно писать на Factor?

По оценке рисков при выборе технологий тоже не всё так гладко: жил-был RethinkDB с коммерческой поддержкой, сильной командой и инвестициями в шестизначную сумму. Прошло 4 года — и, бульк, контора закрылась, проект фактически не разрабатывается, несмотря на то, что планы были ого-го.

ЗЫ. https://habrahabr.ru/post/277323/
Мне кажется, что больше нужно напирать не на технологии, а на интерфейсы. Интерфейсы стандартизируются, а технологии далеко не всегда. Поэтому нужно ставить вопрос не о том, сколько нужно изучать конкретную технологию, а взглянуть на интерфейсы, которые она поддерживает, чтобы понять, пригодится ли технология в принципе и какую часть от технологии стоит изучать. Технологии бывают очень заумные и не всегда все части технологии нужны. Очень хорошо, если технология поддаётся разделению на части, потому что конечный продукт это далеко не одна технология, а их сумма. Просто нужно стараться не сильно увеличивать сумму неиспользуемых частей в проекте.
Мой вывод такой — интерфейсы нужно учить всегда и в это нужно вкладываться и не жалеть времени, а технологии просто берутся и тратиться нужно в основном на изучение части, которая подходит к нужному интерфейсу.
P.S.
Технологии, конечно, нужно учить, но с оглядкой на то, как быстро она начнёт приносит профит в какой-то части разработки.Особенно интересно «проникаться» технологией, когда читаешь документацию и вдруг ловишь себя на мысли — «Вау, КРУТО! Я бы до этого не догадался» или «Да, я тоже так бы сделал». ))) Тогда и освоение идёт быстрее.
Мне лично понравилась данная статья так как автор раскрывает истину об обучение как не крути у всех у нас с вами всего 24 часа в одном дне — единственное различие состоит в том, что кто-то использует отведённое время с максимальной пользой таким образом увеличивая качество и скорость обучения, а кому-то нужно больше года так как у данного человека либо время не организовано, либо в конце дня остаётся всего 30 минут
>А нужно ли вообще изучать именно эту технологию?

Возможно я уже старый, но в 90% случаев отвечаю «Нет, не нужно». А если книг нет, и тем более на русском, то для меня это некий фильтр, типа технология не прошла боевое крещение и померла не родившись.

*ушел пилить проект на jQuery и PHP"*
Если программисту нужны книги, и тем более на русском, то он не прошёл боевое крещение и помер, не родившись.
Тут дело не в том, что программисту нужны эти книги. Дело в том, что если про какую-то технологию до сих пор не написано "#techname# for dunners" и с десяток разной паршивости учебников, то значит она либо появилась очень недавно либо не востребована на рынке.
Я не сказал, что они мне нужны, а я сказал, что для меня наличие книг по технологии — некий фильтр.

Если изучать все существующие инструменты, то жизни не хватит.
Есть, по-моему, куда более адекватные и простые в применении «фильтры».
К сожалению не могу найти статью на хабре, где писали про то как развивается мир. Примерная суть — «Если человека из 2000 перенести в 2016, то он будет сильно удивлен. Если взять человека из 1984, то такого эффекта не будет. Надо брать из 1800 допустим.» и так все дальше и дальше в геометрической прогрессии (*-------------------*--------*---*-*). Так что если придерживаться этой диаграммы, то в будущем ни одна технология не будет жить до написания книги. Возможно мы уже в этой точке.
Могу порекомендовать книгу Капицы «Парадоксы роста», там он писал про скорость развития прогресса. Сейчас он 25 лет, и быстрее он не сможет бежать. 25 лет — это одно поколение.
Проблема в том, что сможет. И даже в пределах поколения будет нелегко, надо будет гибко перестраиваться.
А как же правило 10000 часов? Ну, пускай 5000, если есть знания в смежных областях, скажем знания плюсов при переходе на шарп.

Тут может сработать и в обратную сторону. (Притча о полной чашке)
Знания из одного языка могут конфликтовать со знаниями из другого (например, когда в шарпе вызывается деструктор объекта?)
Хотя чем ближе языки, тем быстрее будет переход.


ПС. Опрос какой-то расплывчатый. Есть поговорка Easy to start, hard to master. К какой половине относится слово изучить?
Изучил ли я язык, если могу написать на нем ввод, сортировку и вывод чисел? (Если да, тогда любой язык после первого изучается за день)

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

Согласен, да, я посчитал в смысле «master».

10000 часов — это про мастерство. Владение навыком на уровне бессознательного.


Внимательно просмотрите данный ролик а потом уже пишите про 10 000 часов
10 000 часов это миф

Психологи заново изучили данные шести предыдущих исследований шахматистов (больше тысячи участников) и восьми исследований музыкантов (628 человек) и обнаружили, что разные гроссмейстеры и разные музыканты высочайшего класса практиковались по-разному. Одному шахматисту потребовалось 26 лет, чтобы достичь уровня, которого другой добился за два года. То есть явно дело далеко не только в количестве «отработанных» часов. «Вполне очевидно, что некоторые люди достигают высшего мастерства без обширной практики, тогда как другие, даже прибегая к ней, мастерства не добиваются». Андерс Эриксон, чье исследование 1993 года цитировал Гладуэлл, не согласился с этими выводами, утверждая, что его критики исследовали слишком много начинающих игроков. В то же время Эриксон, как и другие исследователи, подверг сомнению и ряд деталей самой теории Гладуэлла (да и вообще его книги немало критиковались за неточности).

Имхо конечно, но изучить технологию и начать более менее успешно её использовать очень разные вещи. Для использования при прочном общем базисе и опыте в смежных технологиях ( скажем перейти с c# на java) нужно 1-3 месяца. Но для изучения нужно набить шишек и походить по граблям, а для этого часто и года мало. Без это будут сходит со стапилей велосипеды на костылях.

Меня немного передернуло от фразы в самом начале статьи: "… этот факт понятен интуитивно, но мы должны просто-таки вбить его в свои головы и двигаться вперед". На первом собрании в университете, еще до начала учебы, заведующий кафедры нам сказал примерно такое: "Мы будем вас учить умению самостоятельно добывать знания и научим думать. Поэтому у вас будет математика, физика, множество различных теорий, история этих теорий, гуманитарные науки и все, все, все. А если вам нужны JavaScript+HTML+CSS+PHP, то в ПТУ скорей всего лучше этому научат.".


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


Допустим не нужно знать ни одного метода из связки React+Redux, чтобы понимать принципы работы этой связки, и кому-то будет достаточно схемы с потоком данных и списка методов, чтобы начать работать с этими библиотеками. Тоже касается и других технологий, возьмем что-нибудь по сложнее, допустим OpenGL, можно месяц читать обучающие материалы, но так и не осознавать до конца, за счет каких вычислений вращается треугольник в примере: какие-то матрицы, вектора, проекции, формулы, полигоны —, а можно знать аналитическую геометрию и линейную алгебру и достаточно быстро в этом всем разобраться. Или, чтобы далеко не ходить, CUDA, тут уже нужно знать почему и как алгоритмы можно распараллеливать, и еще было бы не плохо представлять как биты пересылаются на железном уровне. Вот пара технологий, которые без большой теоретической базы, как-то не особо получится освоить за месяц, не говоря уже про большое множество других. Знания должны быть в первую очередь в областях, а не в конкретных технологиях. Конечно, и в конкретных технологиях всегда есть множество моментов, которые ты просто не узнаешь без изучения, но посыл в том индуктивное мышление всегда создает больше вопросов, чем ответов.


Еще немного проясню свою точку зрения. Вот конкретно в статье, автор предлагает отфильтровать технологии для изучения, на основе востребованности, известности авторов, публикаций в блогах, и, по моему мнению, это не осознаное решение, а поедание маркетингового говна. Но мои мысли сейчас даже немного про другое. Понятно, что программирование уже очень далеко от науки. Но вот с точки зрения ведения просветительской деятельности, зачем призывать людей еще больше удаляться? Нужно не технологии изучать, а то какие проблемы эти технологии решают и как, чем были вызваны проблемы, что решение таким способом даст, какие еще способы есть, а какие истоки у тех способов и так далее, это касательно конкретных вещей, а в целом нужно призывать всех максимально расширять свой кругозор и думать. А не учить на какой стул сесть, потому что это интуитивно понятно. Мы так дальше споров, о том какой js-фреймворк быстрее, какая методология/парадигма/технология/бд/яп/<подставь_свое> лучше, мы не уйдем. Накипело немного и идеалист во мне проснулся, но все равно чуть большего мнения о Mail.ru был до этого момента.

Чтобы изучить новую технологию достаточно месяца.

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

Второй сложный момент — углубленное знание. Мало документации, специфические решения.
Когда ставишь вопросы наподобие: «Сколько уйдет на изучение технологии N», неплохо было бы держать во внимании уже имеющуюся базу. Я не думаю, что кто-то без серьезной подготовки в области физики и астрономии можно быстро освоить какую-нибудь новую технологию поиска отдаленных, мелких небесных тел. Тоже справедливо и для программирования. Без БАЗОВЫХ знаний программирования, осваивать новые технологии нет большого смысла. Обладая сильной базой, тебе намного проще изучать «новые» технологии, которые, на самом деле, в большинстве своем реализуют старые, давно известные принципы. Помню, когда обычный паттерн Observer, известный с незапамятных времен в мире фронтенда произвел вау-эффект и все заговорили о 2-way data binding.
Потом: под освоением все понимают совершенно разные вещи. Я программирую на PHP больше 7 лет, но не могу сказать, что я его освоил. Значит ли это, что у меня какие-то проблемы? Отнюдь. Просто всегда есть куда расти и углубляться. Другая сторона медали, что по долгу службы мне иногда приходится писать фронтенд, в том числе и на хипстерских реактах с редуксами и прочих ангулярах.
Объективно, мой уровень во фронтенд-разработки несколько выше, чем у большинства middle-фронтендщиков, с которыми мне приходилось пересекаться. Причина тому — более сильная БАЗА. Абстрактное мышление, умение гуглить, хорошее знание и понимание паттернов, как всем известных, так и более специфических, постоянное изучение трендов и исходников на гитхаб. В то время, как многие фронтенд-разработчики не могут даже разобраться как работает event-loop в JS, они считают что «освоили JS». Хотя вопрос цикла обработки событий — один из ключевых в JavaScript.
Так вот, что бы вкатиться в ангуляр и сделать на нем простенькое SPA для бронирования билетов на концерт и последующей их верификации мне потребовался день. Значит ли это, что я освоил Angular за день? Ну конечно же нет, потому что мне не пришлось использовать и 10% возможностей и инструментов фреймворка.

В общем: научиться варить пельмени != научиться готовить. Если говорить об освоении новой технологии, как о пельменях, то месяца — очень много, если есть база(умеешь включать плиту, кипятить воду, наливать ее в кастрюлю и т.д). Если базы нет — то это время может ОЧЕНЬ сильно возрасти. Непредсказуемо сильно, если говорить об абстрактных знаниях или навыках. Человеку без математической подготовки и определенного склада ума будет почти невозможно без базы начать писать код на Erlang, например. А подготовка базы может легко занять и целый год.
Если говорить, как о более общем навыке«готовка», то это бесконечный цикл, ибо даже самый хороший повар постоянно совершенствует свое мастерство.
Больше всего интересует откуда вы берете типы задач для освоения технологий?
Все время какую-то одну всеоблемлющую, класическую или придумаваете каждый раз новую или в голове и так накопилось полно задач интересных?
Должен же быть еще какой-то результат помимо освоения новой технологии?

От меньше пяти минут до "жизни не хватит", и зависит от количества информации которую нужно усвоить (и от того кто будет её усваивать), чтобы технология считалась изученной.

Сколько нужно времени для обнаружения подозрительной активности на своих компьютерах и предложения установить бесплатный антивирус Cezurity?
Only those users with full accounts are able to leave comments. Log in, please.