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

Этот план был отменен, когда я устроился на полную ставку программистом в Braintree во время моего перерыва в год. Сначала я чувствовал себя не в своей тарелке. Рано или поздно меня разоблачат, и мне придется вернуться в школу; позор мне за то, что я думал, что могу сократить путь!

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

Затем я встретил Оза и Майлза.

Зачем изучать информатику?

Они предложили мне свою миссию: обучать информатике людей, которые имеют практические знания в области программирования, но не имеют основ.

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

Когда моя команда решила использовать Apache Kafka для передачи сообщений между двумя приложениями, я подумал: «Отлично, какие методы Ruby я использую?» вместо «Является ли отказоустойчивая платформа распределенной потоковой передачи в реальном времени лучшим выбором?» Если бы у меня был корректно выглядящий оператор ORM, но запрос к базе данных все еще был медленным, моим решением было бы вытащить план запроса и передать его старшему инженеру. И если я не мог что-то настроить, я засучивал рукава ... и открывал Slack, чтобы отправить сообщение последнему редактору страницы Wiki, за которой я следил.

Неужели это действительно сдерживало меня изо дня в день? Может быть, а может и нет. Но я боялся мысли, что в конечном итоге я выйду на плато: я могу знать, что Rails холоден, но что мне делать дальше? Я не знал, как достичь более высоких уровней абстракции, где я мог бы выбрать правильный инструмент для решения проблемы или быстро осмыслить сложные системы. Более низкие уровни абстракции, такие как оптимизация запросов к базе данных помимо «скрестите пальцы и добавьте индекс!», Были также недосягаемы. В конечном итоге это казалось неприемлемым и неустойчивым.

Сделать решительный шаг

Теперь у меня было смутное представление о том, что «изучение информатики» - это «хорошее» и «стоящее» занятие. Хорошо. В то время мне было еще 17 лет, поэтому первым моим побуждением было попробовать по-старому. Но потом я подумал: должно ли это длиться четыре года, и все ли эти общие уроки обязательны, и является ли лекционный зал с сотнями других студентов лучшей средой для меня, чтобы изучить этот материал?

Что ж, я очень целеустремлен, так что, возможно, онлайн-курсы - вариант. Позвольте мне просто перейти на Coursera и ... эй, это много вариантов. Хм, в основном я вижу курсы «для начинающих» и «продвинутых», но с чего начать тем, у кого есть практические знания в области веб-разработки? Нужно ли мне знать операционные системы, прежде чем я узнаю о работе в сети? Могу ли я узнать о распределенных системах, не изучая сначала компьютерную архитектуру?

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

Учись, спи,

Итак, короче говоря, вот как я оказался в Брэдфилде. С января по март я решил изучать информатику на дневном отделении. Цель заключалась в том, чтобы научиться достаточно, чтобы быть неотличимым от кого-то с четырехлетним дипломом специалиста по информатике, по крайней мере, насколько могли судить мои будущие коллеги.

(Я хочу быстро провести различие между программированием и информатикой, на случай, если мне покажется, что я ушел с работы, чтобы научиться выполнять свою работу. Как говорит user4501 на StackOverflow, информатика - это изучение того, какие компьютеры (может) делать; программирование - это практика, когда компьютеры заставляют делать что-то . Хотя они связаны, можно программировать и получать за это деньги, не зная информатики.)

Я прошел все девять предлагаемых занятий по порядку:

  • Компьютерная архитектура
  • Языки и компиляторы
  • Алгоритмы и структуры данных
  • Операционные системы
  • Базы данных
  • Компьютерная сеть
  • Распределенные системы
  • Программные интерфейсы
  • Дискретная математика

Это было разделено на три занятия каждые три недели. Занятия проводились каждый будний вечер вечером и в выходные дни в течение дня, чтобы студенты могли работать полный рабочий день. Я провел большую часть своих дней, просматривая предыдущие занятия и готовясь к будущим занятиям. В сумме это составляло около 50 часов в неделю, равномерно распределяемых между классом и учебой. Материал отражал университетские курсы; мы использовали учебники и онлайн-видео, опубликованные такими школами, как Беркли и Стэнфорд. Фактически, Оз и Майлз любезно создали сайт с более или менее той же учебной программой, которую я прошел.

