Хабрахабр

[Из песочницы] Программирование для не-программистов. Биография джуна

Мне за сорок. По образованию лингвист, работаю в научной сфере. С программированием никогда не сталкивался, хотя формально в школе проходил уроки по информатике, которые, собственно, свелись к набору программы на Бэйсике из методички и к лицезрению загадочного ДОСа на компьютере учителя. Ох, да, ещё было очень краткое знакомство с Фокалом, но, опять же, все строго по методичке.

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

В университет поступаем не из-за тяги к знаниям, а просто потому что все так делают. Большинство же людей, как и я, впрочем – стадо животных, следующих за трендами. Есть более везучие особи, которые целенаправленно поступают в перспективные ВУЗы на перспективные специальности по совету родителей, но это опять же вопрос везения, связей и денег. Ну, и в армию-то тоже никому особенно не хочется.

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

Почему? Итак, я поступил на лингвиста. Лингвистика… Очень интересная специальность. Потому что в местном университете преподавали лингвистику и потому что на целевом факультете были бюджетные места. Отец современной лингвистики Ноам Хомски говорит только на английском и понимает пару фраз на иврите, тем не менее, это не помешало ему разработать мощную теорию грамматики языков, которой активно пользуются миллионы людей, работающих в сфере языкознания. Лингвистика – это наука о структуре языка, но, как правило, подавляющее большинство лингвистов с трудом владеет своим родным языком, не говоря об иностранных.

Если вуз выпускает сотни однотипных специалистов с базовым набором знаний в соответствии с требованиями Минобразования, то лучшим способом выделиться из толпы было бы выучить парочку иностранных языков. И вот эта особенность лингвистики была моим шансом шагнуть на следующую ступень. 4000 рублей в месяц. Учебу в университете пропускать не хотелось, поэтому пришлось бросить работу в порту и устроиться в школу ночным сторожем. Но, с другой стороны, масса свободного времени, которое я использовал для выполнения домашних заданий и изучения дополнительных специальностей. Каждый день овсянка и макароны. Почему? В довеску к преподаваемому в университете английскому я решил учить французский. Потому что это официальный язык дипломатии, второй язык в ООН и, в конце концов, язык экономически развитых стран.

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

Переписывание лекций. Работа день через три. Курсовые. Домашнее задание. Через два года я достиг того уровня, который позволял читать небольшие газетные статьи и писать незамысловатые сочинения. Самоучитель по французскому. Через год я прошел экзамен на уровне В2, который позволяет поступать в зарубежные вузы. Большой проблемой была разговорная речь и слух, поэтому пришлось записываться на языковые курсы и сидеть на овсяной каше с утра до ночи.

Почему я выучил французский? Вопрос о способности к языкам остался открытым. Или вместе из-за тех и других? Из-за упорства или из-за генетических способностей? «У тебя есть DELF B2? Мои размышления были прерваны вызовом к декану. У нас подписано соглашение с университетом Бреста об обмене студентами. Вот и прекрасно. Поедешь на три месяца».

Стипендия 500 евро в месяц, конец овсяной каше. Я в компании нескольких провинциальных мажоров отправился в Бретань. Мои напарники плюнули на учебу с первого дня и укатили в Париж. Брест – провинциальный город средней паршивости, в котором, кроме порта, нет никаких развлечений. Контакт с преподавателями был налажен. А я исправно ходил на лекции, после обеда в лабораторию, куда я напросился в качестве ассистента на добровольной основе.

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

Для Китая и даже для Шанхая вполне приемлемая зарплата. 1000 евро в месяц. Карьерный рост возможен, но он потребует огромных усилий. Однако это мой потолок. Начался период тяжелых раздумий. Претендент на должность доцента должен обладать запасом в несколько десятков публикаций в достойных журналах и опытом работы в нескольких странах. Более того, несмотря на довольно глубокие знания в лингвистике, я не любил эту профессию. Несмотря на годы усилий и ученую степень, я оказался на том уровне, на который попал бы и без французского с овсяной кашей.

Чтобы привести мозг в порядок, я начал заниматься спортом. Перспектива быть вечным постдоком и заниматься нелюбимым делом меня не радовала, и я довольно часто начал впадать в депрессию. Бег. Первый день. Я мёртв. 100 метров. Я был любимой целью шпаны. Я никогда в жизни не бегал, обходил турники стороной. Мозг начал работать и анализировать действительность. Однако стометровка дала свои плоды: депрессии как не бывало.

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

