Pull to refresh
0
Инфопульс Украина
Creating Value, Delivering Excellence

Почему программировать легко

Reading time 8 min
Views 68K
Прочитал я тут на Хабре отличную статью «Почему программировать так тяжело?» и сразу проникся к ней симпатией. «Боже мой!» — подумал я. Наконец-то можно показать толковый и взвешенный текст некоторым моим знакомым, считающим меня высокооплачиваемым бездельником, объяснить родственникам, что это за работа такая — «кнопки целый день тыкать» и предоставить защитившим кандидатские диссертации друзьям доказательства того, что и я тут тоже не коровам хвосты кручу в рабочее время. «Какая прекрасная статья!» — думал я. Наконец-то кто-то понял всю суть работы программиста и объяснил её сложность понятным языком!

И лишь одной малюсенькой детали в этой статье не хватало. Правды.


Правды о том, что программировать легко и приятно, что сложности надуманы, а плюсы работы — недооценены. И я думаю стоит исправить эту несправедливость, написав такую статью. И нет, я не буду тут скатываться в трёп о высоких зарплатах, востребованности на рынке и высокой мобильности. Это всё ведь не о программировании, это о стиле жизни программиста, что не совсем то. А мы ведь на Хабре, а не на Мегамозге каком-то, поэтому давайте рассмотрим именно программирование, во всей его завораживающей красоте и устрашающей мощи!

Для начала разгромим все аргументы изначальной статьи. Это не очень интересно, поскольку все они проистекают из одной неправильной предпосылки и опровергаются её же правильной формулировкой, но нужно же с чего-то начать. Вот эта предпосылка, на которой построена вся та статья: "Мечта программиста — вообще не думать головой, лучше всего — ничего не делать".



Блин! Автор той статьи действительно так думает! Он считает нас ленивыми (это ладно), но при этом ещё и нелюбознательными (а вот это уже непростительно!). Из этого он делает вывод, что нам не нравится думать, не нравится творить, не нравится экспериментировать, делать окружающий мир лучше! Вы только послушайте!

Программа это что-то, что преобразует исходные данные в результат и зависит от следующих условий:

  • Результат программы превосходен.
  • Исходные данные превосходны.
  • Программа превосходна.
  • Исходные данные качественно и чётко задокументированы.
  • Сама программа качественно и чётко задокументирована.
  • Программа хорошо протестирована и выполняется верно.
  • Решаемая задача чётко детализирована.
  • Поставленная задача чётко детализирована.


С этими дополнительными условиями программирование становится крайне сложным.


Данный текст смахивает на жалобы сапожника на то, что каблуки на ботинках стаптываются и их приходится менять или на жалобы дантиста на то, что у людей болят зубы и их приходится лечить. Блин, всё выше описанное — это наша работа, это наш хлеб, это то, для чего мы нужны человечеству, это добавленная стоимость, которую мы производим, польза от нас, то, на что мы учились. Я не знаю даже как ещё точнее это описать. Работа программиста — делать мир лучше, проще, безопаснее, быстрее, надежнее. Решать проблемы других людей. Да, написать «превосходную программу» — наша работа! И да, её нужно «превосходно протестировать» и да, ей нужно предоставить правильные исходные данные, и если для их получения нужно написать ещё одну программу — конечно же, нужно взять и написать её!

"Программы нужно поддерживать" — говорит исходная статья. Ну конечно, нужно! Но в чём здесь сложность? Наоборот, это счастье! Я тут вычитал одну цитату: "Hardware eventually fails. Software eventually works". И ведь правда: большинство произведённых товаров и услуг с течением времени становятся хуже (увядают, стареют, ржавеют, портятся) и только наша программа день ото дня становится только лучше — тут поправить один баг, тут второй, здесь добавим фичу, а тут перекрасим кнопку. Наши творения живут! Мы вдыхаем в них жизнь, растим их, поддерживаем. Никто ведь не считает, что поддерживать, к примеру, ребёнка, когда он учится ходить — это плохо? Мы ведь хотим, чтобы он научился, помогаем ему. Так почему поддержка программ воспринимается как что-то плохое?

"Нам приходится исправлять проблемы, которых вообще не должно быть" — говорит та статья. Бр-р-р-р, постойте. А что, бывают проблемы, которые вот прямо обязаны быть? Все проблемы нежелательны, а то, что эти проблемы приходится исправлять нам — спасает от них пользователя (см. выше пункт о смысле работы программистов). Более того, неожиданные проблемы не дают заскучать, тренируют мозги. Кому нравится решать каждый день одни и те же предсказуемые проблемы — может идти в дворники или землекопы.

