В чем суть программного принципа работы компьютера

Обновлено: 02.07.2024

Вычисления являются неотъемлемой частью науки — не только как инструмент для анализа данных, но и как средство мышления и открытий.

Так было не всегда. Информатика — относительно молодая дисциплина. Это началось как академическая область исследований в 1930-х годах с группы замечательных работ Курта Гёделя, Алонзо Чёрча, Эмиля Поста и Алана Тьюринга. В документах заложены математические основы, которые должны ответить на вопрос «что такое вычисления?» и обсудили схемы его реализации. Эти люди видели важность автоматических вычислений и искали их точную математическую основу. Различные схемы, предложенные каждой из них для реализации вычислений, быстро оказались эквивалентными, поскольку вычисления в любой из них могли быть реализованы в любой другой. Тем более примечательно, что все их модели привели к одному и тому же заключению, что определенные функции, представляющие практический интерес, например, будет ли вычислительный алгоритм (метод вычисления функции) когда-либо завершенным, а не застрявшим в бесконечном цикле, нельзя ответить с помощью вычислений.


Иллюстрация Тома Данна.

В то время, когда были написаны эти статьи, термины "вычисления" и "компьютеры" уже широко использовались, но с другими значениями, чем сегодня. Вычисление было принято для обозначения механических шагов, выполняемых для оценки математических функций; компьютеры были людьми, которые занимались вычислениями. В знак признания социальных изменений, которые они возвещали, разработчики первых проектов цифровых компьютеров называли свои системы аббревиатурами, оканчивающимися на «-AC», что означает автоматический компьютер, что приводило к таким именам, как ENIAC, UNIVAC и EDSAC.

В начале Второй мировой войны военные Соединенных Штатов и Соединенного Королевства заинтересовались применением вычислений для расчета баллистических и навигационных таблиц, а также для взлома шифров. Они заказали проекты по разработке и созданию электронных цифровых компьютеров. Только один из проектов был завершен до окончания войны. Это был сверхсекретный проект в Блетчли-парке в Англии, в ходе которого был взломан немецкий шифр Enigma с использованием методов, разработанных Аланом Тьюрингом.

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

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

Название поля менялось несколько раз, чтобы не отставать от изменений. В 1940-х это называлось автоматические вычисления, а в 1950-х — обработка информации. В 1960-х годах, по мере того, как он перешел в академические круги, он получил название информатика в США и информатика в Европе. К 1980-м годам вычислительная техника включала комплекс смежных областей, включая информатику, информатику, вычислительную науку, вычислительную технику, разработку программного обеспечения, информационные системы и информационные технологии. К 1990 году термин вычисления стал стандартом для обозначения этой основной группы дисциплин.

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

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

Основатели этой области пришли из всех трех парадигм. Кто-то думал, что вычисления — это раздел прикладной математики, кто-то — раздел электротехники, а кто-то — раздел науки, ориентированной на вычисления. В течение первых четырех десятилетий своего существования эта область была сосредоточена в основном на инженерии: задачи создания надежных компьютеров, сетей и сложного программного обеспечения были пугающими и привлекали внимание почти всех. К 1980-м годам эти проблемы в основном были решены, и компьютеры быстро распространялись во всех областях с помощью сетей, суперкомпьютеров и персональных компьютеров. В 1980-е компьютеры стали достаточно мощными, чтобы ученые-провидцы могли увидеть, как использовать их для решения самых сложных вопросов — «больших задач» в науке и технике. Возникшее в результате движение «вычислительных наук» привлекло ученых из всех стран и завершилось принятием Конгрессом США Закона о высокопроизводительных вычислениях и коммуникациях (HPCC) 1991 года для поддержки исследований по целому ряду крупных проблем.

Сегодня существует соглашение о том, что вычисления пример науки и техники, и что ни наука, ни разработка не характеризуют вычисления. Тогда что делает? Какова парадигма вычислений?

Лидеры отрасли с самого начала боролись с этим парадигмальным вопросом. Попутно было три волны попыток унификации взглядов. Аллен Ньюэлл, Алан Перлис и Херб Саймон возглавили первую в 1967 году. Они утверждали, что вычислительная техника уникальна среди всех наук в своем изучении информационных процессов. Саймон, лауреат Нобелевской премии по экономике, зашел так далеко, что назвал вычисления наукой об искусственном. Ключевой фразой этой волны было «вычисления — это изучение явлений, окружающих компьютеры».

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

Третья волна возникла в результате исследования в области компьютерных наук и инженерии (COSERS), проведенного Брюсом Арденом в конце 1970-х годов. Его ключевой фразой было «вычисления — это автоматизация информационных процессов». Хотя его окончательный отчет успешно представил науку в области вычислительной техники и объяснил многие эзотерические аспекты неспециалистам, его основная точка зрения не прижилась.

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

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

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

Все это приводит нас к современной крылатой фразе: «Вычисления — это изучение информационных процессов, естественных и искусственных». Компьютер является инструментом в этих исследованиях, но не является объектом изучения. Как однажды сказал Дейкстра, "вычисления связаны с компьютерами не больше, чем астрономия с телескопами".

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

Основные принципы вычислительной техники

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


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

Иллюстрация Тома Данна.

Для достижения этой цели мы с коллегами разработали концепцию Великих принципов вычислительной техники. Эти принципы делятся на семь категорий: вычисление, общение, координация, запоминание, автоматизация, оценка и проектирование (примеры см. в таблице справа).

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

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

Влияние возникает, когда два явления взаимодействуют друг с другом. Атомы возникают в результате взаимодействия между силами, создаваемыми протонами, нейтронами и электронами. Галактики взаимодействуют посредством гравитационных волн. Люди взаимодействуют с помощью речи, осязания и компьютеров. И взаимодействия существуют между доменами, а также внутри доменов. Например, вычисления влияют на физические действия (электронное управление), жизненные процессы (трансляция ДНК) и социальные процессы (игры с выводами). Вторая таблица иллюстрирует взаимодействие между вычислениями и каждой из физических, жизненных и социальных наук, а также внутри самих вычислений. Не может быть сомнений в повсеместном распространении вычислений во всех областях науки.

Что такое информационные процессы?

Существует потенциальная трудность с определением вычислений с точки зрения информации. Кажется, что информация не имеет устоявшегося определения. Клод Шеннон, отец теории информации, в 1948 году определил информацию как ожидаемое количество вопросов «да» или «нет», которые нужно задать, чтобы решить, какое сообщение было отправлено источником. Он намеренно обошел вопрос о значении битовых комбинаций, который кажется важным для определения информации. Просматривая множество опубликованных определений, Паоло Рокки в 2010 году пришел к выводу, что определения информации обязательно включают объективный компонент — знаки и их референты, или, другими словами, символы и то, что они обозначают, — и субъективный компонент — значения. Как мы можем основывать научное определение информации на чем-то с таким существенным субъективным компонентом?

У биологов похожая проблема с «жизнью». Биолог Роберт Хейзен отмечает, что у биологов нет точного определения жизни, но у них есть список из семи критериев того, когда существо живет. Наблюдаемых аффектов жизни, таких как химия, энергия и размножение, достаточно, чтобы обосновать биологию. Точно так же мы можем обосновать науку об информации наблюдаемыми аффектами (знаками и референтами), не имея точного определения смысла.

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

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

Даже это простое понятие репрезентации имеет глубокие последствия. Например, как показал Грегори Чайтин, не существует алгоритма поиска кратчайшего возможного представления чего-либо.

Некоторые ученые оставляют открытым вопрос о том, действительно ли наблюдаемый информационный процесс управляется алгоритмом. Таким образом, трансляцию ДНК можно назвать информационным процессом; если кто-то обнаружит управляющий алгоритм, его также можно будет назвать вычислением.

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

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

Где компьютерные технологии

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

Это определение достаточно широкое, чтобы учесть три проблемы, которые беспокоили ученых-компьютерщиков в течение многих лет: непрерывные информационные процессы (такие как сигналы в системах связи или аналоговых компьютерах), интерактивные процессы (такие как текущие веб-службы) и естественные процессы (такие как как перевод ДНК) все это выглядело как вычисление, но не соответствовало традиционным алгоритмическим определениям.


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

Иллюстрация Тома Данна.

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

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

Многие специалисты по программному обеспечению думают о знаниях в области разработки программного обеспечения почти исключительно как о знаниях конкретных технологий: Java, Perl, html, C++, Linux, Windows NT и т. д.Знание конкретных деталей технологии необходимо для выполнения компьютерного программирования. Если кто-то поручает вам написать программу на C++, вы должны кое-что знать о C++, чтобы ваша программа работала.

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

Сущность и случайность

В 1987 году Фред Брукс опубликовал влиятельную статью "Нет серебряных пуль – сущность и случайность в программной инженерии" (Computer, апрель 1987 г.). Основное утверждение статьи Брукса заключалось в том, что ни один инструмент или методология — ни одна «серебряная пуля» — не предвещают повышения производительности в соотношении 10 к 1 в течение следующего десятилетия. Обоснование этого утверждения имеет прямое отношение к различию между технологическими знаниями и принципами разработки программного обеспечения.

Используя слова «сущность» и «случайность», Брукс опирался на древнюю философскую традицию различать «существенные» и «случайные» свойства. Существенные свойства — это те свойства, которыми должна обладать вещь, чтобы быть ею: автомобиль должен иметь двигатель, колеса и трансмиссию, чтобы быть автомобилем. Это важные свойства. Автомобиль может иметь или не иметь V8 или V6, шипованные зимние шины или гоночные слики, автоматическую или механическую коробку передач. Это «случайные» свойства, свойства, возникающие случайно и не влияющие на основные свойства автомобиля.

