Григорьев Н.А., Варфоломеева Т.Н. Аспекты философии в программировании. Влияние программы на личность. Подготовка к Crossfit Games

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

Здесь и далее я буду рассматривать общекнижный пример с сотрудниками предприятия, писать будем на чем-то СИ-подобном. Наследовать класс Сотрудник (Employee) от класса Человек (Person) – прекрасная идея, особенно если хранить данные исключительно в памяти: SQL имеет некоторые проблемы с наследованием таблиц, но речь не об этом - ООП со своим иерархизмом, агрегациями, композициями и наследованиями предлагает идеальный способ организации данных. Проблемы с методами.

За каждым методом бизнес-логики стоит факт мира, который этот метод (чаще не в одиночку) моделирует. Факты программирования – это операции: дальше будем называть их так. Делая метод членом класса, ООП требует от нас привязать операцию к объекту, что невозможно, потому что операция – это взаимодействие объектов (двух и более), кроме случая унарной операции, чистой рефлексии. Метод ВыдатьЗарплату (PaySalary) может быть отнесен к классам Сотрудник (Employee), Касса (Cash), БанковскийСчет (Account) – все они равнозначны в праве владения им. Дилемма о расположении методов сопутствует всему процессу разработки: неловкое ее разрешение может оказаться критичным и даже фатальным.

В книгах по программированию честные авторы стыдливо признают, что «объекты – это как бы не совсем объекты», а ООП – всего лишь способ организации кода, а не механизм моделирования. Но все дело том, что «мир есть совокупность фактов, а не вещей» – отсюда принципиальная неспособность построить адекватную модель, применяя ООП в том виде, как этого требуют писатели учебников. Важно понять: в коде возможно моделировать мир, но атомами модели должны стать факты, а не объекты.

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


В 2015 году вы могли заметить перемены в способе разработки приложений на JavaScript. Разработчики уходят от непредсказуемой архитектуры с мутабельным состоянием в сторону более предсказуемой иммутабельной архитектуры приложений .

С такими фреймворками как Backbone, было принято синхронизировать сами данные и представление данных – для этого приходилось вручную подписываться на нужные события dom. Такой способ был подвержен ошибкам и вынуждал использовать слишком много типового кода. Пришел Angular и исправил это с помощью автоматизированного двустороннего биндинга.

Но сейчас все движется в другом направлении.

… но это нормально. Любое проектирование отстой. И всегда будет отстоем.

Если вы мне не верите, давайте объясню…

Ни один проект не переживает встречи с реализацией

Когда вы начинаете реализовывать то, что напроектировали, вы неизбежно сталкиваетесь с такими вещами в реальности, которые никак не соответствуют вашим первоначальным ожиданиям.

Данные, которые вы ожидали как обязательные в ответе внешнего сервиса, могут отсутствовать (или быть невалидными). Ожидаемая уникальность может оказаться совсем не уникальной на практике (даже в sha1 когда-нибудь случаются коллизии). Процессы, которые предполагались надежными, будут падать гораздо чаще, чем вы ожидали.

Это нормально.

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

Недостающие данные могут быть сделаны опциональными или заменены умолчальными.

Некорректные данные можно рассматривать как отсутствующие, либо записывать их «как есть» и добавить дополнительную провалидированную версию, которая присутствует только если оригинал валидный.

Ограничение уникальности можно

Еще по ходу чтения мне вспомнился Эдсгер Дейкстра с его знаменитой фразой: «Я денно и нощно молю, чтобы как можно больше моих собратьев-программистов нашли способ освободиться от проклятья совместимости» («I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility») из книги Смиренный программист (1972 sic!!!). А позже и Эрик Реймонд с своим Собором и Базаром (1997 год). Но текст Винджа не только о проклятье совместимости, на трех страничках поднят (и в общем то оставлен без ответов) целый пласт вопросов:

  1. Проблема совместимости в широком смысле;
  2. Проблема поддержки старого кода;
  3. Проблема зависимости человеческой жизни «от бесчувственных роботов» (с), к чему мы стремительно приближаемся;
  4. Проблема data mining`а вообще и поиска готового решения в бездонной бочке рецептов в частности (github, stack overflow?);
  5. Проблема «переписывания» старого кода (и плохого, и хорошего) - этот момент так и хочется перечитывать:);
  6. Проблема необъятности ИТ-технологий. Иногда говорят, что последний универсальный физик жил в середине пошлого века, имея ввиду Льва Ландау. Похоже сейчас наступает (или уже наступило) время, когда найти универсального программиста таки уже невозможно;
  7. В тексте нет слова хакер, ни в позитивной, ни в негативной коннотации. Но написано и об исследователях, и о тех преимуществах, которые можно получить зная те или иные backdoor`ы и о том, какую власть это может дать.
  8. и наверное это не все… :)

Складывается впечатление, что писал это человек, на своей шкуре прочувствовавший эти самые проблемы.
Хочу отметить, что «Глубина в небе» была написана в 1999 году, когда многое из того, о чем пишет Виндж еще не было проблемой, или вообще только показалось на горизонте.

В качестве критики хочется отметить, что Виндж прошел мимо ИИ (и сильного и слабого, вообще мимо пробежал, даже нейронные сети не затронул) и свел преимущества ИТ к производительности. Так же в тексте не ощущается присутствие мегакорпораций (хотя конечно «Глубина в небе» не относится к киберпанку), если не считать Кенг-Хо таковой. Нет патентных войн, не затронуты вопрос копирайта и проблема закрытых проприетарных разработок, исходные коды к которым так и не были опубликованы.

Не о программировании, но о стандартах

Дальше в той же главе затронут интереснейший вопрос галактического вещания с целью распространения собственных технологий. Зачем? Стандартизация. Распространение собственного языка и собственных стандартов и технологий, что позволит с одной стороны подтянуть отсталые цивилизации до приемлемого для торговли уровня, а с другой снизить затраты на коммуникацию и обеспечение совместимости и как следствие облегчит торговлю и повысит маржинальность. Интересно, знал ли Виндж на момент написания книги о стандартизации корабельной оснастки английского флота времен великих завоеваний, позволившей снизить затраты на ремонт и обслуживание? А о распространении английского языка в качестве делового, научного и т.д.? Англичане учили (заставляли учить?) местных аборигенов своему языку. Аналогично поступали испанцы и французы. И сейчас английский, испанский, французский, португальский имеют очень широкое распространение. А вот голландцы считали, что аборигенов не нужно учить своему языку. Много ли мест на земном шаре, где говорят на голландском кроме самой Голландии?
Сейчас обучение английскому поставлено на поток по всему миру. Использование стандартизированных методик и учебников, стандартизированных экзаменов и шкал оценок. Только ли частный бизнес?

Ниже привожу наиболее интересный отрывок из текста. В романе еще много всего интересного, не относящегося к программированию, не даром он собрал несколько премий. Так что рекомендую к прочению, причем в оригинале, попавшийся мне перевод не очень хороший.
Приятного прочтения:)

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

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

Кто умеет копировать, тот умеет ДЕЛАТЬ. Это сказал Леонардо да Винчи. Видите ли, вы исходите из своих представлений, о том, что такое ХР, винда, операционка. Люди как рассуждают:

Мне было ещё мало лет у меня стояла ХР, вот были золотые деньки, но тепереча не то, что давеча. Новые времена, современное ПО. Не понимаю, зачем копаться в старье? Вы бы хоть делали клон десятой винды, но куда с вашей то скоростью, вы его сделаете лет через 100.

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

Посмотрело: 873

Программирование рассматривается как процесс создания компьютерных программ. Слово процесс в этом определении не лишнее. Обычно рассуждают в духе «посмотрите, какую замечательную структуру данных можно описать на данном языке программирования». Философия программирования подразумевает оглянуться по сторонам, да и в глубь копнуть.

Собственно разделение на кодирование, и создание алгоритмов это уже специфика, сначала идёт жизнь, то есть человек опирается на некую мысль вроде «напишу-ка я фреймворк с такими-то свойствами». И вот это начальное направление это вопрос философии. Проблема в том, что часто жена программиста лучше его самого знает, на философском уровне, что он делает и почему. Элементарные философские категории: мышление, сознание, обусловленность программисту неведомы. И это странно, если сравнить способность программиста мыслить, например, читая статьи по функциональному программированию или алгоритмам поиска, вперемешку со статьями видных или русских европейских философов, окажется, что собственно навык мышления у программистов развит не меньше, а то и больше. Вот только язык программиста очень богат пока он рассуждает о паттерн-матчинге и жалок и органичен когда ему надо выйти из своей песочницы, оторваться от IDE и файлового менеджера.

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

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

Например такая история:

пытаясь раскрасить карту округов Англии, Францис Гутри сформулировал проблему четырёх красок, отметив, что четырёх цветов достаточно, чтобы раскрасить карту так, чтобы любые два смежных региона имели разные цвета. Его брат передал вопрос своему учителю по математике, Огастесу де Моргану, который упомянул о нем в своём письме Уильяму Гамильтону в 1852 году. Артур Кэли поднял эту проблему на встрече Лондонского математического сообщества в 1878 году. В том же году Тэйтом было предложено первое решение этой задачи.

Понимаете? Социальное измерение. То есть вы учите не только код, но вы и знаете имена тех кто этот код придумал, вы не изучаете просто язык Си, но и историю его создания. Это даёт возможность двигаться дальше в исторической перспективе, даёт вам возможность осознать своё местонахождение в социальной структуре и найти где приложить свои силы в новом для всего человечества направлении. Русские постоянно изобретают новые языки программирования и алгоритмы, с этим нет проблем, просто из-за незнания истории и философии программирования вы изобретаете то, что уже изобретено. Либо, что ещё хуже вы изобретаете что-то новое, но не имеете понятия, куда это деть, какому «Лорду Гамильтону» написать о своей работе, и на каком «заседании лондонского клуба» зачитать доклад. Доклад-то вы напишете, и он, скорее всего, будет совершенен с технической точки зрения.

Хотя истемная инженерия подразумевает анализ и постановку задачи перед собственно проектированием, алгоритмированием, разработкой структур данных, кодированием и отладкой, но задачу-то ставит заказчик. Заказчик это «Господь Бог» в философии программирования, он не осмысляется, поскольку не может быть осмыслен, он - абсолют и высшая сила. Можно только осмыслять его отдельные указания и жаловаться на несовершенство «божьих творений». Сами отношения программиста и заказчика в учебнике по Java не поднимают, это марксизм или протестантская этика: метафизика подчинения и обусловленность материальными ценностями. В америке есть класс «супер программистов», «старт-аперов», люди не имеют заказчика, они знают жизнь настолько, что сами могут увидеть потребности. То есть он не сидит и не ждёт пока некто, кто в жизни разбирается лучше него, придёт и скажет ему, что ему делать, он сам осмысляет жизнь и находит куда двигаться чтобы заработать и реализоваться как деятель. Не пишет программу, которую люди запрашивают, а сам создаёт запрос и сам же его удовлетворяет. Был ли запрос на iphone когда Джобс его придумал? Или Джобс создал сам запрос?

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

Человек считается мыслящим существом, и программисту было бы очень легко понять мышление если бы он сравнил его с компьютерной программой. Человек как и программа не может работать в вакууме, человек, упрощённо говоря, думает то - что видит. Смотришь в код, думаешь как его улучшить, смотришь на сообщение об ошибке - думаешь как её исправить. Попробуйте отвернуться от экрана и продолжать решать ту же самую проблему, вы увидите - она плавно, но быстро выветривается из головы. Это и называется, думать то - что видишь, опираться на входные сигналы, обусловленность сознания. Поэтому появляется второй вектор программирования. Я пишу программу, она управляет процессами в компьютере, в чипах, но, я же сам и смотрю на мной же написанный исходный код, и то, что я вижу, является моим личным входным сигналом и позволяет мне думать дальше. Отсюда постоянные исследования в области новых языков программирования. Отсюда желание выучить ещё один, и ещё один язык программирования (ЯП). Человек хочет запрограммировать сам себя, расширить свои возможности.

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

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

Программист это как раб лампы, как батарейка матрицы - если он вдруг начнёт применять свой мозг, свои невиданные способности по оперированию языками, логикой, работой с объёмами данных в обычной жизни - он может стать тем самым одноглазым, который король в стране слепых. Свитер облегает шею и тело, пуловер имеет широкое отверстие чтобы его было удобнее натягивать (pull-over), кофта имеет пуговицы. У джемпера вместо широкого отверстия застёжка. Это элементарно, можно написать в одну строчку кода. Но программисту не понятно одно, что эта информация, это не про одежду, это - часть описания жизни. Правда европейцы часть отличаются, есть культура программировать жизнь, особенно у англичан. Давно они открыли, что можно написать какое-то письмо, например «высылаю вам три мешка сукна, вышлите мне шесть золотых» и вдруг это можно повторять снова и снова и появляется возможность управлять жизнью просто сидя за своим рабочим столом и сочиняя письма. Венеция, Ганза, Кембрия. Это качество унаследовали и американцы, и поскольку они же полюбили и компьютеры и программирование они вышли на недосягаемый уровень. Они видят третий вектор программирования: любой код, любая программа программирует не только компьютер, не только процессор, но и пользователей.

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

Трёхнаправленное программирование. Компьютер, программист, пользователь. Невозможно внести изменения в код, не внеся изменения в будущее пользователя и программиста. Но можно об этом не думать. Так проще. Не думать - всегда проще. Человек из всех входных сигналов предпочитает принимать те, которые не требуют осмысления, а лишь ощущения. Вкус пива, чистая рубашка, похвала, или даже оскорбления и наезд начальства. Из этих эмоций далее следует эмоциональное принятие решений. Приятный фреймворк. Идиотский язык программирования. Тупой коммент. Классная статья. У меня возникла идея написать свою реализацию b-trees. Почему? Ну понравилась идея. Общение программистов, самых логически занятых сознаний, сводится к обмену эмоциями. Это два бурлящих потока, сталкиваются, отталкиваются, создают вихри - как же они вообще могут программировать? Очень просто, после часа эмоций они расходятся чтобы читать книги. Тут включается мысль. Киньте ссылку, я почитаю. Мне понравилось, есть что-нибудь почитать по этой теме? Две жизни. Программист особенно интересен тем, что для него даже кодирование это эмоциональное занятие, он бросает свои чувства в холодный экран, он пытается почуять логику и оформить себя как разум в результате. Русским программистам это особенно свойственно, а не свойственно им - рассуждать, тем более вслух, тем более письменно. Более того, человек способный рассуждать о своём проекте вызывает недоверие - он кажется вруном, который вместо того, чтобы смотреть в код, осознавать структуру алгоритма, почему-то думает о социальных проявлениях, пиарится, - сказки про Эльбрус и Фантом.

Поэтому в России нет Open Source. Потому что опенсорс это не умение программировать, это умение общаться. Это знание истории программ и программистов. Вы можете выложить на гитхаб своё творение, и даже написать к нему статьи и инструкции, но некому этого будет читать. Или они прочитают и напишут «хочу присоединиться к проекту, только не знаю, что делать». «Студент, немного знаю Яву, очень интересный проект, скажите, что делать». Почему американский студент «знающий Яву» сразу знает, что делать? Почему он может создать один опенсорс проект и присоединится к другому? Вопрос более социальный чем философский, наш социум в другом состоянии. Но философу ясно, - человек не осознаёт себя. Как говорит Гузеева в «Давай поженимся» - «ничего про себя не понимает». Он сидит в своей комнате за компом, мама ему говорит, «ну что ты у меня такой к жизни неприспособленный». «Ой, отстала бы ты, сама что ли умная». Но мама умная, это ты дурак. Точнее у неё другие входные сигналы, ты смотришь в монитор, она смотрит по сторонам. Даже отставая интеллектуально, в навыках логики и работы с информацией, наличие обширных входных сигналов из жизни, о людях, о взаимоотношениях - делает человека понимающим жизнь лучше программиста.

Мама не дура, даже по одежде и тарелкам может твоё будущее предсказать не зная асинхронной обработки данных. Это не сложно, и ты бы мог, если бы смотрел на социум и знал язык описания и программирования. По инстанциям похлопотать. Растёт ценный кадр. Толковый парень появился. Выправить документы. Начальство приметило. Это API. Ничего сложного. Программисты могут и должны править миром. Но пока что, только небольшой слой американский программистов это понял. Гейтс понял, что программа может глючить когда её инструкции выполняются в компьютере, но она не должна глючить, когда её инструкции выполняет пользователь. Это не только цинизм, это понимание своей роли, это исследование поведения, это изучение API пользователя и всего общества. Нажми сюда, что будет если пользователь нажмёт эту кнопку? А если тут введён текст, как сделать, чтобы он ввёл текст и сюда? Открылось окно выбора файла, в какой папке по умолчанию оно должно быть открыто? Сколько часов вы потратили на отладку кода, почему вы не потратили в десять раз больше изучая поведение пользователя? Гейтс потратил.

Люди записывают на видео поведение пользователя за программой, причём с момента входа в комнату. Самое смешное, что эти люди это не программисты, это приглашенные люди - социологи, даже дрессировщики. Они сидят и выполняют работу, которую по идее программист должен выполнить эффективнее, ведь это отладка кода. Вносятся изменения. Но программа работает не быстрее после этих изменений, она может быть работает медленнее и чаще глючит, в процессоре, на компе глючит, но в поведении пользователя она работает лучше, он быстрее выполняет операции (performance), чаще достигает цели (debug), он доволен (energy saving). Он платит в конце концов. Всё, что делал Джобс - это программирование пользователя. Как он к этому пришёл? культура окружения? наркотики? личный талант? Философия. Канты-гегели, Гуссерли-расселы, Витгенштейны-сартры, тысячи их. Они создали немало языков для описания реальности и API для её осмысления. Большинство умных слов которыми мы пользуемся интуитивно, было ими некогда введено и сформулировано. Нельзя употреблять слово «культура» и думать о консерватории, говорить «консерватория» и не знать, что это в первую очередь система преподавания и отбора преподавателей. Консервативная и консервирующая опыт. Для программиста, всё чем он пользуется взялось из ниоткуда. Умные люди разберутся, преподы в универе есть для этого.

Кстати, преподаватель программирования обычно не умеет ни программировать, ни преподавать. Отдельная песня, так вышло, Сталин направил миллионы дремучих крестьян учится инженерии, сейчас аналогичное происходит в Индии. Три миллиона выпускников ежегодно. Понятно, что люди стремятся сримлайнить преподавание, выкидывают всё лишнее. Зачем вам это знать, вы это учите - пригодится. История опытов Максвелла, очень увлекательна, но вам некогда её учить, вы выучите сразу уравнение Максвелла. Ну вы хоть скажите студентам, что до Максвелла не было ничего, после него уже наука об электричестве была развита. Какой пример для программистов! Нет ничего - что-то есть. Хотя бы расскажите как Страуструп и Торвальдс работали. Как из ничего, получается что-то. То есть преподаватель, так же философски дремуч, как и студент.

Вы смеётесь, что американцы не могут на глобусе найти Ирак. А вы над собой посмейтесь, вы можете на глобусе истории логики найти Гегеля? Вы пользуетесь BASH, вы знаете, кто и когда его создал и как он осмысляет своё творение по прошествии десятков лет? Вы знаете почему терминал называется терминал? Как он связан с телетайпом? Вы знаете, что компания IBM делала перепись населения в США более ста лет назад на деньги центробанка, а потом поставила эти механические компьютеры Гитлеру? Вы представляете, что устройство и терминология баз данных ведёт историю от тех перфокарт, а они от каталогизаторов привезённых из Англии в начале девятнадцатого века? Вы знаете как создатель Atari Бушнел не понял идеи своего работника Джобса? Вы хотя бы представляете роль Atari в истории вычислительной техники? Кто кого скопировал Atari или Sinclair? Мало знать устройства и их историю, надо в первую очередь знать людей, мысли и их историю. Отец Гёделя был священником, а отец Святого Франциска был банкиром и торговцем. Что такое львовско-варшавская школа логики?

Ну ладно, это ваше трёхнаправленное программирование, понятно, надо знать не только код и язык программирования, но и историю языка, знать себя и пользователя и историю и языки, ну а как же отладка? А что отладка? Зачем вообще нужен отладчик? Просто вы ещё не умеете мыслить, вы всё ещё реагируете и ждёте подсказок, вы не понимаете свою программу, вы останавливаете её и ждёте, что отладчик вам что-то покажет. Тогда, надеетесь вы, в голове появятся идеи. «В вашем отладчике неудобно ставить брэкпойнты.» Метапрограммирование это когда программа создаёт программу, тоже своего рода рекурсия. Так же и программа может дебажить программу, мета-отладка, но для этого программист должен быть в два раза умнее, он должен удерживать в голове сразу две программы. Люди которые используют printf() и смеются над отладчиками, просто лучше понимают, что делают.

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

Мы привыкли к быстрому доступу к информации и столь же быстрому её поглощению. Мы предпочитаем пятиминутные ролики глубоким лекциям и коротенькие статьи - книгам. Не буду утверждать, что хорошая книга по программированию заменит любую статью, это не так. И уж точно она не заменит практику. Тем не менее, лично ко мне настоящее понимание основ программирования пришло после того, как я, прорешав сотни задач на курсе программирования и прочитав тонну статей, начал параллельно изучать теорию по книгам и хорошо так в них углубился. Я довольно долго искал свой персональный «лучший учебник по Java для начинающих». Ниже - несколько книг, которые мне пригодились в большей или меньшей степени на разных этапах учёбы. «Для самых маленьких» Следующие две книги можно начинать читать на старте учёбы, параллельно с видео или, если учитесь на JavaRush, - вместе с первыми уровнями. Они, особенно первая, подходят людям с нулевым программистским прошлым.