"Решение проблем без получения новых знаний" — пеняет нам публикация. Я себе представить не могу, как можно решить проблему без получения новых знаний. Как минимум по ходу решения такой проблемы мы получили знания о том, как решать такие проблемы без получения новых знания — а это уже новые знания и вполне себе полезные (да здравствуют взаимоисключающие параграфы, да!). Кроме того, никто не мешает разбираться в интересующих проблемах действительно глубоко. Да, на это не всегда есть время на работе, но вы что думаете, братья Райт разбирались в нюансах аэродинамики строго 8 часов в день в рабочее время, или Люмьеры пилили свой кинопроектор за казённую зарплату? Нет! Хочешь быть профи, мастером, хочешь чего-то добиться — работай над собой!

Больше ничего в той статье не написано, поэтому забудем про неё. Перейдём к чистым преимуществам программирования.

Программированию легко учиться
Чего только сегодня нет! Есть ВУЗы с профильными профессиями, есть информатика в школах, есть книги, есть онлайн-курсы, есть интернет со всей его массой информации, есть специалисты, у которых можно спросить совета, есть фирмы, куда можно устроиться на практику. Дети в младших классах могут изучать Scratch, бухгалтера могут осваивать макросы экселя и дебри одинэски. Да в конце-концов самоучители «что-то там за 24 часа» продаются в каждом гастрономе! Да, много чуши и да, это всё нужно брать, читать и пробовать, но если сравнить ситуацию с той, которая была 20 лет назад, когда отсутствие нормального ПО гармонично дополнялось отсутствием книг, железа, преподавателей и интернета — да мы живём в раю! Кривая обучения программированию невероятно плавная, тут нет никакого «как нарисовать сову» за 2 шага. Любой учебник начинается с print(«Hello, world») и ведёт нас за ручку через все эти операторы условий, циклы, функции, классы и т.д. На каждом шаге мы можем что-то запустить, что-то проверить, поставить брейкпоинт, модифицировать код в экспериментальных целях и т.д.

Программирование — логично и предсказуемо
2 + 2 = 4. Операция OR имеет вот такую таблицу истинности. Цикл for выполнится столько раз, сколько задано вот в этом условии. И это работает всегда! Нет никаких исключений вроде «а по субботам это не работает», если только мы не создадим эти исключения сами. Условный оператор if будет работать одинаково на всех платформах, во всех языках и на любом железе, если только мы не создадим специально такие обстоятельства, когда это будет иначе. Не нужно ничего брать на веру — всё можно доказать, проверить. Узнав что-то — можно быть уверенным в своих знаниях. Нет никакой магии, нет никаких эмоций, всё работает «честно».

Программисту не нужно глубоко знать математику
Мы любим с умным видом заливать о важности изучения математики, дискретки, теорвера, статистики, квантовой механики и теории струн. Хватит городить эту чушь! 95% программистов из математики используют 4 арифметических действия, проценты\корни\степени да чуть-чуть помнят что такое логарифмы и матрицы. Всё! Оставшиеся 5% — разработчики научного софта, а значит математику можно считать не необходимым знанием, а их предметной областью (так же как разработчику софта для обсерватории пришлось бы изучать астрономию). В общем, среднего образования на уровне шестого класса достаточно с головой.

Программисту не нужно знать все виды программирования
Уже давно не бывает «универсальных программистов». Нам не нужно знать всего. Есть фронтэнд разработчики, бэкэнд разработчики, есть сетевые программисты, Android и iOS девелоперы, есть спецы по геймдеву и по базам данных, есть разработчики встраиваемых систем, да куча всего есть! Не нужно тратить жизнь на изучение всех языков, операционок, фреймворков и паттернов. Просто выбери то, что нравится!

Программисту можно учиться всю жизнь
Когда-то в детстве, отдыхая в деревне у бабушки, я помогал местным ребятам пасти коров. Был среди них и «профессиональный пастух» из местного колхоза. Он пас коров уже 40 лет. Помнится, мне очень понравилась эта профессия — она изучается до уровня Junior за 2 часа, и даже уровень Senior (тренировка собаки-пастуха, основы ветеринарии) берётся за год-два. А дальше всё, следующие 38 лет можно делать одно и то же. Сейчас я вспоминаю это и прихожу в ужас. Люди попадали в ситуацию, когда им всю жизнь вообще не нужно было использовать мозг.