У меня afterburn. Я остановился. Мир стремительно движется в сторону тотальной роботизации. Вот он, тренд. Cathay Bank реформирует отдел по работе с клиентами в том же духе. Carrefour заменяет кассиров на автоматические сканеры. Я должен начать учить программирование или останусь навсегда за бортом. Парижские работники метро бастуют из-за открытия новой автоматизированной ветки.

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

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

Quora, StackExchange, Habr. Итак, что учить, где начинать? Я точно не хочу учить веб-программирование. Самые популярные и востребованные языки: Python, Java, JavaScript. Виртуальная реальность должна соответствовать действительности. Лепить красивые сайтики на фоне вонючего китайского смога и заваленного пластиковыми бутылками пляжа – это, по-моему, верх ханжества. Все говорят, что это очень легкий язык. В общем, выбор пал на Пайтон. Итак, книга Доусона. Это как раз то, что мне нужно. Где-то глубоко во мне сидело осознание неудовлетворенностью выбранным курсом. Я дошел до циклов и мне все надоело. С одной стороны война в Сирии, миллионы беженцев, терроризм, глобальное потепление. Более того, автор выбрал написание игры в качестве основного мотиватора для изучающих язык. Да-с… А в это время взрослые люди с солидным фундаментальным образованием сидят в мягких креслах и пишут игры.

Например: как пишется операционная система и как она записывается на жесткий диск. В плане знаний ничего полезного я из книги не извлек, наоборот, у меня возникло еще больше вопросов. Почему у ДОСа убогая графика, а у Windows 16 миллионов цветов? Как осуществляется передача сообщений по сети? Книгу Доусона пришлось отложить в сторону и снова погрузиться в раздумья.

Герой фильма хочет влиться в компанию хакеров и те просят его продемонстрировать свои знания. Есть один немецкий фильм, называется «Кто я». Кандидат в хакеры садится за лаптоп и набирает код на клавиатуре. Говорят: вон там за окном электростанция, отключи ее. Ты с нами. Стоящие за его спиной люди уважительно говорят: о, ты умеешь low level! Low level… Кажется, это и есть ключ к ответам на мои вопросы. Вот эта фраза довольно глубоко въелась в мой мозг.

Quora, StackExchange, Habr. Итак, учить программирование придется учить с азов, с ассемблера. Несколько недель на ознакомление с каждым учебником. Набор книг по ассемблеру. Каждая книга предлагает учить ассемблер с позиции языка высокого уровня, чаще всего С. Бездна безысходности. Это как предложить изучающим русский язык сначала освоить синтаксис сложноподчиненных предложений, а потом перейти к алфавиту. Педагогически это неверно. Ах да: учебники в основном концентрируются на FASMe или TASMe, если речь идет о российских авторах. Отсюда, кстати, следует и вторая проблема: автор предполагает, что изучающий ассемблер не нуб и знает, что и где нужно нажать, чтобы запустить отладчик, да и вообще в какой среде разработки следует писать код. У ТАСМа нет внятной среды разработки, поэтому тоже «нет». Линукс я никогда не видел, поэтому на ФАСМе стоит крест.

Я нашел книгу, которую можно было бы поместить в рубрику «изменяющих сознание». Несколько недель поисков в сети увенчались успехом. Почему эта книга так хороша? Кип Ирвин, седьмое издание. Он учил язык самостоятельно в качестве хобби, поэтому отлично понимает все трудности, с которыми может столкнуться новичок. Ирвин по образованию музыкант, причем с диссертацией, что не помешало ему в зрелом возрасте снова поступить в университет на программиста. Отличный вводный курс по Visual Studio, МАСМ, ДОС и немного С++. Его учебник объясняет всё: куда нажать, на что посмотреть, как установить. А главное – это упражнения.

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

