Яку мову програмування слід вивчити першим? (ʇdıɹɔsɐʌɐɾ: ɯǝʚɯо ņıqнqvиʚɐdu)

Багато починають шлях до вивчення програмування, відкривши пізно ввечері Google. Зазвичай шукають щось на кшталт «Як вивчити...». Але як той, хто шукає подібне, вирішує, яку саме мову програмування вибрати?

Хтось, начитавшись сайтів і блогів найбільших комп'ютерних компаній, міркує так: «У Кремнієвій долині що не слово – то Java. Думаю, це – те, що мені потрібно». Буває і так: «Haskell. Адже він на піку популярності. Страшно подумати, що буде далі. Безумовно – Haskell». І навіть так: «Цей ховрах на логотипі Go – така няшка. Хочу знати Go».

Деякі, спонукувані прагненням навчитися програмувати, шукають ось що: «Яку мову програмування вивчити першим?».

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

Кликабельно:



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

Вибір першої мови програмування може стати захоплюючим заняттям, як полусерьезные опитувальники, на кшталт: «Хто ви з героїв Квентіна Тарантіно?».

Але, перш ніж ви підете з головою у вивчення Ruby, причому, тільки тому, що в дитинстві жити не могли без пластиліну, дозвольте звернути вашу увагу на те, що перша мова програмування – це дуже і дуже важливо. Занадто багато від нього залежить.

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

Вибираючи перший мову варто тверезо оцінити такі фактори:

  • Ринок праці.
  • Довгострокові перспективи мови.
  • Складність вивчення мови.
  • Що саме ви зможете створити в процесі вивчення, і, показавши оточуючим, підтримати мотивацію.
Нові мови програмування з'являються кілька разів на рік. Про них пишуть статті в наукові журнали, їм присвячують комікси, які можна знайти в Мережі.


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



З аналізу пошукових запитів можна з'ясувати, що у Java були злети і падіння. А, наприклад, рейтинг Python поступово зростав, він став мало не найпопулярнішою мовою програмування. Є тут і одна мова, простий, але володіє чудовими можливостями, графік інтересу до якого з року в рік повільно зростає, хоча і знаходиться в самому низу. Це – JavaScript.

Перш ніж говорити про цих мовах програмування, дозвольте дещо уточнити.

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

Основи інформаційних технологій та навчання програмуванню

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

Напевно ви знайомі з цим висловлюванням Еріка Реймонда: «Освіта у сфері комп'ютерних технологій точно так само не зробить з вас відмінного програміста, як вивчення кистей і фарб не зробить вас чудовим художником».

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

У результаті безліч вступних курсів з програмування побудовано навколо досить низькорівневих абстракцій таких мов, як C, або мов, які використовуються в математичних пакетах начебто MATHLAB.

І ті, хто приймають рішення про те, чому вчити на курсах з програмування, зазвичай дотримуються всіляких офіційних джерел, регулярно публікують звіти з рейтингами мов. Серед таких звітів, наприклад, TIOBE Index. А ось — таблиця лідерів за версією IEEE.


Такі ось «таблиці лідерів» виглядають практично так само, як десять років тому. Однак, все змінюється, навіть в академічних колах.

Так, в 2014-му році Python обійшов Java, ставши найпопулярнішим мовою програмування в провідних курси з інформаційних технологій в США.


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

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

Ось результат опитування, яке проводилося на Stack Overflow в 2016-му році. У ньому брало участь 49397 розробників. Більше половини з них використовують JavaScript.



Без JavaScript неможлива розробка веб-інтерфейсів, а останнім часом, завдяки Node.js зростає актуальність в серверному JavaScript коді. Ця мова стрімко поширюється і в інші області, такі, як розробка ігор та інтернет речей.

Серед програмістських вакансій JavaScript згадується частіше, ніж інші мови, якщо не брати в розрахунок Java. Ось дані з найбільшого агрегатора вакансій Indeed.com.



Невипадково і те, що ми, на freecodecamp.com, зібрали співтовариство розробників, зайнятих проектами на JavaScript з відкритим вихідним кодом. За минулі два роки понад 5000 осіб скористалися Free Code Camp для того, щоб знайти свою першу роботу в ролі програміста.

Я, до речі, не ратую за JavaScript тільки тому, що навчаю на ньому програмувати. Все як раз навпаки. Я навчаю цій мові саме тому, що знання JavaScript – це вірна дорога до першої роботи програміста.

Але чи підходить JavaScript саме вам? Варто йому ставати вашим першою мовою програмування? Розглянемо докладніше ті фактори вибору мови, про які я говорив вище.