У программистов всё иначе — мы можем учиться каждый день. Нам платят, за то, что мы учимся каждый день! Весь потрясающий процесс получения новых знаний, экспериментов, решения учебных, а затем и практических задачек — это наша работа, наша жизнь. Что может быть прекраснее?

Мы сами создаём свои инструменты
Люди мало каких профессий создают свои рабочие инструменты сами. Чаще всего они пользуются чем-то, созданным другими людьми согласно их представлениям о том, как эти инструменты должны выглядеть и работать. Программисты могут сделать софт для себя, и реально делают это. Вся история развития Linux, многие opensource инструменты тому доказательство. Даже проприетарные средства разработки создаются людьми, которые реально понимают о чём идёт речь и сами каждый день пользуются тем, что производят. Мы летим вперёд на поезде, который перестраивается на ходу, причём людьми, которые сами едут на этом же поезде и стремятся делать это быстро и комфортно.

Низкая цена ошибки
Кто бы что там не говорил о разбившихся марсоходах или глюкнувшем рентген-аппарате, в большинстве случаев цена ошибки программиста невысока. Ну, «поплывёт» блок текста на страничке, ну отработает функция на секунду дольше, ну упадёт программа с исключением. Всё может быть пофикшено. Мы, в отличии от хирургов или строителей мостов, чаще всего можем позволить себе ошибиться, получить сообщение об ошибке, исправить её и сделать вид, что так и должно быть. Нас, как правило, не садят в тюрьму и даже не увольняют за ошибку, если мы способны её исправить за разумное время и предложить какой-то способ избежать подобных ошибок в будущем.

А теперь о том, почему программировать не только легко, но и чертовски приятно!



Мы меняем этот мир
Более того, мы меняем его больше, чем кто бы то ни было другой. Всё, буквально всё нынче зависит от компьютеров, разрабатывается на компьютерах, контролируется компьютерами. Некоторые профессии полностью вытесняются компьютерными программами, другие — гармонично ими дополняются, третьи полностью переходят в виртуальный мир. И это всё делаем мы, программисты! Я нажимаю несколько кнопок — и что-то происходит. Что-то, казавшееся фантастической сказкой ещё пару десятилетий назад. А теперь это работает. И это сделал (ну по крайней мере частично) я!

Мы создаём новые миры
Обычные люди живут в обычном мире, в нашей реальности. Программисты живут в той же вселенной чистого творчества, где и художники, поэты, писатели, режиссёры. Наш мир в нашей голове и он прекрасен! Вещи в нём работают просто и логично, воздушные замки слоёв архитектуры и абстракций строятся без всяких усилий, и так же перестраиваются (а иногда и рушатся). Более того, всё это, в отличии от результата тех же поэтов с писателями, превращается не только в слова на бумаге, но и в реально работающие в настоящем мире программы и железо. Я не только могу представить себе танцующего робота, я могу написать для него программу и получить этого робота в реальности! Творение в самом чистом виде!

Мы любим нашу работу
Не знаю как вы, а я свою работу люблю. Сложная она, вы говорите? Да ладно! У нас всегда есть и простые задачи. У нас всегда есть возможность решить сложные задачи путём разбиения на более мелкие простые. У нас есть лень, помогающая решать задачи наименее затратным способом. У нас есть тестировщики, поправляющие нас, когда мы ошибаемся. У нас иногда есть благодарные пользователи. У нас всегда есть неблагодарные пользователи, не дающие нам превратиться в бездельников и лежебок. У нас часто есть работодатели, старающиеся сделать нашу работу комфортнее. У нас есть наши победы и свершения. У нас есть ещё столько интересного впереди!



P.S. При написании этой статьи меня не покидало ощущение дежавю. Ну вот крутилось что-то на задворках сознания, какая-то неуловимая мысль. И только по написанию я осознал… что уже писал такую статью 3 года назад! «Это катастрофа!» — подумал я. «Надо рассказать об этом народу на Хабре, пусть поржут с меня дурака» — подумал я.

Обе статьи оставляю, поскольку написано в них хоть и на одну тему, но всё же разными словами, так что пусть будут.
Tags:
Hubs:
+53
Comments 172
Comments Comments 172

Articles

Information

Website
www.infopulse.com
Registered
Founded
1992
Employees
1,001–5,000 employees
Location
Украина