Можно выучить пару сотен алгоритмов, но всё рвно настанет тот день, когда нужно будет создать что-то новое. Вместе с первой решенной задачей пришло понимание того, что программированию нельзя обучить. А можно ли развить способности к программированию? И тут уж никакой Дональд Кнут не поможет. Поэтому в довесок к ассемблеру нужно было освежить знания по матану и начать изучать дискретную математику. Ломоносов говотил, что лучшее упражнение для мозга — математика. Матанализ, учебник Стюарта, шестое издание. Снова муки выбора, но уже попроще. Дискретная математика, Кеннет Розен, седьмое издание.

Краткое знакомство с технологиями SSE по справочнику Куссвурма. Девять месяцев на Ирвина, ознакомление с FreeDOS, изучение стандартной библиотеки С и первые шаги в С++. Не удивительно: мои коллеги с утра до ночи потеют над проектами, забывают о личной жизни и бьются насмерть с редакторами и рецензентами за каждую статью, а я отсиживаю положенное по контракту время в лаборатории и бегу домой баловаться с ассемблером, и вообще думаю больше о программировании, чем о работе. Босс вызывает меня к себе в кабинет и заявляет, что мои сомнительные успехи на научном поприще не позволяют ему продлить мой контракт.

Откладываю дискретную математику в сторону. В общем, у меня полгода до увольнения и мне нужно добавить газу. Я уже на «ты» с Visual Studio, поэтому все должно быть легко. Мне нужно начинать учить язык высокого уровня и выбор падает, естественно, на С++. Кстати, С является подмножеством С++, поэтому можно убить двух зайцев одним выстрелом.

На мой взгляд, есть пара достойных учебников: Прата и Дейтель. Кресты. Дейтель прост, но все объясняет с точки зрения ООП. Прата местами довольно многословен. Поскольку мой мозг был безнадежно испорчен ассемблером, то учебник Дейтеля я использовал только как источник дополнительной информации. С этих учебников началось мое первое погружение в мир объектов. Например, Ирвин открыто говорит во вступлении, что писать ПО на ассемблере – нездоровая идея, но знать ассемблер должен каждый. Автор посвящает целую главу описанию «силы, мощи и красоты» ООП, при этом не удосуживаясь описать недостатки концепции. Дейтель же говорит: ООП – это круто, поэтому будем им пользоваться. Прата тоже не излишествует и описывает ООП довольно умеренно. Нет проблем: создадим класс, парочку конструкторов, унаследуем методы и перегрузим операторы. 2+2? Ответ: 4.

Официант принес ему ложку, вилку и трубочку. Человек пришел в ресторан и заказал спагетти. И начинает засасывать по очереди макаронины. Клиент думает: ну, раз принесли трубочку, то ей обязательно надо пользоваться. Это не критика ООП, мне просто кажется, что у всего есть свои области применения и ограничения. Просто, мощно и красиво. Но и здесь вспоминается книга Абраша, писавшего игры на чистом ассемблере. ООП наверняка хорошо в графике, где каждый объект на дисплее соответствует объекту, создаваемому на основе описания в классе. Он основал школу «42», где абитуриентам после нескольких месяцев подготовки предлагается написать видеоигру на С. Или Ксавье Ниель, владелец французского мобильного провайдера Free. Можно ведь и без ООП обойтись.

Этой теме тоже посвящены сотни статей и гневных писем в редакцию. Другая проблема языка – указатели. Реализация указателей в С/С++ — это действительно проблема. Указатель в ассемблере – очень простая вещь и не требует для понимания какого-то особенного мозга. Почему нельзя было придумать что-нибудь более внятное наподобие ESI/EDI и квадратных скобок? Не хочу останавливаться на тонкостях, хочется лишь сказать, что указатели с кастами и с десятком астерисков между скобками действительно вызывают обморок.

Лингвист. Неделя до увольнения. Абсолютно бесполезное существо на рынке труда. Более чем высшее образование. Китай всё-таки красивая страна. У меня выбор: или заняться поиском работы, или потратить накопленные деньги на путешествия и отдых. Мои разосланные несколько месяцев назад резюме остались без ответа. Гансу, Цинхай, Синьцзянь, Каракорумское шоссе. «Лаборатория искусственного интеллекта ищет людей с магистерским образованием и навыками программирования». Я сижу в лаборатории и рассматриваю сайт университета. Рандеву через час. Мне отвечают через пять минут.

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

