?

Log in

No account? Create an account

Previous Entry | Next Entry


Художник:
Я художник!

Рабочий:
А по-моему, ты говно!

(Художник тут же побледнел, как полотно,
И как тростинка закачался
И неожиданно скончался.
Его выносят.)


В предыдущем посте я дал ссылку на социально неудовлетворенного человека, к неумным высказываниям которого относится и вот такое:

это професия появилась 30-20 лет назад какое призвание...
учитель человек выполняющи общественную миссию какое можетбыть сравнение с какими то циферками зарифмованными?


Оставив стиль изложения, явную скандальность самого поста и неумность пера на совести аффтара, я должен признать, что заблуждение это нередко. Однако... Это не правда!

David Parnas сказал, что программная инженерия это, по сути, форма инженерии. Steve McConnell утверждал что нет, но должно быть. Donald Knuth утверждает, что программирование - это искусство.

И я согласен с первым и третьим. То, что программирование суть форма инженерии, оспорить довольно сложно. Написать качественную программу не проще, чем построить мост. Это требует глубокого знания в своей области, это невозможно сделать без опыта и без учета множества факторов, о которых непрофессионалу не придет даже в голову задуматься. И это порой ничуть не меньшая ответственность, чем строительство моста. Если твоя программа для задания дозы облучения при лечении онкологических больных хоть раз сработает неправильно... "Боже, помилуй полярников" (с)!

Искусство. А что такое искусство? Википедия говорит, что "The term art is most widely used to describe a particular type of creative production generated by human beings. The denotation art implies some degree of aesthetic value, regardless of any practical value of the art in question. An artist makes a work of art, mostly with the intention to create an experience for others. It can be considered an expressive means of seeing things the artists' way. There is no general agreed-upon definition of art, since it is a subjective value." Увы, русская Википедия дает слишком скудное определение "искусства".

Так вот, спросите у любого программиста, что он думает "вот об этом коде". Принесите мне код на С, и спросите, что думаю я. И я честно скажу, что вот на этот код просто противно смотреть, а вот тот написан настолько красиво, что его нужно вставлять в рамочку, и вешать на стену.

Да, а почему бы и нет? Ведь если можно придумать искусственный язык, и писать на нем стихи или сказки, как, например, на Квенья, то почему бы это не было искусством? И тогда, какая разница, на каком из искусственных языков я пишу?

Давайте. Если вы не верите, что это искусство, то попробуйте докажите. А я не соглашусь с вами, потому что большинству программистов чтение хорошо написанного кода доставляет ЭСТЕТИЧЕСКОЕ удовольствие.


***


Первым программистом - в том смысле, в котором мы говорим о программистах сегодня - принято считать Аду Лавлейс (1815-1852), урожденную Аду Байрон, дочь того самого лорда Байрона, поэта. Хотя я все же склонен считать первым известным нам программистом Абу Абд Аллах Мухаммеда ибн Муса аль-Хорезми (приблизительно 780-850). Это был человек, впервые описавший то, что сегодня называется алгоритм - последовательность действий, дающая решение некоторого типа задач за конечное число шагов. Кстати, само слово алгоритм происходит от "аль-хорезми". Возможно, кто-нибудь из читающих не знал этого - что ж, знайте: программированию уже более 1100 лет.

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


***


История Беббиджа, строившего свою аналитическую машину, трагична. Человек намного опередил свое время. Работа над "аналитической машиной" тянулась до самой его смерти, но, увы, машина так и не была достроена. Зато Ада написала для еще не построенной машины несколько программ.

Машина Беббиджа функционально предвосхитила современные компьютеры. Ее дизайн включал в себя вычислителый блок (процессор), устройство ввода данных на перфокартах, устройство вывода информации, и память.

Машина Беббиджа все же была достроена до конца. Его сын, Генри Беббидж, достроил машину, и запустил ее. В 1888 году машина вычислила число Пай с точностью до 28 знаков!

