Comments 40
Извините, не могу удержаться.
А если по существу, то советы очень хорошие, но заголовок в самом деле смущает. Серьезную технологию выучить полноценно, чтоб стать в ней специалистом, вряд ли возможно. Но и сидеть сложа руки, конечно, тоже не стоит. По этому поводу есть замечательная статья Норвига «Научитесь программировать за десять лет», которую, как и предыдущий комикс, уже, наверное, все видели.
Мне тоже, первое в голову что пришло — это плюсы. Учил я их до коммерческого применения года 3. Писав свой С++ компилятор попутно.
Потому что:
— нужно изучить документацию. Если это библиотека, скажем, в 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.
Технологии, конечно, нужно учить, но с оглядкой на то, как быстро она начнёт приносит профит в какой-то части разработки.Особенно интересно «проникаться» технологией, когда читаешь документацию и вдруг ловишь себя на мысли — «Вау, КРУТО! Я бы до этого не догадался» или «Да, я тоже так бы сделал». ))) Тогда и освоение идёт быстрее.
Возможно я уже старый, но в 90% случаев отвечаю «Нет, не нужно». А если книг нет, и тем более на русском, то для меня это некий фильтр, типа технология не прошла боевое крещение и померла не родившись.
*ушел пилить проект на jQuery и PHP"*
Если изучать все существующие инструменты, то жизни не хватит.
Тут может сработать и в обратную сторону. (Притча о полной чашке)
Знания из одного языка могут конфликтовать со знаниями из другого (например, когда в шарпе вызывается деструктор объекта?)
Хотя чем ближе языки, тем быстрее будет переход.
ПС. Опрос какой-то расплывчатый. Есть поговорка 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 был до этого момента.
Чтобы изучить новую технологию достаточно месяца.
Значительно меньше.
Начать сложнее всего, потому что надо понять философию того с чем хочешь работать, как это устроено и т.д.
Первое приложение мне далось очень не просто. Затем приходит полное понимание и ты шпаришь по документации уже более менее интуитивно. Знаешь что искать и где искать. Некоторые моменты можно попробовать написать на «горячую» и есть шанс, что все будет работать.
Второй сложный момент — углубленное знание. Мало документации, специфические решения.
Потом: под освоением все понимают совершенно разные вещи. Я программирую на PHP больше 7 лет, но не могу сказать, что я его освоил. Значит ли это, что у меня какие-то проблемы? Отнюдь. Просто всегда есть куда расти и углубляться. Другая сторона медали, что по долгу службы мне иногда приходится писать фронтенд, в том числе и на хипстерских реактах с редуксами и прочих ангулярах.
Объективно, мой уровень во фронтенд-разработки несколько выше, чем у большинства middle-фронтендщиков, с которыми мне приходилось пересекаться. Причина тому — более сильная БАЗА. Абстрактное мышление, умение гуглить, хорошее знание и понимание паттернов, как всем известных, так и более специфических, постоянное изучение трендов и исходников на гитхаб. В то время, как многие фронтенд-разработчики не могут даже разобраться как работает event-loop в JS, они считают что «освоили JS». Хотя вопрос цикла обработки событий — один из ключевых в JavaScript.
Так вот, что бы вкатиться в ангуляр и сделать на нем простенькое SPA для бронирования билетов на концерт и последующей их верификации мне потребовался день. Значит ли это, что я освоил Angular за день? Ну конечно же нет, потому что мне не пришлось использовать и 10% возможностей и инструментов фреймворка.
В общем: научиться варить пельмени != научиться готовить. Если говорить об освоении новой технологии, как о пельменях, то месяца — очень много, если есть база(умеешь включать плиту, кипятить воду, наливать ее в кастрюлю и т.д). Если базы нет — то это время может ОЧЕНЬ сильно возрасти. Непредсказуемо сильно, если говорить об абстрактных знаниях или навыках. Человеку без математической подготовки и определенного склада ума будет почти невозможно без базы начать писать код на Erlang, например. А подготовка базы может легко занять и целый год.
Если говорить, как о более общем навыке«готовка», то это бесконечный цикл, ибо даже самый хороший повар постоянно совершенствует свое мастерство.
Все время какую-то одну всеоблемлющую, класическую или придумаваете каждый раз новую или в голове и так накопилось полно задач интересных?
Должен же быть еще какой-то результат помимо освоения новой технологии?
От меньше пяти минут до "жизни не хватит", и зависит от количества информации которую нужно усвоить (и от того кто будет её усваивать), чтобы технология считалась изученной.
Сколько нужно времени на изучение новой технологии?