Среда разработки – Visual Studio. Итак, первый день. Моя задача – изучить программное обеспечение, над которым они начали работать десять лет назад. Язык – С Шарп. В этот раз выбор падает на болгарский учебник, написанный основателями Telerik. Язык по синтаксису близок к С++, но есть масса незнакомых мне методов, поэтому снова приходится искать учебник и решать упражнения. Превосходная книга для тех, кто хочет изучить одновременно и язык, и алгоритмы.

А что это за стэк-то такой и откуда он взялся – не известно. Прата, кстати, описывал очереди и стэки, но это делалось в не-императивном стиле: мол, давайте решим эту задачу с помощью стэка. Я когда-то на заре юности читал треды на StackExchange и часто впадал в ступор от фраз наподобие «черно-красные деревья». Болгары описывают каждый алгоритм и объясняют, какой круг задач может быть решен с их помощью. Учебник болгар пришлось дополнить книгой поляка Марцина Ямро. Сейчас тоже впадаю, но хотя бы представляю, что такое «дерево» вообще. Паттерны: Джудит Бишоп. Чистые алгоритмы, все просто и понятно.

Шарпа недостаточно. Искусственный интеллект и корпус китайского языка. SQL, справочник Агарвала. Нужно учить базы данных. За алгоритмами и базами данных следует учебник Петцольда по WPF и «WPF Cookbook». Прекрасная книга, внятные объяснения. XAML прост в усвоении, однако идущие вместе с ним bindings и MVVM пока еще не поддаются пониманию.

То есть в академической среде нет такого понятия как инженер ПО. Год работы в области разработки искусственного интеллекта в качестве джуниора. У каждого свой проект, а как он будет реализован — это личное дело каждого. Мы все – research assistants. Для него главное требование – интеграция с ранее написанным софтом, всё. Я уже упомянул, что мой босс никогда не программировал. Судя по всему, у нас довольно расслабленная обстановка, всё обходится без проверок качества кода. Я иногда беседую с коллегами, работавшими ранее в корпоративной среде. Паттерны пылятся на полке.

Как говорят наши американские партнеры, ИИ – это 99% hype. Я пока еще не знаю, хочу ли я в будущем продолжать работать программистом и искать более высокооплачиваемую работу в частной компании, но я уже точно знаю, что мне не хочется заниматься ИИ. Терри Гоу безусловно сможет автоматизировать конвейер Foxconn'a. Очковтирательство. Компьютер, однако, никогда не заменит учителя, врача и инженера. Метрополитеновцы, кассиры в супермаркетах и работники колл-центров тоже пойдут на мороз, потому что это алгоритмируемая работа. И я лично вряд ли доверю роботу управлять моей машиной.

Где он, тренд? Ах, я забыл: я же лингвист и все так же бесполезен на рынке труда. Ну, посмотрю новости еще раз. Что нужно учить, чтобы остаться на плаву? Немцы беспокоятся по поводу уязвимости государственных систем телекоммуникаций перед лицом китайской угрозы. Ага, канадцы арестовали дочку владельца Huawei. Либо модернизировать местную мобильную сеть до уровня 5G, полагаясь исключительно на потенциально небезопасную продукцию коммунистов. Nokia еще не достигла технологического уровня Huawei, поэтому в Германии назревает дилемма: либо ждать несколько лет, пока местные компании родят достойную замену китайской продукции, и при этом поставить крест на экономическом рывке вперед. С, Линукс, networking, электротехника, телекоммуникационные стандарты. Мне кажется, что я должен начать копать в этом направлении. Это моя следующая ступень.

Все вопросы, которыми я начал задаваться с того момента, когда впервые открыл самоучитель по французскому, так и остались без ответа. Заключение. Логика, абстрагирование и программирование — аналогичный вопрос. Можно ли развить способности к языкам или это врожденная особенность человека? Почему я был апатичным ребенком без всяких интересов, а перешагнув за черту двадцатилетия, внезапно обрел усидчивость и умение усваивать довольно чувствительные объемы информации? Нейрофизиологи утверждают, что левое полушарие мозга как раз и отвечает за языковые способности человека и его умение логически рассуждать. Я думаю, в обозримом будущем этот вопрос останется без ответа. Могут ли сотрясения мозга, стресс или банальный грипп быть триггерами, активирующими определенные зоны мозга?

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

Всем удачи!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть