7 чудес программирования

Пользователи сайта Quora попытались определить самые невероятные чудеса программирования. KV.by выбрал самые интересные ответы.

 

Ричард Кэннет Энг, работал с Fortran, Tandem TAL, C/C++, C#, Obj-C, Java, Smalltalk, Python, Go

  1. Smalltalk
  2. C++ – самый крупный и наиболее сложный из когда-либо существовавших языков программирования
  3. JavaScript – самая большая афера в истории программирования
  4. Go – самый быстроразвивающийся язык программирования в истории: с нуля до вершин менее, чем за 7 лет!
  5. Java – вытеснившая COBOL как единственный язык программирования в сфере предпринимательства; он намного опережает другие языки программирования по популярности и востребованности
  6. Python – как этому сравнительно медленному скрипт-языку удалось достичь такой популярности при численном подходе, в сферах машинного обучения, науки о данных, "интернете вещей", веб-разработки?
  7. Lisp/Scheme – гомоиконическое чудо с великолепной макро-расширяемостью кода

Не стоит забывать о:

  • C – поддерживает всю IT-индустрию (в том числе Linux)
  • Forth – как настолько простой язык может быть таким полезным?
  • Emacs и vim – потрясающие программные редакторы
  • ООП (объектно-ориентированное программирование) – эта парадигма программирования определяла развитие IT-индустрии более трех десятилетий и не похоже, чтобы она теряла хватку, даже перед лицом ФП (функционального программирования).

 

 

Николас Купер, программирую с 1987

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

Ни одна из этих отраслей, кроме помеченной звездочкой, не развита настолько, чтобы говорить о ее завершенности:

  • Управление данными. Эта отрасль принимает различные формы от виртуальной памяти до файловых систем и баз данных, и все они развиваются. Нетрудно представить мир, в котором все данные о вас собраны в досье (оставим в стороне вопросы безопасности) и могут быть использованы, чтобы, скажем, доставить вам любимый сэндвич прямо на рабочее место как раз в тот момент, когда вы немного проголодаетесь.
  • Код как данные*. Это то, во что закономерно эволюционировала архитектура фон Неймана, которая, наконец, привела к движению Лиспа, и в конечном итоге будет также включать информацию о тип. [P.S.: Возможно, этот раздел и нельзя считать завершенным, если он будет развиваться и дальше и будет включать в себя информацию о зависимом типе ...].
  • Зависимые типы. Это эволюция тезиса Черча-Тьюринга в своего рода теорию, в окончательное понимание того, почему программирование и математика суть одна наука, и как мы можем давать обоснование каждой из них, используя методы другой. Наконец, мы можем создавать интерфейсы, не только придерживаясь необходимых требований (содержащих метод foo), но и универсальных требований (здесь foo соединяется с bar). Это означает, что мы можем писать код без исключений во время выполнения. Это не означает, что код «просто работает», а то, что (если память согласована) он не «разлетится в щепки», а просто зависнет.
  • Пиши один раз, используй везде. Все началось как эволюция «высокоуровневых языков программирования» от машинного кода к Ассемблеру, С и, наконец, Java и .NET (а также к использованию Java в веб-браузерах). Теперь представьте себе систему, в которой вне зависимости от выполняемой задачи функционирует всего один код, будь то веб-страница на рабочем столе Windows или сервере BSD, и все это оптимизировано для типов памяти RAM и Optane и имеет доступ к ресурсам CPU и GPGPU.
  • Адаптивные алгоритмы. Генетические алгоритмы, нейронные сети, роевые алгоритмы и пр. Представьте, каково не понимать, каким образом работает система, но сделать так, чтобы она выполняла необходимые команды. Просто позволить ей развиваться самостоятельно. Представьте, каково это больше не тратить время на утомительное написание кодов. Siri, взгляни на мое лицо и скажи, слягу ли я с простудой!
  • Интегрированные среды разработки – Я говорю о таких вещах, как исправление багов кода, статический анализ, интеллектуальное завершение кода, покрытие кода, отслеживание рабочих элементов, управление источником и все это в одной среде. Просто подождите, пока адаптивные алгоритмы достигнут ИСР. Просто сообщите Siri, что вы хотите создать запись с полями имени, адреса и номера телефона, хранящиеся в реляционной базе данных с внешним ключом к записи менеджера, и с запросом доступным в моем окне приложения .NET на вкладке сотрудника, и она напишет весь код шаблона, который вам необходим. О, и я уже упоминал, что она написала для вас все модульные тесты и документацию XML (кто-то все еще использует XML, разве мы все не используем очередной YAML)?
  • Виртуализация. Возможность разрабатывать и исправлять ошибки из одних операционных систем в других, а теперь Dockers хранит все изолированно в очень маленьких, опрятных пакетах. Это вариант Начала для программистов. В конце концов, каждая часть операционной системы будет виртуализирована, и будет давать доступ только к необходимым ее разделам. Когда это произойдет, виртуализация будет намного больше похожа на использование зависимых типов для управления ресурсами, и будет сложно говорить об одном, не упоминая другое.

