Вспомнилось выступление на тему возникшего здесь "трэша" (и про убийц с менеджерами, и про С++ и т.д.), попробую выделить ключевое (однако, вряд ли получится кратко):
Роберт Мартин: "Будущее программирования" / Robert Martin: "The Future of Programming"
Роберт Мартин - автор книг "Чистый код", "Чистая архитектура", ряда других книг по разработке ПО, один из авторов Agile-манифеста...
[...]
В прошлое, чтобы понять настоящее
[...]
В том же году Алан Тьюринг пишет отчет о проделанной работе, в котором есть примечательные слова: "Нам потребуется большое количество способных математиков, потому что в будущем, вероятно, будет очень много подобной работы". И далее в этом тексте есть слова: "Одной из сложностей, с которой нам предстоит столкнуться, будет поддержание должной дисциплины, чтобы не сбиться с пути и не потерять то, что мы делаем".
Эти примечательные слова были сказаны им буквально после того как он написал первые несколько тысяч строк программного кода. Уже тогда он понимал проблему, с которой нам предстоит столкнуться на протяжении следующих 60-ти лет. Интересно, как он смог догадаться об этом? ))) Способные математики. Большое их число. И должная дисциплина.
[...]
Таким образом количество компьютеров в 1960 году стало порядка 100. От 100 до 900, но порядок был таким. А что можно сказать о программистах? Их было порядка 1000. Потому что в то время на один компьютер приходилось 10-15 программистов.
У нас не было операционных систем, у нас не было функциональных библиотек и фреймворков. Если какой-либо код выполнялся на этих машинах это был код, написанный нами. Чтобы писать такое количество кода нам нужно было много программистов.
Кто же становился программистами в то время? Программистов набирали из инженеров, ученых и математиков. У них были ученые степени. Они имели опыт в своей области и они редко были молоды. Обычно их возраст был 30, 40 , 50 лет. Это были зрелые люди. Они понимали что такое проект, что такое расписание и сроки, они не нуждались в куче менеджмента над собой. Это были люди, которым компании доверяли.
[...]
И к 1965 году количество компьютеров было уже порядка 10 000 , а количество программистов порядка 100 000. Скорее всего их было 200 000 или 300 000. А ведь прошло меньше 20 лет с тех пор, как Тьюринг написал первую строчку кода.
Откуда пришли все эти люди? Точно не из школ. По крайней мере не из компьютерных школ и университетов. Тогда не было компьютерных учебных программ. Инженеров, ученых и математиков уже не хватало и компании собирали лучшие умы там, где могли их найти: бухгалтеры, проектировщики. Среди тех кто имел хоть какой-то технический бэкграунд и мог думать так как думают программисты. И если компании им достаточно доверяли, они могли доверить им и программирование. Происходило кадровое перемещение с их прежних должностей на позиции программистов.
И вновь эти люди были зрелыми, они уже давно были в бизнесе, они понимали бизнес, менеджмент, планирование, дедлайны. Это были не 22-летние дети, вышедшие из школы. И хотя они не были математиками, они были опытными, дисциплинированными профессионалами. И мне кажется Тьюринг одобрил бы это: они и не были математиками, но у них по крайней мере была дисциплина.
[...]
1956 год. Появился LISP. Он был создан Джоном Маккарти для работ по искусственному интеллекту. И этот язык до сих пор отказывается умирать. Мы пытаемся убить его раз за разом, он он возвращается. Я бьюсь об заклад, мы все закончим тем, что будем программировать на LISP )) Потому что остальные языки умирают, а LISP всё время выживает.
И к слову сказать это первый язык для функционального программирования. А ведь мы только недавно начали понимать всю важность функционального программирования. Много лет спустя.
...
Это также был год, когда был создан первый объектно-ориентированный язык Simula-67. Он был создан Оле-Йоханом Далем и Кристеном Нюгором в городе Осло. Мы уже имели функциональное программирование и теперь получили объектно ориентированное программирование.
...
А в 1968 году Дейкстра написал свою знаменитую публикацию, где была обозначена вредоносность оператора GoTo и это было начало революции структурного программирования.
За эти 10 лет мы сделали три главных шага в нашей индустрии - функциональное, структурное и объектно-ориентированное программирование. Они все были сделаны в это время, этими профессионалами.
А вот и Кен Томпсон и Деннис Ритчи. Тот же самый 1968 год. Мы всё ещё в 22 годах от появления первых строк кода. Эти ребята сидят в подвале AT&T и создают язык С и Unix. И это были дисциплинированные математики.
[...]
1970 год. Компания DEC (Digital Equipment Corporation) создает компьютер PDP8 и это был не единственный мини-компьютер того времени. Это была эра, когда все выпускали мини-компьютеры. 50 000 этих PDP8 было лишь вершиной айсберга.
Количество компьютеров было порядка 100 000 , а количество программистов порядка 1 000 000. Миллионы программистов спустя 25 лет с первых строк кода. Снова произошло десятикратное увеличение количества программистов за 5 лет.
Кто были все эти люди?
...
К 1970 году десятки тысяч выпускников CS и EE (Сomputer Science и Electrical Engineering) начали заканчивать школы. Компьютерные курсы можно было пройти в колледжах. В среде выпускников попасть в индустрию ИТ считалось престижным. Конечно в этом они были правы. И эти десятки тысяч выпускников, устремившиеся в ИТ имели кое-что общее. Мы все были юными. И почти все мы были мужчинами. Именно здесь произошел сдвиг. Доминирование мужчин в ИТ началось здесь. Я помню себя в ВУЗе, как я прикасался к компьютеру, телетайпу, подключенному к компьютеру в Технологическом Институте. Почти все кто был рядом были парнями, всего одна или две девчонки.
Когда я пришел на свою первую работу у нас было около 24 программистов и половина из них были женщинами. Это было то место, где я программировал на Коболе. А 10 лет спустя у моего работодателя было 50 программистов. И всего три женщины. Я даже помню их имена, чего не скажешь о всех мужчинах из тех пяти десятков. Подавляющее большинство из нас было мужчинами. Точнее говоря мальчиками.
Чтобы не быть голословным, вот графики, которые впоследствии стали известными. Это количество женщин в различных областях науки. Оранжевая линия - это количество женщин в компьютерных науках. Что-то странное произошло, не так ли? Заметьте этот пик и резкое падение в начале 80-ых.
...
Бизнес нуждался в программистах. И хотя молодым парням не хватало дисциплины, но у них была энергия. Они могли работать сумасшедшее количество часов в день над поставленной задачей. Они были гиперсфокусированы, правда иногда на неправильных вещах )) И они были дёшевы.
Моя первая работа как программиста давала всего лишь 6 900 долларов в год, 570 в месяц. Но для возраста 19 лет это была куча денег. Я даже мог купить машину. Я даже мог съехать от родителей. Это было круто.
Ещё раз. До этого времени программисты нанимались из опытных сотрудников из других областей. Они не нуждались в куче менеджеров или выстраивании процессов. Они сами знали как управлять своим временем, коммуницировать, понимали что такое договорённости, они знали всё это. Они делали волшебные вещи - виртуальную память операционной системы, покорили Луну, создали ООП, структурное и функциональное программирование, Юникс, язык Си и остальное. Они определенно знали как добиваться больших результатов.
Какой подход к разработке они использовали?
Если бы мы отправились назад и понаблюдали за ними, то узнали бы в их процессе некую разновидность "Agile". Как говорят, Agile - это то, что дисциплинированные профессионалы используют в дикой природе ))
Мы знаем что разработчики программ для Шаттла работали итерациями длинной в 6 недель. Да, по нынешним меркам это долго, но всё же это интересный факт. Они закрывали каждый цикл разработки каждые 6 недель. Мы знаем что программисты для марсианской капсулы писали юнит-тесты на разработанные модули с утра и добивались их прохождения к вечеру. Это было чем-то похоже на TDD.
Но толпы переполненных тестостероном молодых юнцов нуждались в дисциплине навязанной сверху. И что для этого могло быть лучше, чем водопадный процесс в разработке?
В 1970 году Уинстон Ройс разработал водопад просто как модель со словами "эй, это не работает". Но похоже что эти слова никто не услышал. Его картинка была взята на вооружение, украдена прямо из его оригинальной публикации и путем копирования-вставки разошлась по документам того времени. Водопад стал процессом, применяемым по умолчанию.
И я предлагаю вам мнение, что главной причиной этого стало резкое снижение среднего возраста разработчика в течение всего нескольких лет. Мы должны были дать какой-то процесс той куче молодых ребят, что пришли в индустрию. Так началась эра водопада, которая продолжалась целых 30 лет.
Посмотрите на график - экспоненциальный рост. Количество программистов удваивается каждые 5 лет. Мы начинали всего с нескольких, а сейчас их сотни миллионов. И важное следствие из этого - половина программистов имеет менее 5 лет опыта.
Если количество программистов удваивается каждые 5 лет, то у нас всегда будет половина программистов с опытом менее 5 лет. Что погружает нашу отрасль в состояние постоянной нехватки опыта. Мы не можем избежать этого, пока тенденция сохраняется.
И это ведет к еще одной удручающей ситуации - у нас не хватает учителей, чтобы учить новичков. Поэтому новички обречены на повторение тех же ошибок, что и их более опытные коллеги. Они обречены набить те же шишки и наступить на те же грабли. Снова и снова и снова. И кажется, что у нас нет лекарства от этого.
[...]
Что еще поменялось помимо “демографической картины” в отрасли? Поменялось железо.
...
Что НЕ изменилось? Вам это не понравится.
Не изменились программы.
...
Если мы и сделали какие-то подвижки в разработке программного обеспечения с 1945 года - это в понимании того, что не следует делать.
Структурное программирование - это о том, что не следует делать. Не использовать опасный GoTo.
Функциональное программирование : не используйте присваивание.
Объектно ориентированное программирование : не используйте указатели на функции.
Что мы узнали за последние 74 года - это больше о том, что не следует делать, чем о том что нужно делать. Искусство написания программ остается в грубом приближении тем же самым, каким оно было в 1945 году, хотя и с налётом современности.
Что же мы должны были поменять? Уровень профессионализма, который мы потеряли из-за потока юных программистов. И уровень дисциплины, большой недостаток которой мы до сих пор испытываем. Старой гвардии, поддерживавшей дисциплину, больше не было в отрасли. Даже первая волна программистов-карьеристов уже шагнула за свои 40 лет. В 1995 году мы уже видели необходимость изменений.
[...]
[...]
[...]
Что же нам нужно изменить в этот раз, спустя 15 лет?
Превое. Мы, как Agile-сообщество, должны повзрослеть. Мы, как программисты, должны определить нашу профессию. Мы должны выбирать наши практики и дисциплины. Быть ли TDD, применять ли парное программирование, непрерывную интеграцию, непрерывное развертывание? Ведь это наши практики! Давайте их применять. Давайте решим, что значит быть программистом. Мы должны вновь объединить мастерство и Agile. И начать вести за собой.
Кому то в любом случае придется быть первыми. Потому что есть большая проблема.
Цивилизация зависит от нас, хотя не вполне это понимает. Мы сами это не вполне это понимаем. Я хочу чтобы вы хорошо подумали. Сколько раз в день ваша бабушка вступает в контакт с программным обеспечением? Вы можете подумать "ох, она вообще не вступает в такой контакт". Но она в любом случае что-то покупает в магазинах, а вы не можете купить что-либо в магазине и избежать контакта с софтом. Вы не можете получить страховку не вступив в контакт с софтом, вы не можете сделать звонок со своего смартфона, посмотреть телевизор, сесть в автомобиль, выбрать режим микроволновки, постирать вещи. Всё, что вы делаете так или иначе связано с программным обеспечением.
Кто нибудь знает сколько строк кода в современной машине? 10 миллионов строк кода. Зная, как создаются программы, это вас не пугает? Конечно не все они управляют двигателем, большая часть сидит в GPS и развлекательных устройствах. Но в современной машине дроссель управляется программным обеспечением. Есть софт, управляющий тормозами и акселераторами. Машина моей жены корректирует поворот руля, если она неправильно паркуется. Сколько людей убивает ПО в автомобилях? Тысячи. Много примеров когда машина таким образом теряла управляемость и разбивалась. Мы убиваем людей. Мы пришли в этот бизнес не для того, чтобы убивать людей, но так получается. И будет только хуже. Наша цивилизация всё больше полагается на нас. Хотя она пока этого не понимает, да и мы тоже.
Сколько из вас видели как СEO североамериканской Volkswagen давал показания перед конгрессом, обвиняя пару разработчиков программного обеспечения в том, что они подделали результаты тестов? "Ооо, это была пара программистов, которые с чего-то накосячили".
А знаете в чем дело? Это действительно была пара программистов. Может быть даже больше. Это они написали тот код, обманывающий тесты. Некоторые программисты так делают:
Код:
Если РежимТестирования Тогда
Сообщить("Все хорошо"); // никакого намека на модули форм в типовых конфигурациях, все совпадения случайны
Возврат;
КонецЕсли;
Я даже думаю, что они осознавали, что делают. И в этом проблема. И будет день, когда кто-то из нас напишет программу, которая приведет к интересным газетным заголовкам. Что это может быть за программа? Да что угодно, от софта управляющего самолетом, до софта управляющего футбольным стадионом. Это просто вопрос времени.
Тогда политики начнут делать то, что должны. Они укажут своими пальцами прямо на нас и зададут вопрос "как вы это допустили?" Они не укажут на менеджеров, потому что менеджеры скажут: “Это не мы, это разработчики написали такой софт, мы не знаем почему они так поступили”. И тоже укажут пальцами на нас. И наш ответ "О, мой начальник заставил меня написать такой алгоритм" не прокатит. "О, начальник поставил мне дедлайн". Простите, но нет. Это не сработает.
И тогда включатся механизмы регуляции. Они будут говорить нам какие языки использовать, на каких платформах нам работать, каким должен быть наш процесс разработки, какие книги мы обязаны прочитать, какие курсы обязаны пройти, какие бирки мы должны получить. Они будут регулировать нас полностью. Потому что увидят в нас опасность.
Возможно мы можем этого избежать? Как? Сделав это первыми. Первыми начав регулировать нашу индустрию, как это давно сделали другие отрасли. Создав принципы и этику. Установить базовый уровень морали и дисциплины и отказываться опускаться ниже. Иногда это значит сказать вашему боссу "нет", как это может например сделать врач, давший профессиональную клятву.
Это наиболее вероятное будущее программирования. Мы выйдем из "режима юности" и станем настоящими профессионалами с моралью и дисциплиной, которым мы следуем. Потому что это способ избежать того, что правительства скорее всего решат сделать с нами.