Програміст Початківець: Яку мову, технологію, напрямок обрати?

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

    Popular Languages 2013

    Для кого ця стаття?

    Перш за все мушу сказати, що вибір мови програмування чи галузі у якій прийдеться працюввати, не є супер критичним питанням для сформованого програміста. Більшіст професійних програмістів володіють кількома мовами, спробували різноманітні платформи та напрямки у програмуванні, і регулярно поповнюють свій арсенал знань та навичок. Для такого “спєца” питання вибору мови програмування чи іншого інструменту завжди розглядається в контексті конкретної задачі, проекту. Як то кажуть, щоб не приходилося сокирою і дрова рубати і хліб нарізати. Кожному завданню – свій інструмент.

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

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

    Якщо ж ви ще нічого не знаєте і навіть не маєте уявлення, чим можна займатися будучи IT спеціалістом, програмістом – тоді читаємо далі…

    Виставляємо Пріоритети і Правила Вибору

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

    Отже основними критеріями даного вибору для початківця є:

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

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

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

    Загалом є різні напрямки куди можна податися в IT сфері. Це і дизайн, і верстка, і тестування, і адміністрування, і менеджмент проектів, ну і на кінець програмування. Можливо на початку вам навіть прийдеться поскакати між цими зовсім різними напрямками, щоб обрати щось для себе. Як то кажуть, доки не спробуєш – доти не будеш знати.

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

    А тепер давайте з вами розглянемо варіанти, що підходять саме для програмістів.

    То ж яка мова і напрямок для початку?

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

    Programming Genres

    На початку треба зробити як мінімум два вибори:

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

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

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

    Щодо мови програмування, то однозначно починати легше з інтерпретованої мови з динамічною типізацією. Наприклад php, python, ruby, javascript. Їх не тільки швидше і простіше освоїти, але на даний момент вони є одними із найпопулярніших.

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

    Приклад. Мова Python була першою мовою програмування, яку я вивчив. Вже після тижня проходження туторіалів та читання книжки, за другий тиждень я написав невеличку гру Piano на фреймворку Pygame. Після місяця підчитування посібника по мові C, я і далі робив помилки з використанням масивів, вказівників і часто отримував проблеми через неправильне використання пам’яті.

    Тому “the best” зв’язка для початку буде Веб програмування + динамічна мова як от python, php або ruby.

    Підсумуємо

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

    • вчимо веб технології (html – мова розмітка під бравзери, css – мова правил стилів для вашого html коду, javascript – мова в бравзері, щоб зробити вашу сторінку динамічною, + jQuery – javascript бібліотеки, зменшую потребу досконалого вивчення самої мови javasript)
    • вчимо серверну мову, адже знаючи лише попередній пункт ви зможете створювати лише статичні веб сторінки (python + django (веб фреймворк на пітоні), ruby + rails (веб фреймворк на ruby), php + symphony (веб фреймворк на php)) – тобто, щоб програмувати сайт не треба з нуля все самому писати, простіше освоїти і скористатися існуючими фреймворками
    • трошки розібратися із базами даних, наприклад основи бази MySQL, будь-яка програма повинна тримати певні дані, тому знання баз є необхідним у більшості випадків
    • шукаємо ментора, контактуємо друзів знайомих програмістів, щоб отримувати регулярні поради, підтримку і загалом атмосферу IT 🙂
    • відвідуємо місцеві програмістські фірми, розпитуємо про набір джуніків та курси для них, питаємо про необхідні навики, мотаємо на вус, працюємо у напрямки тих же ж необхідних навиків. Якщо знайшли фірму, яка набирає джуніків з пеним набором вимог – перключайтесь негайно на вивчення даних вимог, навіть якщо це може бути трошки важче, ніж веб програмування 😉

    Я ще до кінця не визначився з темою наступної статті у даній серії. Серед варіантів є:

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

    Голосуйте в коментарях за тему, додавайте свої власні теми. Найбільш поширену і потрібну тему будемо висвітлювати першою.

    А який у вас досвід? З чого саме ви починали? Що б ви порекомендували початківцям? З чим ви не згідні у даній статті? Яке наступне питання ви б хотіли, щоб я висвітлив у наступному пості серії Програміст Початківець?

    Хочете першими дізнаватися про наступні статті у нашій серії “Програміст Початківець”? Тоді підписуйтесь на розсилку мого блогу:

    Коментарі:

    1. віталію як з вами звязатись по питанню менторства

      Відповісти
    2. Віталій,дуже цікаво знати,що таке “фреймворк” в програмуванні,але гугл нормальних статтей нарахунок цього не дає.Можливо у вас є стаття або ви могли би це об”яснити новачку?

      Відповісти
      • Віталій, і в мене – це ж питання. І дякую за статтю!

      • Мені 15 років я вивчив програмування паскаль для початку щоб зрозуміти що таке програмування що дальше вчити? Пробував вчити java затяжко поки що!!

      • 15 років вивчив паскаль для початку що вчити дальше?

      • зроби своє рішення на інфі даної статті.

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

      Відповісти
    4. Віталій, хотів запитати чи потрібно або чи можливо стати програмістом якщо в тебе з математики не найвищий бал (8 або 9 (по 12 бальній шкалі))?

      Відповісти
      • Можна. Є багато напрямків програмування, де достатньо знань лише шкільної математики. Бал в школі взагалі не показник.

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

      Відповісти
    6. Виталий, а откуда этот чудный график где у Питона внезапно 30% популярности? Даже больше чем у Джавы и ПХП. Буду благодарен за ссылку, если есть.

      И ещё вот мой пост где я советовал студентам учить Джаву где много чего перекликается
      http://stokito.wordpress.com/2012/09/23/%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%8f-%d1%81%d0%be%d0%b2%d0%b5%d1%82%d1%83%d1%8e-%d0%b7%d0%bd%d0%b0%d0%ba%d0%be%d0%bc%d1%8b%d0%bc-%d1%81%d1%82%d1%83%d0%b4%d0%b5%d0%bd%d1%82%d0%b0%d0%bc-%d1%83/

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

      И ещё, про Питон у меня есть такой пост http://stokito.wordpress.com/2013/11/24/python-%D0%B8%D0%BB%D0%B8-java-%D1%85%D0%BC-%D0%B0-%D0%BC%D0%BE%D0%B6%D0%B5%D1%82-groovy/

      Но если сравнивать груви и питон именно для начинающих , то питон хорош тем что на нём несколько курсов по алгоритмам есть на курсере, и больше документации в интернете можно найти

      Відповісти
      • Вже не пам’ятаю точно. Десь нагуглив. Пам’ятаю, що це лише статистика зібрана із хештегів твіттера за певний період часу. Думаю її не варто сприймати надто серйозно 😉 Вже мав неодноразово дискусію про це зображення у соцмережах. Треба буде його замінити ))

        Цікаві статті! Почитаю.

        До речі, я також хочу на днях закінчити статтю Java vs Python ))) Щоправда там буде на основі інфографіки, яку не я робив. Я занадто мало знаю Java, щоб об’єктивно порівнювати 😉

    7. Дякую за інформацію) 5 доларів в місяць,відносно дорого, у мене є діючий хостинг – він коштує 12 доларів в рік.

      P.S.Думав твій сайт зроблений на пайтоні)

      Відповісти
    8. Маю хостинг, залишилось зареєструвати домен. Хочу зробити свій блог,схожий на цей: http://microtechnics.ru/
      php – не знаю зовсім, і по відгуках читав що краще його не вчити)
      python – трішки знаю, тому напевно спробую його якось застосовувати.

      Є якісь вимоги до хостингу щоб застосовувати фреймворк python Django ?

      P.S. Про статтю про застосування Python Embedded системах пам’ятаю, зібрав трохи матеріалу, буде більше вільного часу – допишу.

      Відповісти
      • Чому ж так 🙂 php – одна з найпопулярніших мов у світі вебу. Особливо серед блог сайтів. Наприклад свій блог я кручу на вордпресі, він написаний на мові php.

        Мова php – хороша, головне правильно нею користуватися. У порівнянні з Пітоном, на ній легше на початках навчитись неправильних підходів та практик. Тому краще в команді або з наставником її вчити.

        Щодо хостингу – є django хостери https://code.djangoproject.com/wiki/DjangoFriendlyWebHosts . Або можна купити собі vps (напр. digitalocean) за 5 доларів на місяць, і там собі все з нуля поставити. Ось тут хороша стаття по джанго деплойменту: http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/

    9. Нажаль ні. Для веб юзав Drupal 7 та WordPress без мов (ну хіба трішки внеті дивився що і як підкоректувати) Ось приклад сайти які я робив: http://legali.com.ua/ та http://stk-nadvirna.if.ua/ (це й ще повністю не готовий).

      Відповісти
      • в більшості випадків CMS для того і придумали, щоб зменшити кількість написання програмного коду, а лише займатися легкими змінами до дефолтної теми і функціоналу системи. Якщо хочеш більше покодити, то рекомендую розглянути веб фреймворки, а не CMS для експериментів та у якості навчання. Наприклад: python Django, Ruby on Rails, php Symphony…

    10. Починав з Assembler для мікроконтроллерів AVR, С мене тоді лякало своїми типами даних, і страшними на той час словами (функція, локальні та глобальні змінні, прототипи функції..). Знайомий показав свою програму і що в С простіше і легше за Assembler. Спробував, мені сподобалось і справді все виявилось простіше. На те що на асемблері витратив тиждень, з тодішніми моїми знаннями на С зробив за 2 дні) Зараз дивуюсь що скільки часу міг витратити щоб написати функцію для розрахунку квадратного кореня на асебмлері,замість того щоб використати стандартну С функцію )
      З того часу пройшло кілька років, зараз програмую на С для різних типів мікроконтроллерів – асемблер уже ні (хіба інколи подивитись що згенерував компілятор,а також для відладки). Кожного разу відкриваю для себе щось нове і невідоме в С, хоч книгу розробників мови прочитав декілька разів,та застосовую знання на практиці…

      Відповісти
      • ну в тебе хардкор! 🙂 з інтерпретованих мов, під веб, щось пробував?

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

      Відповідно діаграма дуже суб’єктивна, показуючи швидше за все спільноти найактивніших розробників. Очевидно OpenSource прогери – найбільш публічні 😉

      А щодо Java, то я також знаю що вона більш популярна, ніж Python.

      Відповісти
    12. А який у вас досвід? З чого саме ви починали? Що б ви порекомендували початківцям? З чим ви не згідні у даній статті? Яке наступне питання ви б хотіли, щоб я висвітлив у наступному пості серії Програміст Початківець?

      Я починав з C і радий цьому. Як кажуть: “Важко в навчанні – легко в бою”. Я вважаю що вже після вивчення таких аспектів як вказівники, розподілення пам’яті, списки, дерева тощо, ніяка мова не буде страшною (не рахуючи асемблер). Суть програміста не в тому щоб за тиждень могти щось робити, а суть в тому щоб вміти писати елегантний, оптимізований і коректний код. На мою думку початківцям в першу чергу треба не вчити саму мову, а вчитись правильно складати алгоритми, а вже потім незалежно яку мову той чи інший обрав – складати програми.
      У наступному пості перш за все треба висвітлити суть кожної з мов програмування. Для початківців python чи С++ – це якісь незрозумілі слова. Треба пояснити призначення кожної з них, навести приклади готових проектів чи програм, пояснити їхнє застосування.

      Відповісти
      • Віталій, дякую за класний коментар! Цілком підтримую думку, що не так важлива мова на якій пишеш, а вміння побудови алгоритму для розв’язання проблеми.

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

        Дякую за поради для наступних уроків! Обов’язково прийму до уваги.

    13. “embedded програмування, низькорівневе програмування (мікроконтролери, драйвера, і т.д.)” – це практично те саме). Мікроконтроллери – це мікрокомпютери з яких складаються Embedded системи. Embedded ситема складається з мікроконтроллера та різних давачів (наприклад тиску,температури, освітленості), пристроїв вводу і виводу (кнопки, клавіутури, тачпади з різними дисплеями), та інших пристроїв. Приклад Embedded системи -пристрої, медична техніка, автомобільна електроніка (бортові компютери, клімат контроль). Так от програмування цих систем (написання драйверів пристроїв, написання завершеного коду системи (firmware) – називається embedded,або низькорівневим програмуванням.

      Якщо цікаво більше,можна дізнатись в курсі за ссилкою нижче або просто подивитись відео 🙂

      https://www.edx.org/course/utaustinx/utaustinx-ut-6-01x-embedded-systems-1172

      Відповісти
      • дякую за доповнення. тепер буду знав, що це все в принципі одне і те ж саме

    Опублікувати коментар

    Ваша e-mail адреса не оприлюднюватиметься.

    Ви не робот? ;) *