В начале сороковых годов прошлого века Говард Айкен построил всем известный Марк 1. Идеологически Марк 1 представлял из себя не более чем электрический римейк машины Беббиджа, и работал всего в 10 раз быстрее.


***


Программирование не обязано иметь своей конечной точкой компьютер. Программирование - очень широкое понятие. Программировать умеет каждый вменяемый человек, но не всем дано абстрагировать это умение до достаточного уровня. Так же, как практически каждый человек видит, но далеко не каждый может нарисовать то, что видит. Из тех людей, с которыми я учился в коллежде, какими-никакими программистами стала лишь треть. Еще треть ушла. Последняя треть так и не смогла начать писать код - у них в голове не произошел клик, и они так и не научились облекать свои мысли в понятную компьютеру форму. Они закончили учебу, и разбрелись в разные стороны - в продавцы, в секретари, и еще черт знает куда.

Это талант. Либо тебе это дано, либо нет. Черт побери, а как по вашему, почему хороший программист получает сегодня 30+ тысяч? За красивые глаза? Нет. За то, что ему дано делать то, чего не могут другие. Не не умеют - нет. Не могут. Это талант, беби.


***


Вся наша жизнь состоит из алгоритмов. Алгоритмы - это то, что мы начинаем изучать с самого рождения, не подозревая о том. Умение ходить - алгоритм. Умение есть ложкой - алгоритм. Умение писать картины - алгоритм, даже это алгоритм. Да и умение писать скандально-ругательные посты про свою ненависть к программистам и прочим богатым - это просто совокупность алгоритмов, работающие на недостаточных входных данных.

Алгоритм - это просто знание того, как что-то сделать за конечный промежуток времени. Умение писать алгоритмы это умение математическое. Впрочем, алгоритмика сама по себе просто-напросто один из разделов математики. Так уж вышло, что именно эта область математики оказалась сегодня востребованной.

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

Это не просто инженерия. И не просто арт. Это и то, и другое.


***


Ладно. К чему я вообще это все пишу? Мне за отчизну не обидно. Ну, не любит какой-то дятел программистов - и ради бога, сума тебе в руки да пряник в жопу. Вообще не задевает. Но очень часто люди гонят на программирование, совершенно не понимая, что это такое и с чем его едят. Многие не понимают, что и тут нужен талант, своеобразный талант. Я оставляю за кадром необозримые пространства идей, заполненные всяким смысловым шумом - как, например, психологический тип программиста, или войны красной и белой парадигмы, сиречь - линейное программирование против объектного-ориентированного, или, скажем, драйверисты и прикладники, и прочее. Потому что подо всем этим можно утонуть. И еще потому, что слишком длинные посты утомяют.

Вот так. Всем привт.

Comments

( 48 комментариев — Оставить комментарий )
b_w
18 мар, 2007 13:29 (UTC)
ух ты, круто написал, интересно.
пребольшое преспасибо!
peresmeshnik
18 мар, 2007 13:34 (UTC)
Не за что :-) Маленький ликбез :-)
lublue
18 мар, 2007 13:35 (UTC)
*сходив по ссылкам*
не мечи бисера своего... (с, тожЭ из какого-то произведения древнего искусства)
:)
peresmeshnik
18 мар, 2007 13:40 (UTC)
Да я не для свиней мечу. Просто вот тема образовалась, решил написать. :-)
(без темы) - lublue - 18 мар, 2007 13:54 (UTC) - Развернуть
peresmeshnik
18 мар, 2007 14:12 (UTC)
Пора организовывать профсоюз программистов :-)
(без темы) - dubrick - 18 мар, 2007 15:42 (UTC) - Развернуть
(без темы) - peresmeshnik - 18 мар, 2007 16:52 (UTC) - Развернуть
(Удалённый комментарий)
(без темы) - peresmeshnik - 19 мар, 2007 10:26 (UTC) - Развернуть
isminoga
18 мар, 2007 16:05 (UTC)
Вау! Молодец!
Поэитчно и очень интересно!
peresmeshnik
18 мар, 2007 16:53 (UTC)
Спасибо :-)
Твое мнение мне особо дорого :-)
astrum_aka_trup
18 мар, 2007 17:02 (UTC)
Пургену принял? О как прорвало.
hopm
18 мар, 2007 21:54 (UTC)
Это ты, конечно, всё правильно и красиво написал. Кроме того, за что именно нам плотют эти самые дикие деньги. Не за талант, должен тебя разочаровать. Если бы за талант - пришлось бы платить гораздо больше :)