По словам Брукса, самая сложная работа по разработке программного обеспечения — это неверная передача концепций на конкретном языке программирования (кодирование) или проверка достоверности этого представления (тестирование) — это случайная часть разработки программного обеспечения.< /p>

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

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

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

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

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

Принципы разработки программного обеспечения

Знания, которые решают то, что Брукс называет основной трудностью разработки программного обеспечения, я называю «принципами разработки программного обеспечения». За последние 30 лет, начиная с первой конференции НАТО по программной инженерии в 1968 году, индустрия программного обеспечения прошла долгий путь в определении основных знаний, необходимых инженеру-программисту для эффективной разработки программного обеспечения.

Один из способов взглянуть на состояние этой совокупности знаний – представить ее с точки зрения общей совокупности знаний, необходимых для создания сложной программной системы, и доли относительно стабильной части этой совокупности знаний – который не устареет в течение трех лет. Как показано на рисунке ниже, во время конференции НАТО 1968 года это стабильное ядро ​​было относительно небольшим.


ГИФ


Насколько мал был этот объем знаний в то время? Учтите, что первый полностью корректный алгоритм бинарного поиска был опубликован всего за шесть лет до конференции НАТО. Бём и Якопини опубликовали статью, которая сделала возможным отказ от goto и структурного программирования всего за 2 года до конференции. Эдсгер Дейкстра написал редактору свое знаменитое письмо «Утверждение GoTo считается вредным» в том же году, что и конференция. Ларри Константин, Гленфорд Майерс и Уэйн Стивенс опубликовали первую статью о структурном дизайне только через шесть лет после конференции. Том Гилб опубликовал первую книгу по метрикам программного обеспечения через девять лет после конференции. Знаковая книга Тома Демарко по структурному анализу не появлялась до 1979 года. Любой, кто пытался определить стабильное ядро ​​знаний в 1968 году, лишился бы работы. Трудно найти много знаний, которые считались бы частью «стабильного ядра» знаний в области разработки программного обеспечения в 1968 году, которые все еще используются сегодня — возможно, только около 10 процентов.

Напротив, я думаю, что та же диаграмма, нарисованная сегодня, будет выглядеть примерно так:


ГИФ


У нас до сих пор нет точных знаний о том, что необходимо для эффективной разработки программного обеспечения, поэтому стабильное ядро ​​теперь занимает лишь около 75% знаний, необходимых для разработки программной системы. Но нам, вероятно, никогда не понадобится ядро, составляющее 100 % совокупности знаний — это будет означать, что разработка программного обеспечения достигла стабильного состояния и невосприимчива к будущим улучшениям.

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

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


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

Глубоко исследуя эти вопросы, Суть программного обеспечения представляет теорию проектирования программного обеспечения, которая дает новые ответы на старые вопросы. Дэниел Джексон объясняет, что программную систему следует рассматривать как набор взаимодействующих концепций, разбивая функциональность на управляемые части и предоставляя новую основу для размышлений о дизайне. Благодаря этой радикальной и оригинальной точке зрения Джексон предлагает практичный и последовательный путь, доступный каждому — от стратега и маркетолога до UX-дизайнера, архитектора или программиста — для создания мощного, надежного и приятного в использовании программного обеспечения.

Джексон исследует все аспекты концепций – что они собой представляют, а что нет, как их идентифицировать, как определять и т. д. – и предлагает предписывающие принципы и практические советы, которые можно экономично применять в самых разных областях. домены. Он применяет эти идеи к современным проектам программного обеспечения, используя примеры от ведущих производителей программного обеспечения, таких как Adobe, Apple, Dropbox, Facebook, Google, Microsoft, Twitter и других. Джексон показывает, как концепции позволяют дизайнерам сохранять и повторно использовать знания о дизайне, а не начинать каждый проект с нуля.

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

Дэниел Джексон о сущности программного обеспечения

Темный дизайн Facebook: дело не только в алгоритмах

Награды и признание

  • Финалист премии PROSE в области компьютерных и информационных наук, Ассоциация американских издателей.

Дэниел Джексон — профессор компьютерных наук Массачусетского технологического института и заместитель директора Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института. Он является автором книг Software Abstractions и Portraits of Resilience.

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

«Сущность программного обеспечения Дэниела Джексона — монументальная работа. Он обеспечивает новую структуру для осмысления программного обеспечения с точки зрения концепций. Широкомасштабный, он использует современные примеры, которые читатель знает. А поскольку книга (и многочисленные примечания к ней) предназначена для чтения разными способами, каждый инженер-программист найдет в ней что-то ценное», — Фредерик П. Брукс-младший, автор книги Мифический человеко-месяц: Очерки разработки программного обеспечения

