История языка си: История языка Си / Хабр

Содержание

История языка Си / Хабр

Сейчас, наверно, невозможно найти в мире специалиста в IT-области, который бы не слышал о языке Си. Этот язык приобрёл огромную популярность во всём мире и оказал значительное влияние на многие другие языки программирования. Именно он является предшественником таких языков, как C++, C#, Java; менее известных (например J#). Компания Microsoft для разработки родного языка к своей платформе .Net выбрала именно Си-подобный синтаксис. Что ни говори, но язык Си серьезно изменил жизнь программистов прошлого века и стал де-факто в области низкоуровневого программирования, оставив ассемблеру только те места, где производительность имела критическое значение.

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

Язык Си восходит корнями к языку ALGOL (расшифровывается как ALGorithmic Language), который был создан в 1958 году совместно с комитетом Европейских и Американских учёных в сфере компьютерных наук на встрече в 1958 в Швейцарской высшей технической школе Цюриха. Язык был ответом на некоторые недостатки языка FORTRAN и попыткой их исправить.

Вдохновлённые языком ALGOL-60, Математическая лаборатория Кембриджского Университета совместно с Компьютерным отделом Лондонского университета создали в 1963 году язык CPL (Combined Programming Language).

Язык CPL посчитали сложным, и в ответ на это Мартином Ричардсоном был создан в 1966 году язык BCPL, основное предназначение которого заключалось в написании компиляторов. Сейчас он практически не используется, но в своё время из-за хорошей портируемости он играл важную роль.

BCPL послужил предком для языка Би, разработанного в 1969 в уже знакомой всем AT&T Bell Telephone Laboratories, не менее знакомыми Кеном Томпсоном и Денсом Ритчи.

Язык Би был использован для написания самых ранних версий UNIX, созданной как ответ на проект Multics, разрабатываемый всё в той же Bell Laboratories. Именно этот язык послужил непосредственным предшественником языка Си.

По поводу возникновения языка Си Питер Мойлан в своей книге «The case against C» пишет: «Нужен был язык, способный обойти некоторые жесткие правила, встроенные в большинство языков высокого уровня и обеспечивающие их надежность. Нужен был такой язык, который позволил бы делать то, что до него можно было реализовать только на ассемблере или на уровне машинного кода.» Си стал именно таким языком. Это обусловило его дальнейшую популярность в таких отраслях программирования, как написание драйверов и прочих аспектах низкоуровневого программирования.

Язык программирования Си был разработан в стенах Bell Labs в период с 1969 по 1973 годы. Как признался сам Ритчи, самый активный период творчества приходился на 1972 год.

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

Согласно другой легенде, язык Си был первоапрельской шуткой, которая обрела нешуточную популярность.
Компилятор языка Си унаследовал традицию, заложенную ещё Никлаусом Виртом и был написан на самом Си. Согласно мнению большинства, название языка Си является третьей буквой алфавита. Оно появилось как указание на то, что язык Си является более усовершенствованным, чем язык Би. Однако, сам Ритчи по поводу названия языка говорил следующее:«Создав систему типов, соответствующий синтаксис и компилятор для нового языка, я почувствовал, что он заслуживает нового имени: NB показалось мне недостаточно четким. Я решил следовать однобуквенному стилю и назвал его C (Си), оставляя открытым вопрос, являлось ли после B это следующей буквой в алфавите или в названии BCPL».

Успех Си в основном связан с тем, что на нём была написана значительная часть операционной системы UNIX, которая в итоге приобрела очень большую популярность. Если считать по количеству используемых на данный момент операционных систем, разработанных на базе UNIX, то она является самой распространённой системой в мире. В связи с её распространённостю, а также с тем, что на данный момент объём операционной системы измеряется в миллионах строк кода (для примера, в последних версиях Linux содержится более 10 000 000 строк кода), задача о переписывании UNIX на другой язык становиться практически невыполнимой (также следует учитывать тот факт, что при ручном переписывании неизбежно возникнут ошибки, что существенно снизит стабильность работы, а при переводе с использованием программных средств пострадает производительность кода). Кроме того, язык Си, будучи приближённым к аппаратной реализации компьютера позволяет выжать из него намного больше, чем многие другие языки программирования. Это обстоятельство показывает бессмысленность перевода UNIX на другой язык. Таким образом, если другие языки программирования могут исчезнуть с течением времени, уступив дорогу новым технологиям, то язык Си будет жить, пока живёт UNIX. То есть пока существуют компьютеры в том виде, в котором мы их себе представляем.

Первая книга, посвящённая языку Си была написана Керниганом и Ритчи в 1978 году и вышла в свет под названием «Язык программирования Си». Эта книга, в среде программистов более известная как «K&R», стала неофициальным стандартом языка Си.

В конце 1970-х годов, язык си начал вытеснять BASIC, который в то время был ведущим в области программирования микрокомпьютеров. В 1980-х годах он был адаптирован под архитектуру IBM-PC, что привело к значительному скачку его популярности. В то же время Бьярн Страуструп начал разработку языка программирования, который бы сочетал в себе синтаксис популярного языка Си и концепцию объектно-ориентированного программирования, которая становилась всё более востребованной, так началась разработка языка С++.

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

Разработкой стандарта языка Си занялся Американский национальный институт стандартов (ANSI). При нём в 1983 году был сформирован комитет X3J11, который занялся разработкой стандарта. Первая версия стандарта была выпущена в 1989 году и получила название С89. В 1990, внеся небольшие изменения в стандарт, его приняла Международная Организация Стандартизации ISO. Тогда он стал известен под кодом ISO/IEC 9899:1990, но в среде программистов закрепилось название, связанное с годом принятия стандарта: С90. Последней на данный момент версией стандарта является стандарт ISO/IEC 9899:1999, также известный как С99, который был принят в 2000 году.

Среди новшеств стандарта С99 стоит обратить внимание на изменение правила, касающегося места объявления переменных. Теперь новые переменные можно было объявлять посреди кода, а не только в начале составного блока или в глобальной области видимости. Это уводит Си от концепции объявления переменных в начале функции, которая присутствует в Паскале. Меня, как и многих программистов, привыкших писать на С++ (где это ограничение отсутствует) такое поведение компилятора вызывало недовольство. Тем не менее, даже с принятием стандарта С99, в программе Borland Embarcadeo RAD Studio 2010, ограничение на объявление переменных в начале блока кода всё ещё действует. Также можно указать другие места, в которых стандарты Си не до конца соблюдаются. Есть мнение, что это связано с тем, что основное внимание больших компаний, таких как Microsoft и Borland сосредоточено на более новых языках программирования. Однако, согласно заверениям компании Sun Microsystems, её среда разработки Sun Studio полностью поддерживает С99.

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

В 2007 году начались работы над следующим стандартом языка Си: С1x.

История Языка Си

Теги: История Си, ANSI C, ISO C, C99, C11, ISO/IEC C, стандартизация си.


Истоки

Си – это «сопутствующий продукт», полученный во время создания операционной системы UNIX, которая разрабатывалась в Bell Laboratories Кеном Томпсоном, Денисом Ритчи и ко. Томпсон в одиночку написал оригинальную версию UNIX, которая работала на DEC PDP-7, одном из первых миникомпьютеров всего с 8К слов в основной памяти (в конце концов, это был 1969).

Как и остальные операционные системы того времени, UNIX был написан на ассемблере. Отладка программ на ассемблере настоящая мука и их проблематично улучшать, и UNIX не был исключением. Томпсон решил, что для дальнейшей разработки ОС необходим язык высокого уровня и придумал небольшой язык B. За основу Томпсон взял язык BCPL, язык для системного программирования, разработанный в середине 60-х. BCPL, в свою очередь, берёт начало от Алгола 60, одного из самых первых (и оказавших наибольшее влияние) языков.

Ритчи вскоре присоединился к проекту UNIX и начал писать на B. В 1970 Bell Labs приобрела для проекта PDP-11. Так как B был готов к работе на PDP-11, Томпсон переписал часть UNIX на B. В 1971 стало ясно, что B не совсем подходит для PDP-11, поэтому Ритчи начал создавать расширенную версию B. Сначала он назвал её NB (New B), но когда язык стал сильно отличаться от B, название сменили на C. Язык к 1973 стал достаточно стабилен для того, чтобы на нём можно было переписать UNIX. Переход на C обеспечил важное преимущество: переносимость. Написав компилятор C для каждой из машин в Bell Labs, команда разработчиков могла портировать на них UNIX.

Стандартизация

C продолжил развиваться в 70-х, особенно в период с 1977 по 1979, когда вышла первая книга по C. Книга «Язык программирования Си», написанная Брайаном Керниганом и Денисом Ритчи и опубликованная в 1978 стала библией программистов на Си. При отсутсвии официального стандарта эта книга – известная также как K&R, или «Белая Книга», как любят называть поклонники си – фактически стала стандартом. В 70-х программистов на C было немного и большинство из низ были пользователями UNIX. Тем не менее, в 80-х C вышел за узкие рамки мира UNIX. Компиляторы C стали доступны на различных машинах, работающих под управлением разных операционных систем. В частности, Си стал распространяться на быстро развивающейся платформе IBM PC.

