Мови програмування високого та низького рівня: які з них вам слід вивчати

27.09.2019 Цікаве

Програмування це ціла наука, що дозволяє створювати комп'ютерні програми. Вона включає величезну кількість різних операцій та алгоритмів, які утворюють єдину мову програмування. Отже, що це таке і якими бувають мови програмування? У статті наведено відповіді, а також наведено оглядовий список мов програмування.

Історію виникнення та зміни програмних мов слід вивчати нарівні з історією розвитку комп'ютерних технологійадже ці поняття пов'язані між собою безпосередньо. Без мов програмування неможливо було створити жодну програму для роботи комп'ютера, отже, створення обчислювальних машин стало б безглуздим заняттям.

Перша машинна мова була придумана в 1941 Конрадом Цузе, який є винахідником аналітичної машини. Трохи пізніше, 1943 р., Говард Ейкен створив машину "Марк-1", здатну зчитувати інструкцію лише на рівні машинного коду.

У 1950-х роках розпочався активний попит на розробку програмного забезпечення, а машинна мова не витримувала великих обсягів коду, тому була створена новий спосібспілкування з комп'ютерами. "Ассемблер" є першою мнемонічною мовою, що замінила машинні команди. З роками список мов програмування тільки збільшується, адже сфера застосування комп'ютерних технологій стає ширшою.

Класифікація мов програмування

на НаразіІснує понад 300 мов програмування. Кожен з них має свої особливості та підходить для одного певного завдання. Всі мови програмування можна умовно поділити на кілька груп:

  • Аспектно-орієнтовані (основна ідея – поділ функціональності для збільшення ефективності програмних модулів).
  • Структурні (в основі лежить ідея створення ієрархічної структуриокремих блоків програми).
  • Логічні (в основі лежить теорія апарату математичної логіки та правил резолюції).
  • Об'єктно-орієнтовані (у такому програмуванні використовуються не алгоритми, а об'єкти, які належать певному класу).
  • Мультипарадигмальні (поєднують у собі кілька парадигм, і програміст сам вирішує, якою мовою скористатися в тому чи іншому випадку).
  • Функціональні (як основні елементи виступають функції, які змінюють значення залежно від результатів обчислень вихідних даних).

Програмування для початківців

Багато хто запитує, що таке програмування? По суті це спосіб спілкування з комп'ютером. Завдяки мовам програмування ми можемо ставити перед різними пристроями певні завдання, створюючи спеціальні додаткичи програми. При вивченні цієї науки на початковому етапі найголовніше - це вибрати відповідні (цікаві вам) мови програмування. Список для початківців наведений нижче:

  • Basic придуманий у 1964 році, відноситься до сімейства високорівневих мов та використовується для написання прикладних програм.
  • Python ("Пітон") досить легко вивчити завдяки простому синтаксису, перевага ж в тому, що на ньому можна створювати як звичайні десктопні програми, так і веб-додатки.
  • Pascal ("Паскаль") - одна з найдавніших мов (1969 р.), створених для навчання студентів. Його сучасна модифікація має сувору типізацію та структурованість, проте "Паскаль" - цілком логічна мова, яка зрозуміла на інтуїтивному рівні.

Це не повний списокмов програмування для початківців. Існує безліч синтаксисів, які доступні для розуміння, і обов'язково будуть затребувані в найближчі роки. Кожен має право самостійно вибрати той напрямок, який буде цікавим для нього.

Новачки мають можливість прискорити вивчення програмування та його основ завдяки спеціальним інструментам. Основний помічник - це інтегроване середовище розробки програм та додатків Visual Basic(«Візуал Бейсік» одночасно є і мовою програмування, яка успадкувала стиль мови Basic 1970-х років).

Рівні мов програмування

Всі формалізовані мови, призначені для створення, опису програм та алгоритмів для вирішення завдань на комп'ютерах, поділяються на дві основні категорії: мови програмування низького рівня (список наведений нижче) та високого рівня. Поговоримо про кожного окремо.

Низькорівневі мови призначені для створення машинних команд для процесорів. Головна їхня перевага в тому, що вони використовують мнемонічні позначення, тобто замість послідовності нулів та одиниць (з двійкової системи числення) комп'ютер запам'ятовує осмислене скорочене слово з англійської мови. Найкращі відомі мовинизького рівня - це "Ассемблер" (є кілька підвидів цієї мови, кожен з яких має багато спільного, а відрізняється лише набором додаткових директив і макросів), CIL (доступний у платформі.Net) і Байт-код JAVA.

Мови програмування високого рівня: список

Високорівневі мови створені для зручності та більшої ефективності програм, вони є повною протилежністю низькорівневих мов. Їх характерна риса- Наявність смислових конструкцій, які ємно і коротко описують структури та алгоритми роботи програм. У мовах низького рівня їхній опис на машинному коді був би занадто довгим і незрозумілим. Мови ж високого рівня мають незалежність від платформи. Натомість функцію транслятора здійснюють компілятори: вони переводять текст програми в елементарні машинні команди.

Наступний список мов програмування: C ("Сі"), C# ("Сі-шарп"), "Фортран", "Паскаль", Java ("Ява") - входить до найбільш високорівневих синтаксисів, що використовуються. Він має такі властивості: ці мови працюють з комплексними структурами, підтримують рядкові типи даних та операції з файлами введення-виведення інформації, а також мають перевагу - з ними набагато простіше працювати завдяки читабельності та зрозумілому синтаксису.

Найпопулярніші мови програмування

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

  • мови ООП: Java, C++, Python, PHP, VisualBasic та JavaScript;
  • група структурних мов: Basic, Fortran та Pascal;
  • мультипарадигмальні: C#, Delphi, Curry та Scala.

Область застосування програм та додатків

Вибір мови, якою написана та чи інша програма, багато в чому залежить від галузі її застосування. Так, наприклад, для роботи з самим "залізом" комп'ютера (написання драйверів і програм, що підтримують) кращим варіантом стане C ("Сі") або С++, які входять в основні мови програмування (список дивіться вище). А для розробки мобільних програм, у тому числі ігор, слід вибрати Java або С# ("Сі-шарп").

Якщо ви ще не визначилися, в якому напрямку працювати, рекомендуємо почати вивчення з мов C або C++. Вони мають вельми зрозумілий синтаксис, чіткий структурний поділ на класи та функції. До того ж, знаючи C або С++, можна легко вивчити будь-яку іншу мову програмування.

Від програмістів-початківців звучить так: «З якої мови мені почати?» Для відповіді ми залучили наших експертів.

Все залежить від того, яку область ви оберете. Якщо ви хочете працювати безпосередньо із залізом, писати драйвери та різні програми, для яких потрібно максимальна продуктивність, - Тоді підійдуть тільки C або C + +. Якщо ваша мета – програми для мобільників, варто вивчити Java або Objective C, C#. Для веб-серверів необхідні go, python та php; для веб-застосунків - JavaScript.

Якщо ж ви поки що не визначилися з областю, можна сміливо вибирати C/C++, оскільки, знаючи цю мову, ви легко вивчите будь-яку іншу. Є тільки одна річ, яку важливо пам'ятати: як і розмовна мова, мова програмування забувається, якщо її постійно не використовувати, тому краще володіти однією або двома мовами досконало, ніж поверхово знати велику кількість.

На мою думку, справжній програміст ніколи не обмежується знанням лише однієї мови. І навіть якщо в майбутньому ви збираєтеся писати драйвера і системні програми, вам все одно знадобиться якась із скриптових мов, таких як perl або python. Більше того, знання скриптових мов зараз просто необхідне для будь-якого програміста, незважаючи на його спеціалізацію.

Підвищити Зменшити

Python цілком підійде вивчення загальних концепцій програмування. Це дуже популярна мова, у нього багато бібліотек, синтаксис, що легко читається і досить акуратний код. Основними перевагами Python для новачків є те, що він є досить поширеним і його легко вивчити. Ви з легкістю зможете на ньому писати як web-програми, так і звичайні десктопні. Залежно від предметної області, необхідно вибрати об'єктно-орієнтовану мову. Наприклад, якщо ви займаємося системним програмуванням, то найкраще підійде C++. Якщо ви розробляєте корпоративну програму ( інформаційні системи(підприємств), то це С# або Java.

Підвищити Зменшити

Я свого часу починав із Фортрана та Паскаля, бо вони були в мене в інституті. Потім був С/C++, Visual Basic Script, PHP та Visual Basic, потім C#, потім трохи F#.

Якщо спиратися на свій досвід і мати можливість вибирати, найкомфортніше мені було розробляти на С#, і з нього я б і почав. Найбільше в плані розуміння алгоритмів та механізмів роботи ОС, під які я писав, дав мені C++.

Підвищити Зменшити

Думаю, найкраще розпочати навчання з JavaScript. Завдяки веб браузерам, ця мова програмування є стандартом де-факто при створенні веб-додатків, однієї з областей розробки, що найбільш швидко ростуть. Також по ньому є чудова безкоштовна книга, «Eloquent JavaScript», перекладена російською мовою.

Підвищити Зменшити

Все залежить від завдання, яке ви хочете вирішити. Однак якщо це ваша перша мова, я б порекомендував мову зі строгою типізацією загального призначення(C++, Java, .NET): з ними в жодному разі не пропадете і легко перейти на будь-який інший. Ще цікавий спосіб зрозуміти, яку мову взяти для вивчення - зайти на GitHub, ввести в пошук тему, що цікавить, і подивитися, на чому пишуть інші розробники.

Підвищити Зменшити

, технологічний євангеліст Microsoft, доцент МФТІ, МАІ, викладач дитячого табору JUNIO-R

Тут все залежить від віку. Якщо ви вирішили дійсно замолоду вчитися програмувати, і вам ще немає 12 років – краще починати з простих графічних мов Kodu Game Labабо Scratch. Вважається, що традиційні мови програмування варто освоювати після 12-ти. З традиційних мов мені завжди був близький C# — для нього є гарне середовище розробки, а програмувати можна все: від ігор до Unityдо веб-сайтів на ASP .NET або електроніки. Для навчання можна переглянути відеоуроки, або почитати книжку C# для школярів.

Підвищити Зменшити

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

Але оскільки починати все одно з чогось треба, та й вивчати ті ж алгоритми та структури даних у вакуумі не дуже зручно, то можу порекомендувати використовувати для цього мову Сі. Він досить низького рівня, щоб не привчати до тонн синтаксичного цукру та дати загальне розуміння того, як влаштований комп'ютер, який виконує програму. Але водночас це і не мова асемблера, що дає можливість зосередитися на загальних речах, не витрачаючи б пробільшу частину розумових зусиль на запам'ятовування всіх назв jump'ів та значень регістрів. Як література рекомендую класичну

Різні мови програмування та їх сфери застосування. Лекція в Яндексі

Наш перший пост цього року ми вирішили присвятити дуже базовій темі, лекція на яку була прочитана у Малому ШАДі. Займаються в ньому старшокласники, яким цікаві технології, звідси специфічність викладу – лекція буде особливо цікава тим, хто тільки починає програмувати та замислюється над тим, у якому напрямку розвиватися. Для них Яндекс має курс «Введення в програмування (С++)» , який можна пройти на платформі Stepic.org.

Лектор Михайло Густокашин – куратор академічних програм Яндекса, директор центру студентських олімпіад факультету комп'ютерних наук ВШЕ. Михайло підготував десятки переможців та призерів Всеросійських олімпіад із програмування.

В рамках лекції розповідається про те, які бувають мови програмування, чим вони відрізняються, як вони з'явилися і які з них кращі, а які – гірші. На початку мова трохи піде про історію мов – як вони з'явилися, як люди почали програмувати, як усе розвивалося, що зараз відбувається. У другій частині буде порушено те, для яких завдань яка мова підходить, як «вибрати собі улюблену мову та отримувати задоволення від життя». Лектор також трохи розповість про те, як, на його думку, усьому цьому навчитися і потім влаштуватися працювати.

Як завжди, під катом - докладна розшифровка лекції, щоб ви могли зорієнтуватися у її змісті.

Історія мов програмування

Давайте почнемо із самого початку. На самому початку комп'ютери не мали навіть клавіатури! Тобто все було дуже погано - у них не було ні клавіатури, ні екрана, були перфокарти (це такі штучки з дірочками або відсутністю дірочок). Відповідно, чи то штирі туди засовували, чи там світлом світили. Якщо є дірочка (або навпаки ні) – це означало нулик чи одиничку. І програми в той час писали за допомогою машинних кодів - у кожної операції в комп'ютері (додавання, віднімання, якісь складніші операції) був якийсь машинний код. Люди самі по табличці вибирали цей код, усілякі адреси в пам'яті, все це вибивали руками і засовували в зчитувач - і все вважалося. Звичайно, робота програміста була, напевно, тоді не особливо цікавою – робити дірочки – і з розвитком науки і техніки, звичайно, почали вигадувати всякі, «цікавіші» штуки. Наприклад, асемблер (Assembler), який вже дещо полегшував життя.

Ну, як він полегшував життя? Замість запам'ятовування того, що там якийсь «чарівний» код у команди, використовувалися всякі слова, схожі на «людський» англійська мова- Які-небудь add або mov - ну і потім перераховувалися регістри або області пам'яті, змінні, з якими потрібно здійснювати ці операції. Але ясна річ, що це загалом теж вимагало досить великої напруги розуму, щоб пам'ятати, в якому регістрі у нас що лежить, де якісь змінні і що взагалі відбувається. Чому так сталося? Тому що комп'ютери були «дурні» і нічого розумнішого зрозуміти не могли. Взагалі-то і зібрати з асемблера машинний код теж вимагає часу, пам'яті (на той час було звичайно мало її).

Поступово, зрозуміло, що розробляти такі великі складні програми дуже складно. Продуктивність програміста в цих командах була гранично низькою - тобто він писав кілька рядків на день (осмислених), і кожен рядок нічого особливо не робив - якісь прості арифметичні дії. І людям хотілося зробити мови набагато більш схожими на людську мову, англійською зокрема, щоб писати програми було легше та зручніше. І пішло-поїхало!

Старі та мертві мови

Однією з перших мов став Fortran. До речі, його також вибивали на перфокартах - були спеціальні перфокарти для вибивання програм на Fortran'і. Але якщо ви зараз візьмете цей Fortran - на мою думку, він навіть десь між 50-60 рр. з'явився і спробуєте на ньому щось написати, то вам буде дуже неприємно, я вам гарантую! Сучасний Fortran ще живий, але вже досить сильно відрізняється від того, що було раніше.

Інші мови – зараз напишу одну штуку, про яку напевно ви якщо і чули, то тільки на будь-яких заходах, де розповідають про історію програмування – це COBOL. Це була мова для написання бізнес-додатків. Що таке бізнес-програми? Якісь транзакції в банках, ще щось, усе це писали на Коболі. У нас, ясна річ, не дуже популярний. Я думаю, програміста на Коболі, в Москві, ви знайдете з великими труднощами. А десь не в Москві - з ще більшою працею. Але, що дивно, ще 10 років тому більше половини всього коду, написаного людством, було написано на Коболі. І досі значна частина всяких банківських транзакцій йде за допомогою програм, написаних на ньому (COBOL), і досі люди на ньому щось пишуть.

Є ще «кумедний» мову, він називався Алгол (68 версія, що характеризує рік його створення). Це алгоритмічна мова. Загалом вони щось там уміли, але нам зараз не дуже цікаво, що вони вміють. І на цьому наш екскурс у давнину та відносно невикористовувані мови можна закінчити і перейти до того, що живе досі (і активно живе).

Старі, але живі мови

Алгол вигадали в Європі, а Фортраном користувалися в основному в Штатах - великих відмінностей немає. Яка тенденція є помітною? Спочатку все було складно і щоб писати потрібно було мало не інженером, електротехніком, розуміти, де які контакти замикаються і ще щось для програмування. Потім теж треба було сидіти з листочками і рахувати пам'ять, стежити за нею. І поступово все ставало простіше, простіше, простіше і далі ще простіше для програміста - якнайменше думати людині, якнайбільше робити автоматично. Приблизно в кінці цього періоду (лектор вказує на Алгол і Кобол) починають з'являтися мови, які в якомусь сенсі «дожили» до наших днів.

BASIC. Можливо, досі деякі люди на ньому щось пишуть, принаймні я бачив, що в деяких закладах навчають на QBasic 'ї – таке синє віконце, де написано «1989». Загалом, «на повну силу» живе! Він вигадувався як мова для непрограмістів. На той час програмістом була така дуже спеціалізована професія. А тут тобі кажуть: «Ось у нас є класна мова Basic, і будь-яка розумна людина візьме та напише програму на ній – легко». Знову ж таки Бейсік і сучасний Бейсік - це величезна різниця. Будь-які ці рядки з нумерацією через 10, всякі GOTO та інший жах - вони до сучасного Бейсіка вже не мають жодного стосунку і навіть до Бейсика 89-го року вони мають мало відношення.