Фактор №1: ринок праці
Якщо ви вчіться програмувати з чистої цікавості і любові до інтелектуальних розваг, можете пропустити цей розділ. Але якщо ви, як і величезна кількість інших людей, вивчаєте програмування для того, щоб за допомогою набутих знань і навичок знайти роботу, вам варто звернути увагу на те, про що тут піде мова.

Як я вже говорив, в оголошеннях про вакансії найчастіше згадується Java. На другому ж місці стоїть JavaScript.

Але у випадку з JavaScript треба врахувати одну важливу річ. Хоча мова існує вже два десятки років, лише порівняно недавно він перетворився на серйозний інструмент, з допомогою якого гіганти на зразок Netflix, Walmart і PayPal створюють повноцінні програми.

В результаті багато компаній наймають JavaScript-розробників, але розробників цих не так вже й багато.

Ось дані з Indeed.comтут показано співвідношення вакансій та шукачів.


Отже, що ми бачимо. На одне місце Java-розробника припадає 2.7 програміста. У сфері вакансій, де потрібне знання PHP, а також у середовищі iOS-розробки, складається схожа ситуація.

Якщо ж поглянути на дані по JavaScript, то виявиться, що на одну вакансію припадає всього 0.6 програміста. Для JavaScript-розробників це, безумовно, ринок продавця.

Фактор №2: довгострокові перспективи
JavaScript-проекти на GitHub отримують, в середньому, в два рази більше pull-запитів, ніж проекти на Java, Python або Ruby. І, крім цього, JavaScript зростає швидше, ніж будь-який інший популярний мову.

Ось відповідні дані GitHub Octoverse:



На екосистему JavaScript, крім того, благотворно впливають серйозні інвестиції, як фінансові, так і виражаються в людському капіталі талановитих інженерів, від таких компаній, як Google, Microsoft, Facebook і Netflix.

Наприклад, вклад в мову програмування з відкритим вихідним кодом TypeScript (розширена версія JavaScript зі статичною типізацією) внесли понад 100 розробників. Багато з них – співробітники Microsoft і Google, які отримують зарплату за цю роботу.

Подібну форму спільної роботи компаній в середовищі Java знайти складніше. Наприклад, Oracle, яка фактично володіє Java, поглинувши Sun Microsystems, часто судиться з компаніями, які намагаються працювати над цією мовою.

Фактор №3: складність вивчення мови
Ось карикатура про складності мов програмування від XKCD.



Більшість програмістів погодиться з тим, що високорівневі скриптові мови порівняно легкі у вивченні. JavaScript підпадає під цю категорію, разом з Python і Ruby.

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

Фактор №4: проекти, які можна створити, використовуючи отримані знання
Ось тут JavaScript немає рівних. Він може працювати на будь-якому пристрої, на якому є браузер. Та ось хоча б прямо тут, де ви це читаєте. В принципі, з допомогою JavaScript можна створити практично все, що завгодно і поширити це по всьому світу з упевненістю в тому, що працювати це буде практично на всьому, що нагадує комп'ютер або мобільний телефон.

Повсюдне поширення JavaScript призвело до такого знаменитим висловом Джефа Этвуда, співзасновник Stack Overflow: «Будь-який додаток, яке можна написати на JavaScript, буде в підсумку написаний на JavaScript».

З плином часу це висловлювання, яке ще називають «Законом Этвуда», не втрачає актуальності.

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

Python страждає від схожих проблем. Ось що з цього приводу написав Джеймс Хэг статті про те, що прийшла пора відмовитися від Python, як від основного мови, що використовується при навчанні програмуванню. Учень запитує: «Як мені дати цю гру, яку я написав, друзям? Або, це буде навіть краще, чи можна як-небудь записати її на мій телефон, щоб я міг показати її всім в школі, а їм не довелося б встановлювати?». Вчителеві ж, якщо мова йде про Python, залишається лише хмыкнуть. В двох словах тут і не відповіси.

Якщо ж говорити про JavaScript, то ось живі відповіді на вищезазначене питання. Це – додатки, які написали члени спільноти Free Code Camp в CodePen, користуючись браузером.

Ось гра «Simon», створена в стилі 1970-х.


Ось – реалізація математичної гри Джона Конвея «Життя».



Ось – сторінка пошуку для Wikipedia, стилізована під «Зоряні війни».



А ось – гра-«рогалик» з традиційним підземеллям.



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

Якщо ви будете стрибати від однієї мови до іншої, ніде толком не затримуючись, далеко вам не піти. Для того, щоб помітно просунутися далі «Hello World», потрібно як слід вивчити ваш перший мову. Після цього з другим і наступним мовами буде розібратися набагато простіше.

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

  • Вивчення C – це відмінний спосіб розібратися з тим, як насправді працюють комп'ютери, зокрема, в плані управління пам'яттю. C особливо гарний у високопродуктивних обчисленнях.
  • C++ відмінно підходить для розробки ігор.
  • Python немає рівних у наукових і статистичних розрахунках.
  • Java нагоді тим, хто бачить себе програмістом у великій компанії.
Але спочатку, повторюся, варто вивчити JavaScript.

Так, а тепер хочу зробити неможливе. Збираюся спробувати уявити собі заперечення деяких читачів, критику JavaScript і моїх ідей, яка може з'явитися в коментарях, і на цю критику відповісти.

Заперечення №1. JavaScript – мова повільний
JavaScript, для більшості практичних цілей, так само швидкий, як мови, які традиційно вважають високопродуктивними.

JavaScript (мова йде про Node.js) на порядки швидше, ніж Python, Ruby і PHP. Його швидкодія наближається до C++, Java і Go. Ось результати одного досить серйозного тесту продуктивності для різних мов програмування.



Заперечення №2. В JavaScript немає статичної типізації
Як Python і Ruby, JavaScript – це мова з динамічною типізацією. І це, з одного боку, зручно, а з іншого – здатне завести розробника в лабіринт помилок. Ось, наприклад, тут мені хочеться, щоб змінна exampleArray була масивом. Я записую в масив значення, перевіряю його довжину, тобто – кількість містяться в масиві елементів. Виглядає це так:

exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2

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

exampleArray = "text"
-> "text"
exampleArray.length
-> 4

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

Якщо ж вам, в першому мовою програмування, абсолютно необхідна статична типізація, я все одно рекомендую почати з JavaScript. Після цього ви зможете швидко освоїти TypeScript. Ось що говорить на цю тему Алекс Эверлоф: «Для того, щоб освоїти TypeScript, потрібен час, але, якщо ви вже знаєте JavaScript, все буде набагато швидше і простіше».

Заперечення №3. Я дуже хочу створювати мобільні додатки, тому JavaScript для мене
Навіть якщо так, я все одно раджу спочатку вивчити JavaScript. І, до речі, він цілком підходить для розробки мобільних додатків, причому, як їх клієнтської, так і серверної частин. А саме:

  1. В екосистемі JavaScript є кілька інструментів для розробки повноцінних мобільних додатків. Наприклад, це Angular Cordova і React Native.
  2. Для того, щоб ваш мобільний додаток робив що-небудь по-справжньому цікаве, ймовірно, йому знадобиться серверна частина, побудована на якійсь підходящої платформі зразок Node.js + Express.js.
Крім того, варто відзначити, що золотий вік мобільних додатків йде.

Для початку, хоча мобільними додатками користуються буквально всі, за даними опитування Stack Overflow, в якому взяли участь 49525 програмістів, практично половина з них зайнята в сфері веб-розробки. І лише трохи більше восьми відсотків займаються мобільними додатками.



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

Безумовно, програмами вони користуються. В основному це Facebook, Google Maps і деякі інші. Їх не так вже й багато. В результаті основний попит на розробників мобільних додатків сконцентрований в декількох великих компаніях.

Складно передбачити перспективи розвитку робочих місць для мобільних програмістів. При цьому багато завдань, що стосуються розробки, підтримки та поширення додатків для смартфонів і планшетів найлегше вирішуються за допомогою JavaScript. У результаті компанії, на зразок Facebook і Google, забезпечують потужну підтримку кращим JavaScript-інструментів для мобільного розробки.
Станом на 2016-й рік, практично вся робота програмістів зосереджена на веб-проектах. Всі так чи інакше пов'язана з цією величезною платформою, з «Всесвітньою павутиною». І прийдешнє покоління побутових приладів, з якими можна розмовляти, і автомобілі, які будуть забирати дітей зі школи – все це теж буде частиною веба.

З вищесказаного випливає простий висновок: вчіть JavaScript.

Заперечення №4: Хіба JavaScript це не іграшковий мову, який був створений за десять днів?
Коли чую подібне, відразу на думку спадає цей твіт. А взагалі, у JavaScript, звичайно, незвичайна історія. Це провокує. Напевно вам доводилося читати і чути, як хтось відпускає жарти про це мовою.

До речі, деяким неймовірно подобається критикувати C++. Але, як і JavaScript, C++ досяг успіху незважаючи ні на що. Тепер він, точно так само, практично всюди.

JavaScript – це ні разу не іграшка.

Вдалою навчання!
У підсумку хочу сказати ось що. Якщо хто-небудь стане вас діставати тільки тому, що ви вивчаєте JavaScript, а не «хіт сезону», просто згадайте знамениті слова Бьерна Страуструпа, людини, який створив C++: «Існує лише два види мов програмування: ті, які постійно лають, і ті, якими ніхто не користується».

Удачі у вивченні вашого першого мови програмування!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.