Брайан Керниган (Brian Kernighan), Деннис Ритчи (Dennis Ritchie) и Кен Томпсон (Ken Thompson) как бы говорят, что без бороды ты не программист.Брайан Керниган (Brian Kernighan), Деннис Ритчи (Dennis Ritchie) и Кен Томпсон (Ken Thompson) как бы говорят, что без бороды ты не программист.

Вместе с ростом популярности появились проблемы. Программисты, писавшие новые компиляторы брали за основу язык, описанный в K&R. К сожалению, в K&R некоторые особенности языка были описаны расплывчато, поэтому компиляторы часто трактовали их на своё усмотрение. Кроме того, в книге не было чёткого разделения между тем, что является особенностью языка, а что особенностью операционной системы UNIX. Ухудшало ситуацию и то, что после публикации K&R Си продолжал развиваться: в него добавлялись новые возможности и из него вырезались старые. Вскоре появилась очевидная необходимость в исчерпывающем, точном и соответствующем современным требованиям описании языка. Без такого стандарта стали появляться диалекты языка, которые мешали переносимости – сильнейшей стороне языка.

Разработка американского стандарта Си началась в 1983 под покровительством Американского Национального Института Стандартов (ANSI). После многих доработок стандарт был закончен в 1988 и формально принят в декабре 1989 как стандарт ANSI X3.159-1989. В 1990 году он был утверждён международной организацией по стандартизации (ISO) как интернациональный стандарт ISO/IEC 9899:1990. Эту версию языка обычно называют C89 или C90, для того, чтобы не путать её с оригинальной версией Си, которую обычно называют K&R C.

Язык подвергся небольшим изменениям в 1995 (изменения описаны в документе, который обычно называют Поправка 1). Более значительные изменения случились в 1999 году, когда был опубликован стандарт ISO/IEC 9899:1999. Язык, описанный в этом стандарте обычно называют C99. Термины «ANSI C», «ANSI/ISO C» и «ISO C», когда-то используемые для описания C99 из-за существования двух стандартов имеют двоякое толкование.

В 2011 году вместе с редакцией языка Си++ был выпущен стандарт C11. Несмотря на наличие стандарта 11 года, многие компиляторы до сих пор не поддерживают полностью даже версии C99, так что использование стандарта С11 будет указано явно.

ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 [email protected] Stepan Sypachev students

Q&A


Всё ещё не понятно? – пиши вопросы на ящик email

Краткая и на 146% точная история языков программирования / Хабр



1800

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


1842

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


1936

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

Позже королева, конечно, остыла и простила Тьюринга, но тот, к сожалению, уже давно был мёртв.


1936

Алонзо Чёрч тоже изобретает вообще всё вместе с Тьюрингом. Но будучи по другую сторону пруда избегает расположения королевы и его последствий.


1957

Джон Бэкус создаёт Фортран — первый язык, который «используют настоящие программисты».


1959

Грейс Хоппер, устав от спарринга с Чаком Норрисом, изобретает первый бизнес-ориентированный язык программирования. Ну а так как всё связанное с бизнесом должно иметь длинное и скучное название, она нарекает его «бизнес-ориентированным языком общего назначения» или COBOL для краткости.


1964

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


1970

Никлаус Вирт создаёт Паскаль и пару других языков программирования. Да, кому-то нравится марки собирать, а его хобби было создавать языки программирования.

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


1972

Деннис Ритчи от скуки, нагрянувшей в разгар напряжённого рабочего дня в Bell Labs, решает изобрести «C», который окажет ошеломительное влияние на индустрию: с этого момента все новые языки будут использовать фигурные скобки. «C» так же ввёл ошибки сегментации и другие инновации в программировании.

Так как до конца напряжённого рабочего дня оставалась пара свободных часов, Деннис и его приятели из Bell Labs решили создать пример программы на «C» и случайно создали операционную систему под названием Unix.


1980

Алан Кэй изобретает объектно-ориентированное программирование и называет его Smalltalk. В Smalltalk всё является объектом. Даже объект является объектом.


1987

Ларри Уолл становится проповедником и делает Perl доктриной.


1983

Жан Ишбиа решает создать язык, посвящённый Аде Лавлейс и носящий её имя.


1986

Брэд Кокс и Том Лав решают создать специальную, плохочитаемую версию «C» на основе Smalltalk. Своё детище они назовут Objective-C. И по сей день не нашлось ни одного человека, способного понять синтаксис этого языка.


1983

Бьёрн Страуструп отправляется на своем DeLorean назад в будущее, где замечает, что «C» слишком уж быстро компилируется. Когда же в таком случае будут отдыхать разработчики? Чтобы как-то решить проблему, он добавляет в новый язык всё, что только может придумать, и называет своё детище C++.

Программисты повсеместно используют его, чтобы им не мешали читать xkcd на работе, в то время пока «ещё компилируется».


1991

Гвидо ван Россум создаёт поваренную книгу про шпинат и яйца.


1993

Роберту Иерузалимски и его друзья решают, что им нужен местный язык сценариев — Lua. Трагическая ошибка при переводе с бразильского приводит к тому, что индексы начинают считать с 1.


1994

Расмус Лердорф создает язык шаблонов для своей персональной страницы в интернете.

Но мир решает использовать язык вообще для всего в вебе, так что Расмус добавляет биндинги к базе данных, и на свет появляется PHP.


1995

Юкихиро Мацумото несчастен и замечает несчастье окружающих. Он создаёт Ruby, чтобы сделать окружающий мир чуточку счастливее. Это работает, и все становятся счастливы.


1995

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

Первоначально Брендан пошел в Netscape и сказал, что новый язык называется LiveScript, но Java стала популярной как раз во время код ревью, поэтому все решили, что лучше использовать фигурные скобки и переименовать язык в JavaScript.

Из-за проблем с товарными знаками JavaScript был переименован в ECMAScript во время стандартизации, но это уже никому не важно, все продолжают называть язык JavaScript.


1996

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

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


2001

Андерс Хейлсберг заново изобретает Java и называет её C #, ведь программирование на «C» круче, чем на Java. Все любят новую Java за то, что она совсем непохожа на Java.


2005

Дэвид Хансен создает фреймворк для Ruby под названием Ruby on Rails. Люди не могут понять, что это две разные вещи, и вновь становятся несчастными.


2006

Джон Резиг пишет вспомогательную библиотеку для JavaScript. Почему-то каждый думает, что это новый язык, и целыми днями копипастит сниппеты JQuery из интернета.


2009

Кен Томпсон и Роб Пайк решили создать новый С, но с меньшим быстродействием и большим количеством талисманов в виде сусликов.


2010

Грэйдон Хор тоже хочет создать новый «C». Если другим можно, почему ему нельзя? Он нарекает детище Rust.

Люди требуют, чтобы каждый фрагмент любого программного обеспечения был переписан на Rust СЕЙЧАС ЖЕ. Грейдон не хочет этим заниматься и уходит работать над Swift для Apple.


2012

Андерс Хейлсберг хочет писать на C# в браузерах, так что изобретает TypeScript, который как JavaScript, но с большей долей «Java» и меньшей «Script».


2013

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


2014

Крис Латтнер делает язык с целью — не быть как Objective-C. В результате Swift похож на Java.



Джеймс Айри, кто, как я полагаю, мой коллега историк компьютерных наук, делал в 2009 году похожие наблюдения.

Какой язык программирования учить в 2020-м? / Блог компании JUG Ru Group / Хабр

Статей с подобными заголовками существует уже множество. Но в них постоянно какая-то дичь! Смотрите, Google ещё до основных результатов советует такое:

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

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


Оглавление




В чём проблемы

Тексты «какие языки учить» зачастую такие слабые, что опытные разработчики разнесли бы их в пух и прах, но опытные разработчики их просто не открывают. Их открывают новички, у которых нет компетенции, чтобы заметить подвох. В результате новички доверяют всякой ерунде, а проблемы в текстах остаются незамеченными и процветают. Что именно это за проблемы?

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

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

Однако также стоит учесть, что JavaScript – это один из наиболее популярных языков программирования. А это значит, что на него существует как достаточный спрос, так и огромное количество предложений. Поэтому если вы изучаете или хотите изучить этот язык, то постарайтесь максимально в нем разобраться и стать отличным специалистом».

Проблема вторая: закидывание читателя мелочами без объяснения главного.

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

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

Пример: «Go использовался для создания Ethereum». Что, серьёзно, вот это самая важная информация про язык (когда речь идёт не о Solidity)? Вот она поможет сделать правильный выбор?

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

Пример: «Недостатки Python: нет таких модификаторов доступа, как protected, private и public».

Так и представляется картина маслом. Школьница Василиса Пупкина, ещё почти ничего не понимающая в программировании, пытается выбрать себе первый язык. Читает такое описание и говорит: «а, ну раз нет модификатора protected, конечно, я предпочту C#». Ну камон, неужели не ясно, что подобная информация даст Василисе только ощущение «всё это программирование непонятная хрень, лучше послушаю песню «Валенки»»?

Проблема четвёртая: бездумное следование рейтингам популярности языков. «А-а-а, Go поднялся в индексе TIOBE на несколько строчек, срочно учим его!» Ну слушайте, а ещё по TIOBE получается, что обучающий язык Scratch обошёл Dart — и что теперь, дартовикам надо срочно перейти на детский язык, что ли?

