[КАК Я УЧИЛСЯ ПРОГРАММИРОВАТЬ] - школа и универ | часть 0
Привет!
Впервые на должности «инженер-программист» я начал работать в июле 2000 года в новосозданном благотворительном фонде «Солнечный Луч» в городе Евпатории. Устроился на эту работу больше благодаря стечению обстоятельств, а не образованию, опыту или каким-то особым талантам. В то время, я учился на заочке в Макеевском строительном институте по специальности ПГС (промышленное и гражданское строительство) и имел к программированию примерно такое же отношение, как морская свинка к морю и свиньям.
За 15 лет я прошел долгий путь, сменил 7 компаний в трех разных городах и двух странах. За это время моя зарплата выросла с 80 до примерно 10000 долларов в месяц. Сейчас у меня достаточно свободного времени, чтобы подробно рассказать эту историю, надеюсь, читать это будет интересно. А мне доставит удовольствие об этом написать. Таким образом, мы все станем чуть-чуть счастливее :)
История получается довольно длинной, поэтому поделю ее на несколько постов. Итак, начнем с самого начала, а именно со школы.
Школа
Я окончил школу в 1995 году. Мне повезло учиться в одной из лучших школ города в физико-математическом классе. В старших классах у нас был предмет, называемый «Информатика», который тогда только-только начали внедрять в школы с появлением первых доступных персоналок. Для большинства это очевидно, но на всякий случай напомню — компьютеров дома ни у кого из нас не было, не говоря уже об интернет или смартфонах с покемонами. А было у нас в компьютерном классе вот такое чудо:
фото из Wikipedia — у наших была другая клавиатура
Называлось оно БК-0010 и, если интересно, подробнее о них можно почитать здесь. В нашей версии эти машинки были со встроенным интерпретатором Basic и механической клавиатурой, операционной системы на них не было. После загрузки БКашка сразу открывала окно интерпретатора, в котором можно было набирать программы. Куда и как сохранялись эти программы я, откровенно говоря, уже и не помню, бродит только какая-то мысль о магнитофонных кассетах.
Еще в классе стояло несколько машин Поиск 1 и один-единственный Поиск 2. Последний имеет два дисковода и загружает операционную систему MS-DOS с дискеты, на нем можно было писать и запускать программы на различных языках, у нас в школе был Pascal. Машины Поиск 1 у нас загружались по локальной сети, с Поиска 2. Как работают такие машинки, можно посмотреть на этом видео (странные звуки в фоне издает дисковод, когда читает дискету):
Единственный Поиск 2 считался у нас «учительской» машиной, но так как рабочих мест в классе на всех не хватало, то с ней нам тоже разрешали работать. Для этого надо было иметь хорошую репутацию у учителя информатики и свои дискеты для сохранения программ. Дискеты тогда купить было не так-то просто, помнится мне с товарищем пришлось ехать из Евпатории в Симферополь на электричке, а потом добираться до тамошнего радио рынка на троллейбусе, в общем, заняло это целый день. Отличное было приключение и эта пачка дискет до сих пор лежит где-то в шкафу в квартире родителей.
На уроках в школе нас учили самым основам программирования: переменные, арифметические и логические операции, операторы условия и цикла, простейшие инструкции вроде print и goto. Как я уже упоминал, машин в классе на всех не хватало, поэтому мы вынужденно практиковали то, что через много лет назовут парным программированием. За одним компьютером обычно работали два-три человека — один пишет код, а остальные дают ценные советы. Еще были уроки в классе, без компьютеров, когда учитель объяснял нам теорию и мы решали задачки в тетрадках, в основном в виде блок-схем.
Надо признаться, что в школе программирование меня интересовало постольку поскольку и поэтому похвастаться какими-то достижениями я не могу. В старших классах я больше налегал на физику с математикой.
Как ни странно это может звучать, но своей карьерой в ИТ, я во многом обязан нашему учителю физики — Александру Павловичу Кузьмицкому. В нашей школе он занимался со всеми, кто хотел участвовать в олимпиадах по физике или в деятельности Малой Академии Наук Крыма. Александр Павлович тратил огромное количество времени и сил на занятия с нами в свое свободное время и плюс к этому регулярно возил команды олимпиады и различные конкурсы, причем все это не стоило нам ни копейки.
Именно Александр Павлович научил меня одной очень важной для программиста вещи — навыку создавать в уме абстрактные модели природных явлений и осознавать ограничения присущие таким моделям. Разработчику неизбежно приходится разбираться в различных предметных областях, сегодня это может быть бухгалтерия, завтра — процесс распределения акций при выходе компании на IPO, послезавтра — принятие в работу нового клиента большой юрфирмой в США. Так вот, без осознанного или не осознанного умения смоделировать в голове, скажем, финансовый процесс, невозможно ни написать корректный код, ни протестировать этот код, ни исправить в нем ошибку. В общем, умение работать с моделями это, пожалуй, самое важное, что я вынес из обучения в школе.
Универ
После школы я, как призер Всеукраинских школьных олимпиад по физике, поступил на физический факультет Киевского Университета, на кафедру квантовой теории поля. В старших классах у меня было огромное желание стать ученным и заниматься теоретической физикой. К сожалению, часто бывает так, что подростковые мечты рассыпаются при первом столкновении с реальностью. В общем, серьезно думать о научной карьере я прекратил примерно к концу второго курса и универ так и не закончил, перевелся на заочку в другой институт, для того чтобы получить хоть какой-то диплом.
Вернемся к программированию. Когда я пришел на первый курс программирование преподавалось на языке Fortran и писать код нужно было на ЕС ЭВМ. Эта машина к тому времени уже была реликтом из прошлого, она занимала несколько комнат и имела с десяток терминалов, на которых нам предлагалось проходить практику.
Персональные компьютеры в то время уже не являлись редкостью и поэтому народ относился к ЕС-ке без особого восторга. Была еще возможность работать на машинах Искра.
фото из wikipedia — у нас, к счастью, были машины с полным комплектом клавиш
Искра была уже практически полноценным компьютером даже по современным меркам. Она имела 286-й процессор, жесткий диск, трехдюймовый дисковод и операционку MS-DOS. Была только одна загвоздка, компилятора Fortran на них не было. Желающим преподаватель предоставлял возможность самостоятельно освоить язык C (напомню, все лекции у нас были на Fortran) и делать лабораторки в досовской среде программирования Turbo C. Для меня соблазн работать на «нормальной» машине оказался достаточно велик, чтобы самостоятельно освоить основы еще одного языка программирования.
На языке C, страстно желая получить экзамен автоматом, я написал свою первую «большую» программу. Она запускалась из командной строки, принимая на вход алгебраическое выражение с несколькими переменными, запрашивала у пользователя значения этих переменных и выдавала на экран результат вычислений. Алгебраические выражения выглядели примерно вот так sin(x)*(x + y^3)
, в них можно было использовать до десяти аргументов, стандартные операторы, скобки и небольшой набор предопределенных функций. По сути, эта программа была примитивными интерпретатором, а синтаксис, использовавшийся для определения функций, моим первым опытом в создании DSL, хотя о существовании такого понятия я в то время даже не подозревал.
Желаемый автомат я получил, правда не знаю, что думал преподаватель глядя на мой код. К счастью, он решил держать свое мнение при себе, по всей видимости, желая пощадить мое самолюбие. Всего через несколько лет я открыл для себя драконью книгу и гордость моя по поводу первой программы изрядно поубавилась, хотя специалистом по разработке компиляторов я так и не стал.
В любом случае мои усилия на изучения языка С и этого создания интерпретатора функций окупились многократно, ведь не будь этой программы вряд ли бы я смог воспользоваться представившимся мне шансом на первую работу. О том как я впервые начал зарабатывать на жизнь программированием, я расскажу в следующем посте.
Замечу, что текст получается несколько сумбурным, так как, с одной стороны, хочется уложиться в разумный объем, ведь все-таки это — не книга, а с другой — постоянно вспоминаются всякие существенные детали. В общем, если что-то непонятно или возникнут вопросы, пожалуйста, задавайте их в комментариях, постараюсь ответить.
Спасибо за внимание.
Если вам понравился этот текст, не забудьте проголосовать и подписаться на мой блог. Заранее благодарен вам за поддержку.