«Я не могу сказать достаточно хороших слов об этой книге. Сущность программного обеспечения – это необходимая книга для всех, кто занимается созданием программного обеспечения, отвечающего потребностям и целям человека. Его глубокая практическая основа предлагает широко полезный и чрезвычайно мощный способ думать о разработке программного обеспечения и создавать его», — Митчелл Капор, основатель Lotus Development Corporation

«Сущность программного обеспечения Дэниела Джексона дополнит книгу Фреда Брукса Мифический человеко-месяц в качестве влиятельного руководства по созданию отличных программных продуктов и инструментов. Дизайнеры придут к работе с более широким кругозором, более ясными мыслями и способностью создавать превосходное программное обеспечение», — Бен Шнайдерман, Мэрилендский университет.

«The Essence of Software не просто даст вам новые идеи: новые и тщательно разработанные концепции программного обеспечения Дэниела Джексона изменят ваше представление о дизайне, программном обеспечении и программировании — независимо от систем или языков, которыми вы пользуетесь, независимо от того, являетесь ли вы начинающим программистом, профессиональным программистом или исследователем. Это знаковая книга, которая сделает цифровой мир лучше», — Гарольд Тимблби, автор книги Fix IT: See and Solution the Problems of Digital Healthcare

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

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

Великая дихотомия
Здесь мы подошли к самому глубокому и самому важному осознанию в моей жизни. Это можно выразить простым вопросом:

Является ли реальность набором объектов или системой процессов?

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

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

Не вдаваясь в увлекательные подробности истории физики, я просто скажу, что в начале двадцатого века физики поняли, что на субатомном уровне частицы и волны сливаются. Фотон, например, вел себя как волна, а также как частица. Различие возникло только из того, как вы его измерили. В одном типе эксперимента это действовало как волна; в другом эксперименте, предназначенном для частиц, он вел себя как частица. Это была и волна, и частица: «волна». В конце концов они установили, что все во Вселенной представляет собой волну. Но массивные частицы, такие как звезды, имеют чрезвычайно короткие длины волн, а частицы с очень длинными волнами ведут себя почти полностью как волны. Этот корпускулярно-волновой дуализм теперь является частью фундаментальной физики.

Интересно, что принцип неопределенности Гейзенберга можно выразить в виде волн или частиц. Если вы хотите применить его к частице, используйте эту форму:

Перевод: неопределенность измерения импульса частицы, умноженная на неопределенность измеренного положения частицы, всегда больше или равна константе Гейзенберга h, которая составляет 6,62 * 10^-34 Дж-секунд.

Но есть и другая форма, выражающая ту же идею в терминах, более подходящих для волн:

Перевод: неопределенность измерения энергии события, умноженная на неопределенность измерения времени события, всегда больше или равна постоянной Гейзенберга h. Обратите внимание, что эта версия принципа неопределенности касается энергии и времени — это важно.

Экономика . Как вы узнали в старшей школе, существует два класса экономической продукции: 1) товары и 2) услуги. Хороши объекты; службы — это процессы.

Компьютеры. Различие между компьютерами абсолютно очевидно. Данные являются объектами или описывают их; программы — это процессы.

Лингвистика . Существует два основных класса слов: существительные и глаголы. Существительные определяют объекты; глаголы определяют процессы. Каждое предложение должно содержать хотя бы одно существительное и хотя бы один глагол.

Военная наука . Изучение военной науки сосредоточено на двух факторах: средствах (пушки, танки, самолеты, солдаты) и операциях (маневрировании ими). Активы — это объекты; операции — это процессы.

Таким образом, реальность состоит из объектов и процессов. Но есть хитрая загвоздка: объекты сливаются с процессами; иногда вы не можете сказать, является ли что-то объектом или процессом. Мы столкнулись с этим в физике, в которой частицы (объекты) могут при соответствующих обстоятельствах вести себя как волны и наоборот. Так фотон — это частица или волна?

В экономике размытие границ между объектом и процессом может сбивать с толку еще больше. Когда вы покупаете гамбургер, вы покупаете объект или процесс? Рефлекторный ответ — «возражать», но подумайте: разве вы не платите за услуги человека, который принимает ваш заказ, человека, который готовит мясо, человека, который водил грузовик, доставивший еду в ресторан, а человек, который разводил скот, выращивал пшеницу и так далее? Гамбургер — товар или услуга? Трудно сказать.

В чем суть вычислений?
Теперь, наконец, я могу вернуться к первоначальному вопросу, поставленному в этом эссе: в чем суть вычислений? Если вы попросите обычного человека указать на свой компьютер, он, скорее всего, укажет на монитор:

Har de har — люди такие тупые! Мы с вами прекрасно знаем, что компьютер — это большая коробка, которая гудит:

Читайте также: