IT Expert світ технологій Це цікаво Андрій Виноградов
| 03.09.2015
Багато з нас хоч раз та замислювався над тим, щоб навчитися самим писати програми. Адже хороший програміст - на вагу золота, його праця оцінюється дуже високо.
З чого ж почати? Яку мову вчити? Слово - професіоналам. Наші співрозмовники: Євген Кузін, керівник відділу мережевих проектів компанії «Доктор Веб», Василь Дьяконов, технічний директор компанії KeepSolid, і Владислав Естрайх, PHP-розробник компанії Movavi.
Перший крок - найголовніший. Як не помилитися?
Євген Кузін: Раджу для початку відповісти на питання: чи дійсно програмування ваш коник? Звичайно, це відносно модний вид діяльності, але, щоб стати хорошим програмістом, необхідно дуже багато знати і вміти, тобто працювати протягом всієї кар'єри. Тому, якщо ваш інтерес Мімолет, не витрачайте час. Ну а якщо все серйозно - вперед. Оскільки програмування надзвичайно різноманітно, постарайтеся зрозуміти, яке з напрямків вам ближче: прикладна розробка для десктопів, мобільних пристроїв, веб-розробка або клієнт-сервер. А може, низькорівневе програмування драйверів і операційних систем? Незважаючи на те що всі ці напрямки об'єднані загальним терміном «програмування», відмінності у використовуваних мовах, технологіях, фреймворк значні. Хороший технічний вуз і спеціальність, пов'язана з ІТ, якщо і необов'язкові, будуть гарною підмогою. І справа не тільки в тому, що там розкажуть про логіку, реляційної алгебри і дискретної математики. У вузі вас навчать інженерного мислення, технічного композиційному підходу до вирішення завдань, тобто головних якостей програміста. Нічого страшного, якщо викладають одну мову програмування, а вам цікавий інший. У Мережі легко відшукати інформацію і навіть пройти курси дистанційного навчання за всіма без винятку мовам і пов'язаним з програмуванням дисциплін. Завдяки open source можна знайти приклади коду і рішень, написаних досвідченими (або не дуже) програмістами в цікавій для вас області. Найкраще, якщо ви маєте можливість безпосередньо використовувати той код, який вирішили вивчити. Не бійтеся вносити власні виправлення і доопрацювання. Ну і, звичайно, не забувайте читати, причому не робіть, подібно до багатьох новачкам, таку помилку: не обходьте увагою книги про алгоритми, техніках програмування і правилах написання хорошого коду тільки тому, що на обкладинці немає назви вашого улюбленого мови або фреймворка. Останні часто втрачають актуальність, а з алгоритмами і фундаментальними істинами це відбувається набагато рідше.
Василь Дьяконов: Починати потрібно з того, чим хочеться займатися, - програмування. Від найпростіших ігор до вирішення завдань зі шкільних підручників фізики, математики та програм ACM-олімпіад . Варто підвищувати загальну комп'ютерну грамотність - знання про операційні системи, мобільних пристроях, способах мережевого взаємодії між ними дуже знадобляться. Ну а про вивчення англійської мови - як основного в ІТ-середовищі, на якому доступна вся серйозна документація, - я й не кажу ...
Владислав Естрайх: Перш за все потрібно взяти хорошу книгу по одному з актуальних і перспективних мов, відкрити її, запастися чаєм, сісти і почати програмувати, з тонкощами розбираючись по ходу справи. Ставити перед собою конкретні, що поступово ускладнюються завдання. Не чекати, що програмування навчать в вузі. Там можуть допомогти системно і впорядковано мислити, а також досягати мети всілякими шляхами.
Які мови програмування найбільш затребувані?
Євген Кузін: З огляду на кількість мобільних пристроїв, не дивно, що найпопулярніші Java. Не відстає і JavaScript, що здобув безліч застосувань, але найбільш відомий як мову клієнтських призначених для користувача інтерфейсів в мережі, а також стане в нагоді в розробці високопродуктивних додатків з використанням моделі зворотних викликів. Далі, в порядку, що не відбиває точного співвідношення обсягу нового коду, які пишуть на цих мовах, назву скриптові мови загального призначення, що застосовуються в основі веб-розробок: PHP, Python, Ruby, потім C # - мова платформи .Net, ну і, мабуть, C ++, що залишається основним в розробці продуктивних оптимізованих додатків - від ігор до вбудованих систем. Повторюю, програмування як таке дуже різноманітно, і в кожному окремому напрямку є свої домінуючі мови і технології. Там, де «говорять» в основному на C і C ++, застосувати щось інше часто просто неможливо.
Василь Дьяконов: Зараз немає мови програмування, який підходив би на всі випадки життя. У великих проектах популярні Java і C # через багатою бази бібліотек, відносну простоту написання коду і підтримки безлічі платформ. Додатки, вимогливі до швидкості виконання і переносимості між різними платформами, успішно пишуть на C / C ++. Зростаючий ринок масових мобільних пристроїв обслуговується розробниками на Objective C / Java / C #. З урахуванням того, що останнє десятиліття ознаменувалося бурхливим зростанням Інтернету і обслуговуючих онлайн-сервіси серверних додатків, стали популярні JavaScript, Python, Ruby. Більш того, вимоги до продуктивності і безпеки серверного коду призводять до того, що знаходять застосування навіть такі маловідомі мови, як Go, Erlang, Haskell, Scala.
Владислав Естрайх: У сфері веб-програмування, чим я займаюся, говорили і говорять на PHP. Як би не критикували його за якийсь примітивізм і інші недоліки, він все одно залишається універсальним рішенням, яке динамічно розвивається і на спокій не поспішає. Конкурують з ним Python і Ruby. Набрали обертів і JavaScript-орієнтовані рішення, наприклад Node.js. Як то кажуть, хто б міг подумати.
Які мови, на ваш погляд, будуть затребувані в майбутньому?
Євген Кузін: На найближчі три-п'ять років можна дати впевнений прогноз: Android і Java не поступляться лідерства, а скоріше навіть зміцнять його за рахунок появи більшої кількості інтелектуальних пристроїв побутової електроніки, «розумних» годин і тому подібного. Можлива поява нових мов, що транслюються в байт-код для JVM, що вже застосовується. Рекомендую звернути увагу на Go - відносно молодий, але перспективний мова програмування від Google, що фактично дає гарантію його повної підтримки в Android і Chrome OS. У дизайн Go спочатку закладена многопоточность, важливість якої з кожним роком більш очевидним. За задумом творців це повинно зменшити головний біль програміста при написанні паралельних масштабованих додатків. Також досить цікавий Rust від Mozilla, в першу чергу підтримкою безлічі популярних парадигм програмування. Мова компільований і позиціонується як засіб створення великих клієнт-серверних додатків з акцентом на безпеку, надійності і паралельному виконанні коду. При цьому в Rust відсутні операції з покажчиками і прямий доступ до пам'яті, що виключає цілий клас потенційних помилок.
Василь Дьяконов: Особисто я вважаю, що затребуваними будуть не мови, а фахівці, які володіють різними технологіями і вміють працювати в різних парадигмах програмування. Для кожного завдання необхідно використовувати найбільш підходящий інструмент, що дає високу швидкість розробки, безпеку і стійкість до збоїв, що дозволяє об'єднувати розрізнені компоненти в єдину систему.
Владислав Естрайх: Щодо мов передбачати не беруся. Майбутнє швидше за технологіями і принципами: будуть затребувані хмари, highload і найбільш пристосовані до них кошти і елементи розробки. Які мови будуть рідними для цих засобів і елементів - питання вторинне.
Чи є передумови для появи нових мов?
Євген Кузін: В академічному середовищі нові мови і зараз з'являються дуже часто. Більшість з них так і не отримує широкого поширення, а залишається в експериментальному статусі, але факт залишається фактом: дослідження в області мов програмування ніколи не припиняються. Якщо ж говорити про появу мов, які стали б відомі за межами лабораторій або спеціалізованих дискусійних груп Інтернету, то тут повинні вдало скластися обставини. Як би не був хороший мову, він не стане популярний протягом перших місяців або навіть років. Розробка ПО - це область, в якій держава приділяє величезну увагу надійності, сумісності та підтримки, тобто якостям, якими нову мову не володіє в принципі. Навчання новому займає не один день, а програмісти - народ прагматичний і в своїй масі не будуть витрачати час на технологію, майбутнє якої не гарантовано. Молоді мови Go, Rust, Dart, Nim з'явилися п'ять і більше років тому. Таким чином, автори нової мови по суті повинні зробити вдалу ставку на ідеї, які виявляться актуальними в найближчі роки і в той же час недостатньо висвітлені конкурентами. Нові парадигми програмування або, що більш імовірно, перегляд відкритих раніше, внесення в ядро мови поточних тенденцій розробки, вдалі експерименти з синтаксисом і функціоналом - все це достатні підстави для появи нових мов.
Василь Дьяконов: Нові мови з'являються точно так же, як розвиваються старі. Найчастіше це або робота над помилками, спроби усунути фундаментальні проблеми і збільшити швидкість розробки складних систем, або нішеві мови, призначені для вузького спектра завдань. Думаю, що процеси творення нових мов благотворно впливають на розвиток стандартів таких старичків, як C ++ і Java.
Владислав Естрайх: Ті чи інші характеристики мов завжди когось не влаштовують, є сфери людської діяльності, які з різних причин (вузькоспрямованість, високотехнологічність, наукоємність) вимагають свіжих рішень на всіх рівнях. Тому і нові мови з'являються постійно. Інша справа, що їх шлях в ужиток довгий і важкий, оскільки обумовлений бізнес-процесами, та й потреба в нових мовах для вирішення побутових завдань дуже низька. Не уявляю, що повинен запропонувати світові мову програмування, що з'явився, скажімо, в 2015 році, щоб через п'ять років увійти в десятку найбільш затребуваних.
Які тенденції в програмуванні ви б виділили?
Євген Кузін: По-перше, зростання ролі движків і фреймворків. Жодна мова високого рівня вже не використовується сам по собі, крім нього завжди в ходу фреймворк - набір готових утиліт і бібліотек, покликаний розширити функціональність мови в заданій предметній області і надати програмісту максимальну зручність і надійність при розробці. З ускладненням програм роль фреймворків буде рости. По-друге, хмарні і паралельні обчислення, а також пов'язані з ними підходи в програмуванні. Щоб працювати з великими даними, не потрібно бути флагманом - з необхідністю ефективно обробляти великі обсяги інформації стикається все більше компаній. В таких умовах найбільш практично горизонтальне масштабування, коли продуктивність досягається об'єднанням безлічі обчислювальних вузлів, між якими паралельно розподіляються завдання. Щоб максимально ефективно використовувати такі системи, програми повинні бути написані спеціальним чином. Третя тенденція - мобільні додатки і веб-сайти. Попит на розробників для мобільних платформ буде рости через збільшення обчислювальної потужності останніх. У той же час підвищується інтерес до розробки мобільних сайтів щодо мобільних додатків, що можна пояснити з точки зору крос-платформенности і відсутності необхідності реєструвати і підтримувати додаток для кожної з платформ. Втім, навіть незважаючи на значний прогрес в області веб-інтерфейсів, такий підхід можна застосувати не для всіх додатків.
Журнал: Журнал IT-Expert [№ 08/2015] , Підписка на журнали
З чого ж почати?Яку мову вчити?
Як не помилитися?
Євген Кузін: Раджу для початку відповісти на питання: чи дійсно програмування ваш коник?
А може, низькорівневе програмування драйверів і операційних систем?
Які мови програмування найбільш затребувані?
Які мови, на ваш погляд, будуть затребувані в майбутньому?
Чи є передумови для появи нових мов?
Які тенденції в програмуванні ви б виділили?