Платят нам ровно столько, сколько прибыли мы приносим предприятию. Пока наши усилия приносят фирме больше прибыли, чем просто деньги в банке - она будет нам платить и тридцать и сорок и пиисят тыщ. И красота кода здесь значения особого не имеет. То есть нет, она имеет, конечно, с точки зрения производительности и эффективности. Но и тут разница между хорошим и плохим кодом далеко не на порядок. Ну, значит фирма получит не 15 процентов прибыли, а 13.

Самые высоких уровень marginal revenue, между прочим в Израиле у кого? Правильно, у Амдокса. 40 процентов - при известно какой красоте тамошнего кода.

Ну, а завтра будет выгодно амдоксу в недвижимость вклады вкладывать - вон твой дизайнер и поднимется. И я тоже, кстати - навыки малярные-то ещё не забылись. Между прочим, не знаю чего он плачется - я когда студентом на ремонтах подрабатывал, зарабатывал намного больше своих друзей которые уже в программистах ходили.
nashdak
19 мар, 2007 08:40 (UTC)
Это не совсем так...В том-же Амдоксе народ получает меньше чем в любой другой компании, занимающейся связью.
То-есть от доходов фирм зарплата конечно зависит, но... Все-же программер, который на VB пишет всякую всячину для адвокатов, маклеров, банков и т.д. получает ГОРАЗДО меньше чем программер Embedded, разрабатывающий оборудования для связи. Есть разница... Серьезному Embedded программеру понадобится меньше месяца что-бы ввинтитья в серьезный VB проект ( не зная VB то того как...). А вот VB программеру понадобится даже не знаю сколько, для того чтобы ввинтитья в серьезный Embedded проект, занимающийся связью, например.
(без темы) - hopm - 19 мар, 2007 09:16 (UTC) - Развернуть
(без темы) - peresmeshnik - 19 мар, 2007 10:19 (UTC) - Развернуть
(без темы) - nashdak - 19 мар, 2007 12:29 (UTC) - Развернуть
(без темы) - peresmeshnik - 19 мар, 2007 12:53 (UTC) - Развернуть
(без темы) - nashdak - 19 мар, 2007 14:08 (UTC) - Развернуть
(без темы) - peresmeshnik - 19 мар, 2007 15:06 (UTC) - Развернуть
(без темы) - slonc - 19 мар, 2007 23:25 (UTC) - Развернуть
(без темы) - peresmeshnik - 20 мар, 2007 08:04 (UTC) - Развернуть
(без темы) - slonc - 20 мар, 2007 08:31 (UTC) - Развернуть
(без темы) - peresmeshnik - 20 мар, 2007 09:02 (UTC) - Развернуть
(без темы) - slonc - 20 мар, 2007 10:15 (UTC) - Развернуть
(без темы) - slonc - 20 мар, 2007 10:19 (UTC) - Развернуть
(без темы) - peresmeshnik - 20 мар, 2007 08:40 (UTC) - Развернуть
(без темы) - hopm - 19 мар, 2007 13:31 (UTC) - Развернуть
(без темы) - peresmeshnik - 19 мар, 2007 13:51 (UTC) - Развернуть
(без темы) - hopm - 19 мар, 2007 14:52 (UTC) - Развернуть
(без темы) - peresmeshnik - 19 мар, 2007 15:12 (UTC) - Развернуть
(без темы) - nashdak - 19 мар, 2007 13:40 (UTC) - Развернуть
(без темы) - hopm - 19 мар, 2007 15:01 (UTC) - Развернуть
care_less
18 мар, 2007 22:54 (UTC)
*явившись по ссылке от дубрика*
очень верно вы это все сказали.
а программирование на самом деле сродни стихосложению и таланта безусловно требует. мне так кажется. я вот училась-училась на программиста (из практических соображений), доучилась и поняла, что обречена оставаться программистом-графоманом. так ни одного дня по этой специальности и не работала. переквалифицировалась. сижу в смежной области и не жалею нисколько :-)
peresmeshnik
19 мар, 2007 10:31 (UTC)
Да, в программировании без склонностей к этому делу незачем оставаться. Сгниешь.
gava
18 мар, 2007 23:02 (UTC)
Спасибо. Про Аль-Хорезми знал, про "алгебру" - тоже, а вот про "алгоритм" - не слышал. Интересно написано, только, мне кажется реальность у вас немного приукрашена.

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

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

