?

Log in

No account? Create an account

Категория: it

Путь Программиста. 1.

Ямамото Цунэтомо
Путь Программиста (переработано Пересмешником - peresmeshnik.livejournal.com).

Из Книги Первой

Хотя программист должен прежде всего чтить Путь Программиста, не вызывает сомнений, что все мы небрежительны. Поэтому, если в наши дни спросить: «В чем подлинный смысл Пути Программиста?», лишь немногие ответят без промедления. А все потому, что никто заранее не готовит себя к ответу на такие вопросы. Это свидетельствует о том, что люди забывают о Пути.

Небрежение опасно.

***

Читать дальшеСвернуть )

Метки:


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

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

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


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

это професия появилась 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+ тысяч? За красивые глаза? Нет. За то, что ему дано делать то, чего не могут другие. Не не умеют - нет. Не могут. Это талант, беби.


***


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

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

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

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


***


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

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

Latest Month

Июнь 2015
Вс Пн Вт Ср Чт Пт Сб
 123456
78910111213
14151617181920
21222324252627
282930    

Syndicate

RSS Atom
Разработано LiveJournal.com