Head First Java

Я начал с этой книги не потому, что она мне больше всего нравится, а потому, что она самая простая. Эта книга, по мнению очень многих программистов, - лучший самоучитель Java с нуля. Причём она по-настоящему и совсем «с нуля», то есть подходит тем, кто только-только начинает и не совсем понимает ещё, что за зверь такой - программирование. Ко мне она попала слишком поздно. Думаю, именно поэтому я не смог её оценить по достоинству. «Просто читать» её было очень приятно, а вот искать что-то конкретное в ней мне приходилось подолгу. Материал там подан живо, но довольно поверхностно (потому что с нуля!) и многих тем и нужных пояснений попросту нет. А вот мой друг, которому она ушла по наследству, был от нее в восторге и кричал, что это не просто лучший учебник по Java для начинающих, а прям мировой шедевр и именно так нужно подавать сложный материал. Достоинства:
  • Лучший самоучитель Java с нуля, для полных чайников, написан живым языком;
  • Прикольные иллюстрации и юмор;
  • Пояснения с жизненными примерами.
Недостатки:
  • Многовато «воды» для тех, кто уже въехал в тему;
  • Не всегда удачные паззлы и упражнения.

Герберт Шилдт. Java 8. Руководство для начинающих

Полистав этот учебник, я подумал, что он хорошо подойдёт тем, кому нравится более традиционное изложение материала, нежели в Headfirst, и при этом они ищут самоучитель «с нуля». Местами изложение в книге очень детальное, напоминает расширенную и переведённую документацию с хорошими наглядными примерами. Иногда, как по мне, автор переходит границу, и начинает слишком уж разжевывать, читать становиться скучновато… и вдруг - кульбит - и какое-то довольно сложное место проскакивается почти мгновенно, и ты в полном недоумении пытаешься понять, что и где пропустил. Тем не менее, таких мест в книге не слишком много, и я знаю людей, которые считают, что «Руководство для начинающих» - лучший самоучитель Java для тех, кто ещё ничего не знает. Лично мне он показался не очень ровным. Скажем, начинаю разбирать коллекции, и вместо человеческого пояснения мне подсовывают задачу по самостоятельному созданию Set на основе массивов. Классная задача, но я бы хотел для начала лучше понять, что такое стандартные коллекции! Хотя эта книга, как и предыдущая, считается учебником для начинающих, мой опыт преподавателя подсказывает, что она хороша только в совокупности с другими материалами: гуманитарию-свитчеру будет не всё просто и понятно. Лучше всего "Руководство для начинающих" подойдёт тому, кто худо-бедно учил программирование (например, в универе), давным-давно на него забил, и при этом ему нравится стиль изложения автора. Достоинства:
  • Традиционное вдумчивое изложение основ;
  • Хорошие примеры.
Недостатки:
  • Есть «прыжки» от «слишком разжевано» до «мельком сказано»;
  • Местами скучновато.
Кстати, у Герберта Шилдта есть ещё одна известная книга по программированию - «Java 8. Полное руководство». Это совсем другой учебник, более фундаментальный. К нему и переходим. Справочники и расширенные руководства Книги из этого раздела пригодятся тем, кто уже ввязался в по полной и ищет книги для лучшего понимания теории и практики.

Герберт Шилдт «Java 8. Полное руководство»

Эту книгу я решил загрузить из интернета, чтобы оценить, а потом - купить или не купить. Шутка ли, 1300 страниц текста! Ну и цена впечатляет не меньше объема. Точно так же я поступил и с двухтомником «Библиотека профессионала» Кея Хорстманна (о ней - ниже). Забегая наперед скажу, что я остановил свой выбор на второй. Почему? Потому что в книге «Java. Полное руководство» я узрел те же недостатки, что и в «Руководстве для начинающих». Иногда разжевано, иногда - скомкано, но при этом не просто скомкано, а как-то многословно скомкано. Вероятно, это - авторский стиль и, думаю, кому-то он будет по нраву, а точнее - по мышлению. В целом «Java 8. Полное руководство» - это неплохой справочник по Java. Но лично мне изложение тех же самых тем больше понравилось в другой книге. Достоинства:
  • Полное руководство. Кажется, там есть все темы, которые нужно знать новичку, и не только новичку.
  • Подробные пояснения.
Недостатки:
  • Много воды (но это кому-то может нравиться!);
  • Русский перевод не лучший.

Java. Библиотека профессионала, Кей С. Хорстманн, Гари Корнелл

Книги Шилдта и Хорстманна часто сравнивают друг с другом. И у той, и у другой есть преданные поклонники. Для меня именно двухтомник Хорстманна - лучший учебник по Java. Он же стал для меня настольной книгой на начальных и средних уровнях JavaRush. Когда я не понимал какую-то тему, в основном лез именно в Хорстманна, и тот многое прояснял. В книге рассматривается всё - от синтаксиса до многопоточного программирования, локализации приложений и работы с XML. И пусть вас не пугает название «Библиотека профессионала» (меня именно оно и отпугнуло), основы тут разобраны довольно хорошо. Кроме того, её полезно периодически перечитывать, чтобы освежить и упорядочить знания. Говорят, даже профессионалы находят в ней что-то полезное для себя… Не знаю. Стану профессионалом - расскажу! Достоинства:
  • При впечатляющем количестве страниц - мало воды (в отличие от Шилдта).
  • Содержит всё, что нужно новичкам.
  • Раскрывает Java 8.
  • Хорошая подача тем по коллекциям и дженерикам.
  • Очень хорошо сочетается с JavaRush. Доходите до темы, решаете задачки, в какой-то момент что-то не понимаете - смотрите Хорстманна, пробуете снова.
Недостатки:
  • Кому-то может показаться, что книга суховата;
  • Нет практики;
  • Русский перевод с ляпами.

«Java. Методы программирования». Блинов, Романчик

Когда-то я вычитал на форуме, что есть такая книга «Промышленное программирование», и в ней неплохие задачи. Оказалось - не соврали. Я нашёл её копию в PDF на сайте белорусского EPAM’а. Там издание не самое новое (по Java 6), а написана книга как основательный университетский учебник, то есть местами изложение несколько тяжеловесное, академическое. НО! Там действительно очень хороший сборник задач по программированию на Java, а также тестовые задания. Говорят, по этой книге учатся стажёры EPAM, а также её взяли на вооружение многие оффлайновые курсы по Java.

Там подход к задачам немного не такой, как у JavaRush, то есть, в среднем тут задачи чуть сложнее и каждая из них - что-то вроде… не мини, но микро-проекта. Так что рекомендую даже студентам JavaRush, так как недостатком практической стороны курса я считаю то, что все задачи в нём уже полностью спроектированы и есть слишком много подсказок. Скажем, задачи на ООП из этого сборника помогли мне очень неплохо разобраться в этом самом ООП наряду с книгами «неувядающей классики», о которых я пишу ниже. Книга написана как бы для будущих «гребцов», поэтому в ней описаны технологии Hibernate для разработки распределённых систем, а также основы HTML, XML, JavaScript. «Промышленное программирование» - если не лучший самоучитель Java, то очень неплохое учебное пособие. Но к ней нужно приходить уже подготовленным. Скажем, после десятка-другого уровней JavaRush. Позднее я обнаружил её более новое и переработанное издание, уже под именем «Java. Методы программирования ».