Достойны упоминания:

  • Операционные системы. Опять же, это приложение стандартизации для создания ограниченного количества вариантов типа «пиши один раз, используй везде» для будущего кода. Они разрабатывались с момента зарождения программирования, но тогда цель была создать ОС, которая позволила бы нам лишь запускать на устройстве более одного приложения. Жаль, что мы по-прежнему используем ту же технологию с 60-х годов, но опять же, пока мы не достаточно развили  технологии из «большой семерки», стоит еще подождать «больших изменений».
  • Распределенные вычисления. Речь идет о применении стандартизации и автоматизации для управления данными. Сеть, тогда интернет и теперь распределенные вычисления являются логическим расширением. Они позволили нам создать такие вещи, как интернет-валюта, например, биткоины. 

 

 

Вэйн Кук, дипломированный Scrum-специалист

Я буду придерживаться иного подхода, чем остальные, и расскажу о 7 прорывах для своего времени.

  1. Чарльз Бэббидж и Ада Лавлэйс. Первая вычислительная машина и первая женщина-программист. Без их вклада программирование не началось бы так, как оно началось. Ада была настолько влиятельной, что в её честь назвали язык программирования (к сожалению, он был одним из структурированных языков и не сочетался с объектно-ориентированными технологиями того времени).
  2. Табуляционная машина и перфокарты Холлерита. Созданные для переписи населения 1880 года в США. Перфокарты были неотъемлемой частью зарождавшегося программирования.
  3. Фортран. Первый язык программирования высокого уровня, в своё время использовался для научных вычислений. Вытеснен машинным кодом и Ассемблером.
  4. Лисп. Основа основ искусственного интеллекта. Ввёл рекурсивные вызовы, структура всех данных и программ идентична.
  5. Алгол (алгоритмический язык) – первые по-настоящему структурированные языки. Такие, как С и Pascal, созданы на основе Алгола. 
  6. SmallTalk. Изобретение компании Xerox, которое она действительно недооценила. Является основой всех объектно-ориентированных языков. Стив Джобс был настолько впечатлен этим языком, что создал ОС Macintosh в среде SmallTalk. SmallTalk был истинно объектно-ориентированным языком. Все объекты, разработанные для ОС и для пользовательских программ, были дочерними элементами базового объекта «Объект». C ++ просто взял идеи SmallTalk и попытался добавить их в язык C. Bell Labs достаточно хорошо справились с этой интеграцией, разработав основной объектно-ориентированный язык.
  7. UNIX. И снова Bell Labs. Они разработали С, чтобы иметь возможность создать операционную систему UNIX. Стивен Борн разработал один из первых рабочих языков сценариев командной строки для быстрого управления системой. Так много «языков» обязаны своим созданием  командной строке Борна (sh от shell). Подумайте о каком-либо интерпретируемом языке программирование, он, вероятно, обязан своим появлением "sh".

 

 

Рагхав Джаджодиа, GSoCer, CodeSprint

Вот мой топ-7 в мире вычислений и программирования:

7. С++ – самый крупный и эффективный из когда-либо созданных языков программирования.

6. Распределённая система управления версиями Git – причина, по которой сотни разработчиков имеют возможность одновременно работать над созданием программного обеспечения.

5. Facebook – самое крутое когда-либо созданное приложение социальной сети, используется миллиардами людей.

4. YouTube – миллиарды часов видеоконтента, 1000 часов контента ежедневно загружается. То, как платформа справляется с такими потоками информации, поражает.

3. Платформа Stack Overflow – программисты не могут представить жизни без неё.

2. Поиск Google – действительно поражает, как Google удаётся обрабатывать миллиарды веб-страниц и предоставлять наиболее точные результаты поиска.

1. Всемирная паутина – WWW или интернет, определенно должен возглавлять этот список. На данный момент это самое великое творение человечества.

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 2
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя mike

Когда мысли нет -- переводят бла-бла-бла из Кворы. Хоть бы что-то полезное переводили. Дык нет -- бла-бла. Вот почему так?

А, догадываюсь. Для журналистов это нечто сакральное -- виртуализация,  адаптация, распределённость и т.д.

Друзья, это лишь слова. Без инфы.

Попробуйте своими словами на примерах. Как Петро делал, хотя его и жестоко пинали. Но польза читателям! И вам тоже польза --  понимание о чём речь.

-1
Аватар пользователя mike

Хотя нет, пробовать не будете, думаю. Вам нужна лёгкая копейка. Впрочем, это нормально. :)

mike пишет:

Когда мысли нет -- переводят бла-бла-бла из Кворы. Хоть бы что-то полезное переводили. Дык нет -- бла-бла. Вот почему так?

Переводы нужны. Не всё же о Паскале писать то. (С)

JavaScript – самая большая афера в истории программирования

Мало того, она продолжается! (С)

Аватар пользователя mike

Не всё же о Паскале писать то. (С)

А кто-то писал, г-н минусовщик-пять-ставочник?

Java – вытеснившая COBOL как единственный язык программирования в сфере предпринимательства; он намного опережает другие языки программирования по популярности и востребованности

А также Паскаль, Дельфи, PL/1, да и местами C.

Python – как этому сравнительно медленному скрипт-языку удалось достичь такой популярности при численном подходе, в сферах машинного обучения, науки о денных, "интернете вещей", веб-разработки?

Когда фортращики захотели что-то поновее. (С) Поди.

Ричард Кэннет Энг, работал с Fortran, Tandem TAL, C/C++, C#, Obj-C, Java, Smalltalk, Python, Go

Логик, просто Логик, программировал в шестеричных кодах, ЯМБ (Язык Машин Бухгалтерских), assembler, Fortran, С, С++, Cobol, ADA, ADABAS (Sprint), Foxpro, Clipper, Дельфи, Java, SQL, JavaScript.

Никогда не писал на питоне, паскале, хаскеле, Go, C# и руби. (C)

Аватар пользователя savely

> Дельфи <..> С++

Никогда не писал на <..> паскале <..> C# 

Фиг меня знает, но я Паскалем называю любой Паскаль (Borland/Free Pascal/Delphi/"Дебаркадер") - зачем умножать сущности? C С++ и далее - примерно так же. И Java до кучи. Могу понять деление на КОНЦЕПТУАЛЬНО отличающиеся языки - типа ASM-языки/процедурные ЯВУ/ООП/функциональные ЯВУ. Ну, SQL еще можно отделить.

Ну, и классическое деление на компилируемые/интерпретируемые можно упомянуть, но это "перпендикулярный" критерий, да и оно несколько устарело, IMHO. 

+1
Аватар пользователя savely

> Ну, SQL еще можно отделить.

Ну, и Prolog'и c Lisp'ами. Хотя все концепции языков ОПОШЛЯЮТСЯ до архитектуры. Начиная от Нейман/Гарвард и заканчивая ASM. Тут правильная концепция - байт-код, идеальная архитектура, правда, на железе реализуемая костылями. Насколько помню - идея Java-процессора была. 

Да елки - на FPGA "рисуется" любой процессор любой архитектуры. Кстати, тот же Эльбрус весьма неплох, на мой взгляд. Альтеровский NIOS, где можно писать свои ASM-инструкции, прикольный... 

+1

Страницы