Все эти пузомерки очень условные: результат зависит от того, какую метрику использовать. Поэтому не надо молиться на конкретные места в рейтингах, будто это какая-то спущенная свыше истина. Да, популярность языка имеет значение (по популярным больше справочного материала и вакансий), но не требуется разбираться «какой самый главный в мире», из ряда самых известных подойдёт любой. А чтобы найти эти «самые известные», не требуется лезть в рейтинги, они и так на слуху.

Пример: «В некоторых списках Python фигурирует на 5-ом месте, в других его ставят на 2-ое».

Проблема пятая: за всем перечисленным порой забывают про области применения, а для новичков это может быть важнее всего. Представим, что школьница Василиса, которая каждый день пользуется кучей мобильных приложений, захотела сделать своё собственное. Какая ей тогда разница, какие модификаторы доступа у Python, кто кого обошёл в рейтингах и на чём написан Ethereum? Всё, что ей надо знать — на чём пишут для iOS и для Android.

Поэтому вот текст, который пробует от всего этого уйти:



Вступление

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

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

Если хочется заниматься чем-то определённым — тогда важнее не теоретические сравнения языков, а то, какие используются конкретно в этой области. Часть информации об этом можно получить из текста ниже, но есть смысл и погуглить «what languages are used for %интересующая_область%».

Если важно как можно скорее пройти путь до получения работы, тогда тоже важнее текстов-сравнений может оказаться другая вещь. Стоит посмотреть на сайте вроде HeadHunter вакансии Junior-разработчиков своего города: какие языки чаще всего упоминаются в них?

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

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

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


C (1972) и C++ (1985)


C++ изначально появился как развитие языка C, поэтому я объединил оба в одном пункте. Можно сказать, что это дедушка и отец остальных языков в этом списке: они здесь старше всех и очень повлияли на другие языки.

Сейчас они выглядят не точно так, как в момент появления (у C++ каждые три года принимают новый стандарт, недавно был принят C++20), и с годами всё сильнее различаются. Но идеи, заложенные ещё в начале, продолжают накладывать свой отпечаток. Когда создавался C, компьютеры были куда менее производительными, так что их ресурсы приходилось экономить куда старательнее. И тогда всё было «ближе к железу»: программирование в большей степени, чем сейчас, требовало понимать, как физически работает компьютер.

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

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


Python (1991)


В каком-то смысле Python — противоположность C: если там «сложно, зато производительно», то здесь «просто, зато к производительности есть вопросы».

Такое категоричное заявление требует уточнений. Во-первых, о простоте: свои хитрости здесь тоже есть, но они не так болезненны для новичков. С какими-то языками сразу врезаешься лицом в стену из непонятных терминов и теряешь всё желание что-то делать, а здесь начинаешь с куда более простого и понятного кода. Для многих базовых задач предоставлены встроенные способы решения, Python называют «языком с батарейками в комплекте». Неудивительно, что его часто рекомендуют в качестве первого языка, и он стал очень популярен в образовании.

Что же до производительности, то Python действительно проигрывает и C++, и многим другим языкам. Но порой его называют «медленным» презрительно, а вот это уже зря. Вспомним слова о том, что языки хороши или плохи не сами по себе, а применительно к задачам. Да, есть задачи, для которых Python не подойдёт — но есть и такие, где разница в скорости между ним и другим языком вообще не будет заметна. У Python есть свои области применения, для которых он достаточно хорош.

Что это за области? Ещё давно Python полюбили учёные — и теперь с его помощью занимаются такими околонаучными вещами, как машинное обучение и data science. В бэкенде веб-сервисов его тоже используют. Про образование уже сказано. А помимо разработки, его любят в системном администрировании — там он отлично подходит для мелких утилит.

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


JavaScript (1995)


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

JS считается относительно простым языком для обучения. Но стоит учесть, что во фронтенде сейчас почти никто не использует «просто JavaScript», нужно будет ещё освоить один из популярных фреймворков (а также научиться пользоваться инфраструктурой). И вот к ним нареканий о сложности заметно больше — так что по пути к карьере фронтендера боль может возникнуть на этом этапе.

При популярности JavaScript и у него, и у всей современной фронтенд-разработки хватает ненавистников. Кто-то говорит, что во фронтенде всё постоянно меняется и надо постоянно переучиваться вместо спокойной работы (правда, в 2020-м таких жалоб уже заметно меньше, пик остался в прошлом). Кто-то жалуется на странности в логике JS. Во многом такие оценки субъективные, их не назвать «правильными» или «неправильными» (одно и то же кого-то злит, а кого-то радует) — так что неизвестно, что будете ощущать лично вы.

Помимо фронтенда, JavaScript используют и в других областях (бэкенде, компьютерных программах, мобильных приложениях и не только), но в них он от господства далёк.


Java (1995)


Не стоит думать, что Java имеет какое-то отношение к JavaScript — хотя названия похожие и языки были представлены миру в один год, они совершенно разные, и сходство названий объясняется сугубо историческими причинами.

Java используется в первую очередь в бэкенде, и хотя не царит там безраздельно, как JS во фронтенде, позиции очень хорошие. Порой можно услышать пренебрежительное «да она уже устарела и вот-вот умрёт». Ну, во-первых, скажу так: эти слова звучат уже лет дцать, а она что-то никуда не делась. Мы в JUG Ru Group проводим конференции по разным языкам, и по Java получаются самые посещаемые, в прошлом году собралось больше 2000 участников — это никак не выглядит смертью.


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

Другая популярная претензия к Java — мол, она «скучная и многословная», и используют её скучные компании вроде банков, а какие-то другие языки позволяют реализовать то же выразительнее и лаконичнее, и их ценят в весёлых стартапах. Ну, тут всё тоже субъективно, как с JS: знаю многих людей, которые говорят о Java с огнём в глазах и видят в банковской разработке множество интересных задач, но если для кого-то скучно, с этим не поспоришь.


C# (2000)


Когда компания Microsoft представила C#, многие назвали это «ответом Microsoft на Java». Разумеется, между этими языками хватает различий (и за прошедшие 20 лет их число лишь увеличилось), но некоторая перекличка действительно есть, и знание любого из этих языков помогает быстрее освоить другой.

Изначально самая заметная разница была не в самих языках (в синтаксисе или рантайме), а в сферах их применения. Microsoft создал C# как часть своей платформы .NET, связанной с Windows. И если нужно было сделать программу для Windows, то напрашивающимся вариантом выглядел .NET. А вот если такую программу, чтобы запускалась и на Windows, и на Linux, и на Mac — тут могла помочь Java.

Но с годами ситуация изменилась: у .NET появилась новая версия .NET Core, уже не привязанная к конкретной операционной системе, а люди стали реже устанавливать программы на компьютер и больше делать в браузере. Это отчасти сблизило сферу применения языков: если посмотреть сейчас вакансии с названием C#, там, как и у Java, часто будет написано что-то вроде «Построение бэкенда для веб-приложений».

Впрочем, это не единственный вариант. В играх на движке Unity тоже используют C#, а это самый популярный движок в мире — так что в геймдеве язык тоже активно представлен (в отличие от Java).


Kotlin (2011)


Этот язык создала в Санкт-Петербурге компания JetBrains. Он совместим с Java, поэтому Java-проекты можно постепенно переводить на Kotlin: не переписывая всё разом, а постепенно добавляя туда Kotlin-код. И многие попробовавшие его Java-разработчики захотели к нему перейти, ощутив, что тут нет «скуки и многословности», всё выразительнее и современнее.

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

JetBrains совершенно не хотят останавливаться на Android и метят с Kotlin в самые разные ниши, даже те, где не представлена Java. Каких-то успехов в этом компания добивается, с каждым годом язык становится популярнее, но от других вроде той же Java пока что сильно отстаёт, и насколько ещё ему получится вырасти — открытый вопрос. Так что, если учить Kotlin, в Android-разработке это точно очень пригодится, а в других областях — как повезёт.


Swift (2014)


Наконец, самый молодой язык из перечисленных — он был представлен меньше шести лет назад. Обычно за такое время языки не успевают стать достаточно популярными для попадания в такие списки. Но здесь ситуация особая: компания Apple, создавшая его, ясно дала понять, что теперь iOS-приложения надо писать на нём. А тут как Apple скажет — так и будет, свою платформу компания контролирует.

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

И в итоге выбор получается совсем простой. Хотите писать приложения для айфонов (ну или для Mac, Apple TV, Apple Watch) — учите Swift. Не хотите их писать — не учите Swift. Ну, если хотите делать приложения «для iOS и Android сразу», существуют ещё кроссплатформенные решения вроде Flutter, но они куда менее популярны.


Прочие языки

Молодые: Go, Dart, Rust и так далее

В интернете легко встретить заявления о том, как прекрасен какой-то молодой язык («молодой» в этом контексте может значить около десяти лет). Мол, он исправляет ошибки предшественников, соответствует духу времени и делает разработку куда приятнее.