Ще одна кумедна історія - мова Паскаль, широко відомий у колах ВНЗ, в основному в Росії і в країнах колишнього Радянського Союзу. Він використовувався і продовжує використовуватися напрочуд як навчальна мова. У всьому світі він менш поширений, але теж живе і живе. Є така людина Вірт – ось він вчений, теоретик. Він брав участь в обговоренні Алгола, йому не сподобалося те, що вийшло, і він вигадав свою мову – Pascal. А потім фірма Borland (і до цього багато інших фірм Apple займалася, зокрема) взяли і все зіпсували. У нього була гарна теорія, струнка – «все буде добре», – а вони взяли і напхали туди того, що людям потрібне для роботи. Ну і вийшло не так гарно, як він хотів.

І наостанок, . Сі придумали інженери. Якщо Паскаль вигадав вчений, то Сі придумали Керніган і Рітчі, вони працювали інженерами в Bell. Як це відбулося? Тоді цими мовами (лектор вказує на Fortran, COBOL, Algol) нічого системного написати не можна. Що таке "системне"? Наприклад, операційну систему, драйвера якісь, ще щось. Ці мови призначалися для математичних розрахунків, для бізнес-розрахунків, для такого. А все інше писали на Асемблері. Були якісь мови, вони зараз померли, тобто мова Сі з'явилася не відразу від Асемблера, а через якісь проміжні речі.

Суть у чому? Керніган і Рітчі любили грати в іграшку Asteroids – літає космічний корабель, і тут є астероїди, він у них стріляє, і вони розвалюються на частини. Вони мали сервер, на якому вони грали, але там було багато народу, і іграшка гальмувала. І вони виявили у себе десь у кабінеті, що вони мають якийсь комп'ютер, яким ніхто не користується. Але була проблема - він інший архітектури був, а гра була написана на Ассемблері.

Вони її переписали, звичайно, навіть впилили якісь фічі, щоб грати на ньому. Але це навело їх на думку, що переписувати під нову архітектуру щоразу – це не дуже розумно. І вони вирішили написати таку мову високого рівня, яка підходитиме для системного програмування, тобто, в якій можна буде керувати пам'яттю, в якій можна буде розуміти дещо лежить і як звертатися до цих шматочків пам'яті. І так з'явилася мова Сі, яка вплинула на все подальше. Вони всі (лектор вказує на Алгол, Фортран та інші згадані мови) вплинули, але ось Сі - прямо так…

Відповідно, це була основна мова в Unix – операційній системі, яка на той час була ще популярнішою, ніж зараз. І приблизно до 80-х років ситуація була якась ось така (лектор вказує на Basic, C та інші згадані мови). Припустимо, що все це в нас вже потихеньку померло (лектор стирає згадки про Асемблера, Фортрана і Алгол). ще веселіше.

Мови родом із 80-х

Одна з перших дивно - це була мова C++. Мова C має величезну кількість недоліків (ну просто взагалі величезне) - на ньому можна робити взагалі все, в тому числі стріляти собі в ногу, стріляти собі в ногу з вигадкою, в іншу ногу, однією ногою стріляти в іншу ногу, загалом - що завгодно робити. Але при цьому деякі архітектурні речі там робляться досить складно - знову ж таки, як і в Асемблері, нам доводиться весь час стежити, де ми, чого і яку пам'ять виділили; вона там весь час "тече" кудись ця пам'ять - тобто ми виділили, забули видалити, видалили не те, вилізли за межі пам'яті, загалом - погребли купу проблем.

C++ створювався спочатку як набір доповнень мови C, який полегшить розробку. На той час стало модно об'єктно-орієнтоване програмування і люди вирішили, що все можна описати у вигляді ієрархії, тобто є у вас м'ячик (абстрактний), ви від нього успадкуєте футбольний м'яч, волейбольний м'яч, ще один абстрактний м'яч. Тоді було модно, що "ми зараз пишемо все у вигляді якоїсь ієрархії, і все буде добре, життя налагодиться, все стане чудово і все". C++ в якомусь сенсі реалізовував цей об'єктний підхід - це не була перша мова об'єктно-орієнтованого програмування, але вона стала досить популярною і в ній почали з'являтися всякі фічі. При цьому C++ зберігав майже повну сумісність (на той момент) з мовою C, програма написана на Сі в 99% випадків успішної компілювалася як C++ і навіть працювала. Це було задумано, щоб із Сі було легко перейти на C++.

Крім об'єктного підходу (C++) досить швидко з'явилася стандартна бібліотека шаблонів (STL). Я думаю, що в школі ті, хто ще вчив Паскаль, виявляли, що у вас там, по-перше, немає вбудованого сортування (у стародавньому, синьому Борланді Паскалі, зараз вона вже є в сучасних версіях) - там є приклад (вихідник) сортування, його можна скопіювати та вставити. Але якщо ви хочете тут відсортувати цілі числа, тут хочете речові числа, а тут рядки, які можна порівнювати між собою, вам доводилося писати три різні сортування, які роблять абсолютно одне і теж, просто у них різні типиданих. Ось це не дуже добре і шаблони, які не відразу з'явилися в C++, цю проблему полегшили. Тобто у вас була абстрактна програма, яка щось, що може порівнюватися між собою, успішно сортувала.

Скриптові мови з 90-x

Але час не стояло на місці, у 80-ті роки ще багато чого цікавого відбувалося. Але десь на рубежі 80-х та 90-х комп'ютери стали настільки гарними, що можна вже було робити зовсім дивні та дуже неефективні речі. Зокрема це були скриптові мови, які не компілювалися в машинний код, а інтерпретувалися. Бейсик теж у якийсь час інтерпретувався, але ці скриптові мови були призначені в основному для обробки текстів - це, наприклад, Perl, Python (він був тоді не дуже знаменитий), PHP, Ruby - ось ті скриптові мови, які в тій чи іншій. Іншою мірою живуть досі (вони всі встигли з'явитися до 2000 року, навіть раніше).

Давайте трохи по них пройдемося, тому що це специфічні речі і зараз багато де використовуються. Ідея полягає у чому? Якщо ми не компілюємо, то можна дозволити набагато більше. Наприклад, програма може дивитися на свій код і якось користуватися цим; вона знає, що в ній відбувається і за рахунок цього можна багато чого цікавого робити.

Perl був призначений для обробки текстів - у ті часи вже пам'яті стало настільки багато в комп'ютерах, що туди можна було запхати якийсь текст і з цим текстом щось корисне робити (наприклад, слова, пошук якийсь). Але, на мою думку, його проектували люди, які були трохи не в собі, тому що про нього жарт такий є: «Будь-який набір символів, написаний, є коректною програмою на Перлі». На мою думку, на ньому можна тільки писати, читати його не можна. Коли я дивлюся на код на Перлі і намагаюся щось зрозуміти, нічого не розумію. Можливо, якби я знав його краще, я щось розумів би, але як я чув від тих людей, які все-таки вміють, - вони кажуть, що легше переписати заново. Тобто, програми виходять короткі і реально простіше переписати заново, ніж розібратися з тим, що там є і виправити.

Приблизно на той час, у середині 90-х, з'явився інтернет. Спочатку це були пошта, сайтики зі статичним HTML, але людям захотілося додати туди якусь динаміку, щоб у нас все відбувалося динамічно, форми якісь можна було заповнювати, гостьові книги робити, ще щось. Відповідно це вимагало якоїсь взаємодії, вигадали протокол, як це взаємодіє, і, найголовніше, генерацію цих статичних (умовно) сторінок, які «випльовуватимуться» користувачеві у відповідь на його запит.

Загалом нічого крім Перла на той момент не підходило. Писати на чистому Сі або C++ обробник було поганою ідеєю. І від відсутності кращого на той час (і досить довго) Перл був популярною мовою для веб-розробки. Звичайно, масштаби не зрівняються з тим, що зараз відбувається.

PHP з'явився як випадково. Одна людина досить швидко перестала займатися цим - робила свою сторінку якусь, була у нього гостьова книга якась, ще щось, якісь штуки. І він написав набір макросів якихось для Перла, які були схожі на Сі, бо він на Сі вмів просто тому, що йому було так зручно. І назвав це Personal HomePage. Розшарив і каже: "Люди, дивіться яку штуку я написав, тут все набагато зрозуміліше, ніж на Перлі і можна правити". І людям це сподобалося.