Я сомневаюсь, что профессия программиста ответственнее профессии строителя, врача, полицейского или учителя. Вряд ли программисты рискуют жизнью, как охранник в торговом центре. Только дело не в хайтековских зарплатах (не такие уж они высокие, особенно по западным меркам), а в том, что достойные профессии в Израиле, в отличие от многих развитых стран, оплачиваются недостойно.

В общем, это не , но моё вам возражение :-)


Если выводы и манера письма у автора исходного поста - сомнительные, то вот посыл - вполне себе повод задуматься.
gluk_77
18 мар, 2007 23:19 (UTC)
профессия программиста ответственнее профессии строи
врач, полицейский или учитель - оплачиваются государством. строители нанимаются подрядчиками, большинство из них это гастербайтеры и арабы.
хайтек преимущественно частный бизнес.
"достойные профессии в Израиле, в отличие от многих развитых стран, оплачиваются недостойно." - ок, но при чем тут програмисты? удобные козлы отпущения?
kay_ne_gerda
18 мар, 2007 23:28 (UTC)
должна сказать "неудовлетворенному человеку" спасибо за то, что он вдохновил тебя на такой познавательный для меня пост :)
даже ностальгия взяла по тому времени, когда пыталась стать программистом (-кой)... :)
peresmeshnik
19 мар, 2007 10:58 (UTC)
На здоровье :-)
Может, еще и станешь.
shaulreznik
19 мар, 2007 07:23 (UTC)
Да ну, тот юзер - просто дурак, объяснения не помогут. И безграмотный в прямом смысле этого слова. Ямщик не понимал, как это Шаляпин работает певцом ("Я тоже пою, когда выпью"), восточный таксист из постинга одной юзерши уверен, что программисты вводят в компьютер тексты, а не владеющий орфографией родного языка маляр считает, что программирование - не специальность. Мало ли кретинов на свете.
peresmeshnik
19 мар, 2007 12:11 (UTC)
Он не одинок. Многие люди, не связанные с компьютером считают, что программирование это просто. Изучил компьютер - и давай программировать. Я как-то разговаривал с таким. Он решил, что хочет стать хакером, и очень просил порекомендовать ему хорошую книжку "как стать хакером". После того, как я составил ему список книг, необходимых для приличного басиса (ттипа "Операционная системы" + "устройство компьютера" + "ассемблер для самых маленьких", все вместе около 2500 страниц жестокой компьютерной порнухи), он внезапно осознал, что "it isn't fucking fun!". С тем мы и расстались, крайне довольные друг другом.
benhalof
21 мар, 2007 04:15 (UTC)
Загляни ко мне, возможно, тебя там кое-что заинтересует.
( 48 комментариев — Оставить комментарий )