Класс обычно делился пополам, начиная с концептуального обсуждения под руководством преподавателя. Поскольку мы уже читали об этих концепциях, это была не столько лекция, сколько время, чтобы заполнить пробелы и обсудить запутанные вещи. Вторая половина была потрачена на применение этих концепций. Например, на одном занятии мы обсудили, что делает планировщик запросов к базе данных, а затем проанализировали операторы SQL и их планы запросов с помощью действующей базы данных PostgreSQL.

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

Размышления

Вот несколько мыслей о моем опыте:

  • Все мои одноклассники были умными, целеустремленными, отличными людьми. Было приятно учиться с ними трудным вещам.
  • Большинство из них были профессиональными веб-разработчиками, поэтому мы смогли привязать новые концепции к имеющимся практическим знаниям. Мысли типа «вау, я бы хотел знать это при проектировании / разработке / отладке проекта ABC» часто повторялись во время занятий. Это также означало, что мы могли быстро перейти к более глубокому предмету, не тратя время на такие вещи, как среда разработки или синтаксис.
  • Поскольку большая часть курсовых работ связана с теоретической частью, я беспокоился о том, что мне станет скучно или потеряю мотивацию, как это было с курсом Coursera. Оз и Майлз - увлекательные и отзывчивые учителя, и они создали среду с целеустремленными учениками, которые все хотят учиться. Были паузы, и некоторые темы были интереснее других, но я никогда не чувствовал себя проверенным или незанятым. Они заслуживают за это большой признательности.
  • Это был первый раз, когда Брэдфилд использовал структурированные классы, и некоторые детали были грубыми. Некоторые упражнения в классе натолкнулись на неудачные блокираторы, которые отнимали классное время. Некоторые занятия тянулись и могли быть пройдены за полтора часа, в то время как другие считали, что им нужно пять часов. Но они не нарушали условий сделки, и Оз и Майлз настолько отзывчивы, что, вероятно, уже уладили большую часть этого.

Самыми важными выводами для меня были новые модели мышления и возросшая уверенность в подходе к сложным предметам.

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

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

Учебная программа действительно оказалась чрезвычайно сложной. Но это не было невозможным! И это в конечном итоге утешало. Мой мозг медлил, когда он растягивался по-новому, но в конце концов кусочки начали складываться вместе, и я почувствовал, что учусь! Оз даже сделал этот урок по математике терпимым. Теперь, когда я оказался по другую сторону этих «недоступных» вещей, я больше не боюсь таких ситуаций, как просмотр 1000-страничного учебника по компьютерным сетям без каких-либо знаний о компьютерных сетях. Назовите меня сумасшедшим, но на самом деле это было весело.

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

Хотя я еще не чувствую себя экспертом, я доволен тем, что узнал за эти три месяца. Скажем, я взял годовой перерыв в программировании, не посещая Брэдфилда: по возвращении я бы отчаялся от трех новых выпусков Ruby, шести обновлений Rails и 47 новых версий Node.js. Было бы кошмаром снова набрать скорость! Если бы у меня был такой же отрезок времени от программирования сейчас, я мог бы немного успокоиться, зная, что компьютеры - это просто тщательно организованный песок, процессоры по-прежнему выполняют инструкции сборки, и что моя копия языка программирования C по-прежнему остается Последняя версия. Тогда, полагаю, я пристегнусь, прочту заметки о патче и пойду в путь. Знание этих фундаментальных концепций сейчас избавит меня от бесконечной боли, если я захочу продолжать программировать столько же, сколько такие люди, как Оз и Майлз.

Вперед

Я считаю, что изучение информатики принесет большую пользу любому практикующему разработчику программного обеспечения, который научился программировать без образования в области компьютерных наук. В то время как четырехлетний университетский диплом был традиционным способом получить этот материал, Брэдфилд идеально подошел мне, и я уверен, что мои инвестиции окупятся во много раз.

Что дальше для меня? Я основываю компанию по разработке программного обеспечения для логистики, о которой вы скоро услышите :). Менее года назад быть техническим соучредителем казалось мне далеко за пределами моих возможностей. Но теперь, когда у меня есть несколько надежных инструментов для поддержки любых новых, я чувствую себя хорошо подготовленным к этой задаче!

Я не слишком хорош в социальных сетях, поэтому оставьте комментарий ниже или напишите мне по адресу [email protected], если вы хотите поговорить об этом. Если храбрый, ты можешь ткнуть меня в Twitter @_tigershen