Потім він цю справу покинув. Загалом, у результаті цей PHP став жити і став згодом набагато популярнішим, ніж Perl. Але ця його «родова травма» (задум як набір макросів для Перла) з ним зіграла досить злий жарт. Мова вийшла дивною. Тобто він розвивався сам собою, його ніхто не проектував, ніхто не адміністрував процес розвитку (ні компанія, ні якась людина), а було багато групок, кожна з яких пиляла те, що їм подобається. У результаті там функції називаються по-різному, навіть стилю немає, все через підкреслення, загалом абияк, налаштування лежать тут і там, і як все це працюватиме не дуже зрозуміло. Зате можна сісти і за дві години писати на PHP, тому що він так замислювався.

Python і Ruby: Ruby зараз менш популярний, Python якось краще «вистругати», давайте про нього потім поговоримо. Зрозуміло, що в ті часи це були (лектор вказує на Perl, Python, Ruby, PHP) дуже спеціалізовані мови для сильно спеціалізованих цілей. Загалом жодного системного програмування, жодної бізнес-логіки ніхто на них не писав у той час і зараз не дуже це робить.

Компілювані мови з 90-х

Ми підемо приблизно в ті самі часи, але в інший бік. У нас на той момент C++ застосовувався практично для всього, що потрібно було писати не для Інтернету, не для обробки тексту, а для додатків, для операційних систем, для іграшок - загалом, для чого завгодно. Але C++ - це моторошна мова насправді. Чому? Тому що, по-перше, він успадкував через зворотну сумісність усі проблеми Сі. Там можна було, як і раніше, убитися мільйоном різних способів, Тих же, що були в Сі (природно, додалися і нові способи в C + +). При цьому, якщо писати все добре і правильно, як було задумано авторами C++, то, звичайно, старими сишними способами вже убитися було не можна, і як їх стало поменше. Проте, він мав дуже дивну об'єктну модель своєрідну. Розбиття програми на модулі, на шматочки якісь взагалі прийшло з Сі (якщо include ви вмієте писати на Сі або на C++ - фактично це було задумано як просто вставити текст бібліотеки у вашу програму, в результаті, коли ви пишите купу інклюдів у вас все - якщо "примітивно", як це було на самому початку - у вас все вставляється в один файл і потім все це дуже довго компілюється, тому що по кілька разів ходить.Той же Паскаль, Віртовський, був у цьому плані набагато продуманіше, пізніші версії стали ще кращими.

Загалом недоліків у C++ дуже багато. Кваліфікація у програміста мала бути висока, щоб писати на C++, і коштували такі програмісти дорого (і підготовка, і ще чогось, тобто знайти на ринку програмістів складно, платити їм потрібно багато, та й взагалі це не діло... ). А комп'ютери у нас все швидше і швидше вважають, стають дешевшими, люди купують собі нові комп'ютери і хочуть більше додатків, більше іграшок для телефону, загалом - більше радості.

Так і з'явилася Java (Ява). Там теж пов'язана досить кумедна історія, як назва з'явилася у цієї мови. Там програмісти, вони постійно п'ють каву і в той час було модним пити каву, яка на острові Ява зростала. Мова замислювався як мова для вбудовуваних приладів, зокрема для кава-машини. Ось так і вийшла назва…
Що взагалі почалося з неї, що в ній було гарне і чому вона завоювала велику популярність? По-перше, вони позбулися спадщини Сишного, повністю. Жодних покажчиків, значно менше способів відстрілити собі якусь частину тіла і все зламати. По-друге, вони впровадили набагато свіжіші ідеї щодо об'єктної моделі - тобто C++ з'явився значно раніше, ніж Java і використовував більш архаїчну, «дику» модель об'єктну. Ну а тут (лектор вказує на Java) вона була вже більш продуманою тоді вже, і теоретично люди думали, і на практиці застосовували і зробили все набагато крутіше.

І, нарешті, третє. У нас програми на Джаве збиралися не в машинний код, а в код для віртуальної машини. Тобто у вас жила віртуальна машина (VM) JVM – Javовська. Ваші програми збиралися в якесь проміжне подання і потім, за допомогою цієї машини вже виконувались. Що це дало? По-перше, воно гальмувало, по-друге, воно жерло пам'ять зі страшною силою, по-третє воно було переносимо куди завгодно (теоретично) - хоч на кавоварку, хоч на кавомолку, хоч на комп'ютер, хоч на мобільний телефон. Це, з одного боку, добре, тобто ви написали просто реалізацію віртуальної машини, потім свої джавівські програми запускаєте скрізь. Але, з іншого боку, погано, що на тому телефоні тоді було мало пам'яті, була низька продуктивністьі все це додатково починало тупити і гальмувати.

Але навіть не це головне, для чого взагалі мова вигадувалась. Мова Джава вигадувалась щоб знизити вимоги до кваліфікації програмістів. Тобто погані програмісти можуть писати хороші програми на Java, тому що вона не дозволяє писати погані програми - там немає засобів, щоб писати програми погано. Там можна писати лише добре, програми. Добре, у розумінні творців мови.

Тобто, якщо на Сі, на C++, на Пітоні, на чому завгодно ми можемо розвести зі свого проекту моторошний смітник якийсь, де у нас все лежить упереміш, збирається годинами і там ще чогось. То в Java смітник розвести теж можна, але для цього вже треба докласти якихось зусиль. Тобто, за умовчанням, там виходить не "смітник", виходять інші проблеми, що там щось успадкували-спадкували - загалом на один осмислений рядок виходить десять не дуже осмислених. Зате може такий, середньої кваліфікації, програміст писати досить якісний код.
Ми майже прийшли до кінця. У нас, наступне, що з'явилося - це.Net (дотне), ну і зокрема нас цікавить C# (майже те саме [лектор вказує на Java], тобто там відмінності в деталях, якщо вибиратимете між ними - дивіться, де грошей більше сплачують).

І ще одна штука – JavaScript. Не має жодного відношення до мови Java, з'явився в тому ж році - слово було модним, вони ліцензували торгову марку, щоб використовувати.