Достоинства:
  • Отличная подборка задач и тестовых заданий;
  • Есть официальная бесплатная версия (я полагаю, что она официальная, поскольку лежит не на каком-нибудь рутрекере, а на сайте EPAM);
  • Сравнение с С++.
  • Возможность понять, что проходят на стажировке EPAM.
Недостатки:
  • Слишком фундаментальное изложение. Но для повторения с практикой - подойдёт.
  • Нет Java 8.
Неувядающая классика Книги, о которых я пишу ниже можно назвать священными текстами для начинающих и продолжающих «джавистов».

Effective Java, Джошуа Блох

Это просто сокровище, а не книга, и посвящена она базовым принципам языка от одного из его авторов Джошуа Блоха. Скорее всего, вы уже пользовались его библиотеками (в Java Collection, например). Сразу оговорюсь: полнейшим новичкам, кроме каких-нибудь вундеркиндов-спидлёрнеров книга Effective Java не нужна. Сначала лучше усвоить синтаксис, и получить хоть какую-то практику программирования, так сказать, «набить шишки», а затем уже - браться за творение Джошуа Блоха. Книга пригодится тем, кто хочет по-настоящему понимать Java, сформировать правильный подход при программировании на этом языке, понять не только как нужно делать, но прочему нужно делать именно так. А ещё тем, кто хочет глубоко познать ООП (в принципе, это взаимосвязанные вещи). Эта книга - лучший учебник по Java в разрезе объектно-ориентированного подхода к программированию. Достоинства
  • Блестящее изложение материала по теме ООП.
  • Приведены лучшие практики программирования.
  • Автор очень хорошо знает Java изнутри.
Недостатки
  • Пока что отсутствует перевод самого нового издания книги (третьего).

Философия Java, Брюс Эккель

Название этой книги говорит само за себя. Это ещё одна «альфа и омега» для всех, кто хочет знать Java! В этой книге вы найдёте хорошие и внятные примеры, и из них будет понятно, как работает Java. Мне сложно сказать, какая из двух книг - «Философия Java» или «Эффективное программирование» - лучше. Я бы сказал, что Эккель несколько лояльнее к новичкам, в то время как Блох требует какого-никакого опыта. Впервые я прочитал главу из «Философии Java», когда только начинал учиться на JavaRush (кажется, на одном из ранних уровней она значилась в рекомендованных). Тогда она мне не пошла. Зато после 10 или 12 уровня - это была песня! И, я скажу, очень полезная песня. Я возвращался к ней и позже, уже когда пришёл к «Эффективному программированию». Скажу так: Блох и Эккель пускай говорят об одном и том же, но по-разному, и примеры приводят разные. Достоинства
  • Глубокое изложение принципов Java от профессионала;
  • Хорошо зайдет тем, кто переходит с других языков - много сравнений с С++, например.
  • Как мне кажется, её можно начинать читать уровня с 10-го, а вот Эккеля - чуть позднее.
Недостатки
  • Очень неудачные русские переводы;
  • Отсутствие нового издания книги на русском.

Краткие выводы

  1. Лучший самоучитель Java с нуля для тех, кто совсем ничего не знает - Head First Java;
  2. Лучший справочник-учебник по Java и настольная книга - «Библиотека профессионала». И, конечно, документация Oracle.
  3. Лучший сборник задач по программированию на Java - JavaRush. Ну а среди книг - «Java. Методы программирования».
  4. Лучшая неувядающая классика - «Философия Java» и «Effective Java». Это must read для всех, кто решил разобраться во всем по-настоящему, для глубокого понимания. Но лучше их читать постепенно и с расстановкой.
  5. Дополнительный вывод: есть возможность - читайте на английском. Русские переводы в основном очень слабые.

Программирование рассматривается как процесс создания компьютерных программ. Слово процесс в этом определении не лишнее. Обычно рассуждают в духе «посмотрите, какую замечательную структуру данных можно описать на данном языке программирования». Философия программирования подразумевает оглянуться по сторонам, да и в глубь копнуть.

Собственно разделение на кодирование, и создание алгоритмов это уже специфика, сначала идёт жизнь, то есть человек опирается на некую мысль вроде «напишу-ка я фреймворк с такими-то свойствами». И вот это начальное направление это вопрос философии. Проблема в том, что часто жена программиста лучше его самого знает, на философском уровне, что он делает и почему. Элементарные философские категории: мышление, сознание, обусловленность программисту неведомы. И это странно, если сравнить способность программиста мыслить, например, читая статьи по функциональному программированию или алгоритмам поиска, вперемешку со статьями видных русских или европейских философов, окажется, что собственно навык мышления у программистов развит не меньше, а то и больше. Вот только язык программиста очень богат пока он рассуждает о паттерн-матчинге и жалок и органичен когда ему надо выйти из своей песочницы, оторваться от IDE и файлового менеджера.

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

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

Например такая история:

пытаясь раскрасить карту округов Англии, Францис Гутри сформулировал проблему четырёх красок, отметив, что четырёх цветов достаточно, чтобы раскрасить карту так, чтобы любые два смежных региона имели разные цвета. Его брат передал вопрос своему учителю по математике, Огастесу де Моргану, который упомянул о нем в своём письме Уильяму Гамильтону в 1852 году. Артур Кэли поднял эту проблему на встрече Лондонского математического сообщества в 1878 году. В том же году Тэйтом было предложено первое решение этой задачи.

Понимаете? Социальное измерение. То есть вы учите не только код, но вы и знаете имена тех кто этот код придумал, вы не изучаете просто язык Си, но и историю его создания. Это даёт возможность двигаться дальше в исторической перспективе, даёт вам возможность осознать своё местонахождение в социальной структуре и найти где приложить свои силы в новом для всего человечества направлении. Русские постоянно изобретают новые языки программирования и алгоритмы, с этим нет проблем, просто из-за незнания истории и философии программирования вы изобретаете то, что уже изобретено. Либо, что ещё хуже вы изобретаете что-то новое, но не имеете понятия, куда это деть, какому «Лорду Гамильтону» написать о своей работе, и на каком «заседании лондонского клуба» зачитать доклад. Доклад-то вы напишете, и он, скорее всего, будет совершенен с технической точки зрения.

Хотя системная инженерия подразумевает анализ и постановку задачи перед собственно проектированием, алгоритмированием, разработкой структур данных, кодированием и отладкой, но задачу-то ставит заказчик. Заказчик это «Господь Бог» в философии программирования, он не осмысляется, поскольку не может быть осмыслен, он - абсолют и высшая сила. Можно только осмыслять его отдельные указания и жаловаться на несовершенство «божьих творений». Сами отношения программиста и заказчика в учебнике по Java не поднимают, это марксизм или протестантская этика: метафизика подчинения и обусловленность материальными ценностями. В Америке есть класс «супер программистов», «старт-аперов», люди не имеют заказчика, они знают жизнь настолько, что сами могут увидеть потребности. То есть он не сидит и не ждёт пока некто, кто в жизни разбирается лучше него, придёт и скажет ему, что ему делать, он сам осмысляет жизнь и находит куда двигаться чтобы заработать и реализоваться как деятель. Не пишет программу, которую люди запрашивают, а сам создаёт запрос и сам же его удовлетворяет. Был ли запрос на iphone когда Джобс его придумал? Или Джобс создал сам запрос?

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

