
Поговорим о программировании.
Для начала стоить отметить один момент — я не программист. Поэтому все, что будет озвучено далее, ни в целом, ни в частностях не стоит воспринимать как слова программиста — ни на секунду. Я на это не претендую, не имею права. Думаю, это логично.
Немного о себе. Говоря откровенно, были в моей жизни предпосылки к выбору этой профессии. Но, как говорят в таких случаях, жизнь распорядилась иначе — программистом в нормальном смысле слова я не стал. Оно, возможно, к лучшему, так как я не уверен, что моё участие обогатило бы данную область человеческих знаний. Другими словами, у меня есть основания сомневаться в своей потенциальной полезности.
Сейчас программирование — это океан языков, технологий и всего того, что называется computer science («информатика», «компьютерная наука»). Парадигмы, алгоритмы, модели, операционные системы, фреймворки и прочее и прочее — короче, куча мала. И развивается эта «куча» семимильными шагами. А там еще и математика (это важно — во многих случаях математику обойти не получится никак).
Одна из важнейших качеств программиста на сегодняшний день — быть актуальным. То есть по мере собственных сил развиваться вместе с развитием computer science и технологий. Поэтому чтобы только оставаться на месте современный программист вынужден бежать со всех ног, а чтобы развиваться — бежать вдвое быстрее 🙂 К сожалению, одних способностей для этого мало, нужна ещё и мотивация. А иногда и дисциплинированность.
Важно отметить, что хотя мозг у людей за редким исключением устроен одинаково — состоит из одних и тех же тканей, клеток и жидкостей, «ум» работает немного по-разному. Это касается, в частности, разделения на гуманитарные и технические «наклонности» человека. Разделения, впрочем, весьма условного. Это я говорю к тому, что не каждому человеку будет интересно заниматься программированием, не каждому это нужно. Кое-кто с этим даже не справится (хотя может быть при этом, например, гениальным художником, скульптором, поэтом). С другой стороны, некоторые выдающиеся люди достигают «многого во многом», достаточно упомянуть Михаила Васильевича Ломоносова.
Если заглянуть ненадолго в собственное прошлое, то можно сказать, что в отдельных моментах мне повезло. Везение это выразилось в знакомстве с языками программирования. Само собой, в непростые школьные годы. Интересно, что сначала каких-то выдающихся способностей в освоении «компьютерной науки» я не проявлял — даже наоборот. Тот самый BASIC, он же «Бейск», я совершенно не понимал и «не осилил». И на оценки приходилось «списывать у соседа». Да и собственно информатика не была мне особенно интересна. Кстати, если мне память не изменяет, наши школьные компьютеры тогда представляли из себя толстенькую такую клавиатуру (это и был системный блок) с разъемами-коннекторами, в которые вставлялись картриджи. С этих картриджей загружалась операционная система и другое ПО, в том числе и Бейсик. Немного позже я таки попал в нормальный компьютерный класс с нормальными же объединенными в сеть рабочими станциями на 486-м процессоре (хотя и без жестких дисков), что в то время было очень даже, с MS-DOS, Norton Commander и прочими прелестями… Но об этом как раз далее.
А далее оказалось, что языки программирования не обязательно должны быть уродливыми (и они не обязательно должны быть похожими на BASIC). Оказалось, что существует замечательный язык программирования Pascal («Паскаль»). И интегрированная среда разработки Turbo Pascal от фирмы Borland. Можно утверждать, что для обучения программированию лучших инструментов на тот момент не существовало.
После знакомства с этими инструментами меня буквально «прорвало». Это действительно был прорыв. Вероятно, для понимания того, как работают программы и как их писать, мне не хватало важного свойства в языке — структурности (Паскаль — язык структурного программирования). Решать учебные задачи, в том числе и довольно сложные, стало интересно и приятно. А еще в нем можно было работать с графикой, использовать указатели и даже писать ассемблерные вставки (что давало возможность делать всякие очень интересные вещи). И конечно же — реализация объектно-ориентированного подхода. Словом, очень и очень. Особенно для старта в программировании.
Жизненный опыт дает основания утверждать, что ничего не бывает само по себе и по-отдельности. Это справедливо и в случае моего знакомства с компьютерами, языками программирования и самим программированием. В основе первого «положительного результата», вероятно, лежит ряд обстоятельств: хороший компьютерный класс, «удачно» и своевременно подвернувшийся Паскаль, какая-никакая собственная моя любознательность… И еще один, крайне важный момент. А именно — человек, который этот компьютерный класс организовал и, так сказать, «двигал» (там же и его же усилиями был организован компьютерный клуб, где можно было заниматься программированием в свободное от школьной программы время и сверх него). Другими словами, мне чертовски повезло с преподавателем в данном направлении (как чертовски же не повезло в некоторых других). Мне иногда кажется, что если бы не моя собственная лень, разгильдяйство и прочие нехорошие качества, я мог бы стать (и быть сейчас) неплохим программистом. Возможно, в значительной степени благодаря этому человеку, его знаниям (да и личным качествам), его участию в процессе обучения я проникся восхищением к языкам программирования, написанию кода и прочей «компьютерной магии» (да-да, тогда это было почти «волшебство», было в этом что-то такое, особенное…). Сейчас любовь к computer science практически сошла на нет (в силу разных обстоятельств), но уважение к данному направлению осталось.
Словом, я просто обязан сказать спасибо человеку, который познакомил меня с программированием, а также обозначил кое-какие важные ориентиры (то, к чему стоит стремиться, и то, чего лучше не делать…). Кстати — его зовут Вячеслав Валерьевич Копейкин. Замечательный преподаватель и просто очень особенный человек. И я говорю ему спасибо за участие, пусть и недолгое, в моем образовании. Говорю спасибо здесь и обязательно поблагодарю при личной встрече, если такая встреча вдруг случится.
Потом был университет, учебные задачи и лабораторные работы на языках C («Си») и Assembler («Ассемблер»), которые тоже выполнялись несложно и с интересом. Про такие понятия, как типы компьютеров, архитектуры процессоров, операционные системы и многое другое рассказывать здесь не особенно интересно, поэтому ограничусь упоминанием, что они просто есть. Что было потом — долгий период времени, в течение которого «брать в руки» нормальные языки программирования (не считая краткого знакомства с Verilog/VHDL) мне, увы, не удавалось. Было, как говорится, не до этого.
Важно знать — чтобы быть нормальным программистом, вероятно, нужно заниматься этим ежедневно. В крайнем случае — через день 🙂 Здесь я имею в виду то обстоятельство, что информационные технологии развиваются не просто стремительно, а безудержно, лавинообразно. За пару десятков лет отсутствия «в теме» разрыв с реальностью в данной профессии превращается в пропасть — сейчас в этой самой теме туча слов/понятий, которые я не знаю и не понимаю. Поэтому настоящим программистом мне, по-видимому, уже не стать. Разве что произойдет что-то из ряда вон выходящее «с разворотом на 180 градусов против часовой стрелки». Но такая возможность из разряда маловероятных, прошу прощения за каламбур. Или же подходить к проблеме «с другой стороны» — писать программы не будучи программистом и не стремясь к этому.
Не так давно мне понадобился «инструмент», с помощью которого я мог бы решать некоторые практические задачи по обработке информации. После недолгого изучения вопроса и недолгих же поисков такой инструмент нашелся — это интерпретируемый язык программирования Python («Пайтон», он же «Питон»). Отличный, надо сказать, инструмент. Для моей проблематики. Образно говоря, в нем «всё есть» и он просто «работает» — берешь и делаешь то, что тебе нужно, причем без всяких «выкрутасов». Несмотря на «гуманитарные дефекты» собственного мозга и длительное отсутствие практики написания программ (однако никто не знает, как бы у меня это получилось, если бы практики ранее не было совсем… и я не знаю).
Это просто другой — альтернативный — подход. Мне необходимо решить задачу — я беру удобный для решения этой задачи инструмент. Вот если бы я захотел научиться программированию и устроиться на работу программистом, тогда да — у меня возникла бы настоящая проблема 🙂 А так можно получить нужный результат и не комплексовать при этом по поводу своей некомпетентности. С другой стороны — если быть честным — я не могу утверждать, что голова у меня совсем уж «пустая». Кое-что, вероятно, там «завалялось», что помогает мне сейчас. Пусть и с горем пополам, но помогает.
Много сейчас есть нового и интересного, в том числе среди языков программирования: Scala, Kotlin, Elixir, Rust… (программисты, думаю, меня поймут). Да и решение классических алгоритмов на замечательном языке C — прекрасная гимнастика для мозга. Но для моих задач отлично подошел Python, причем «подошел» практически сразу. Пока так. О прочем — как-нибудь, возможно, в другой раз…