Охотно верю, что в заметной степени это правда. Но есть проблема: почти все такие языки используются в индустрии заметно меньше тех самых «предшественников». Так что даже в Москве такой выбор резко сужает круг вакансий, а если вы в городе размеров Омска, то Rust-вакансии вряд ли встретите в принципе. Конечно, можно искать удалёнку, но для первой работы это не лучший вариант.

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

Высокооплачиваемые: Scala, F#, Haskell и так далее

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

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

Узкоспецифичные языки: SQL, HTML, Bash и так далее

Упомяну для полноты картины. До этого речь шла о языках общего назначения, на которых гипотетически можно писать что угодно. Но существуют ещё языки, используемые строго для конкретного круга задач. Например, SQL используется конкретно для работы с базами данных. И его знание вам может понадобиться «в дополнение» к вашему основному языку.

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


Заключение

Если о разработчиках что-то известно достоверно, то вот что: они любят дискутировать о языках программирования и часто расходятся во мнениях.

И к этому посту почти наверняка появятся комментарии, что в нём многое некорректно, упущено что-то значимое и вообще надо было всё написать иначе.

Что если я заявляю «надо объяснять главные различия», то надо было обязательно рассказать про типизацию.

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

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


А напоследок хочу обратиться к опытным разработчикам с минуткой рекламы. Несмотря на личные предпочтения, я старался в этом тексте не ставить никакой язык выше другого. Тот же подход у компании JUG Ru Group, где я работаю: мы проводим конференции по самым разным языкам и темам (от JS и .NET до тестирования и devops).

И этим летом в наших онлайн-конференциях поучаствуют такие люди, как создатель C++ Бьярне Страуструп и создатель Java Джеймс Гослинг. А ещё будет создатель Stack Overflow Джоэл Спольски — поскольку на SO задают вопросы о самых разных языках, то и ему самому наверняка захотят задать вопрос самые разные разработчики. В общем, на каком бы языке вы ни писали, вероятно, среди этих конференций есть интересные для вас — рекомендую сходить на сайт и проверить лично.

от Objective C к Swift / Хабр

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

Что заставило множество разработчиков перейти на Objective C? Что сейчас заставляет отказаться от него и выбрать Swift?

Objective C является расширением языка Си, в который были добавлены новые возможности для объектно-ориентированного подхода программирования. Язык использует объектную модель Smalltalk. Полностью совместим с языком программирования Си. Компания Apple долгое время использовала Objective C как основной язык программирования для разработки своих продуктов.

Создателями Objective C являются Брэд Кокс и Том Лав. Они начали работать над ним в начале1980-х годов, когда еще были сотрудниками телекоммуникационной компании ITT Corporation. Примерно в то же время Кокс и Лав познакомились с языком программирования Smalltalk. Кокса тогда занимали проблемы повторного использования программного кода.

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

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

Основным преимуществом объектно-ориентированного подхода стала возможность создавать новые классы на основе уже написанных (добавлять инварианты и методы, переопределять методы, использовать определенные в базовом классе методы как свои), названное наследованием.

Набор методов представляет собой интерфейс для взаимодействия с инвариантами.


OOPC


Брэд Кокос быстро понял, что Smalltalk не подойдет для решения задач в ITT Corporation: совместимость с языком С для них была критична. Однако Кокс решил модифицировать препроцессор для С в сторону Smalltalk.
Модификация эта состояла в добавлении новых синтаксических конструкций и специальном препроцессоре для них (который, проходя по коду преобразовывал их в обычные вызовы функций С), а также новой библиотеке времени выполнения (эти вызовы обрабатывающей). Таким образом, изначально Objective C воспринимался как надстройка над C. В каком-то смысле это так и до сих пор: можно написать программу на чистом С, а после добавить к ней немного конструкций из Objective C (при необходимости), или же наоборот, свободно пользоваться С в программах на Objective C. Кроме того, все это касается и программ на С++.

То, что получилось, Кокс назвал «OOPC» – Object-Oriented Pre-Compiler. В 1982 году Лав устроился в Schlumberger Research и получил возможность приобрести коммерческую версию Smalltalk-80. Это помогло им в дальнейшей работе над Objective C. В итоге в Objective C была реализована возможность создавать объекты и работать с ними.

Целью Кокса было создание языка, поддерживающего концепцию software IC, подразумевающей возможность собирать программы из готовых компонентов (объектов), подобно тому как сложные электронные устройства могут быть собраны из набора готовых интегральных микросхем. При этом язык должен быть простым и основанным на языке С, чтобы облегчить переход разработчиков на него.

Одной из целей было также создание модели, в которой сами классы являются полноценными объектами, поддерживалась бы интроспекция и динамическая обработка сообщений. Любому объекту можно послать любое сообщение. Объект может вместо обработки сообщения переслать его другому объекту для обработки (делегирование), в частности, так можно реализовать распределённые (то есть находящиеся в различных адресных пространствах и даже на разных компьютерах) объекты.

Привязка сообщения к соответствующей функции происходит на этапе выполнения.

Язык Objective C поддерживает работу с метаинформацией — так, на этапе выполнения можно узнать класс объекта, список его методов (с типами передаваемых аргументов) и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и так далее.

NeXT


В 1986 году Кокс опубликовал книгу Object-Oriented Programming, An Evolutionary Approach, в которой разместил описание своего языка программирования, разобрал проблему повторного использования кода и указал преимущества Objective C при ее решении. Лав и Кокс также создали компанию Productivity Products International (PPI), который должен был помочь монетизировать компилятор Objective C с библиотеками классов. Далее фонд был переименован в StepStone.

В 1988 году компания NeXT Software лицензировала язык Objective C, усовершенствовала его библиотеки и добавила новые – AppKit и Foundation Kit. На их основе позднее была создана среда разработки NEXTSTEP.

В 1992 к усовершенствованию языка и компилятора подключились разработчики проекта GNU в рамках проекта OpenStep. С тех пор GCC поддерживает Objective C.

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

20 декабря 1996 года компания Apple купила NeXT Software, а среда разработки NEXTSTEP стала основной средой разработки для будущей основной версии операционной системы Apple — OS X.

После покупки NeXT, Apple взяла их SDK (компилятор, библиотеки, IDE) за основу для своих дальнейших разработок. IDE для разработки кода получила название Xcode, а для GUI – Interface Builder. Фреймворк Cocoa для GUI разработок (и не только) на сегодня является наиболее значимой средой разработки программ на Objective C.

В 2007 году компания Apple презентовала обновленную версию языка и назвала его Objective C 2.0, данная версия языка является актуальной в настоящее время. Используется в разработке Apple OS X, iOS.

Swift


В 2014 году компания Apple представила новый язык программирования – Swift. Он стал самым быстрорастущим языком программирования в истории.

«С открытием исходного кода Swift разработчики всего мира могут вносить свой вклад в этот язык программирования и делать его доступным на новых платформах, — сказал тогда Крейг Федериги, старший вице-президент Apple по программному обеспечению. — Эффективность и простота Swift дадут молодым программистам стимулы к обучению, к тому же теперь они смогут распространять свои идеи повсюду: от мобильных устройств до облачных систем».

Создатель языка Swift – Крис Латтнер. Он пришел в Apple в 2005 году. Там он занимался разработкой LLVM. Apple использовала LLVM для того, чтобы изменить способ использования Objective C при создании приложений.

LLVM (Low Level Virtual Machine) — это универсальная система анализа, трансформации и оптимизации программ или, как её называют разработчики, «compiler infrastucture».
Крис Латтнер курирует все инструменты разработчиков Apple: все, с помощью чего создаются программы для телефонов, планшетов и компьютеров Apple, как сторонними разработчиками, так и инженерами компании. Будучи аспирантом университета штата Иллинойс, он создал своего рода средства для разработчика под названием LLVM, которые сегодня лежат в основе Xcode.
Латтнер также использовал LLVM в качестве основы для Swift. Эти два продукта специально были созданы для работы в тандеме.

Над Swift он начал работать летом 2010 года. Латтнер держал это в секрете полтора года. Он создавал Swift в свободное от основной работы время.

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

По мнению Apple, язык Swift имеет все шансы изменить ИТ-индустрию.

2 июня 2014 года компания выпустила тестовую версию для сторонних разработчиков и программистов. Apple позиционирует это язык как более быстрый и эффективный способ создания программ для iPhone, iPad и Mac.

Расширение аудитории


Языку программирования необходимо несколько лет, чтобы стать популярным хотя бы в узких кругах энтузиастов. Достаточно показательна ситуация с языком Go, который компания Google представила еще в 2009 году. Над Go работали лучшие умы (Кен Томпсон и Роб Пайк), однако и по сей день прикладываются немалые усилия для его популяризации. Однако Apple делает все, чтобы Swift стал исключением и последовал примеру языков Java и C# в 1990-х и начале 2000-х соответственно.

Swift создан для среднестатистического программиста. На языке можно писать даже самые простые приложения, а наделенный довольно умными инструментами, язык предлагает эффективный способ учиться написанию самостоятельно. Но главная причина будущей популярности языка кроется в другом. Сотни тысяч разработчиков сегодня создают приложения для устройств Apple, используя Objective C. Устройства Apple пользуются большой популярностью, а значит эти разработчики продолжат создавать для них приложения, но уже на Swift. По мнению Apple, он значительно лучше и эффективнее, чем Objective C.

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

