Предисловие: это рассказ о книгах для тех, кто решил научиться программированию самостоятельно.
Но так как читать список книг было бы скучно, я решил дополнить его своей биографией.
Итак.
мне за сорок.
По образованию лингвист, работаю в научной сфере.
Я никогда не сталкивался с программированием, хотя формально в школе брал уроки информатики, которые, по сути, сводились к тому, чтобы набрать программу на Бейсике по мануалу и увидеть загадочный DOS на компьютере учителя.
Ах да, еще было очень краткое знакомство с Focal, но опять же все строго по мануалу.
Я ребенок из детского дома, поэтому после школы мне удалось по квоте поступить в местный университет на сельскохозяйственный факультет. Учеба закончилась ровно через год из-за нелюбви к выбранной дисциплине.
Вообще, мне сложно представить, что большинство людей в восемнадцать лет способны точно определить свои профессиональные и жизненные цели.
Я читал биографии таких людей, как Илон Маск, который начал программировать с пеленок, или основательница Theranos, организовавшая собственную домашнюю химическую лабораторию в пятилетнем возрасте.
Однако большинство людей, таких как я, представляют собой стадо животных, следующих тенденциям.
Мы идем в университет не из-за жажды знаний, а просто потому, что так делают все остальные.
Ну и в армию тоже никто особо не хочет. Есть более удачливые личности, которые целенаправленно поступают в перспективные вузы на перспективные специальности по совету родителей, но это опять же вопрос удачи, связей и денег.
В детстве я любил смотреть «Мудрецов и мудрых женщин» и, честно говоря, мне было трудно представить, что, скажем, дети людей, отбывающих наказание или страдающих алкоголизмом, могут массово участвовать в этой передаче.
Страна активно готовилась ко второй чеченской кампании и всех неспокойных и слоняющихся скопом вывозили на призывные пункты.
Я решил не искушать судьбу и поехал на другой конец страны, подальше от военкомата, работать чернорабочим в порту.
У меня довольно медленный мозг, поэтому только после нескольких лет продуктивного общения с «парадоксальным» интеллектуальным большинством и с их более удачливыми братьями, уже вставшими на путь успеха, меня осенила перспектива быть бессильным червяком.
на дне общества это весьма сомнительное удовольствие.
Высшее образование было единственной дверью наверх по социальной лестнице.
Итак, я поступил на лингвиста.
Почему? Потому что лингвистику преподавали в местном университете и потому что на целевом факультете были бюджетные места.
Лингвистика.
Очень интересная специальность.
Языкознание – наука о строении языка, но, как правило, подавляющее большинство лингвистов испытывают трудности с освоением родного языка, не говоря уже об иностранных.
Отец современной лингвистики Ноам Хомский говорит только по-английски и понимает пару фраз на иврите, однако это не помешало ему разработать мощную теорию языковой грамматики, которую активно используют миллионы людей, работающих в области лингвистики.
.
И эта особенность языкознания стала для меня шансом сделать следующий шаг.
Если вуз выпускает сотни однотипных специалистов с базовым набором знаний в соответствии с требованиями Минобразования, то лучшим способом выделиться из толпы будет изучение пары иностранных языков.
Я не хотел пропускать учебу в университете, поэтому мне пришлось бросить работу в порту и устроиться ночным сторожем в училище.
4000 рублей в месяц.
Овсянка и макароны каждый день.
Но, с другой стороны, было много свободного времени, которое я использовал для выполнения домашних заданий и изучения дополнительных специальностей.
Помимо английского, преподаваемого в университете, я решил выучить французский.
Почему? Потому что это официальный язык дипломатии, второй язык ООН и, в конечном итоге, язык экономически развитых стран.
Взяв в руки самоучитель французского языка, я впервые в жизни задала себе вопрос: действительно ли у меня есть талант к языкам? Как я могу быть уверен, что чтение книги и выполнение всех упражнений не окажутся пустой тратой времени? Мою работу сторожем с мизерной зарплатой можно было бы обменять на должность мерчендайзера в ближайшем торговом центре или складского работника на пивном заводе, но в этом случае у меня не было бы времени на самообразование.
В общем, я сделал шаг навстречу неизведанному.
Работа за три дня.
Переписывание лекций.
Домашнее задание.
Курсовая работа.
Учебник по французскому языку.
Через два года я достиг уровня, позволяющего мне читать короткие газетные статьи и писать простые эссе.
Говорение и слух были большой проблемой, поэтому мне пришлось записаться на языковые курсы и с утра до вечера сидеть на овсянке.
Через год я сдал экзамен уровня B2, который позволяет мне поступать в зарубежные вузы.
Вопрос о языковых способностях оставался открытым.
Почему я выучил французский? Из-за настойчивости или из-за генетических способностей? Или оба из-за обоих? Мои размышления прервал звонок декану.
«У вас есть DELF B2? Это нормально.
Мы подписали соглашение с Брестским университетом об обмене студентами.
Ты поедешь на три месяца».
Я в компании нескольких провинциальных майоров отправился в Бретань.
Стипендия 500 евро в месяц, окончание овсянки.
Брест — провинциальный город средней вшивости, в котором, кроме порта, никаких развлечений нет. Мои партнеры с первого дня забросили учебу и уехали в Париж.
И я регулярно ходил на лекции, после обеда в лабораторию, где вызвался ассистентом.
Установлен контакт с преподавателями.
Возвращение в родную провинциальную глубинку.
Владение французским языком позволило мне устроиться на работу в отдел международного сотрудничества в родном университете.
Еще два года.
Тезис.
Выпускать.
Мне тридцать.
В военкомате мне вручают военный билет с пометкой «частный запаса».
Я еду в Ренн по программе магистратуры.
750 евро в месяц, пару лет лекций, экзаменов и стажировок.
Мне предлагают принять участие в конкурсе на получение государственного контракта на написание диссертации.
Конкурс успешно завершен.
Четыре года, 1600 евро в месяц после уплаты налогов.
Диссертация защищена.
Я еду в Шанхай, это мой первый постдок.
1000 евро в месяц.
Для Китая и даже Шанхая зарплата вполне приемлемая.
Однако это мой потолок.
Карьерный рост возможен, но потребует огромных усилий.
Претендент на должность доцента должен иметь несколько десятков публикаций в авторитетных журналах и опыт работы в нескольких странах.
Начался период трудных размышлений.
Несмотря на годы усилий и ученую степень, я достиг уровня, которого достиг бы без французского языка и каши.
Более того, несмотря на достаточно глубокие познания в лингвистике, эта профессия мне не нравилась.
Перспектива быть вечным постдоком и заниматься тем, что мне не нравится, меня не радовала, и я довольно часто начал впадать в депрессию.
Чтобы привести свой мозг в порядок, я начал заниматься спортом.
Первый день.
Бегать.
100 метров.
Я мертв.
Я никогда в жизни не бегал, избегал турников.
Я был любимой мишенью панков.
Однако бег на 100 метров принес свои плоды: депрессия ушла.
Мозг начал работать и анализировать реальность.
Фильм «Прикосновение греха», эпизод, где фабричный рабочий от отчаяния выбрасывается из окна.
Я могу пробежать 1 километр.
Я читаю критическую статью о фильме.
Три километра.
В основу сценария легли реальные события, произошедшие на заводах Foxconn, известных своими нечеловеческими условиями труда.
Пять километров, свинцовые бедра, но, думаю, пробегу еще пару.
Терри Гоу объявляет о сокращении штата Foxconn и создании полностью автоматизированного завода.
Я остановился.
У меня есть дожигание.
Вот она, тенденция.
Мир стремительно движется к тотальной роботизации.
Carrefour заменяет кассиров автоматизированными сканерами.
Cathay Bank реформирует свой отдел обслуживания клиентов в том же духе.
Работники парижского метро бастуют из-за открытия новой автоматизированной линии.
Мне нужно начать изучать программирование, иначе я останусь позади навсегда.
Я всегда искренне считал, что у всех людей есть свои пределы в области получения знаний.
А я всегда думал, что программирование — это запретная зона, в которую мне запрещено входить.
Несмотря на свой возраст, я отчетливо помню чувство отрезвляющей тупости, которое возникало у меня каждый раз, когда я набирал программы из руководства на клавиатуре школьных компьютеров.
Товарищи справились с задачей за пять минут и даже успели написать несколько дополнительных строк, которые заставили компьютер пищать через динамик и моргать курсором.
Я же потел в сторонке и не смог даже запустить программу из мануала.
Спорт и моя многолетняя работа сторожем изменили мое отношение к этому вопросу.
Если я смогу преодолеть себя и пробежать восемь километров, если я смогу терпеливо сидеть на уроке французского языка и часами писать упражнения, то я точно смогу научиться программировать.
Ну, если не смогу, то хотя бы попробую.
Итак, чему же научиться, с чего начать? Quora, StackExchange, Хабр.
Самые популярные и востребованные языки: Python, Java, JavaScript. Я определенно не хочу изучать веб-программирование.
Создавать красивые сайты на фоне вонючего китайского смога и пляжа, заваленного пластиковыми бутылками – это, на мой взгляд, верх лицемерия.
Виртуальная реальность должна соответствовать реальности.
В общем выбор пал на Python. Все говорят, что это очень простой язык.
Это именно то, что мне нужно.
Итак, книга Доусона.
Дошла до циклов и мне все надоело.
Где-то глубоко внутри меня было осознание неудовлетворенности выбранным курсом.
Более того, автор выбрал письменные игры в качестве основного мотиватора для изучающих язык.
С одной стороны, война в Сирии, миллионы беженцев, терроризм, глобальное потепление.
Тем временем взрослые с солидным фундаментальным образованием сидят в мягких креслах и пишут игры.
Да-с.
Но, тем не менее, учебник Доусона еще очень ясен.
А IDE, предлагаемая вместе с книгой, облегчает знакомство с языком.
В плане знаний я не извлек из книги ничего полезного; напротив, у меня появилось еще больше вопросов.
Например: как записывается операционная система и как она записывается на жесткий диск.
Как передаются сообщения по сети? Почему в DOS плохая графика, а в Windows 16 миллионов цветов? Книгу Доусона пришлось отложить и снова погрузиться в размышления.
Есть один немецкий фильм «Кто я».
Герой фильма хочет присоединиться к компании хакеров и они просят его продемонстрировать свои знания.
Говорят: за окном электростанция, выключите ее.
Кандидат в хакеры садится за ноутбук и набирает код на клавиатуре.
Люди, стоящие за его спиной, уважительно говорят: о, ты можешь делать низкий уровень! Вы с нами? Эта фраза довольно глубоко засела в моем мозгу.
Низкий уровень.
Кажется, это и есть ключ к ответам на мои вопросы.
Итак, вам придется изучать программирование с азов, с ассемблера.
Quora, StackExchange, Хабр.
Набор книг по ассемблеру.
Несколько недель на ознакомление с каждым учебником.
Бездна безнадежности.
Каждая книга предлагает изучать ассемблер с точки зрения языка высокого уровня, чаще всего C. Педагогически это неверно.
Это все равно что просить изучающих русский язык сначала освоить синтаксис сложных предложений, а затем переходить к алфавиту.
Это, кстати, приводит ко второй проблеме: автор предполагает, что человек, изучающий ассемблер, не нуб, и знает, что и куда нажать, чтобы запустить отладчик, и вообще в какой среде разработки следует писать код. Ах да: в учебниках в основном упор делается на FASMe или TASMe, если мы говорим о российских авторах.
Я никогда не видел Linux, так что FASM — это крест. У TASM нет четкой среды разработки, так что это тоже «нет».
Несколько недель поисков в Интернете увенчались успехом.
Я нашел книгу, которая могла бы подойти под заголовок «Изменение сознания».
Кип Ирвин, седьмое издание.
Почему эта книга так хороша? Ирвин — музыкант по образованию, с дипломной работой, что не помешало ему вернуться в университет и в зрелом возрасте стать программистом.
Язык он изучал самостоятельно в качестве хобби, поэтому прекрасно понимает все трудности, с которыми может столкнуться новичок.
В его туториале все объясняется: куда нажимать, на что смотреть, как устанавливать.
Отличный вводный курс по Visual Studio, MASM, DOS и немного C++.
И главное – упражнения.
Я постдок, работаю в беспыльной лаборатории, начальник меня не утомляет и не заставляет работать сверхурочно.
Вечернее время с шести до двенадцати посвящено ассемблеру и программированию в целом.
Первое упражнение — это как моя первая стометровка.
Главное — осознавать, что программирование и вообще поиск решения задачи — это неалгоритмический и нелинейный процесс.
Этот процесс требует непредсказуемого количества времени: может, пару минут, а может, и нескольких дней.
Главное, помните о своих предыдущих успехах: если в прошлый раз я решил упражнение на две звезды, то и в этот раз я его решу.
Вместе с первой решенной проблемой пришло понимание того, что программированию нельзя научить.
Вы можете выучить пару сотен алгоритмов, но все равно наступит день, когда вам понадобится создать что-то новое.
И никакой Дональд Кнут здесь не поможет. Можно ли развить способности программирования? Ломоносов говорил, что лучшее упражнение для мозга — математика.
Поэтому помимо ассемблера нужно было освежить знания по Mathan и начать изучать дискретную математику.
Опять муки выбора, но уже проще.
Исчисление, учебник Стюарта, шестое издание.
Дискретная математика, Кеннет Розен, седьмое издание.
В сети много дискуссий о бесполезности ASMA. Я безумно рад, что изучил основы этого языка.
Низкоуровневое программирование позволяет понять такие вещи, которые не очевидны для языков высокого уровня, как работа стека памяти и почему он переполняется, чем опасна рекурсия, принципиальная важность связанного списка для систем хранения памяти, и т. д. Главное, что ASM учит экономному использованию ресурсов компьютера и, соответственно, энергопотреблению.
Если бы я был миллиардером, я бы с радостью вложил средства в разработку таких систем, как MenuetOS. Ну или хотя бы пожали руки их разработчикам.
Девять месяцев для Ирвина, знакомство с FreeDOS, изучение стандартной библиотеки C и первые шаги в C++.
Краткое введение в технологии SSE с использованием справочника Kusswurm. Начальник вызывает меня в свой кабинет и заявляет, что мои сомнительные успехи в научной сфере не позволяют ему продлить мой контракт. Неудивительно: мои коллеги с утра до вечера парятся над проектами, забывают о личной жизни и насмерть дерутся с редакторами и рецензентами за каждую статью, а я отбываю положенный срок в лаборатории и бегу домой возиться с ассемблером, и вообще больше думаю о программировании, чем о работе.
В общем, до увольнения у меня осталось полгода и надо прибавить газа.
Я отложил дискретную математику в сторону.
Мне нужно начать изучать язык высокого уровня и выбор естественно падает на C++.
Я уже знаком с Visual Studio, поэтому все должно быть легко.
Кстати, C — это подмножество C++, поэтому можно убить двух зайцев одним выстрелом.
Кресты.
На мой взгляд, есть парочка достойных учебников: Прата и Дейтел.
Прата местами довольно многословен.
Дейтел прост, но объясняет все с точки зрения ООП.
С этих учебников началось мое первое погружение в мир предметов.
Поскольку мой мозг был безнадежно испорчен языком ассемблера, я использовал учебник Дейтела лишь как источник дополнительной информации.
Автор посвящает целую главу описанию «силы, мощи и красоты» ООП, не удосуживаясь описать недостатки концепции.
Например, Ирвин открыто говорит во введении, что написание программного обеспечения на языке ассемблера — нездоровая идея, но язык ассемблера должен знать каждый.
Прата также не переусердствует и описывает ООП весьма умеренно.
Дейтел говорит: ООП — это круто, так что будем его использовать.
2+2? Нет проблем: создадим класс, пару конструкторов, наследуем методы и перегрузим операторы.
Ответ: 4. Мужчина пришел в ресторан и заказал спагетти.
Официант принес ему ложку, вилку и соломинку.
Клиент думает: ну раз принесли соломинку, значит, ей обязательно надо воспользоваться.
И он начинает сосать макароны одну за другой.
Просто, мощно и красиво.
Это не критика ООП, я просто думаю, что у всего есть свои применения и ограничения.
ООП, безусловно, хорош в графике, где каждому объекту на дисплее соответствует объект, созданный на основе описания в классе.
Но и здесь мне вспоминается книга Абраша, который писал игры на чистом ассемблере.
Или Ксавье Ниль, владелец французского мобильного провайдера Free. Он основал школу «42», где абитуриентам после нескольких месяцев подготовки предлагают написать видеоигру на C. Ведь можно обойтись и без ООП.
Другая языковая проблема — указатели.
Этой теме также посвящены сотни статей и гневных писем в редакцию.
Указатель в ассемблере — очень простая вещь, для понимания которой не требуется никакого специального мозга.
Реализация указателей в C/C++ — настоящая проблема.
Не хочу останавливаться на тонкостях, хочу лишь сказать, что указатели с кастами и десяток звездочек между скобками действительно заставляют падать в обморок.
Почему они не могли придумать что-то более понятное, например ESI/EDI и квадратные скобки? За неделю до увольнения.
Лингвист. Больше, чем высшее образование.
Абсолютно бесполезное существо на рынке труда.
У меня есть выбор: либо начать искать работу, либо потратить сэкономленные деньги на путешествия и отпуск.
Китай по-прежнему остается красивой страной.
Ганьсу, Цинхай, Синьцзян, Каракорумское шоссе.
Мои резюме, разосланные несколько месяцев назад, остались без ответа.
Я сижу в лаборатории и смотрю на сайт университета.
«Лаборатория искусственного интеллекта ищет людей со степенью магистра и навыками программирования».
Мне отвечают через пять минут. Встреча через час.
Начальник интересуется моим прошлым и задает пару вопросов о моей мотивации.
По образованию он статистик и никогда не программировал, поэтому звонит своему постдоку, чтобы проверить меня.
Алгоритмы преобразования фраз и поиска слов, все просто.
Генетические методы и модели Маркова.
эээ, полный ноль.
Начальник мне говорит: у тебя ровно столько знаний, сколько может иметь стандартный самоучка.
Язык ассемблера не в счет, он бесполезен.
Но он дает мне шанс, потому что у меня есть знание иностранных языков и способность учиться.
Он работает над корпусом китайского языка и планирует расширить его на индоевропейские языки.
Постдок, сидящий рядом с ним, говорит, что ему придется изучать закономерности.
ООП неизбежна как крах империализма.
Итак, первый день.
Среда разработки – Visual Studio. Язык – С Шарп.
Моя работа — изучать программное обеспечение, над которым они начали работать десять лет назад. Синтаксис языка близок к C++, но есть много незнакомых мне методов, поэтому снова приходится искать учебник и решать упражнения.
На этот раз выбор падает на болгарский учебник, написанный основателями Телерика.
Отличная книга для тех, кто хочет изучить и язык, и алгоритмы.
Прата, кстати, описал очереди и стеки, но сделано это в неимперативном стиле: мол, давайте решим эту задачу с помощью стека.
Что это за стек и откуда он взялся – неизвестно.
Болгары описывают каждый алгоритм и поясняют, какой круг задач можно решить с его помощью.
Когда-то я читал темы на StackExchange на заре юности и часто впадал в ступор от фраз вроде «черно-красные деревья».
Сейчас у меня тоже неприятности, но я хотя бы представляю, что такое «дерево» вообще.
Болгарский учебник пришлось дополнить книгой поляка Марцина Ямро.
Чистые алгоритмы, все просто и понятно.
Выкройки: Джудит Бишоп.
Искусственный интеллект и корпус китайского языка.
Шарпа недостаточно.
Вам нужно изучить базы данных.
SQL, Справочник по Агарвалу.
Отличная книга, понятные объяснения.
За «Алгоритмами и базами данных» следует руководство Петцольда по WPF и кулинарная книга WPF. XAML легко понять, но связанные с ним привязки и MVVM по-прежнему сложны для понимания.
Год работы в области разработки искусственного интеллекта в качестве джуниора.
То есть в академической среде не существует такого понятия, как инженер-программист. Мы все научные сотрудники.
У каждого свой проект, и как он будет реализован – личное дело каждого.
Я уже упоминал, что мой начальник никогда не программировал.
Для него главное требование — интеграция с ранее написанным ПО, вот и всё.
Иногда я общаюсь с коллегами, которые раньше работали в корпоративной среде.
Судя по всему, у нас достаточно спокойная среда, все работает без проверок качества кода.
Выкройки пылятся на полке.
Я пока не знаю, хочу ли я в будущем продолжать работать программистом и искать более высокооплачиваемую работу в частной компании, но уже точно знаю, что не хочу работать в AI. Как говорят наши американские партнёры, ИИ — это на 99% хайп.
Мошенничество.
Терри Гоу, безусловно, сможет автоматизировать сборочную линию Foxconn. Работники метро, кассиры в супермаркетах и работники колл-центров тоже выйдут на мороз, ведь это алгоритмическая работа.
Однако компьютер никогда не заменит учителя, врача и инженера.
И лично я вряд ли доверю управление моей машиной роботу.
Да, забыл: я лингвист и пока бесполезен на рынке труда.
Где она, тенденция? Чему нужно научиться, чтобы оставаться на плаву? Ну, я еще раз посмотрю новости.
Ага, канадцы арестовали дочь владельца Huawei. Немцы обеспокоены уязвимостью государственных телекоммуникационных систем перед лицом китайской угрозы.
Nokia еще не достигла технологического уровня Huawei, поэтому в Германии назревает дилемма: либо подождать несколько лет, пока местные компании родят достойную замену китайской продукции, и заодно поставить точку на экономическом рывке вперед. Или модернизировать местную мобильную сеть до 5G, полагаясь исключительно на потенциально небезопасную коммунистическую продукцию.
Мне кажется, стоит начать копать в этом направлении.
C, Linux, сети, электротехника, телекоммуникационные стандарты.
Это мой следующий шаг.
Заключение.
Все вопросы, которые я начал задавать себе с того момента, как впервые открыл учебник французского языка, остались без ответа.
Можно ли развивать языковые способности или это врожденная особенность человека? Логика, абстракция и программирование — схожая проблема.
Нейрофизиологи утверждают, что левое полушарие мозга отвечает за языковые способности человека и его способность логически рассуждать.
Был ли мой мозг изначально предрасположен к аналитической деятельности или это было следствием жизненных обстоятельств? Почему я был апатичным ребенком без каких-либо интересов, а перешагнув двадцатилетний рубеж, вдруг обрел усидчивость и способность усваивать довольно деликатные объемы информации? Вопрос отнюдь не праздный, ведь кассирам супермаркетов придется как-то адаптироваться к новым условиям после массовых увольнений.
Если логическое мышление является следствием тренировки, то кассирам можно не беспокоиться.
Нынешним программистам придется побеспокоиться из-за возросшей конкуренции.
Если логическое мышление закодировано генами, то правительству придется беспокоиться, потому что кассиров придется чем-то кормить.
Ну и всевозможным борцам за равенство и равные возможности для всех тоже нужно будет как-то смириться с этой неудобной истиной.
Ну и о целях в жизни.
У читателей этой статьи, наверное, возникло чувство недоумения: вроде бы здоровый лоб, а все еще мечется подмастерьем.
Осознание того, чем я хочу заниматься, пришло после того, как мой учитель подарил мне книгу Джионо «Человек, который сажал деревья».
После этого я атаковал публикации нашего учёного Зимова в журнале Nature, в которых описывался первый геоинженерный проект в Восточной Сибири.
Также замечательна работа новосибирских зоологов, занимающихся адаптацией львов к условиям полярной зимы.
Это именно то, что мне хотелось бы сделать.
За 20 000 рублей в месяц.
Всем удачи! Теги: #Карьера в IT-индустрии #самообразование #карьера программиста #Изучение языков
-
Австроазиатские Языки
19 Oct, 24 -
Атмосфера Земли
19 Oct, 24 -
Загрузка Слоя Стадии Dwh. Часть 1
19 Oct, 24 -
Завершение Работы С Emacs Для Нетбуков
19 Oct, 24