В этом году Дню программиста исполняется 15 лет, с момента утверждения его как официального государственного праздника. Сделал это Д. А. Медведев указом от 11 сентября 2009 года. В честь юбилея портал IT-World сделал подборку любопытных фактов о программах, программистах и программировании.
Первые. Знаковые даты и события в программировании
Первый сайт
Датой регистрации первого в мире домена считается 15 марта 1985 года. В этот день доменное имя получил сайт компании Symbolics Computer Corporation — Symbolics.com. А всего в то время в Интернете было пять сайтов.
Первый высокоуровневый язык программирования
В 1948 году немецкий инженер Конрад Цузе создал язык Планкалкюль. В переводе на русский это название означает «плановое исчисление», то есть программирование. Язык разрабатывался для программирования компьютера Z4, но мог использоваться для работы и с другими похожими на него вычислительными машинами.
Первый браузер
22 апреля 1993 года национальный университет суперкомпьютерных технологий Иллинойса выпустил Mosaic — первый веб-браузер для ОС Windows с графическим интерфейсом. Этот браузер можно назвать дедушкой Internet Explorer. Он был в основном текстовым и поддерживал несколько протоколов — HTTP, FTP, Gopher, NNTP.
Первый персональный компьютер
По официальным данным, в 1950 году Эдмунд Беркли создал компьютер, получивший название Simon. Именно этот компьютер, по утверждению Книги рекордов Гиннесса, является первооткрывателем на рынке ПК. На тот момент Simon имел 2 бит оперативного кэша, а его цена составляла $300. Однако это устройство трудно назвать компьютером в современном понимании, поскольку на нем было достаточно трудно выполнять какие-либо действия и вычисления, он больше подходил для демонстрации работы принципов ЭВМ.
А вот на звание производителей реально рабочих машин претендует сразу несколько номинантов:
- Джон Мокли. В 1946 году он представил компьютер ЭНИАК. Мощное для того времени устройство применялось для расчетов баллистических таблиц и траекторий полета снарядов, ранее выполнявшихся вручную.
- Джон Атанасов. В 1942 году ученый создал электронную установку ABC (Atanasoff — Berry Computer), которая могла не только выполнять вычитание и сложение, но и решать линейные уравнения. В 1973 году американский суд признал устройство Атанасова первым компьютером.
- Алан Тьюринг. Разработанная им «Машина Тьюринга» была введена в эксплуатацию в марте 1940 года. Главное ее назначение — расшифровка кодов немецкого шифровального устройства «Энигма». Если хотите узнать про историю подробней, посмотрите фильм «Игра в имитацию».
- Конрад Цузе. В 1939 году этот немецкий ученый разработал электромеханическое устройство Z1, которое применялось в самолетостроении для вычисления аэродинамических и других характеристик летательных аппаратов.
Тем не менее ни за одним из этих компьютеров современный юзер вряд ли смог бы работать. Во-первых, потому что каждое устройство создавалось под решение конкретных задач (сейчас для этого делают программы, а не изобретают компьютеры), во-вторых, потому что интерфейс ввода был, мягко говоря, недружелюбный.
Первый программируемый компьютер и первая программа
Первенство в этой номинации у Тома Килбурна — одного из разработчиков SSEM (Small Scale Experimental Machine) и создателя самой первой программы. Однако, как видно из названия устройства, оно было экспериментальным. Его изобретатели хотели проверить, получится ли применять в качестве памяти электронно-лучевые трубки. А вот уже первым рядовым устройством был компьютер EDSAC (Electronic Delay Storage Automatic Calculator), изобретенный в 1949 году британцем Дэвидом Уилером. Естественно, сам Дэвид был одним из первых программистов в современном понимании этого слова.
Первый компьютерный вирус
Первой вирусной программой принято считать Creeper. В 1971 году ее разработал Боб Томас, который трудился в компании BBN. Программа создавалась в рамках эксперимента для проверки возможности разработки самовоспроизводящегося приложения, способного заражать новый жесткий диск и затем стремящегося удалить себя с предыдущего устройства. Этот первый вирус не наносил никакого ущерба, а всего лишь выводил на экран сообщение с просьбой «поймать» его — если, конечно, пользователь сможет.
Знаковые люди
Блез Паскаль
На дворе 1642 год. Около 20 лет назад была изобретена логарифмическая линейка, а во Франции готовится к восхождению на престол король-солнце Людовик XIV. В этот год 19-летний математик Блез Паскаль изобретает арифмометр — механическое устройство в виде ящичка с шестеренками. Числа вводились в него с помощью поворотов наборных колесиков. Машина Паскаля позволяла не только складывать числа, но и выполнять другие операции. Правда, для них использовалась не очень удобная процедура повторных сложений. Кстати, язык программирования Pascal получил свое название именно в честь этого выдающегося ученого.
Чарльз Бэббидж
В 1822 году он разработал готовый и не очень габаритный прототип устройства, которое, по его подсчетам, могло бы заменить труд 90 человек. Речь идет о разностной машине Бэббиджа.
Почему 90 человек? Потому что именно такое количество человек занималось перепроверкой сборников логарифмических таблиц для подготовки их к вводу метрической системы во Франции, по заказу правительства.
Почему разностная? Основное назначение устройства — проведение сложных арифметических вычислений. А где есть сложные вычисления, есть и дифференциальные уравнения. Для решения уравнений Бэббидж использовал «метод конечных разностей».
Но на этом изобретатель не остановился и в 1833 году подготовил проект универсальной цифровой вычислительной машины (или аналитической машины).
Ее основное отличие от разностной машины заключалось в том, что она была программируемой и могла выполнять любые заданные вычисления. Аналитическая машина считается прообразом современных компьютеров, поскольку содержала их ключевые элементы — память и арифметическое устройство, состоящее из рычагов и шестеренок.
По задумке Бэббиджа в составе устройства предлагались:
- Склад и ячейки для хранения значений переменных и результатов операций.
- Фабрика или мельница для проведения операций над переменными.
- Устройство управления, руководящее порядком выполнения операций, помещением переменных в склад и извлечением их оттуда.
- Устройство ввода-вывода информации.
Для ввода данных в память и управления работой машины изобретатель планировал использовать перфокарты.
Однако сам Бэббидж не смог увидеть аналитическую машину на практике. Уже после смерти ученого его сын Генри действующий прототип построил. В 1906 году он представил аппарат, состоящий из двух узлов — фабрики и устройства вывода информации, чем подтвердил работоспособность изобретения отца.
Ада Лавлейс
Полное имя — Августа Ада Кинг (1815 г.). Дочка не менее знаменитого отца — писателя Джорджа Гордона Байрона.
Талант и любовь к математике достались Аде от матери Анны Изабеллы. Анна противопоставляла математику литературе, которую так любил ее муж и которая стала так ненавистна ей, после того как Джордж Байрон ушел из семьи.
Даже если бы предыдущий джентльмен в нашем списке (Чарльз Бэббидж), не вошел бы в историю изобретением вычислительной машины, мы бы все равно узнали об Аде. Тем не менее судьба сложилась так, что известностью своей два этих человека должны быть благодарны друг другу.
Ада впервые встретилась с Чарльзом, когда ей было 17 лет. Многие предполагают, что именно их знакомство позволило Чарльзу придумать и описать устройство аналитической машины.
При этом ИТ-сообществу Ада известна именно как первый программист. Конечно, это небольшое лукавство, поскольку на тот момент еще не было компьютеров и языков программирования. И это отчасти правда, но лишь отчасти. Алгоритмы были, вычисления были, машина с памятью, арифметическим блоком и хоть каким-то подобием интерфейса была, пусть и «на бумаге». Значит, и программа должна была появиться. И она появилась…
В 1843 году Ада написала программу для расчета чисел Бернулли с использованием аналитической машины Бэббиджа. А до этого перевела с французского языка статью Луиджи Менабреа, в которой содержались заметки о разностной машине. Статью опубликовали в 1843 году, а написанная Адой программа стала частью публикации. Основной целью написания программы было доказать научному (и не только) сообществу, что программа сможет существенно упростить любые расчеты и вычисления, то есть Ада хотела показать ее пользу.
P.S. В конце XX века разработан универсальный язык программирования, названный Ада.
P.P.S. Программа, написанная Адой, была «переведена» на языки C и Python с целью проверки работоспособности. В расчеты закралась ошибка, поэтому одновременно с первой программой Ада изобрела и понятие «баг».
Линус Торвальдс
Известнейший программист финско-американского происхождения. Именно он разработал операционную систему Linux, которая широко применяется разработчиками различных приложений и программистами, а также используется в дата-центрах. Благодаря усилиям Торвальдса была создана абсолютно бесплатная операционная система с открытым исходным кодом.
Джон Кармак
Американский программист и один из пионеров в области разработки видеоигр. Он наиболее известен как соучредитель компании id Software, где участвовал в создании таких культовых игр, как Wolfenstein 3D, Doom и Quake. Эти игры не только стали основополагающими для жанра шутеров от первого лица, но и произвели революцию в игровой индустрии благодаря своим технологическим инновациям, включая 3D-графику и технологии сетевой игры.
Дональд Эрвин Кнут
Выдающийся американский ученый и программист. Он является автором многотомного произведения «Искусство программирования» ("The Art of Computer Programming"), которое считается одним из самых значительных и авторитетных трудов в области компьютерных наук. Кнут также создал язык программирования TeX, который применяется для подготовки научных и технических документов. Кроме того, он известен как отец концепции анализа алгоритмов, ввел понятие «аналитическая оценка» для алгоритмов, в частности, с помощью его работы по асимптотическому анализу.
Его вклад в науку отмечен множеством наград, включая Национальную медаль науки (National Medal of Science) и премию Тьюринга (Turing Award), которую считают аналогом Нобелевской премии в области компьютерных наук.
Джон Маккарти
Американский математик и компьютерный ученый, один из основателей искусственного интеллекта (AI). Он ввел этот термин в 1956 году на Дартмутской конференции. Маккарти также разработал язык программирования LISP — основной инструмент для AI-исследований. Помимо этого, он внес большой вклад в теорию автоматов и разработки формальных систем. За свои достижения Маккарти получил премию Тьюринга и другие престижные награды.
Томас Евгений Курц
Американский математик и философ, известный как один из основателей и ведущих разработчиков языка программирования BASIC (привет урокам информатики в школе!), а также языка CURS (Consistent Unify and Reasoning System), который служит для обработки знаний. Он также является автором концепции логики в реальном времени, в которой рассматриваются вопросы, связанные с формальной логикой и искусственным интеллектом. Курц активно продвигает идеи естественной логики и изучает связь между математикой и философией.
Грейс Хоппер
Кроме стандартных профессий представителей этого списка, Грейс была еще и контр-адмиралом ВМС США. Она известна как одна из первых программистов, работавших над языком программирования COBOL, который повлиял на развитие бизнеса и финансового программирования. Хоппер сыграла важную роль в разработке компилятора — инструмента, который переводит программный код на высоком уровне в машинный код. Кроме того, она предложила термин «отладка» в программировании. Хоппер стала символом женщин в технологии и многократно получала награды за свои достижения.
Деннис Ричи
Наибольшую известность получил как создатель языка программирования C и один из разработчиков операционной системы Unix. Язык C, появившийся в начале 1970-х годов, стал основой для множества современных языков программирования и операционных систем, оказав значительное влияние на развитие программирования. За свои достижения Ричи получил множество наград, включая премию Тьюринга.
Алан Тьюринг
Британский математик, логик и криптограф, известный как один из основателей теории вычислений и искусственного интеллекта. Кроме создания машины Тьюринга, Алан написал очень много научных статей, и впоследствии его исследования оказали долговременное влияние на компьютерные науки, а в 1950 году для оценки интеллекта машин им был предложен знаменитый «Тест Тьюринга».
В честь ученого учреждена премия Тьюринга — одна из наиболее престижных наград в сфере компьютерных наук. Тьюринг скончался в 1954 году, однако его вклад в науку продолжает вызывать восхищение и признание.
Рекорды в мире программирования
Наибольшее количество закладок в проекте
В 2018 году программист Кент Лукас установил рекорд по количеству закладок (bookmarks) в коде на GitHub — более 2,5 млн закладок в одном проекте.
Самая длинная программа
В 2019 году знаменитая программа «Цифровой ассистент» (Digital Assistant), написанная на языке Python, имела более 1,5 млнстрок кода, что сделало ее одной из самых длинных программ в истории.
Наибольшее количество языков программирования, использованных в одной программе
В 2006 году польский программист Ярослав Сташык написал программу, использующую более 120 различных языков программирования, продемонстрировав возможности объединения различных технологий в одном проекте.
Самая быстрая программа
Программа с самым высоким показателем производительности была написана на языке C++ и смогла выполнить 1 трлн операций в секунду на суперкомпьютере Summit в Лос-Аламосской национальной лаборатории.
Наибольшее количество одновременно работающих программистов
В 2020 году в мероприятии Global Code Jam принимало участие более 10 000 программистов, работающих одновременно над решением задач в рамках международного соревнования.
Самый сложный алгоритм
В 2020 году исследователи из MIT разработали алгоритм для решения проблемы мокрых маркеров, который имел теоретическую сложность O(n^k), где k представляет собой переменную, зависящую от параметров задачи. Это исследование вывело алгоритмическую сложность на новый уровень.
Самый долговечный язык
Fortran, разработанный в 1957 году, по-прежнему активно используется в вычислениях, включая научные и инженерные симуляции, что делает его одним из самых долгоживущих языков программирования.
Самый быстрый языковой компилятор
В 2021 году Rust был признан самым быстрым компилятором среди популярных языков программирования. Он может компилировать проекты размером в 1 млн строк кода менее чем за 5 секунд.
Наибольшее количество строк кода в открытом исходном проекте
В 2021 году проект Linux Kernel имел более 27 млн строк кода, что делает его одним из самых крупных и сложных проектов с открытым исходным кодом в мире.