«Не было никакого реального стимула использовать Google Go» — говорит Пол Янсен, который отслеживал прогресс различных языков программирования в течение около пятнадцати лет. «Swift отличается наличием стимула».

В рейтинге TIOBE Swift занимает 14-ю позицию. За год он поднялся на 3 позиции. Язык Go переместился с 95 позиции на 20, что очень впечатляет. А Objective C опустился с 6 места на 15. Таким образом, можно сказать, что Swift технически обошел своего предшественника.

Сегодня на GitHub, популярном хранилище разработок с открытым исходным кодом, более 2500 проектов используют Swift.

Swift – это не просто язык, это язык, который тесно связан со всем, что требуется разработчику для работы. Сюда входит не только интегрированная среда разработки, но и многие другие инструменты (например, отладчик), которые уже знакомы каждому разработчику Apple.

Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python) и лаконичен (разработчики избавились от многословности Objective C). Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени.

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

P.S. Apple не первая компания, которая выпустила новый язык программирования в недавнем прошлом. Это уже сделали Facebook, Google и Mozilla. К чему это приведет — покажет время.

Преимущества C++ как первого языка для обучения программированию / Хабр

Всем доброго времени суток!

Это статья о том, почему же все-таки стоит выбрать C++ в качестве первого языка программирования для обучения студентов, и немного о проблемах преподавания в ВУЗах. Часть суждения, касающегося процесса обучения, основывается на личном опыте преподавания (три года, во время учёбы в аспирантуре), а также на общении с преподавателями и студентами.
Рассматриваются преимущества языка программирования C++ именно для обучения и с точки зрения лучшего понимания основных концепций. Остальные кандидаты на роль первого языка (Pascal/Python/C#/Java) не рассматриваются, дабы не разжигать холивар. Еще раз отмечу: не для промышленной разработки и не с точки зрения такого субъективного критерия, как удобство.
Написано под впечатлением откровенно рекламного поста «Delphi XE5 как основа для обучения программированию» (на момент написания, доступна только версия «от гугла»).

0 Введение

Для начала, хотелось бы отметить, что для студентов не профильных специальностей вопрос выбора первого языка программирования не рассматривается. Основы алгоритмизации (если они необходимы) можно осваивать хоть на Python, хоть на C++ (Java, C#, Pascal и т.д.). В данном случае, чем проще язык, тем он лучше: у людей необходимо сформировать хоть какую-то культуру алгоритмического мышления и понимания базовых конструкций. Студентам некоторых специальностей (юридические, экономические, гуманитарные), изучение ЯП совсем не требуется.
Несмотря на всю очевидность написанного выше, многим студентам-экономистам первого курса преподают программирование на Pascal на практических занятиях по информатике. Студентам, которые ещё толком не умеют работать с MS Word. Польза от таких занятий весьма и весьма сомнительна. Точно так же, студентов-математиков могут пару лет учить программировать на C++/C#/Java… но зачем? Гораздо полезнее для последующего применения своих знаний изучить программы вроде Mathcad, Simulink, Surfer и т.д.
Учитывая вышеизложенное, рассмотрим процесс выбора первого языка исключительно для студентов профильных специальностей (например, «Программная инженерия») и смешанных специальностей с уклоном в сторону IT (например, «Прикладная математика и информатика»). Во-первых, учебный план таких специальностей предполагает достаточное количество лекций и практик (т.к. рассматривается первый язык, учитывается только первый курс): для двух связанных дисциплин (информатика и программирование) около 230 часов, в зависимости от специальности. Во-вторых, наличие заинтересованности и определённого склада ума у студентов. Такие студенты чаще всего уже пробовали программировать, а возможно даже и написали сайт/игрушку. Две эти причины, в совокупности, дают неплохую базу для начала обучения и понижают порог вхождения для обучения языку. К тому же, выпускникам рассматриваемых специальностей предстоит в дальнейшем работать в индустрии разработки ПО. Следовательно, выбор первого языка для них особо важен.
1 Почему же C++?

На первом курсе закладывается базис для дальнейшего обучения и формируется подход студента к дальнейшему получению знаний. Язык программирования играет здесь не последнюю роль.
Для того чтобы выбрать C++ в качестве первого языка программирования существует четыре причины:
  1. Компилируемый язык со статической типизацией.
  2. Сочетание высокоуровневых и низкоуровневых средств.
  3. Реализация ООП.
  4. STL.

Рассмотрим данные причины более подробно.

Компилятор. Тут C++ предстаёт во всей красе. Множество компиляторов, консольные команды, этапы сборки программы… Да, первую программу нужно написать в простом текстовом редакторе без подсветки синтаксиса и автокомплита, найти чем и как её можно запустить. Такой подход формирует у человека некоторое понимание того, как всё устроено:

  • Код программы – это просто текст, который сам по себе не заработает.
  • Компилятор – это отдельная программа, которой надо указать, что и как сделать с исходным кодом, чтобы он превратился в исполняемый файл. Текстовый редактор – это тоже отдельная программа, предназначенная для написания исходного кода.
  • Существуют опции сборки, и существует не один компилятор.
  • Исходный код, написанный программистом, может быть предварительно обработан и изменён (например, препроцессором).

Будущий специалист осознает, что код сам по себе не запускается (в дальнейшем он быть может и заинтересуется, как работает, например, интерпретатор Python или JIT-компиляция). Человек будет задавать себе вопросы: «А почему?», «А в чём отличие?», «Как?». Не будет иллюзий по поводу того, что всё работает по нажатию двух волшебных кнопок или в интерактивной командной строке. Студент будет знать, что процесс сборки программы можно настроить и что исходный код может быть обработан сторонними программами. В будущем, при использовании IDE, человек будет понимать, что это всего лишь удобный комплекс программ, выполняющий большую часть рутинных операций и в случае недостаточной гибкости от неё можно отказаться или расширить.

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

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

Реализация ООП. Это относительно чистая реализация ООП без всякого синтаксического сахара (относительно некоторых других языков). Чётко разграниченные уровни доступа к членам класса, возможность множественного наследования и динамический полиморфизм дают возможность быстро усвоить основные концепции ООП (абстракция, наследование, инкапсуляция и полиморфизм). Указатели и динамическое выделение памяти позволяют наглядно понять такие важные механизмы, как upcasting и downcasting. В дальнейшем, основываясь на этих знаниях, легко можно понять весь синтаксический сахар в других языках. Необходимость контроля ресурсов (в том числе и «правило трёх» или уже «правило пяти», с учётом C++11), захват их в конструкторе и освобождение в деструкторе также способствуют более глубокому пониманию ООП.
Стоит отметить такой важный момент, как не принудительное ООП. То есть данный подход к программированию применяется тогда, когда это удобно, и его можно смешивать, например, с функциональным программированием. Это способствует формированию понимания того, что средства реализации выбираются исходя из задачи.

STL. Сама по себе концепция шаблонов C++, генерации кода и применения широкого спектра алгоритмов к различным контейнерам положительно влияет на процесс обучения. Здесь все на поверхности и понятно, почему можно создать вектор целых чисел и вектор пользовательских объектов на основе одного класса-контейнера. Почему можно применить некоторую операцию к последовательности объектов или как отсортировать объекты, для которых не предусмотрена встроенная операция сравнения. Можно понять, как осуществляется доступ к элементам, и узнать о категориях итераторов. Помимо этого закрепляется понимание обобщённого программирования.

2 Немного о проблемах обучения

Процесс обучения, пожалуй, одна из наиболее существенных преград, для того, чтобы реализовать все то, о чём написано в предыдущем пункте. Вероятно, этот вопрос не касается топовых IT-вузов, но если взять рядовые образовательные учреждения, то ощущается дефицит квалифицированных кадров и слабая мотивация студентов. Для большей части практических дисциплин редко привлекаются специалисты, занимающиеся непосредственно разработкой ПО. Например, человек, который не применял STL в реальных проектах, вряд ли сможет объяснить, как это делать, и главное зачем. Так же, как и преподаватель, искренне считающий, что программирование на Delphi с формочками уже есть самое настоящее ООП, учитывая, что весь код (без намёка на собственные классы, абстракцию и инкапсуляцию) пишется в обработчике нажатия на кнопку с очень понятным именем «Button1», не способствует процессу обучения. Проблемы есть и со стороны студентов, которые толком не поняли, куда и зачем они поступили. Многие студенты, не имеют мотивации к дальнейшему обучению и пониманию, а также и к самообразованию. Не смотря на то, что такие студенты и преподаватели прекрасно дополняют друг друга, в конце обучения не получится специалист, претендующий на junior-вакансию.
3 Заключение

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

BIPM — история создания SI

Историческая перспектива базовых блоков

Единица времени, секунда

До 1960 г. единица времени — секунда — определялась как доля 1/86 400 среднего солнечного дня. Точное определение «среднего солнечного дня» было предоставлено астрономам. Однако измерения показали, что неравномерность вращения Земли делает это определение неудовлетворительным. Чтобы определить единицу времени более точно, 11-я сессия CGPM (1960) приняла определение, данное Международным астрономическим союзом на основе тропического 1900 года.Однако экспериментальные работы уже показали, что атомный стандарт времени, основанный на переходе между двумя энергетическими уровнями атома или молекулы, может быть реализован и воспроизведен гораздо точнее. Учитывая, что очень точное определение единицы времени необходимо для науки и техники, 13-я сессия CGPM (1967-1968) выбрала новое определение второй, ссылаясь на частоту сверхтонкого перехода в основном состоянии в атоме цезия 133. Пересмотренная, более точная формулировка того же определения теперь в терминах фиксированного числового значения невозмущенной частоты сверхтонких переходов основного состояния атома цезия 133, Delta nu Cs , была принята в Резолюции 1 26-го заседания CGPM (2018). ,


Единица длины, метр

Определение метра 1889 года, а именно длина международного прототипа платино-иридиевого сплава, было заменено 11-м CGPM (1960) с использованием определения, основанного на длине волны излучения, соответствующей конкретному переходу в криптоне 86. Это изменение было принято для повышения точности, с которой может быть реализовано определение измерителя, это было достигнуто с помощью интерферометра с перемещающимся микроскопом для измерения разности оптических путей при подсчете полос.В свою очередь, это было заменено в 1983 году 17-й сессией CGPM (Резолюция 1) с определением расстояния, которое свет проходит в вакууме за определенный интервал времени. Оригинальный международный прототип измерителя, который был одобрен 1-й CGPM в 1889 году, до сих пор хранится в BIPM в условиях, установленных в 1889 году. Чтобы прояснить его зависимость от фиксированного числового значения скорости света, c , формулировка определения была изменена в Резолюции 1 26-го заседания ГКБП (2018 г.).


Единица массы, килограмм

Согласно определению 1889 года, килограмм был просто массой международного прототипа килограмма, артефакта, сделанного из платино-иридия. Он хранился и хранится в BIPM в условиях, определенных 1-й CGPM, когда она санкционировала прототип и объявила, что «этот прототип впредь будет считаться единицей массы». Примерно в то же время было изготовлено сорок подобных прототипов, и все они были обработаны и отполированы, чтобы иметь примерно такую ​​же массу, что и международный прототип.На 1-м CGPM (1889 г.), после калибровки по международному прототипу, большинство этих «национальных прототипов» были индивидуально переданы государствам-членам, а некоторые также и BIPM. Третья группа CGPM в декларации, направленной на устранение двусмысленности в употреблении слова «вес», подтвердила, что «килограмм — это единица массы, она равна массе международного прототипа килограмма». , Полная версия этих деклараций представлена ​​на стр. 70 вышеупомянутого разбирательства CGPM.

Ко времени второй проверки национальных прототипов в 1946 году было обнаружено, что в среднем масса этих прототипов расходилась с массой международного прототипа. Это было подтверждено третьей проверкой, проведенной с 1989 по 1991 год, при этом средняя разница составляла около 25 микрограммов для набора исходных прототипов, санкционированных 1-й CGPM (1889). Чтобы обеспечить долгосрочную стабильность единицы массы, в полной мере использовать квантовые электрические стандарты и быть более полезными для современной науки, новое определение килограмма, основанное на значении фундаментальной постоянной, для которой Для этой цели была выбрана постоянная Планка h, которая была принята Резолюцией 1 26-го ГКБМ (2018 г.).


Единица электрического тока, ампер

Электрические единицы, называемые «международными единицами» для тока и сопротивления, были введены на Международном электрическом конгрессе, проходившем в Чикаго в 1893 году, а определения «международный ампер» и «международный ом» были подтверждены Международной конференцией в Лондоне в 1908 году.

Ко времени 8-го заседания ГКБП (1933 г.) существовало единодушное желание заменить «международные единицы» так называемыми «абсолютными единицами».Однако, поскольку некоторые лаборатории еще не завершили эксперименты, необходимые для определения соотношений между международными и абсолютными единицами, CGPM дал полномочия CIPM принять решение в надлежащее время как об этих соотношениях, так и о дате, когда новые абсолютные единицы вступят в силу. , CIPM сделал это в 1946 году, когда решил, что новые подразделения вступят в силу 1 января 1948 года. В октябре 1948 года 9-я CGPM утвердила решения, принятые CIPM. Определение ампера, выбранное CIPM, было связано с силой между параллельными проводами, по которым проходит электрический ток, и имело эффект фиксации числового значения магнитной проницаемости вакуума μ 0 (также называемой магнитной постоянной).Численное значение электрической диэлектрической проницаемости вакуума ε 0 (также называемой электрической постоянной) стало фиксированным в результате нового определения счетчика, принятого в 1983 году.

Однако определение ампера 1948 года оказалось трудным для реализации, и практические квантовые стандарты (основанные на эффектах Джозефсона и квантового Холла), которые связывают вольт и ом с конкретными комбинациями постоянной Планка h и элементарного заряда e. , стал почти повсеместно использоваться как практическая реализация ампера через закон Ома.Как следствие, стало естественным не только зафиксировать числовое значение h , чтобы переопределить килограмм, но также зафиксировать числовое значение e , чтобы переопределить ампер, чтобы привести практические квантовые электрические стандарты в точное соответствие. с СИ. Настоящее определение, основанное на фиксированном числовом значении элементарного заряда, e , было принято в Резолюции 1 26-го заседания CGPM (2018).


Единица термодинамической температуры, кельвин

Определение единицы термодинамической температуры было дано 10-м CGPM, который выбрал тройную точку воды, T TPW , как фундаментальную фиксированную точку и присвоил ей температуру 273.16 К, тем самым определяя градус Кельвина. 13-я CGPM приняла название кельвин, символ K, вместо «градус кельвина», символ ° K, для единицы, определенной таким образом. Однако практические трудности в реализации этого определения, требующие образца чистой воды с четко определенным изотопным составом и разработки новых основных методов термометрии, привели к принятию нового определения кельвина, основанного на фиксированном числовом значении постоянная Больцмана k . Настоящее определение, устраняющее оба этих ограничения, было принято в Резолюции 1 26-й сессии ГКБП (2018 г.).


Единица количества вещества, моль

После открытия фундаментальных законов химии единицы, называемые, например, «грамм-атом» и «грамм-молекула», использовались для определения количества химических элементов или соединений. Эти единицы имеют прямую связь с «атомным весом» и «молекулярным весом», которые на самом деле являются относительными атомными и молекулярными массами. Первые сборники «Атомных весов» изначально были связаны с атомным весом кислорода, который, по общему мнению, был принят равным 16.В то время как физики разделили изотопы на масс-спектрометре и приписали значение 16 одному из изотопов кислорода, химики приписали такое же значение (слегка изменчивой) смеси изотопов 16, 17 и 18, которые для них составляли природный элемент. кислород. Соглашение между Международным союзом теоретической и прикладной физики (IUPAP) и Международным союзом теоретической и прикладной химии (IUPAC) положило конец этой двойственности в 1959-1960 гг. Физики и химики договорились присвоить значение 12, в точности, так называемой атомной массе, правильно называемой относительной атомной массой A r , изотопа углерода с массовым числом 12 (углерод 12, 12 С).Полученная таким образом единая шкала дает относительные атомные и молекулярные массы, также известные как атомный и молекулярный веса, соответственно. Изменение определения крота не влияет на это соглашение.

Количество, используемое химиками для определения количества химических элементов или соединений, называется «количеством вещества». Количество вещества, обозначенное символом n , определяется как пропорциональное количеству указанных элементарных объектов N в выборке, при этом константа пропорциональности является универсальной константой, одинаковой для всех объектов.Константа пропорциональности является обратной величиной постоянной Авогадро N A , так что n = N / N A . Единица количества вещества называется моль , символ моль. Следуя предложениям IUPAP, IUPAC и ISO, CIPM разработал определение моля в 1967 году и подтвердил его в 1969 году, указав, что молярная масса углерода 12 должна быть точно 0,012 кг / моль. Это позволило определить количество вещества n S ( X ) любого чистого образца S объекта X непосредственно из массы образца m S и молярной массы M ( X) объекта X , молярная масса определяется из его относительной атомной массы A r (атомная или молекулярная масса) без необходимости точного знания постоянной Авогадро, с использованием соотношений

n S (X) = м S / M (X) и M (X) = A r (X) г / моль

Таким образом, это определение моля зависело от артефакта определения килограмма.

Числовое значение постоянной Авогадро, определенное таким образом, было равно количеству атомов в 12 граммах углерода 12. Однако, благодаря недавним технологическим достижениям, это число теперь известно с такой точностью, что существует более простое и универсальное определение моль стала возможной, а именно благодаря точному указанию количества сущностей в одном моль любого вещества, фиксируя тем самым числовое значение постоянной Авогадро. Это приводит к тому, что новое определение моля и значение постоянной Авогадро больше не зависят от определения килограмма.Тем самым подчеркивается различие между принципиально разными величинами «количество вещества» и «масса». Настоящее определение моля, основанное на фиксированном числовом значении постоянной Авогадро, N A , было принято в Резолюции 1 26-й сессии ГКБМ (2018).


Единица силы света, кандела

Единицы силы света, основанные на стандартах пламени или ламп накаливания, использовавшихся в различных странах до 1948 года, были первоначально заменены «новой свечой», основанной на яркости планковского радиатора (черного тела) при температуре замерзающая платина.Эта модификация была подготовлена ​​Международной комиссией по освещению ( CIE ) и CIPM до 1937 года, и решение было обнародовано CIPM в 1946 году. Затем оно было ратифицировано в 1948 году 9-й CGPM, которая приняла новое международное название. для этого устройства кандела , символ cd; в 1954 г. 10-я ГКГВ установила канделу в качестве базовой единицы; В 1967 г. 13-я ГКГВ внесла поправки в это определение.

В 1979 году из-за трудностей в реализации радиатора Planck при высоких температурах и новых возможностей, предлагаемых радиометрией, т.е.е. Для измерения мощности оптического излучения 16-я ГКПМ приняла новое определение канделы.

В настоящем определении канделы используется фиксированное числовое значение световой отдачи монохроматического излучения частотой 540 × 10 12 Гц, K cd , принятое в Резолюции 1 26-й сессии ГКМВ (2018).


Краткая история SI

nu

Создание десятичной метрической системы во время Французской революции и последующее размещение двух платиновых эталонов, представляющих метр и килограмм, 22 июня 1799 года в архиве Archives de la République в Париже, который можно увидеть как первый шаг, который привел к нынешней Международной системе единиц.

nu

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

nu

Эти приложения в области электричества и магнетизма получили дальнейшее распространение в 1860-х годах под активным руководством Максвелла и Томсона через Британскую ассоциацию развития науки (BAAS, ныне BSA). Они сформулировали требование для согласованной системы единиц с базовыми единицами и производными единицами.В 1874 году BAAS представила систему CGS , трехмерную когерентную систему единиц, основанную на трех механических единицах — сантиметре, грамме и секунде, с использованием префиксов от микро до мега для выражения десятичных долей и кратных. Последующее развитие физики как экспериментальной науки во многом основывалось на этой системе.

nu

Размеры когерентных блоков CGS в области электричества и магнетизма оказались неудобными, поэтому в 1880-х годах BAAS и Международный электротехнический конгресс, предшественник Международной электротехнической комиссии (МЭК), одобрили взаимно согласованный набор Практические единицы .Среди них были ом для электрического сопротивления, вольт для электродвижущей силы и ампер для электрического тока.

nu

После подписания 20 мая 1875 года Метрической конвенции, в соответствии с которой был создан BIPM и созданы CGPM и CIPM, началась работа по созданию новых международных прототипов счетчика и килограмма. В 1889 году 1-й CGPM санкционировал международные прототипы счетчика и килограмма.Вместе с астрономической секундой как единицей времени эти единицы составляли трехмерную механическую систему единиц, аналогичную системе CGS, но с базовыми единицами измерения метра, килограмма и секунды, известной как система MKS .

nu

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

nu

После пересмотра Метрической конвенции шестым CGPM (1921), который расширил сферу действия и обязанности BIPM на другие области физики, и последующее создание Консультативного комитета по электроэнергии (CCE, ныне CCEM) 7-м заседанием CGPM (1927) предложение Георгия было тщательно обсуждено МЭК, Международным союзом теоретической и прикладной физики (IUPAP) и другими международными организациями.Это привело к тому, что CCE в 1939 году предложила принять четырехмерную систему на основе метра, килограмма, секунды и ампера, систему MKSA, предложение, одобренное ClPM в 1946 году.

nu

После международного расследования, проведенного BIPM, которое началось в 1948 году, 10-я сессия CGPM (1954) одобрила дальнейшее введение кельвина и канделы в качестве базовых единиц для термодинамической температуры и силы света, соответственно.Название «Международная система единиц» с аббревиатурой SI было дано системе 11-м CGPM (1960). Были установлены правила для префиксов, производных единиц, бывших дополнительных единиц, а также других вопросов, что обеспечивает исчерпывающую спецификацию для всех единиц измерения.

nu

На 14-м совещании CGPM (1971 г.) для количества вещества была принята новая основная единица, моль, символ моль.Это последовало за предложением Международной организации по стандартизации, исходящим из предложения Комиссии по символам, единицам и номенклатуре (SUN Commission) IUPAP, которое было поддержано Международным союзом чистой и прикладной химии (IUPAC). В результате количество базовых единиц СИ достигло семи.

nu

С тех пор были достигнуты выдающиеся успехи в связи единиц СИ с действительно инвариантными величинами, такими как фундаментальные константы физики и свойства атомов.Признавая важность привязки единиц СИ к таким неизменным величинам, 24-я сессия CGPM (2011 г.) приняла принципы нового определения СИ, основанные на использовании набора из семи таких констант в качестве ссылок для определений. Во время 24-го совещания CGPM эксперименты по определению их значений в терминах тогдашних базовых единиц не были полностью согласованы, но ко времени 26-го совещания CGPM (2018) это было достигнуто, и новое определение SI было принято в Резолюции. 1. Это основа определения, представленного в данной брошюре, и самый простой и наиболее фундаментальный способ определения СИ.

nu

СИ ранее определялась как семь базовых единиц, а производные единицы определялись как произведение мощности базовых единиц. Семь базовых единиц были выбраны по историческим причинам, поскольку метрическая система, позже СИ, развивалась и развивалась в течение последних 130 лет. Их выбор не был уникальным, но с годами он стал общепринятым и привычным, не только благодаря тому, что он предоставил основу для описания СИ, но и для определения производных единиц.Эта роль основных единиц сохраняется в нынешней СИ, хотя сама СИ теперь определяется в терминах семи определяющих констант. Поэтому в этой брошюре все еще можно найти определения семи основных единиц, но отныне они основаны на семи определяющих константах: сверхтонкая частота цезия Delta nu Cs ; скорость света в вакууме c ; постоянная Планка ч ; элементарный заряд е ; Постоянная Больцмана k ; Постоянная Авогадро Н А ; и световая эффективность определенного видимого излучения K cd .

nu
.

Национальный музей американской истории

Национальный музей американской истории приглашает ВСЕХ посетителей понять прошлое, чтобы осмыслить настоящее и построить более гуманное будущее.

В рамках подготовки к визиту, пожалуйста, найдите ответы на свои вопросы в разделах, перечисленных ниже. Для получения дополнительной информации звоните по телефону 202-633-3717 или по электронной почте [email protected]. Оказавшись в музее, вопросы о доступности можно задать сотрудникам службы безопасности или сотрудникам информационных бюро.

Допускаются собаки-поводыри. SI следует требованиям ADA Министерства юстиции США в отношении служебных собак. Собака должна быть обучена оказывать помощь инвалиду. Посетителям не разрешается приносить животных для эмоциональной поддержки в Смитсоновские музеи или на территории Смитсоновского института.

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

Посетители с ограниченными физическими возможностями

Прибытие и парковка

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

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

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

Если вы используете MetroAccess Paratransit, пожалуйста, используйте 1300 Construction Avenue NW в качестве адреса музея.

Как добраться до музея

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

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

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

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

Скамейки есть во всех музеях.

Доступны все магазины музея, столовые и шкафчики самообслуживания.

Глухие или слабослышащие посетители

Перевод государственных программ и экскурсий на язык жестов предоставляется по запросу.Субтитры для публичных программ в реальном времени также доступны по запросу. Поскольку в штате музея нет переводчиков или репортеров с субтитрами, предпочтительнее уведомление за две недели. Пожалуйста, позвоните по телефону 202-633-3717 или напишите по адресу [email protected].

На обоих информационных стойках имеется вспомогательная система прослушивания с индукционной петлей. Театр Warner Bros. имеет вспомогательную систему прослушивания. Пожалуйста, попросите у сотрудников приемник.

Вспомогательные устройства для прослушивания доступны по запросу для экскурсий и мероприятий в театре Warner Bros Theater, Hall of Music, Unity Square и Performance Plaza.Вспомогательное оборудование для прослушивания стало возможным благодаря гранту Смитсоновского комитета женщин.

Все видеоролики с повествованием, показанные в связи с выставкой, имеют открытые субтитры.

Слепые или слабовидящие посетители.

В музее размещена мобильная служба информации и устного описания Aira Access. Посетители могут загрузить бесплатное приложение Aira на смартфон, подключиться к бесплатному Wi-Fi в музее и использовать приложение, чтобы поговорить с агентом Aira, используя минуты, предоставленные Смитсоновским институтом.Посетите Aira Access для получения дополнительной информации или загрузите и прочтите это руководство по Aira.

Визуальное описание некоторых выставок доступно.

Тактильные элементы представлены по всему музею.

Экскурсии со словесным описанием под руководством доцента с помощью зрячего гида и тактильными элементами доступны по запросу. Предпочтительно уведомление за две недели. Пожалуйста, позвоните по телефону 202-633-3717 или напишите по адресу [email protected].

Брошюры со шрифтом Брайля и крупным шрифтом, выпущенные музеем и Смитсоновским институтом, доступны на информационных стойках.

Посетители с когнитивными нарушениями

Национальный музей американской истории участвует в программе «Утро Смитсоновского института в музее». Утро в музее — это сенсорная программа для семей с детьми с ограниченными возможностями, в которой музей открывается рано утром в субботу или воскресенье. Семьи записываются на программу заранее. Чтобы узнать больше о «Утре в музее», свяжитесь с Эшли Грейди по адресу [email protected] или 202-633-2921.

Более спокойное время для посещения и тихие места в музее

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

Посещаемость будет зависеть от праздников, школьных каникул, погоды и других факторов. Как правило, днем ​​в музее больше людей. Для получения дополнительной информации звоните по телефону 202-633-3717 или [email protected].

По всему музею есть более тихие места и экспонаты. Уровни звука могут варьироваться в зависимости от времени суток, времени года и расписания шоу. Освещение Revolution и Power Machinery, расположенные на первом этаже западного крыла, как правило, тише.

Сенсорные материалы и информация

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

Свет, шум, и толпы сильно различаются по всему зданию.

Возьмите с собой шумоподавляющие наушники.

При входе в музей все сумки проверяются службой безопасности. Будьте готовы открыть сумку для проверки.

Если вам нужна дополнительная информация, пожалуйста, свяжитесь с музеем по телефону 202-633-3717 или [email protected].

Для маленьких посетителей и подростков

Spark! Lab, расположенная на первом этаже западного крыла и ориентированная на детей от 6 лет и старше, — хорошее место, чтобы познакомить ребенка с музеем.Он предлагает множество тактильных ощущений и ограничивает количество посетителей, чтобы предотвратить переполнение (хотя может потребоваться ожидание входа). Ресурсы, которые помогут вам подготовиться к посещению Spark! Lab, доступны здесь.

.

Часто задаваемые вопросы | Подготовка к присяге: история и гражданское общество США для получения гражданства

  • Почему некоторые вопросы появляются более чем в одной теме?

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

    Если во время посещения сайта вы увидите вопрос во второй раз, он будет иметь загнутый угол и другой цвет.

    Вернуться наверх
  • Что происходит в зоне «Проверьте себя»?

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

    Вернуться наверх
  • Как мне просмотреть Preparing for the Oath в полноэкранном режиме?

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

    Вернуться наверх
  • Как мне «вернуться», если я не могу использовать кнопку «Назад» в браузере?

    Кнопка «Назад» в браузере не работает при использовании Preparing for the Oath . Вместо этого используйте кнопки на сайте для перемещения.

    Для перемещения между вопросами: Когда вы находитесь в теме, вы увидите ряд квадратов в нижней части экрана видео. Вы можете вернуться к предыдущему вопросу, нажав на эти квадраты.

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

    Для перемещения между темами: когда вы находитесь в теме, вы увидите кнопку «Меню» в верхнем левом углу экрана видео. Вы можете вернуться в главное меню, нажав здесь.

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

    Вернуться наверх
  • Как я могу включить / выключить субтитры и параметры голоса?

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

    Вернуться наверх
  • Как сохранить ссылку на конкретный вопрос или тему?

    Вы можете заметить, что веб-адрес (URL) не меняется по мере того, как вы исследуете различные темы и вопросы на Preparing for the Oath .Если вы хотите сохранить ссылку на конкретный вопрос или тему, посетите список ссылок в формате PDF по адресу http://americanhistory.si.edu/citizenship/pdf/LinkList.pdf. Скопируйте URL-адрес из списка и вставьте его в свой браузер. Затем используйте инструменты вашего браузера, такие как «Избранное», чтобы сохранить URL.

    Вернуться наверх
  • Как найти слова в словаре?

    Некоторые слова в заголовках видео и в тексте выделены жирным шрифтом. Эти слова определены в Списке слов (http: // americanhistory.si.edu/citizenship/pdf/Wordlist.pdf). Список слов организован в алфавитном порядке. Он открывается в отдельном окне. Вы можете использовать элементы управления видео, чтобы приостановить воспроизведение видео и найти слово в этом списке слов. Вы можете получить доступ к этому списку, щелкнув ссылку «Список слов» в правом верхнем углу каждой страницы, кроме раздела «Проверьте себя».

    Вернуться наверх
  • Как мне узнать, где я нахожусь в теме?

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

    Вернуться наверх
  • Как мне узнать, что я завершил тему?

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

    Вернуться наверх
  • Как я могу перемещаться между частями обучения / практики / попытки?

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

    Вернуться наверх
  • Как я могу узнать больше об изображениях в Подготовка к присяге ?

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

    Вернуться наверх
  • Нужно ли мне знать всю информацию, представленную в Preparing for the Oath для моего собеседования по натурализации?

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

    Вернуться наверх
  • Почему Preparing for the Oath использует вопросы с несколькими вариантами ответов? Тест USCIS для натурализации — это не тест с несколькими вариантами ответов.

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

    Вернуться наверх
  • Где я могу найти информацию о процессе натурализации?

    Посетите Ресурсный центр по гражданству Службы гражданства и иммиграции США (USCIS), чтобы найти информацию по телефону:

    • Требования к натурализации

    • Заявление о натурализации, форма N-400

    • Текущие сборы за подачу заявки и время обработки

    • Учебные материалы по английскому языку и обществоведению

    • Советы по поиску классов и помощь в вашем районе

    Вернуться наверх
  • Когда я смотрю видео, я вижу «USCIS #» в правом нижнем углу экрана.Что это значит?

    Этот номер соответствует официальному списку USCIS из 100 вопросов и ответов по гражданским вопросам. Эти номера вопросов совпадают со всеми учебными материалами USCIS для теста на гражданское право, поэтому вы можете сравнить этот ресурс с другими ресурсами, которые можно найти в Центре ресурсов по гражданству по адресу www.uscis.gov/citizenship.

    Вернуться наверх
  • Могу ли я выполнить поиск на сайте по номеру вопроса USCIS?

    Вы не можете искать Preparing for the Oath , используя номера вопросов USCIS.Однако вы можете просмотреть список ссылок (http://americanhistory.si.edu/citizenship/pdf/LinkList.pdf), в котором есть ссылки на каждый вопрос и тему.

    Вернуться наверх
  • Где я могу найти информацию по вопросам, ответы на которые меняются (например, «Кто сейчас является главным судьей Соединенных Штатов?») Или по вопросам, относящимся к месту моего проживания (например, «Какая столица ваше состояние? »)?

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

    • www.house.gov

    • www.senate.gov

    • www.supremecourt.gov

    • www.whitehouse.gov

    • www.usa.gov

    Вернуться наверх
  • ,

    Национальный музей американской истории

    Стул

    Роберт Хортон , заместитель директора по коллекциям и архивам. Брауновский университет (AB), Государственный университет Огайо (MA), Йельский университет (ABD). Научные направления: технологии и культурное наследие, цифровая консервация, электронные записи. Электронная почта: [email protected].

    Справочный

    Джо Херси, Справочник архивариуса. Кэмпбеллский университет (Б.S.), Американский государственный университет (MA). Научные направления: военная история и история психологических травм в результате боевых действий. Электронная почта: [email protected].

    Кей Петерсон , архивариус обслуживания клиентов. Университет штата Айова (бакалавр). Научные направления: цифровое сканирование, аудиовизуальное копирование, справочные услуги. Электронная почта: [email protected].

    Приобретение коллекций

    Крейг А. Орр , архивариус.Университет штата Делавэр (BA, MA). Научные направления: управление архивами, история железных дорог, военная форма. Электронная почта: [email protected].

    Расположение коллекций, описание, сохранение

    Ванесса Брусард Симмонс , архивариус. Университет Мэриленда (BA), Университет Джорджа Вашингтона (MA). Специальности исследования: рекламная эфемера; администрация консервации. Электронная почта: [email protected].

    Мария Даниэла З.Хименес. Архивист. Калифорнийский университет в Лос-Анджелесе (A.B.D., M.L.I.S., MA), Университет Пердью (MA), Калифорнийский университет, Беркли (BA). Научные направления: история и культура латиноамериканцев США / о / х, а также этнические исследования. Электронная почта: [email protected]

    Элисон Л. Освальд , архивариус. Университет Св. Бонавентуры (BA), Государственный университет Болла (MS), Государственный университет Нью-Йорка в Олбани (M.L.S.). Научные направления: американские изобретатели, архивное оформление и описание, архивы и технологии.Электронная почта: [email protected]. Щелкните здесь, чтобы перейти в Центр Лемельсона.

    Франклин Робинсон младший ., Специалист по архивам. Католический университет Америки (BA), Американский университет (MA). Научные направления: исполнительское искусство, кино, американское сельское хозяйство, семейная история и генеалогия, Англиканская церковь в колониальном Мэриленде, история ЛГБТ. Электронная почта: [email protected]

    Специальные проекты

    Джон А. Флекнер , архивариус.Колгейтский университет (BA), Университет Висконсина (MA). Научные направления: управление архивами. Электронная почта: [email protected].

    Дэвид Э. Хаберстих , архивариус. Рочестерский технологический институт (B.F.A), Университет Индианы (аспирантура по истории искусств), Университет Джона Хопкинса (M.L.A.). Научные направления: история фотоискусства и технологий, консервация фотографий, история искусства ХХ века, история фотографической социальной документации. Электронная почта: haberstichd @ si.Эда.

    .
    Оставить комментарий

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *