Хоть я и выбрал своей профессией системное администрирование, программирование я люблю. Даже очень люблю.

Вот решил написать историю моего знакомства с программированием.

Школа

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

Первый-второй курсы, Borland Pascal

Все изменилось на первом курсе специальности "Прикладная математика", которую я наивно выбрал при поступлении в ВУЗ. Нас учили азам программирования в Turbo Pascal. Как-то само получилось, что к концу первого курса я делал лабораторные работы друзьям и однокурсникам. На втором курсе тенденция сохранилась.

Третий курс, Plain C

Программирования давалось мне все легче, когда на третьем курсе у нас начался курс "Архитектура ЭВМ и системное программное обеспечение", читал который Андрей Викторович Столяров. Читал он его крайне хорошо, да и пособия за его авторством весьма хороши. А еще он отличался пренебрежением к проприетарным технологиям, отказом от Windows, и крайне экспрессивной манерой преподавания. Именно он зародил во мне зерно интереса к Unix и Linux, хотя на тот момент его отказ от Windows и любовь к свободному ПО казались мне чудачеством. Сама мысль о том, что кто-то использует бесплатный и свободный Linux всерьез - казалась смешной, ведь окружал студентов сплошной Windows. Только на лабораторных работах мы увидели впервые Linux, и пытались писать код на Plain C. Ради выполнения лабораторных работ я и поставил тогда впервые Linux. Это был дистрибутив Mandariva 2007. Но речь сейчас не о Linux, а о программировании.

Итак, нас учили писать на чистом C под Linux. Преподаватель оглушительно орал на людей, некорректно форматирующих свой код, и отказывался принимать у них лабораторные работы. Именно он приучил меня всегда форматировать код. Сами задания были весьма интересными, мы реализовывали списки/стеки, учась в процессе работать с указателями, динамическим выделением памяти, и компилятором gcc. Вершиной этих заданий было написание сервера-чата с использованием сокетов, для общения с помощью telnet, либо собственноручно написанного клиента.

Четвертый-пятый курсы, C++, Delphi, PHP, SQL

После обучения C, а вместе с ним и основам "взрослого" программирования, нас начали учить основам ООП, на базе C++, но без STL. Это было просто потрясающе - абстракции, повторное использование кода, инкапсуляция. Мы реализовывали самостоятельно динамические структуры данных (одно- и дву-связные списки, векторы, деревья, стеки и очереди), используя шаблоны. Задания мы сдавали через Google Code - так нас пытались научить использовать системы контроля версий. Параллельно я "фрилансил" - выполнял задания за однокурсников, а также за студентов параллельно специальности "ЭВМ". У них задания были из компьютерной графики, на Borland С++, под DOS. Требовалось реализовывать общеизвестные алгоритмы закраски/затенения/отсечения, и с их помощью рисовать фигуры в трехмерном пространстве, для чего мной был написан свой "движок", позволявший мне отрисовывать любые фигуры, задавая их в виде координат углов полигонов и нормалей к ним. Это было интересно и весьма познавательно, обучало не только алгоритмам и структурам данных, но и подходам к разработке.

Ну а потом началось знакомство с PHP+MySQL, реализация чего-то вроде справочной системы/магазина, и после C/C++ это было совсем уныло... Я до сих пор воспринимаю PHP только как скриптовый язык для Web, с ужасом наблюдая все старания прикрутить к нему ООП.

Конечно, приходилось писать и на VBA, и на Delphi, но никакого нового опыта это мне не давало.

После обучения

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

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

Знакомство с Ruby через Chef

Развиваясь как сисадмин, я пришел к использованию систем управления конфигурациями. Начав работу с Chef, я параллельно стал изучать и Ruby, на котором Chef написан. Конечно, после C и C++ обилие синтаксического сахара и скорость разработки вскружили мне голову, однако довольно скоро я прочувствовал и все минусы динамической типизации. Заодно во мне нарастало недовольство ООП, которое через год вылилось в изучение Haskell. Но сам язык Ruby мне понравился, и потому я его с удовольствием использую и сейчас.

Haskell и функциональное программирование

Намучившись с изменяемым состоянием объектов, я обратился к чистому функциональному языку Haskell. Начав его изучение с чудесной книги Learn you a Haskell for Great Good, я довольно быстро осознал достоинства функционального подхода к написанию программ. Хоть я и не смог найти применения Хаскелю в реальной жизни (а точнее, для меня оказалось слишком сложно держать в голове столь большой и сложный язык, при том, что я не программист, и программирую далеко не каждый день), я стараюсь использовать основные принципы функционального подхода при разработке на других языках программирования.

Python и Ansible

Наевшись Chef-ом, я начал использовать Ansible, и, конечно, мне понадобилось писать свои модули. Поскольку нативные модули, которые могут принять в апстрим, для Ansible можно писать только на Python, пришлось использовать его. К счастью, Python крайне легко читается, и мой опыт с Ruby не прошел впустую, так что начать писать модули для Ansible оказалось очень просто. Ну а осознав преимущества Питона (он есть в каждом дистрибутиве по-умолчанию, очень легко читается и пишется), я начал использовать его как второй язык для написания различных полезных утилит. Первым языком для этого все равно остается Shell, но для более сложных вещей я использую Python.

Заключение

Итак, сейчас в моей копилке целая охапка языков, из которых использую я в основном Shell и Python. Такой выбор, конечно же, во многом определен особенностями работы системного администратора, но выбор языка все равно остается за мной. Что самое приятное - программирование осталось моим хобби, и я получаю от него огромное удовольствие.


Comments

comments powered by Disqus