Дисклеймер
Настоятельно призываю не воспринимать все нижесказанное как уникальное, исключительное и непреложное. Все высказывания и тезисы являются моим личным предпочтением и видением проблемной области. Любое из приведенных мной сведений, выдвинутых аргументов, выводов и гипотез может быть подвергнуто сомнению, корректировке, опровержению и не является научной работой или прямой инструкцией к действию.
Обоснование
О том, что неплохо бы пройти курсы молодого программиста, и начать зарабатывать в айти, что, мол, никогда не поздно, и стоит только захотеть, нынче трубят из каждого утюга. Появилось неимоверное количество всяческих онлайн и офлайн курсов, преподавателей, учебных центров, и даже академий, которые готовы сделать из вас программиста за любой бюджет и в любой срок - хоть бесплатно, хоть за день. При этом тут же обещается высокооплачиваемая работа как минимум в Mail.ru или Газпроме.
Поспешу огорчить, столько программистов на самом деле никому не надо - специалистов из вузов выпускается достаточное количество. Другое дело, что сегодня под "программистом" стали понимать не совсем то что лет даже десять назад. Вернее, скажем так, понятие сильно расширилось. Сейчас программист это чуть ли не всякий, кто помимо смартфона и планшета использует на работе старый добрый ПК. Ну и плюс прошел хотя бы один онлайн курс или самостоятельно посмотрел три лекции в интернете.
Надо сказать, что такая трансформация понятия несколько несправедлива по отношению к настоящим программистам - тем кто отучился энное количество лет и получил некую аккредитацию в виде диплома. С другой стороны это требование времени - когда-то ведь и просто использование компьютера как такового было скорее привилегией, чем ежедневной необходимостью. Специалист все еще должен обладать определенным набором знаний и навыков что бы называться профессионалом и получать за свой труд зарплату. Это примерно как с автолюбителями и шоферами профессионалами - вроде как все теперь умеют рулить, а вот "крутить баранку" это далеко не для каждого.
В нашей стране есть еще такое слово индикатор - "инженер", которое позволяет отличить одно от другого. Пусть "инженер-программист" это дипломированный специалист - профи, а все остальные просто "программисты" - те которым программирование нужно не в качестве основной деятельности, а бонусом к другой специальности. К слову, дипломированные выпускники не всегда становятся в последствии именно профессионалами.
А вот что касается программирования в качестве дополнительного инструмента, то, действительно, время уже требует того, что бы, как минимум, азы знал если не каждый, то тот кто часто работает с какими-то цифрами и данными уже точно. Практически все отрасли экономики нынче не обходятся без привлечения сложных вычислений и алгоритмов. Здесь как-раз армия таких "автолюбителей", которые бы умели частично решать свои рутинные задачи при помощи компьютера и программ к ним без привлечения узких специалистов, была бы сильно к месту. Ни кто ведь сейчас не видит проблем в связи с тем, что бы приехать на работу на своем авто, тогда как можно было бы сидеть и требовать служебный транспорт с профессиональным водителем.
Итак, программист - это нынче просто слово, обозначающее, что некто программирует. Не суть важно на чем и как. И когда вам говорят, что мы обучим вас программированию, то имеют ввиду не специализацию, а нечто вспомогательное. Автошколы не предлагают вам курсы механиков-водителей общественного транспорта или гонщиков-каскадеров - вы научитесь сносно водить свой легковой автомобиль в рамках общих правил дорожного движения. Более того, если вы использовали MS Excel для суммирования или для автоматического заполнения ячеек - то вы уже программировали компьютер - а значит вы уже и есть самый настоящий программист!
Проще простого
В нашей стране в школьной общеобразовательной программе есть предмет "Информатика". В рамках этого предмета уже даются непосредственно самые азы программирования, и каждый из нас в принципе знаком с ключевыми понятиями. Другое дело, что программа школьного курса неким образом синхронизирована с другими предметами - с алгеброй, геометрией, физикой и прочими. И поэтому выглядит она несколько отвлеченно от реальности - эдакий сферический паскаль в вакууме. Создается такое, довольно превратное, понимание, что программирование нужно только для того, чтобы решать задачки по программированию, которые потом в жизни, ну, действительно, вряд ли когда-то понадобятся.
Тем не менее, добровольно ли принудительно ли, какие-то знания все-таки оседают в голове и вспомнить их потом все-таки значительно легче чем понять и осознать с нуля. Поэтому мы не будем останавливаться на основополагающих элементах как определение целого числа, строки, массива, или на таких понятиях как логическое условие, цикл или функция. (Хотя на функциях надо будет остановиться подробнее, и не раз.)
С чего следует начинать? Курсы предлагают всякие направления и языки программирования. Наиболее популярными сегодня являются: Python - даже в школах его вводят повсеместно; Java - в качестве создания программ для платформы Android; JavaScript - для верстки веб-страничек (не путать с Java); PHP - уже для самих сайтов; ну и прочие специфические для платформ Microsoft, Apple, куда же без 1С. Однако, все они подразумевают изучение определенного языка программирования, что для многих сразу становится стоп-фактором. Хотя порог входа для того же Python даже ниже чем в Pascal или Basic это сразу для многих страшно и ну его нафиг.
Я же предлагаю начать не с, собственно, программирования, а с того зачем оно вообще нужно. Что бы в итоге человек сам понял, что язык программирования ему нужен, какой именно, а главное зачем. На самом деле, знание самого языка программирования или платформы не является необходимым условием и самодостаточной причиной. Важна алгоритмическая основа - способ решения той или иной реальной задачи, выраженный затем на каком-нибудь языке, не так уж важно на каком именно, хоть на русском.
Поэтому предлагаю остановиться для начала на такой общедоступной и понятной всем программе как Excel. И прямо тут же войду в противоречие с собственным предложением не начинать с конкретного языка или платформы. Так вот, на самом деле я предлагаю начать не именно с Microsoft Excel, а вообще с электронных таблиц. Это такой класс программ, которые предназначены для манипуляций над числами. Обращаю ваше пристальное внимание - не над данными вообще, а именно над числами. Для манипуляций над данными в общем смысле этого слова занимается другой класс программ, называемых СУБД - системы управления базами данных. Запомните это, к этому мы еще вернемся.
Электронных таблиц, помимо Excel, существует премногое количество. Это и серия программ с открытым исходным кодом, входящих в состав пакетов Libre/Free/OpenOffice. Это и части популярных нынче облачных пакетов Google Workspace, Office 365 того же Microsoft. И даже российские МойОфис и Р7-Офис. Работают они, с точки зрения пользователя, плюс-минус одинаково, и, поэтому, для простоты, предлагаю называть их все в дальнейшем "Эксельками". Так вот начнем с эксельки.
Hello world!
Любая книга, курс, программа обучения начинается с написания простейшей программы, выводящей так или иначе строку "Hello world!" - чем и займемся. Здесь и далее в качестве иллюстраций я буду использовать вариант LibreOffice Calc, а вы можете открыть любую доступную и близкую вам программу, в том числе Microsoft Excel. Примеры кода программ в основном будут даны либо на языке Python (далее по тексту "питон"), либо JavaScript ("яваскрипт") лишь для демонстрации принципа - пусть вас это не смущает.
Нужно встать курсором на ячейку B1 и нажать '='. Далее можно либо ввести имя ячейки для ввода данных, например, 'A1' или ткнуть на нее мышью. Должно получиться следующее:
Жмем ввод. А теперь - магия. Введите в поле ввода, т.е. в ячейку A1 строку 'Hello world!' и нажмите ввод.
Вуаля! На самом деле я не издеваюсь. Это что ни на есть самая настоящая программа. У нас есть входные данные, есть некая последовательность действий над ними и вывод результата. Да, пока у этой последовательности лишь одно действие, но оно все же есть. Что вы сделали с точки зрения программирования: получилось даже чуть больше чем элементарная 'Hello world!' программа. Например в питоне это выглядело бы так.
>>> a1 = input()
Hello world!
>>> b1 = a1
>>> print(b1)
Hello world!
Хотя экселька вам этого не показывает, но делает она дословно то же самое. По сути электронная таблица для вашего компьютера это всего лишь набор переменных A1, ..., AN, ... до правого нижнего конца. Технически, разумеется, это все внутри устроено чуть сложнее - электронная таблица присваивает переменным не значения, а формулы вычисления, и уже при изменении данных пересчитывает их значения, но принцип, думаю, понятен.
Надо при этом понимать, что макросы это несколько другое понятие. Макросы - это тоже программы, но, если можно так выразиться, более высокого порядка. Макросами программируются манипуляции с самой программой: действия пользователя, нажатия, перемещение, ввод, ну и прочее. К ним мы подойдем позднее.
Что мы еще умеем делать в эксельке? Чуть более продвинутым примером является автозаполнение ячеек. Введите в ячейки A1, A2 значения '1' и '2' соответственно, выделите обе ячейки и потащите за квадратик в углу вниз, скажем, до 12-й строки. Если все сделано верно, то до ячейки A12 программа сама должна заполнить их числами от 1 до 12.
Заглянем под капот. Как вы уже догадались экселька для вас выполнила простейшей цикл:
>>> for i in range(1, 12, 1):
... print(i)
Где '1, 12' границы диапазона, а третья '1' - шаг. На самом деле программа дополнительно еще и вычислила автоматически шаг когда вы выбрали две ячейки для действия. Если вписать в A1 и A2, например, '1' и '3', то шаг будет равен 2 и ячейки соответственно заполнятся нечетными числами.
>>> step = 2
>>> for i in range(1, 12*step, step):
... print(i)
Ну или совсем корректно:
>>> A1 = input()
1
>>> A2 = input()
3
>>> step = int(A2) - int(A1)
>>> end = 12
>>> for i in range(3, end*step, step):
... exec('A' + str(i) + ' = ' + str(i))
... print(eval('A' + str(i)))
На выражения 'exec' и 'eval' пока не стоит заострять внимание, но если кто-то догадался, это то как работает ячейка в таблице в действительности.
Пока вы используете только мышь и цифровую панель клавиатуры кажется, что это ни какое не программирование. Вы не вводите хитрые команды, вы не придумываете имена переменных и прочее. Но заставляя машину что-то считать и выводить результаты за вас, вы непосредственно инструктируете ее, тем самым выполняя некий алгоритм. Что это как не программирование в чистом виде? И, обращаю ваше внимание, для этого не понадобился какой-то язык вообще. Да, машина, а конкретно экселька, поняла вас и додумала конкретные команды понятные ей самостоятельно.
Более того, программируя на любом языке уровнем выше чем машинный код вы всегда предоставляете какой-то программе-посреднику транслировать ваши инструкции. В случае Visual Basic и Python это, например, интерпретатор. В других случаях это компилятор. В данном же случае это ваша экселька. А те хитрые, на первый взгляд инструкции и синтаксис, всего лишь удобный способ объяснить машине чего вы от нее хотите, так что бы при этом еще и было понятно другим людям - тоже программистам.
В итоге, я хочу прийти с вами вместе к более широкому пониманию программирования, чем знание какого-то конкретного языка. И если не в эксельке, то на чем-то другом, например, построить и обучить очень модную нынче нейронную сеть. Надеюсь, дальше вы поймете, что и это не так страшно как может показаться. У меня нет какого-то четкого плана, и если вы снабдите меня обратной связью, то вместе мы найдем тот тонкий подход, когда учиться программированию действительно будет легко и понятно. И в итоге, вооружившись таким мощным инструментом как программирование, вы сможете куда быстрее и больше достичь в вашей области знаний.
Продолжение следует...