Не самый последний, но я начал программировать как любитель. Я стал одаренным в этом, изучил все, что мне нужно было узнать, самостоятельно изучая. Я поступил в колледж, чтобы получить 2-летнюю степень в области компьютерных наук, плавал на уроках и точно не узнал никакой новой информации. Это было слишком легко, и, внеся свой вклад в создание досок объявлений и видя, как другие борются, я оценил себя, чтобы быть по крайней мере таким же хорошим программистом, как любой 10-летний ветеран.
Итак, я получил свою первую работу по программированию. Когда я начинаю вырабатывать свои первые строки кода, такие, которые на самом деле будут использоваться другими людьми, я очень сильно поражаюсь: Я сосу при написании кода .
Просто имея возможность посмотреть на код других людей, послушать их разговоры о библиотеках DLL, управлении версиями, сборке GAC, шаблонах проектирования, разработке через тестирование, обо всех других сторонних концепциях, о которых никто никогда не упоминал в колледже заставил меня понять, что я почти ничего не знал о программировании. Колледж и самообучение не сделали ничего, чтобы подготовить меня к реальной сделке. Оказывается, я мог придумать код, чтобы делать все, что хотел, но я вообще не был мыслителем высокого уровня, и любой код, который я набросал, был просто ужасен.
Что ж, хороший 6-месячный опыт из практики исправил это, помог избавиться от некоторых вредных привычек и дал мне хорошее представление о том, как на самом деле должен выглядеть код. Итак, я чувствую себя хорошо, но сталкиваюсь с проблемой, которую не могу решить: у меня есть объект, вложенный на 5 уровней вглубь другого объекта, и я хочу, чтобы он уведомил внешний объект о том, что его состояние изменилось. Я не мог найти очевидный способ сделать это, поэтому я проконсультировался с коллегой, который одолжил мне книгу о шаблонах проектирования Java. Я прочитал книгу, и она открыла мне глаза на то, сколько мне не хватает: был целый мир шаблонов дизайна, которые я никогда раньше не видел, предлагая элегантные решения проблем, о которых я никогда бы не подумал.
А потом меня снова поразило, все это время я так много пропускал, я вообще не мыслит высокого уровня, и хаки, которые я написал для решения тех же проблем, описанных в книге GoF сделал это даже очевидным: Я отстой при написании кода .
Еще 6 месяцев, и я был мастером шаблонов дизайна. Я жил и дышал абстрактными фабриками, долго рассуждая о том, почему MVC значительно превосходит MVP, молился золотому идолу Мартина Фаулера рядом с моей кроватью. Так что, в любом случае, я хотел улучшить свое резюме, изучив несколько дополнительных языков. Я добавил Python, C #, Perl в список, но мне стало скучно изучать одни и те же вещи снова и снова с небольшим изменением синтаксиса. Я решил взглянуть на странный язык и наткнулся на несколько фрагментов Хаскелла. Не зная, что это за язык, я прочитал и обнаружил целую парадигму программирования, называемую функциональным программированием. Просто ради забавы я выучил функциональный язык программирования (я выбрал OCaml вместо Haskell и Lisp), и он полностью изменил мои представления о программировании.
После выполнения этого небольшого эксперимента меня снова поразило: Я сосу при написании кода
Как существовала эта вселенная функционального программирования, когда я об этом не знал? Почему никто не сказал мне об этом раньше? Чтобы думать, я имел обыкновение гордиться своей способностью выкачивать десятки и десятки классов Java, буквально тысячи строк кода, создавая иерархии абстрактных фабрик, конкретных фабрик, посетителей и т. Д. И т. Д. И т. Д. Когда я стал опытным с OCaml, количество строк в моих приложениях сократилось в 20: 1 раз. Десятки потенциальных Java-иерархий рухнули в несколько союзов OCaml, каждый из которых умещается на одном экране. С тех пор я езжу на поезде функционального программирования.
Урок здесь прост: если вы думаете, что вы лучший программист, вы отстой. Мышление «Я знаю все, что нужно знать» наивно и ограничит вашу способность стать действительно превосходным программистом.