На що, головне, слід звернути увагу? (Лектор малює стрілки від C++ Java, .Net, C#, JavaScript і PHP). Щоб написати простеньку програмку однією з цих мов, та й багатьох інших - якщо ви знаєте C++, вам взагалі нічого більше знати не треба - ви берете і пишете на C++, а потім додаєте долари на початку, ще щось робите по дрібниці і у вас вона починає працювати на що завгодно (лектор вказує на мови, до яких були відведені стрілочки від C++). Тобто вони гранично схожі у якихось простих речах. Якщо ви вирішуєте якісь шкільні завдання, навчальні завдання, ще щось (не проектуєте великий проект – у вас один файлик, який читає числа, виводить числа в консолі, ще чогось робить), то різниці майже ніякої немає між цими мовами. Відомо, що JavaScript і PHP вони спеціалізовані, у них все трохи інакше. А ось тут (лектор вказує на Java та C#) взагалі гранично мало різниці.

З того часу з'являються всякі інші цікаві речі, але незрозуміло - вони житимуть чи успішно помруть. Чим зараз для яких завдань користуються?

Вибір мови залежно від завдання

Допустимо, перед вами стоїть завдання написати драйвер для відеокарти. Якою мовою ви користуватиметеся сьогодні? (Вигук із залу: Java!) А чого… Джава – чудово, але чого не на Рубі чи на PHP? (Лектор говорить із сарказмом.)

Низькорівневе програмування

Якщо ви пишете щось низькорівневе, то кращий вибір- це Сі, але я чогось чув (але не бачив), що C++ застосовують для цього. Але я слабо вірю в це, тому що в Сі можна чітко контролювати - якщо ви дали стільки байт пам'яті, значить стільки і буде. А в C++ (STL) як реалізований рядок? Ну якось реалізована. І ми в результаті не знаємо, як і що там відбувається, може у нас пам'ять скінчиться на нашій відеокарті або щось станеться. Тому Сі досі живе і не вмирає, такі завдання системного програмування, як і раніше, є - написати операційну систему, написати драйвера, написати ще чогось - Сі відмінно підходить для цього. Крім того, зараз з'являються всякі пристрої (інтернет речей обіцяють, що він ось-ось настане) які живуть від батарейки (і, природно, їх будуть мільйони, все буде обвішано цим інтернетом речей), вони повинні бути дуже дешевими і дуже мало електрики споживати. Відповідно, там буде 2 Кб пам'яті, процесор на 5 кГц, та й ясна річ, що вкрутити якусь віртуальну машинуабо скриптова мова найближчим часом не вийде - значить, доведеться писати щось на Сі. Та й зараз, наприклад, обчислення на відеокарті (OpenCL або ще якась технологія) - там не вигадують нову мову, щоб писати для них програм - там роблять Сі з якимись великими обмеженнями. Просто тому, що люди вже вміють, навіщо вчити чогось нового? Формально це, напевно, теж у якомусь сенсі Сі.

Веб програмування

Допустимо, ви хочете написати новий Facebook (соціальну мережу). На чому ви це писатимете? (З зали говорять про HTML та CSS.) HTML, CSS - це дизайн, а ми хочемо, щоб там можна було фотографії додавати, друзів, коментарі залишати.

Для скриптової частини - тобто те, що буде на стороні клієнта, - це JavaScript. Причому іноді JavaScript генерується іншою мовою і надсилається (так буває, що скрипт генерується, тому що так простіше іноді буває обробляти якісь зміни в логіці).

Напрочуд, він написаний на PHP - і Facebook, і багато інших великих проектів. Довелося, звичайно, написати свої якісь речі, щоб це таки працювало нормально, а не так як «тяп-ляп» було зроблено, але вони впоралися. В принципі, все одно, на чому ви будете писати, але не раджу Perl. Тут і зараз, ясна річ, з нуля вже для Інтернету ніхто нічого не пише. Усі пишуть якийсь фреймворк чи ще чогось. Інтернет магазин? Завантажили фреймворк для інтернет-магазину – ну й усе, написали інтернет-магазин.

Програмування для бізнесу

Далі ви хочете написати якесь нудне додаток для банку. Чи, наприклад, чи є у вас хтось, хто продає сімки? Можливо, ви колись купували телефон або ще щось і вам казали: «Ось система висить, ми нічого не можемо зробити». На чому ви писатимете таку програму? (Вигук із зали про Python) На Пітоні таке не можна писати, ви що?! Нічого для бізнесу не варто написати на Пітоні. Чому? Тому що, коли ви пишете щось на Пітоні, у вас в процесі написання неможливо виявити значну кількість багів. Пітон всіляко динамічно типізований, і взагалі там можна так сховати баг, що він спливе в такій ситуації, що ви навіть зрозуміти не зможете, що там зробили ось ці криворукі користувачі, що у вас все зламалося. Тобто на Пітон краще писати для себе, маленькі скрипти - ви розумієте, що там відбувається і що робиться. Ну чи щось, що не шкода викинути: ви хочете раніше конкурентів щось викотити, ну і що, що воно через раз ламатиметься. Ви написали на Пітон і все - ви захопили ринок. А якщо ви пишите щось надовго, наприклад банківська програма якась (щоб вона кредити схвалювала, ще щось) - ви пишете це на Java. Тому що там справа серйозна, папірці, гроші, документи, ще чогось, а в ній так накосити не можна, що все зламається, а то люди образяться - у них гроші пішли і нікуди не дійшли, бо у вас якийсь. момент рядок перетворився на число чи навпаки. Отже, методично на Java берете і пишете, пишете ... Ну або на. Net, теж такі ситуації, в принципі, бувають. Там, звичайно, теж можна нарватися на проблеми, але все-таки ймовірність цього дещо нижча.

Програмування для армії, аерокосмічної галузі

А тепер уявіть, що вас вирішили відправити на Місяць ракетою. На чому б ви вважали за краще написати код, який управляє двигунами ракети? Давайте подивимося. Ось це, напевно (лектор вказує на Perl, Python, PHP, Ruby), не варто - воно гальмує, ще чогось відбувається, та й взагалі я б не погодився летіти на такій ракеті. На C ++? Я б також, чесно кажучи, не довірив, тому що на C++ занадто багато способів вбити. Коли ти там десь у космосі, то це не дуже добре.

Можливо Java? Начебто там досить надійно все і архітектура хороша, ніяких диких типів, жодних виходів за межі зайвих пам'яті. Припустимо, настав найвідповідальніший момент, а наша Java вирішила зібрати сміття за нас. Нам треба приземлятися, гальмувати, а вона така: Ні, garbage збирається. Загалом теж не дуже.

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

Використання одразу кількох мов для розробки ПЗ

Ну і що треба взагалі сказати про сучасні мови. Зараз багато проектів не живуть якоюсь однією мовою, тобто у них частина якась живе однією мовою, частина - іншою, ще якась частина - третьою. Наприклад, якщо у вас якийсь веб-додаток, який обробляє дикі обсяги інформації, звернення до дисків (навіть не до баз даних, вони настільки величезні, що там навіть база даних не тягне якась вже написана), напевно, написані на якому- то низькорівневому Сі, щоб дико швидко писати на диск і таке інше. Звичайно, писати весь проект на Сі не варто. Можливо, там якась проміжна логіка, написана на Java, яка звертається до Сишних функцій для швидких звернень. Ну а фронтенд (те, на що дивиться користувач), звичайно, вже написаний на чомусь, на якихось скриптах, на тому, що безпосередньо виконується браузером (JavaScript). І все це живе разом та успішно взаємодіє.

У розробці якихось програм, навіть великих, іноді люди що роблять? Вони беруть і на Пітоні пишуть прототип (як воно все працюватиме), накидають якусь архітектуру продумують. Писати на ньому реально дуже швидко - вони накидали прототип, поекспериментували з ним і сказали: «О! Ось так круто! І повністю переписали. Здавалося б, вони двічі зробили роботу, від цього вдвічі більше часу пішло (ну, у півтора). Але немає! Часто виявляється, що такий спосіб непоганий, тому що, якщо ви напишете відразу на чомусь, наприклад на Java, а потім вирішите: «Ні, давайте рефакторинг, змінюємо архітектуру повністю і таке інше,» - то витратите в 10 разів більше часу . Такі речі також існують і живуть.

Умови успіху будь-якої мови програмування

Тепер поговоримо про те, чому деякі хороші на вигляд мови не вижили, чи живуть в дуже обмеженому просторі. Коли Вірт побачив, що зробили з його Паскалем погані фірми Applе, Borland і таке інше, він придумав мову ще краще - Oberon. Він тільки був дико мінімалістичний - тобто там було дуже мало команд (Рядки? Навіщо нам рядки? Ми зробимо масив символів!). Ну і чогось не пішло в нього, як могло б піти.

Ще одна штука. Американські військові попросили розробити їм теж круту мову, якою все працює і все можна написати. В результаті вийшла досить монструозна мова Ada, якою, щоправда, досі щось пишуть, але знову ж таки - для військових тільки.

В чому проблема? Чому деякі мови на кшталт Python, який ніяка компанія його не підтримувала спочатку, захопили ринок. PHP, який ще й погано спроектований, теж сам по собі взяв та захопив ринок (більшу частину). А всякі мільярди доларів вкладені (лектор вказує на Ada) і нікуди не пішли, нічого не сталося. З чим це пов'язано? Це пов'язано з тим, що немає інфраструктури навколо цих мов. Тобто мова може бути відмінною, але поки що немає документації, поки що немає спільноти, яка вміє відповідати на запитання (на Stack Overflow) і, нарешті, найголовніше, поки що немає великої кількості бібліотек, мова не вистрілює. Тобто ви, наприклад, захотіли на Обероні написати сайт. А що такого, чому б і ні? І починається морока ... Веб-сервер ви не можете підняти свій на Обероні, щоб потестувати легенько, які бібліотеки ви підключити не можете, тому що їх на Обероні немає. І все це через якісь милиці робиться, сили йдуть, і загалом ви плюєте та пишете на чистому Сі свій сайт замість Оберона. А живуть добре ті мови, які вміють користуватися бібліотеками з інших мов. Той самий Пітон у тих місцях, де він гальмує. Ну і взагалі всякі стандартні речі типу сортування та ще чогось написані на Сі, і він (Python) вміє з ними взаємодіяти.

Java також має Java Native Interface. Це по суті Сі, тобто там (на мою думку, весь час хочуть заборонити, але здається ще не заборонили) ці мови можуть взаємодіяти з вже існуючими бібліотеками (в основному Сишними). І за рахунок цього беруть та працюють. Зрозуміла ідея, яку я намагаюся донести до вас, так? Не пишіть мовами, які не вміють підключати Сишну бібліотеку. Ну, якщо ви хочете скористатися чимось класним. Ну, і поступово вони (мови) обростають своєю якоюсь інфраструктурою. І живуть якось добре.

Мова програмування та профорієнтація

Тепер поговоримо про те, як зрозуміти, чого ви хочете у житті. Що буває із прикольних речей? Ви можете займатися яким-небудь системним програмуванням? У вас там класно рахувати ці байтики, ви хочете запускати квадрокоптери, камери якісь, ще щось робити. Тоді, мабуть, Сі – ваш вибір.

Якщо ви хочете писати, можливо, не найцікавіші в житті додатки, але вам круто їх проектувати, думати про це всім і заробляти купу грошей, за те, що ви сидите і сумуєте більшу частину часу (за це треба платити, якщо ви якісно сумуєте), ось вони - Java, .Net. Ви йдете працювати в якийсь банк, пишете, ходите до дев'яти на роботу в білій сорочці, отримуєте хорошу зарплату і пишете згідно з рекомендаціями кращих Java-водів, .Net-вівців і таке інше…

Якщо ви хочете писати якісь програми, браузер якийсь, іграшки якісь, ще щось, то C++ відмінно підходить. Якщо ви хочете писати сайтики, то ось вони, мови на ваш вибір (лектор вказує на Perl, Python, PHP, Ruby), великої різниці немає. Єдине - PHP помре раніше, ніж Python, тому якщо ви лінуєтеся вчитися новому, то вчитеся Пітон. Великої різниці не помітите, але довше простягнете.

Що відбувається з Ruby теж незрозуміло. Ну, можете і PHP, якщо вже вивчили, благо вони такі прості, що там переучуватись не так довго.

І, нарешті, є ще одна сфера застосування мов програмування – це коли не програміст ними користується. Припустимо, ви математик, фізик, хімік, аналітик, будь-хто, і вам потрібно швидко щось порахувати, якісь дані проаналізувати (біологам, наприклад, скільки песців живе на Командорських островах). Ви можете в табличку в Excel вбити все це або проаналізувати чимось. Теж Пітон добре підходити для цього, з текстом вміє працювати і бібліотек повно всяких, статистичних і таке інше. Якщо хочете робити якийсь Machine Learning, якісь дані обробляти, прогнозувати, то теж на Пітоні це зараз робиться найшвидше. Щоправда, слід зауважити, що завдання бувають дуже різні. Наприклад, якщо ви хочете торгувати на біржі моментально в умовах, коли котирування змінюються весь час, то який би ви класний Machine Learning не написали на Пітоні, люди, у яких це написано на чомусь швидше, встигнуть все скупити раніше, поки у вас все дорахується, навіть якщо у них алгоритми гірші. Тому навіть ці завдання машинного навчання (деякі з них) вимагають високої продуктивності (причому екстремально високої) і відповідно інших мов.

Єдиний спосіб зрозуміти, чого вам хочеться – це спробувати. Зараз я скажу як одне з видінь того, як можна спробувати. Як стати програмістом, до того ж щасливим? Отже. З чистого листапочинаємо. Ось ви навчаєтесь у школі своєї математики, російської мови та інших обов'язкових та необов'язкових предметів, і ваші знання в галузі програмування відображені на дошці (лектор показує на порожню дошку) на даний момент. І ви хочете стати щасливою людиною, займатися улюбленою справою, заробляти багато грошей і ні в чому не відмовляти і радіти.

Один із способів цього досягти. Є, звичайно, будь-які надихаючі історії про людей, які взагалі не вступали до університетів, або кинули їх і стали мільярдерами, власниками компаній тощо. Але треба зазначити, що більшість людей, які, можливо, і не стали мільярдерами, але теж непогано живуть, все-таки університет у якийсь момент закінчили.

Яка у нас ситуація з вступом до університету (зараз ви в школі навчаєтесь)? Поки ви навчаєтесь у школі, потрібно зрозуміти що наступний крок – вчинити та подбати про це. Здати ЄДІ чи перемогти в олімпіаді. На ЄДІ можна користуватися Паскалем, C++ (включаючи чистий Сі), Пітоном (не згадуватиму їх далі). На олімпіаді - той самий Паскаль, той же C++, той самий Пітон (ми поговоримо зараз про його проблеми) і найчастіше є Java. Там ще всяке залежить від олімпіади, але не суть.

Який графік розподілу мов на Всеросійській олімпіаді з інформатики? Люди, які беруть участь у всеросійській, найкрутішій олімпіаді, на чому вони пишуть? Виглядає він так (тут означає Паскаль, а тут приблизно 2000 рік, а тут приблизно нуль, тут C++, а тут 2015 рік).

2000 року на C++ майже ніхто не писав. Минуло 15 років і на Паскалі майже ніхто не пише, незважаючи на те, що Паскаль сучасний. Це мова, яка вміє майже все те саме. Просто чогось усім стало ліньки цьому вчитися, всяким новим віянням, і все продовжують писати на Borland Pascal'і, який звичайно нічого не вміє. На C++ люди пишуть якісь алгоритми (STL) посортувати - добре, написали sort() і все. На Паскалі, звичайному, старому - це проблема. Написали якийсь set (потрібний) - добре, на C++ написали, на Паскалі знову мука суцільна. На нових Паскалях, зрозуміло, можна це робити, але вони грошей коштують взагалі. Можливо, ви цього не помічали, але це так.

Є Java ще, але Java дуже багато букв. Вона для великих проектів, а для маленьких одноразових програм вона виходить дуже погана, тому що багато зайвих літер. Але також якісь люди пишуть, можна навчитися писати на ній. Але на ЄДІ її немає і ЄДІ все одно здавати доведеться в більшості своїй.

Що найкраще для ЄДІ? Для ЄДІ найкраще (якщо ви нічого не знаєте і в школі вас нічого не вчать) вивчити Пітон. Деякі завдання іспиту відмінно вирішуються на ньому. На олімпіаді загалом виходить що (використовується) C++, тому що Пітон дуже повільний, там не все вирішується на ньому.

Таким чином, ви вивчили деяке невелике підмножина мови та якісь алгоритми (можливо) і багато завдань вирішили для того, щоб здобути диплом своєї олімпіади та вступити до університету, щоб здобувати вищу освіту.

Я зараз розповім про те, як ми у Вишці вибудовуємо курс, в якому порядку йдуть мови, як вивчаються на прикладній математиці та інформатиці факультету прикладних наук, які ми з Яндексом робимо. У першому семестрі - Пітон (не в повному обсязі, приблизно як ви в школі повинні вивчати) і С + + (вже ширше, значно ширше, ніж його зазвичай вчать у школах). Давайте одразу скажу, щоб ви не лякалися, якщо ви раптом захочете чинити, скажете: «Чого, я вже все це знаю, навіщо я піду кудись вчитися? Краще я піду до іншого місця». Для тих, хто вже вміє програмувати добре, є можливість відразу перейти до вивчення алгоритмів, причому в досить теоретичній підготовці. Ми зараз на них не дивимося, це (показує на дошку) для тих, хто програмує середньо або взагалі ніяк.

У першому семестрі вивчаються основи Пітона, просто щоб люди навчилися програмувати і щоб нікому не було прикро. Пітон мало де навчають у школах, в основному люди приходять зі знанням Паскаля або C++. Здебільшого навіть Паскаля, якщо це є масова школа. Ну і щоб нікому не було прикро, все вчать нову мову (начебто в рівних умовах перебувають). І C + + просто тому, що від C + + потім можна перейти куди завгодно.

Потім йде курс «Алгоритми» та окремий курсовий проект. Класичні алгоритми із реалізацією. Не те, що теоретично ми чогось взяли, порахували складність. На лекції ми взяли, порахували складність, на семінарі – взяли, реалізували алгоритм. Проект – це студенти роблять щось закінчене. Наприклад, один із проектів був: порахувати… Припустимо у вас багато квартир у Москві і ви розумієте: «О, чогось у мене багато зайвих, я здам якусь. І виставили якусь ціну, і ніхто чогось не хоче у вас квартиру винаймати – напевно, надто дорого. Або виставили якусь ціну, у вас тут же зняли і ви думаєте: «Ой, мабуть, я дешево здав» - і теж засмучуєтеся. Тобто треба було порахувати, скільки коштує оренда квартири? Ви вбиваєте дані – воно вам будує оцінку. Такий сайтик, який складався з кількох речей: взяти пропозиції, попарсити, застосувати якийсь алгоритм навчання машинного (напевно) простенький і зробити гарну веб-пику, в якій можна щось вибрати, щось убити, якісь метри, кількість кімнат, кількість саун, кількість джакузі у вашій квартирі і приблизно оцінити вартість. Тобто якась закінчена, не надто складна річ. Тут означає (лектор вказує на курс за алгоритмами) такий ядрений C++, з консольним введенням-виводом. Ну, а тут (лектор свідчить про напис «проект») щось під керівництвом ментора, можливо з базами даних, можливо з парсингом текстів і з чимось ще.
Потім йде третій семестр - це курс, який називається "Комп'ютерні системи". Там зовсім трошки асемблера для розуміння (дуже мало) і потім, щось схоже на чистий Сі та взаємодію з операційними системами, системне програмування по суті. І проект на семінар - теж щось на тему всяких мережевих взаємодій, досить низькорівневих: розробити якусь утиліту, наприклад rsync (синхронізація, можливо ви знаєте. На чистому Сі, написати аналог rsync'а, який по мережі буде у вас синхронізувати папочки з усіма доступами до файлів тощо).

І, нарешті, четвертий. Я навіть не знаю, як це назвати, це такий вінегрет технологій, необхідних для реальної розробки, наприклад, для веб-розробки. Тобто це практичне застосування баз даних, знову ж таки щось схоже на те, що робилося в проекті (лектор вказує на проект 2 курсу), але вже більш поглиблене. Тобто такі більш-менш конкретні вже речі, практичне програмування. Паралельно з цим йде будь-яка теорія, та й тут наукою займаються ще.

І після двох курсів люди розходяться займатися, чим їм цікаво, тому що ця штука охоплює досить широко такі основи програмування, і люди на цей момент уже розуміють, що вони не хочуть займатися. комп'ютерними системамині в якому разі (системне програмування їм, наприклад, не сподобалося), а хочуть займатися якими-небудь теоретичними алгоритмами, складності вважати, вигадувати нові штуки, розподілені або ще щось. Або навпаки думають, що тут у них не дуже. лектор вказує на рядок першого курсу з Пітоном та C++) пішло, потім ( лектор вказує на рядок третього курсу із системним програмуванням) - як не подобається, рахувати байтики і виставляти всякі обмеження на читання-запис, робити потоки, треди і ще щось. І відповідно до цього люди обирають якийсь напрямок і навчаються. Тобто, в принципі, щоб у вас не розвинувся «синдром каченя» – ви першим побачили свій Паскаль і тепер кажете «Паскаль – сила»; або більш просунуте - ви побачили C + + і почали про всіх говорити, що C + + сила, а все інше там не дуже.

Ось треба подивитися на це (лектор показує на список курсів на дошці) ширше – це один із способів, який був обраний, зокрема у Вишці (нещодавно з'явився, тож він досить сучасний). Є й інші способи познайомитись. В інших хороших університетах дещо в іншому порядку та інші акценти розставлені. Але теж намагаються людей познайомити з усім, що мають.

Як програмісту шукати роботу

Ви це ( лектор вказує на список курсів) зробили все, навчилися в університеті, ще чимось два роки займалися продуктивніше і вам потрібно йти працювати. Як вибрати собі щось для роботи? По-перше, ви з усім познайомилися, кудись заглибилися і знаєте вже, що ви любите. Потрібно вибирати те, що ви любите, звичайно. Тому що якщо ви любите, вкладатимете сили, у вас буде мотивація і взагалі все буде добре. Тому що там справа не лише в грошах, справа в тому, щоб вам було цікаво та приємно. Ну, і ви хочете потрапити до крутої компанії, влаштуватися на роботу. Яку людину ось особисто я хотів би бачити? До мене приходить, припустимо, сто студентів – я мушу взяти двох на роботу чи одного. Чого вони приходять, я взагалі не розумію, хто вони, що вони як вони? У кращому разі вони мені покажуть диплом, який отримали в університеті, і я скажу: «О! Це крутий диплом, а це не такий крутий! І можу помилитись, до речі. Може, в людини було багато вільного часу, і вона навчилася набагато краще.

Що було б чудово? По-перше, якийсь опенсорс-проект, який ви від початку до кінця написали. Бажано, якщо я роблю якусь інфраструктуру, щоб дані швидко вважалися, ще щось, то, звичайно, мені було б цікаво, щоб мені написали щось опенсорне. Не сайт якийсь зробили, а чогось по темі. Чому це мені цікаво? Можу подивитися на ваш код, я можу подивитися як часто ви комітили, можу подивитися, як ви реагували на баги від користувачів, баги від розробників, які це використовують - все записано, я все дивлюся і думаю: «Во, тут баг два роки вже не закривали, тут ви неввічливо відповіли користувачеві, тут ще чогось не беру». Тобто, це ваш особистий проект.

Що ще було б класно? Я хотів би подивитися, як ви зробили командну роботу. Тобто ви приходите до мене на співбесіду і кажете: «Ми з хлопцями з універу запилили якусь програму гарну. Я ось там робив базу даних, вони там робили якесь мобільний додаток, і ще у нас там хлопець працював, дівчинка-дизайнер, хлопчик на техпідтримці. Нас було п'ятеро людей, і ми зробили класний проект». Ну я дивлюся, що справді ваш проект, говорю: «Що ваше?» Дивлюся ще раз код та розумію, що ви вмієте працювати в команді з людьми.

Програміст - це не той хто сидить один (інді такий) у гаражі, десь із вимкненим світлом, ні з ким не розмовляє, обростає бородою та пише. Все одно якась взаємодія з людьми є. З начальником, наприклад, який на вас, можливо, лається іноді (начальники, вони бувають такими, не завжди добрими). І я бачу, що ви вмієте працювати з людьми і мене це тішить, якщо у вас хороша команда якась. Навіть якщо не хороша, це краще, ніж її відсутність.

Чого ще особисто мені сподобалося б? Якби ви виявили себе у великих проектах. Наприклад, закоммітили щось у ядро ​​Лінукса, якщо ви займаєтеся системним програмуванням, поправили якийсь баг. Тобто показали, що ви вмієте читати чужий код та вмієте якісь зміни до нього вносити. Я дивлюся: «О, справді, ви розібралися в чомусь складному і якісь баги поправили!» І я починаю від цього дуже радіти. Тому що в мене є… ну не знаю… ось мій програміст звільнився, бо конкуренти запропонували йому більшу зарплату, і мені потрібно терміново когось затикати його місце – вами. Я такий дивлюся, що ви тільки з нуля писали, а чужий код не вмієте читати і правити, і засмучуюсь.

Ну і нарешті, залежно від конкретної посади, бувають різні інші речі. Якщо ви влаштовуєтеся аналітиком, я хотів би, щоб ви на Kaggle вирішили завдання на аналіз даних. Якщо ви влаштовуєтеся на якісь алгоритмічні речі, я хотів би, щоб ви в спортивному програмуванні якісь алгоритми поробили. І нарешті, якщо ви замислювалися про професію, читали як інтерв'ю проходять, - зустрічали, що там деякі люди висловлюють велике невдоволення: «Я прийшов, а в мене запитують, яке у мене хобі. Я сиджу як сич і не відповідаю, бо я не маю хобі,» - і думають, що HR'и роблять таке. Насправді вони намагаються зрозуміти, наскільки ви доброзичливі та адекватні. Якщо ви недоброзичливі і неадекватні, то хоч би яким ви були там генієм і трудоголіком, крутим фахівцем з великими знаннями, колективу буде з вами складно працювати, а поодинці ви проект не витягнете. Крім того, навіть якщо витягніть, то уявляєте, яке для компанії навантаження. А що ви завтра прийдете і скажете: «Збільшіть мені зарплату в 10 разів, бо я від вас піду». Зрозуміло, компанії не хочуть потрапляти в таку ситуацію. Тому виховання в собі адекватності та доброзичливості настільки ж важливе (як мінімум) як розвиток якихось професійних навичок.

Підсумовуючи, що можна сказати? Які мови добрі, а які погані? Ну всередині якоїсь групи мов, наприклад, між Ruby, Python і PHP, що вибрати? Звичайно, правильна відповідь Пітон, але насправді різниця між ними в кількості багів, що допускаються, в кількості ще чогось - 5%, ну, може 10%. Тобто, якщо у вас вже готовий проект на PHP написаний, то ніхто в здоровому глузді не буде говорити: "Давайте перепишемо все на Python". Скажуть: «Давайте наймемо ще PHP-розробників і далі писатимемо на PHP». Чудово, це непоганий вибір. Зрозуміло, якщо ви раптом почнете писати якийсь проект, то можливо розумно зараз вибрати Пітон. Хоча це теж залежить. Може, у вас на ринку купа дешевих PHP-розробників, а пітонівські дорогі, і ви думаєте: «Так, технологія прикольніша, але я заощаджу гроші на вже готових розробниках». І все, добре, ви вже приходите і працюєте там.
Як вибрати між Java та C++? Та те саме приблизно відбувається. Я думаю, що до того моменту, коли ви вирішуватимете, якою мовою вам розпочинати новий великий проект, ви наберете знань саме у вашій професійній галузі і зможете зробити правильний вибір. Зараз вам поки що не потрібно робити такий вибір, і тому я раджу вам робити те, що подобається.

Основи, як я вже казав, най-найоснови програмування (що таке функція, що таке if'ики, for'ики, масивчики, ще щось) можна вивчити більш-менш будь-якою мовою. Наприклад на C++, оскільки на нього багато чого схоже, і специфіки в ньому (на такому рівні) найменше, і букв зайвих писати найменше. Ну а потім, коли будете якісь складні архітектурні речі вчити, навчитеся і переживати не треба з цього приводу. Тобто, головне - спробуйте, шукайте те, що подобається і, коли ви зрозумієте, що зараз вже 4 години ранку, а ви for fun сидите і пишете, тому що вам подобається - напевно, в цей момент зрозуміло, що ви знайшли своє .

Будь-яка людина, яка вирішила опанувати основи процесу створення комп'ютерних програм, ставить питання, які на сьогоднішній день найбільш затребувані мови програмування, і які з них найкраще вивчати. І якщо на перше запитання відповісти дуже легко, то на друге шукати відповідь належить самому учневі, виходячи з його планів та потреб.

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

програмування?

Перш ніж розбирати основні мови програмування та описувати їх, необхідно розібрати саме поняття.

Мова програмування - це формальна знакова система, що використовується для написання комп'ютерних програм. Як і будь-яка інша мова, вона має свої лексичні, семантичні та синтаксичні правила.

Виділяють мови низького та високого рівнів програмування. На сьогоднішній день користуються переважно другим.

Мови програмування високого та низького рівнів

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

Робота з будь-якою мовою вимагає високої кваліфікації, розуміння крім того, написання програм займає значний час. При цьому за допомогою низьких можна створювати невеликі, але водночас ефективні програми. Початківцям програмістам не рекомендується починати своє знайомство з ними.

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

До високого рівня відносяться Pascal, Java, C, C++, C#, Delphi та багато інших. Використовуються вони для написання програмного забезпечення та прикладних програм.

Найбільш популярні мови програмування

Які ж найзатребуваніші мови програмування на сьогоднішній день?

В останні роки найбільш популярними та затребуваними вважаються Java, C, C++, Python, C#, які входять до топів мов програмування. Саме вони становлять основу сучасних програмта використовуються при написанні будь-якого великого проекту. Понад 70% програмістів працюють із цими мовами. Прогнозується, що у найближчі 10 років вони будуть так само затребувані, як і сьогодні.

Не менш популярними вважаються і Ruby, PHP, JavaScript. Більшість фахівців наголошує і на них.

Загалом, незалежно від популярності, будь-який фахівець, який більш-менш поважає себе, повинен знати хоча б кілька мов різних рівнів. Пов'язано це з тим, що більшість великих проектів розробляється на різних мовах. Наприклад, одні модулі пишуть, використовуючи Сі, інші розробляються на Java, треті взагалі Delphi.

З, З + і З #

Спочатку розглянемо сімейство Сі.

Мова Сі є компілюваною і вона розроблена в 70-х роках. На його основі надалі були створені такі мови як С++ та С#, Java.

C++ - потужна мова, призначена для створення як низькорівневих утиліт і драйверів, так і вельми значних додатків і комплексів програм.

Сі# - сучасна об'єктно-орієнтована мова, в основі якої лежить мова Сі та Сі++. Має безпечну системутипів. Одна з його відмінних рис полягає в тому, що він також дуже схожий і з іншою популярною мовою програмування - Java.

Один з недоліків мови полягає в тому, що він дозволяє створювати програми тільки для операційної системи Windows, і крім того, є дуже важкою, а значить, програми, написані на ньому, займають чимало місця.

Можна відзначити, що багато в чому З, З + і З - мови програмування для початківців. Освоївши їх, можна бути впевненим у тому, що вивчення нової мови займе щонайменше часу.

Познайомитися з ними та написати свої перші програми можна в спеціальному середовищі Borland або Visual Studio.

JavaScript

JavaScript – мова з об'єктно-орієнтованими можливостями. Розроблений у 1996 році і сьогодні один із найпопулярніших. Мова використовується в основному при створенні сценаріїв в інтернеті та працює в основних браузерах, таких як Internet Explorer, Firefox, Opera. Він також тісно пов'язаний з HTML і CSS, тому перш ніж приступати до його вивчення необхідно освоїти основи даних мов.

Варто відзначити, що, незважаючи на схожість у назві, JavaScript і Java - це дві абсолютно різні мови.

Ця мова підійде тим, хто орієнтований створення браузерів і скриптів, додатків і доповнень до них. Якщо ви плануєте створювати власні сайти, вам необхідно познайомитися з ним ближче.

Java

Розглядаючи найзатребуваніші мови програмування, не можна не відзначити Java. Це об'єктивно-орієнтована мова програмування, яка узвичаїлася з 1995 року. Він дуже легкий і працює на будь-якій Java-машині будь-якої архітектури. Застосовується для розробки програм під Android та iOS.

Python

Python – основне завдання якого – підвищити продуктивність розробника, зробити код більш читаним. Він має невеликий списоксинтаксичних конструкцій і дуже значну стандартну бібліотеку функцій. Розробка мови почалася ще в 90-х роках і продовжується досі. Він застосовується для розробки різних проектів, розширень та інтеграції раніше розроблених додатків.

Основи мови Python можна вивчати як старт для програмування, так і другої додаткової мови.

Ruby

Ruby - мова програмування високого рівня, що містить частини Perl, Smalltalk, Eiffel, Ada і Lisp. Використовується з 1995 року. Основна перевага мови - її простота та гнучкість. Підходить як для написання невеликих програм, так і для розробки серйозних програм.

Мова PHP

PHP - досить популярна мова для написання сценаріїв, розроблена для створення web-додатків. Досить часто його також вносять до списку «Мов програмування для початківців» і рекомендують до вивчення.

З його допомогою можна створювати високоякісні web-додатки в дуже стислий термін. Мова має просту та зрозумілу структуру, що дозволяє вивчити його за лічені дні.

Висновок

Ми з вами розглянули найзатребуваніші мови програмування, вивчення яких допоможе вам надалі успішно створювати свої проекти та заробляти як програміст. Єдиної думки про те, яку мову вивчати, немає, але водночас фахівці зазначають, що бажано знати кілька мов програмування, оскільки це надалі дозволить розширити поле діяльності та полегшить роботу над різними командними проектами.

    Список мов програмування За категоріями Хронологічний Генеалогічний Наведено список мов програмування, згрупованих за категоріями. Деякі мови потрапили до кількох категорій. Зміст … Вікіпедія

    Список мов програмування За категоріями Хронологічний Генеалогічний Наведений генеалогічний список мов програмування. Мови класифікуються відповідно до попередніх мов, які вплинули на формування … Вікіпедія

    1 По виробнику або платформі 1.1 Flash 1.2 Java 1.3 Microsof … Вікіпедія

    Список мов програмування За категоріями Хронологічний Генеалогічний Хронологія мов програмування впорядкований у хронологічному порядку список мов програмування. Зміст … Вікіпедія

    Цю статтю слід вікіфікувати. Будь ласка, оформіть її згідно з правилами оформлення статей. Умовні позначення … Вікіпедія

    Ця сторінка інформаційний список. Мови програмування.NET (Мови з підтримкою CLI або CLI мови) комп'ютерні мови програмування, що використовуються для створення бібліотек та програм, що задовольняють вимогам Comm … Вікіпедія

    Основна стаття: Текстовий редактор Список текстових редакторів Windows та таблиця порівняння. Зміст 1 Таблиця порівняння відомих текстових редакторів … Вікіпедія

    Мова програмування C# одна з найпопулярніших мов програмування на сьогоднішній день. Paint.NET відкрите програмне забезпечення для обробки растрової графіки SharpDevelop відкрита IDE для мов C#, Visual Basic .NET (VB.NET), Boo … Вікіпедія

    Це список програмного забезпечення, що розробляється Free Software Foundation як частина проекту GNU UNIX подібної операційної системи, що складається повністю з вільного програмного забезпечення. Більшість цих пакетів також… … Вікіпедія

    Ця стаття чи розділ потребує переробки. Будь ласка, покращіть статтю відповідно до правил написання статей… Вікіпедія

Книги

  • Python для дітей Самовчитель з програмування, Бріггс Джейсон. Про книгу Ця книга - самовчитель з однієї з найбільш затребуваних на сьогоднішній день мов програмування - Python. Починаючи з найпростіших дій, крок за кроком ви писатимете свої…
  • JavaScript для дітей Самовчитель з програмування, Морган Нік. Про книгу Ця книга дозволить вам зануритися в програмування і легко освоїти JavaScipt. Ви напишете кілька справжніх ігор - пошук скарбів на карті, "Шибеницю" та "Змійку". На кожному…