Человек считается мыслящим существом, и программисту было бы очень легко понять мышление если бы он сравнил его с компьютерной программой. Человек как и программа не может работать в вакууме, человек, упрощённо говоря, думает то - что видит. Смотришь в код, думаешь как его улучшить, смотришь на сообщение об ошибке - думаешь как её исправить. Попробуйте отвернуться от экрана и продолжать решать ту же самую проблему, вы увидите - она плавно, но быстро выветривается из головы. Это и называется, думать то - что видишь, опираться на входные сигналы, обусловленность сознания. Поэтому появляется второй вектор программирования. Я пишу программу, она управляет процессами в компьютере, в чипах, но, я же сам и смотрю на мной же написанный исходный код, и то, что я вижу, является моим личным входным сигналом и позволяет мне думать дальше. Отсюда постоянные исследования в области новых языков программирования. Отсюда желание выучить ещё один, и ещё один язык программирования (ЯП). Человек хочет запрограммировать сам себя, расширить свои возможности.

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

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

Программист это как раб лампы, как батарейка матрицы - если он вдруг начнёт применять свой мозг, свои невиданные способности по оперированию языками, логикой, работой с объёмами данных в обычной жизни - он может стать тем самым одноглазым, который король в стране слепых. Свитер облегает шею и тело, пуловер имеет широкое отверстие чтобы его было удобнее натягивать (pull-over), кофта имеет пуговицы. У джемпера вместо широкого отверстия застёжка. Это элементарно, можно написать в одну строчку кода. Но программисту не понятно одно, что эта информация, это не про одежду, это - часть описания жизни. Правда европейцы часть отличаются, есть культура программировать жизнь, особенно у англичан. Давно они открыли, что можно написать какое-то письмо, например «высылаю вам три мешка сукна, вышлите мне шесть золотых» и вдруг это можно повторять снова и снова и появляется возможность управлять жизнью просто сидя за своим рабочим столом и сочиняя письма. Венеция, Ганза, Кембрия. Это качество унаследовали и американцы, и поскольку они же полюбили и компьютеры и программирование они вышли на недосягаемый уровень. Они видят третий вектор программирования: любой код, любая программа программирует не только компьютер, не только процессор, но и пользователей.

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

Трёхнаправленное программирование. Компьютер, программист, пользователь. Невозможно внести изменения в код, не внеся изменения в будущее пользователя и программиста. Но можно об этом не думать. Так проще. Не думать - всегда проще. Человек из всех входных сигналов предпочитает принимать те, которые не требуют осмысления, а лишь ощущения. Вкус пива, чистая рубашка, похвала, или даже оскорбления и наезд начальства. Из этих эмоций далее следует эмоциональное принятие решений. Приятный фреймворк. Идиотский язык программирования. Тупой коммент. Классная статья. У меня возникла идея написать свою реализацию b-trees. Почему? Ну понравилась идея. Общение программистов, самых логически занятых сознаний, сводится к обмену эмоциями. Это два бурлящих потока, сталкиваются, отталкиваются, создают вихри - как же они вообще могут программировать? Очень просто, после часа эмоций они расходятся чтобы читать книги. Тут включается мысль. Киньте ссылку, я почитаю. Мне понравилось, есть что-нибудь почитать по этой теме? Две жизни. Программист особенно интересен тем, что для него даже кодирование это эмоциональное занятие, он бросает свои чувства в холодный экран, он пытается почуять логику и оформить себя как разум в результате. Русским программистам это особенно свойственно, а не свойственно им - рассуждать, тем более вслух, тем более письменно. Более того, человек способный рассуждать о своём проекте вызывает недоверие - он кажется вруном, который вместо того, чтобы смотреть в код, осознавать структуру алгоритма, почему-то думает о социальных проявлениях, пиарится, - сказки про Эльбрус и Фантом.

Поэтому в России нет Open Source. Потому что опенсорс это не умение программировать, это умение общаться. Это знание истории программ и программистов. Вы можете выложить на гитхаб своё творение, и даже написать к нему статьи и инструкции, но некому этого будет читать. Или они прочитают и напишут «хочу присоединиться к проекту, только не знаю, что делать». «Студент, немного знаю Яву, очень интересный проект, скажите, что делать». Почему американский студент «знающий Яву» сразу знает, что делать? Почему он может создать один опенсорс проект и присоединится к другому? Вопрос более социальный чем философский, наш социум в другом состоянии. Но философу ясно, - человек не осознаёт себя. Как говорит Гузеева в «Давай поженимся» - «ничего про себя не понимает». Он сидит в своей комнате за компом, мама ему говорит, «ну что ты у меня такой к жизни неприспособленный». «Ой, отстала бы ты, сама что ли умная». Но мама умная, это ты дурак. Точнее у неё другие входные сигналы, ты смотришь в монитор, она смотрит по сторонам. Даже отставая интеллектуально, в навыках логики и работы с информацией, наличие обширных входных сигналов из жизни, о людях, о взаимоотношениях - делает человека понимающим жизнь лучше программиста.

Мама не дура, даже по одежде и тарелкам может твоё будущее предсказать не зная асинхронной обработки данных. Это не сложно, и ты бы мог, если бы смотрел на социум и знал язык описания и программирования. По инстанциям похлопотать. Растёт ценный кадр. Толковый парень появился. Выправить документы. Начальство приметило. Это API. Ничего сложного. Программисты могут и должны править миром. Но, пока что, только небольшой слой американских программистов это понял. Гейтс понял, что программа может глючить когда её инструкции выполняются в компьютере, но она не должна глючить, когда её инструкции выполняет пользователь. Это не только цинизм, это понимание своей роли, это исследование поведения, это изучение API пользователя и всего общества. Нажми сюда, что будет если пользователь нажмёт эту кнопку? А если тут введён текст, как сделать, чтобы он ввёл текст и сюда? Открылось окно выбора файла, в какой папке по умолчанию оно должно быть открыто? Сколько часов вы потратили на отладку кода, почему вы не потратили в десять раз больше изучая поведение пользователя? Гейтс потратил.

Люди записывают на видео поведение пользователя за программой, причём с момента входа в комнату. Самое смешное, что эти люди это не программисты, это приглашенные люди - социологи, даже дрессировщики. Они сидят и выполняют работу, которую по идее программист должен выполнить эффективнее, ведь это отладка кода. Вносятся изменения. Но программа работает не быстрее после этих изменений, она может быть работает медленнее и чаще глючит, в процессоре, на компе глючит, но в поведении пользователя она работает лучше, он быстрее выполняет операции (performance), чаще достигает цели (debug), он доволен (energy saving). Он платит в конце концов. Всё, что делал Джобс - это программирование пользователя. Как он к этому пришёл? культура окружения? наркотики? личный талант? Философия. Канты-гегели, Гуссерли-расселы, Витгенштейны-сартры, тысячи их. Они создали немало языков для описания реальности и API для её осмысления. Большинство умных слов которыми мы пользуемся интуитивно, было ими некогда введено и сформулировано. Нельзя употреблять слово «культура» и думать о консерватории, говорить «консерватория» и не знать, что это в первую очередь система преподавания и отбора преподавателей. Консервативная и консервирующая опыт. Для программиста, всё чем он пользуется взялось из ниоткуда. Умные люди разберутся, преподы в универе есть для этого.

Кстати, преподаватель программирования обычно не умеет ни программировать, ни преподавать. Отдельная песня, так вышло, Сталин направил миллионы дремучих крестьян учиться инженерии, сейчас аналогичное происходит в Индии. Три миллиона выпускников ежегодно. Понятно, что люди стремятся стримлайнить преподавание, выкидывают всё лишнее. Зачем вам это знать, вы это учите - пригодится. История опытов Максвелла, очень увлекательна, но вам некогда её учить, вы выучите сразу уравнение Максвелла. Ну вы хоть скажите студентам, что до Максвелла не было ничего, после него уже наука об электричестве была развита. Какой пример для программистов! Нет ничего - что-то есть. Хотя бы расскажите как Страуструп и Торвальдс работали. Как из ничего, получается что-то. То есть преподаватель, так же философски дремуч, как и студент.

Вы смеётесь, что американцы не могут на глобусе найти Ирак. А вы над собой посмейтесь, вы можете на глобусе истории логики найти Гегеля? Вы пользуетесь BASH, вы знаете, кто и когда его создал и как он осмысляет своё творение по прошествии десятков лет? Вы знаете почему терминал называется терминал? Как он связан с телетайпом? Вы знаете, что компания IBM делала перепись населения в США более ста лет назад на деньги центробанка, а потом поставила эти механические компьютеры Гитлеру? Вы представляете, что устройство и терминология баз данных ведёт историю от тех перфокарт, а они от каталогизаторов привезённых из Англии в начале девятнадцатого века? Вы знаете как создатель Atari Бушнел не понял идеи своего работника Джобса? Вы хотя бы представляете роль Atari в истории вычислительной техники? Кто кого скопировал Atari или Sinclair? Мало знать устройства и их историю, надо в первую очередь знать людей, мысли и их историю. Отец Гёделя был священником, а отец Святого Франциска был банкиром и торговцем. Что такое львовско-варшавская школа логики?

Ну ладно, это ваше трёхнаправленное программирование, понятно, надо знать не только код и язык программирования, но и историю языка, знать себя и пользователя и историю и языки, ну а как же отладка? А что отладка? Зачем вообще нужен отладчик? Просто вы ещё не умеете мыслить, вы всё ещё реагируете и ждёте подсказок, вы не понимаете свою программу, вы останавливаете её и ждёте, что отладчик вам что-то покажет. Тогда, надеетесь вы, в голове появятся идеи. «В вашем отладчике неудобно ставить брэкпойнты.» Метапрограммирование это когда программа создаёт программу, тоже своего рода рекурсия. Так же и программа может дебажить программу, мета-отладка, но для этого программист должен быть в два раза умнее, он должен удерживать в голове сразу две программы. Люди которые используют printf() и смеются над отладчиками, просто лучше понимают, что делают.

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

Философия программирования

Сергей Трофимов

Последнее время, я часто слышу о том, что философия умерла. Что вместе с эпохой Аристотеля, Гегеля, Бердяева ушла и философия, что сейчас умы людей полностью занимают точные науки, а для философии не осталось места. Но философия это в первую очередь мировоззрение, призма сквозь которую человек воспринимает окружающий мир свое место в этом мире, место среди окружающих его людей. Человечество, получив при помощи технического прогресса новые инструменты изучения окружающего мира одновременно получило и инструменты воздействия на этот мир и самого себя как часть окружающего. Люди остро нуждаются в осмыслении своего места в условиях технического прогресса влияния технических новшеств на самого человека, воспитании осторожного обращения с гигантской силой, данной человечеству техническим прогрессом.

Вступление.

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

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

В широком смысле слова под термином “программирование” понимается составление программ для технических устройств. Здесь будут рассмотрены вопросы составления программ для таких программно-управляемых вычислительных устройств как персональные компьютеры, которые наиболее доступны широкому кругу людей и которые достаточно развиты для так называемого “интеллектуального программирования”. Под термином “интеллектуальное программирование” здесь будет пониматься составление таких программ, которые могут соперничать с человеческим разумом или помогать ему в решении интеллектуальных задач.

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

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

Электронное воплощение человеческой мысли.

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

До возникновения письменности знания, полученные людьми, передавались из уст в уста, от отца к сыну, от деда к внуку, перерастая в легенды сказки и былины, все больше теряя нить объективного знания и приобретая налет личных переживаний каждого рассказчика.

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

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

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

Сначала ЭВМ выполняли только рутинные счетные и поисковые операции, далее программы для ЭВМ становились все более сложными, их логика работы стала приближаться к работе человеческого мозга. Уже сейчас компьютерные программы играют в такие высокоинтеллектуальные игры как шахматы лучше человека. Примером тому служит победа программы “Deep Blue” в шахматном матче против чемпиона мира Гарри Каспарова.

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

Программирование - искусство или ремесло?

Человек получает эстетическое удовлетворение, когда создает что-либо своими руками, когда из под рук мастера выходит произведение искусства, которое доставляет удовольствие не только создателю, но и многим десяткам и тысячам людей, заставляет переживать чувства радости, печали, ненависти т.д.Искусство имеет своей задачей раскрывать истину в чувственной форме, в художественном оформленииС этой точки зрения программа тоже может рассматриваться как произведение искусства.

Как только появилось само понятие программирования, у людей стал возникать вопрос: программирование - это искусство или ремесло?

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

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

Есть своя притягательность и красота в архитектурных ансамблях и даже в механизмах, произведенных человеческим разумом и руками. Не даром не пустеют залы Политехнического музея в Москве, где собраны макеты и “живые” примеры “эволюции” механизмов созданных человеком в разное время и в разных странах.

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

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

Воплощение индивидуума в программе.

Известно философское понятие - отражение человеческого “Я” в деятельности индивидуума. Как и в любой деятельности, программист вкладывает свои знания, опыт, а хороший программист и душу в создаваемую программу. Каждый индивидуум, приобретя какой-то предыдущий опыт, вкладывает его в создаваемые им вещи. И программист не исключение. В программе воплощается его миропонимание и мироощущение. Компьютер становится как бы продолжением человеческого разума. Действуя по заложенной человеком программе компьютер “говорит” вложенными в него человеком словами и на определенные ситуации отвечает так, как ответил бы человек, его программировавший. Написание программы чем-то сродни воспитанию ребенка. Только воспитание проходит всю жизнь, а программирование все-таки имеет ограниченный срок. Также как маленькому ребенку программист объясняет, что компьютер должен делать в той или иной ситуации. Какие будут последствия на его действия и что нужно будет предпринять для изменения таких последствий. И как воспитание ребенка зависит от личности и примера родителей, так и программа зависит от личности программиста. Хороший человек будет вкладывать в компьютер набор действий, которые будут помогать людям в работе, учебе или отдыхе. Безответственный человек будет “учить” компьютер ломать, крушить, разрушать созданные другими людьми знания. Характерным примером может служить неиссякаемый поток так называемых компьютерных вирусов, программ, которые, копируя себя с компьютера на компьютер, разрушающе воздействуют на компьютерные системы, выполняя заложенный в них разрушающий алгоритм.

Влияние программы на личность.

У человека глубоко развито чувство следования авторитетам, следование за лидером. Эта черта развивается с детства, когда лидером для маленького человека являлся каждый взрослый. Все, что говорили взрослые было непреложной истиной, не подвергающейся сомнению. Взрослея, человек начинает критически относиться к окружающему миру и мнениям других людей. Однако этот критический подход во многом зависит от мировоззрения человека, его образования и жизненного опыта. Просматривается определенная закономерность, что к печатному слову человек относится менее критично, чем к живому. Это обусловлено развитием системы образования человека. Большинство научных знаний индивидуум получает через печатные издания. И по большому счету мировоззрение человека формируется именно в процессе учебы. Именно в эти годы закладывается понимание мира и места личности в нем. Формируется система ценностей и авторитетов. Именно в это время глубоко в подсознание закладывается отношение к печатному слову, как к непреложному авторитету. Можно вспомнить еще недавние времена социалистической цензуры, когда вся информация, выдаваемая через печатные издания, была тщательно отфильтрована и причесана для воспитания так называемого “коммунистического мировоззрения”.

Сейчас авторитет печатных изданий во многом утрачен. Учебники истории переписываются с завидной периодичностью. Газеты и журналы печатают такую информацию, которую в некоторых случаях можно смело отнести в разряд мифов и легенд. Однако авторитет утраченный печатными изданиями был тут же подхвачен электронными изданиями. А с развитием глобальной сети Internet перекочевал в нее. Сейчас услышать фразу “я прочитал в Интернете...” можно услышать чаще, чем “я был в библиотеке...”. Мне лично знакомы люди, обычно старшего поколения, безоговорочно верящего всему, что “сказал” компьютер. Этим широко пользуются недобросовестные торговцы. Еще недавно в самом центре Москвы можно было встретить бизнесмена с переносным компьютером, который за некоторую сумму “спрашивал” у вычислительной машины астрологический прогноз или что-нибудь в этом роде. И выдавал отпечатанные тут же прогнозы. А если присмотреться к рекламным роликам, которые крутятся на телевидении, то трудно не заметить, что в каждом втором из них компьютер играет роль советчика в использовании той или иной вещи. Образ человека в белом халате, нажимающего кнопку компьютера, на экране которого какие-то графики, просто кочует из ролика в ролик.

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

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

Это состояние сродни запою у взрослых. Ощущение то же. Человек погружается в сюрреалистический мир фантазий и вывести его оттуда довольно трудно.

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

В рассказе Рея Брэдбери “Вельд” живо обыграна именно такая ситуация. Еще до изобретения такого типа электронных игрушек гениальный писатель изобразил последствия подмены истинных ценностей на электронную модель. В этом произведении дети жестоко расправились со своими родителями только за то, что они “убили” голографическое изображение, выключив питание экрана. Здесь я не призываю полностью отказаться от электронных вещей и программ и перейти в каменный век, но к этим вещам необходимо подходить достаточно серьезно, чтобы не допустить пагубного влияния программ на неокрепшую психику.

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

Жизнь электронной мысли (мыслят ли компьютеры).

В создании любой вещи рано или поздно наступает момент, когда ее создатель “положит последний мазок”, когда он решит, что сделал все, что мог и пора отправлять свое произведение в “большую жизнь”. И с этого момента программа начинает жить самостоятельной жизнью, независимо от своего создателя. Здесь возникает такое понятие как “искусственный интеллект” , которое напрямую связана с понятием “мышление” и “мозг”. Известно, что электронно-вычислительную машину часто называют “электронным мозгом”. Тогда, проведя аналогию между человеческим мозгом и его мыслями, можно назвать программу “электронной мыслью” именно электронного мозга. Рассмотрим само понятие “мозг” и может ли оно применяться к электронно-вычислительной машине. Естественно, внешне человеческий мозг и компьютер не имеют ничего общего, однако можно найти сходство в деятельности данных объектов.

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

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

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

Таким образом, можно с уверенностью сказать, что на данном этапе развития ЭВМ программы, а следовательно и компьютеры мыслить не могут.

Морально - этические проблемы программирования.

Термин “компьютерные вирусы” прочно вошел в нашу жизнь. Любой человек, хотя бы немного знакомый с современными компьютерами, слышал это словосочетание, а кто-то и сталкивался непосредственно с его разрушительными воздействиями. Итак, что же такое “компьютерные вирусы”? Это программы, которые своими действиями нарушают работу других программ, разрушают данные, не дают возможности пользователям компьютера нормально работать. Причем такие программы могут копировать себя с компьютера на компьютер, чтобы захватывать все новые территории для своих “черных дел”.

Если это программа, написанная человеком, то возникает резонный вопрос: кто составляет такие программы? Такой человек должен обладать некоторыми навыками в обращении с компьютерами, особенно в написании программ . Он должен иметь доступ к компьютеру. У него должна быть причина для распространения вируса. Безусловно, миллионы людей обладают навыками, достаточными для того чтобы преднамеренно или случайно написать программу-вирус. Любой студент, изучающий программирование, и множество сообразительных подростков способны на это.

Конечно и специалисты по программированию могут создать программы-вирусы. Но они ценят свой труд и, прежде чем взяться за дело, постараются найти более простой и менее рискованный способ достижения свой цели. Сейчас принят закон, который за умышленную порчу компьютерных данных предусматривает наказание, вплоть до уголовного (статья 273 УК). А компьютерная программа - это воплощение своего создателя, его мыслей и разума. Конечно, если вирус пишет террорист или шпион сопредельного государства, то даже угроза уголовного наказания его не остановит, однако большинство вирусов, как показала практика, написаны вовсе не террористами в полном смысле этого слова, а людьми, которым не дает покоя слава Герострата, варварами, которые не ищут выгоды от своих действий. Они хотят продемонстрировать свое умственное превосходство, показать, что они умеют делать то, чего не умеют другие, причем они вполне работоспособны, но, вместе с тем, маются от безделья . Эти люди из тех, кто бьет стекла, поджигает лифты, обливает кислотой картины в музеях. Ими движет противоречивое желание. С одной стороны они хотят продемонстрировать свое превосходство над другими людьми, а с другой стороны чисто хулиганские, варварские побуждения сделать что-нибудь гаденькое. Если такой человек обладает необходимыми навыками, он может написать компьютерный вирус.

Здесь возникает известная проблема, если взять пример Раскольникова. Топор не убивает, убивает человек. Так и компьютерный вирус, созданный человеком, несет в своем теле злой умысел программиста.

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

Заключение.

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

Список литературы

Философские вопросы кибернетики М. СОЦЭГИЗ 1961 –392с.

Кибернетика. Мышление. Жизнь М. Мысль 1964. – 511с.

Корецкий С. Искусственный интеллект – миф или реальность? Hard’n’Soft #2 1999.

Сеченов И.М. Рефлексы головного мозга. 1863.

Искусство и научно-технический прогресс. М. 1973–461с.

Соловьев В.С. Философия искусства и литературная критика. М Искусство 1991 – 699с.

Выжлецов Г.П.Эстетика в системе философского знания.ЛГУ 1983

Гегель "Эстетика" в 4-х томах, Москва, 1969 г.

Крутова О.Н. Мораль: сознание и поведение. Ин-т философии М.Наука 1986 –207с.

Панцурин В.А. Внутренний мир личности и искусство. Свердловск 1990 –212с.

Файтс Ф. Джонстоун П. Кратс М. Компьютерный вирус: проблемы и прогноз: Пер. С англ. - М. Мир, 1994.- 176с. ил.

Достоевский Ф.М. Преступление и наказание. М. 1974. 542с.

Бодалев А.А. Популярная психология для родителей. М. :Педагогика, 1988 - 256 с.

Брэдбери Р. О скитаниях вечных и о Земле: -М.:Правда, 1987.-656 с., ил.