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

    Extra Skills for Programmer

    @www.flickr.com/photos/ministry/6194522077/

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

    Погрупуємо усі додаткові “скіли” в кілька категорій. Отже:

    Основа – Програмування

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

    Наприклад:

    • веб програміст вчить HTML, CSS, Javascript, ну і звичайно серверну мову (напр. Python, Php, Ruby, Java)
    • програміст під десктоп вчить API його операційної системи та фреймворки, що полегшать йому розробку під його конкретну систему, будь-то Windows, Linux чи Macintosh
    • програміст мобільних додатків вивчає фреймворки для розробки під Androi, iOS чи Windows Phone
    • і так далі

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

    В більшості випадках програміст також знає як працювати хоча б з однією з Баз Даних, розбирається в Патернах Програмування, Структурах Даних і знає що таке ООП, та Юніт Тести і Continuous Integration. Хух, багато? 🙂

    Але це ще не все.

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

    Адміністрування

    Навіть на рівні початківця вам просто необхідно вміти заінсталювати та налаштувати вашу операційну систему. Ту, де ви будете самі програмувати. Отже, як мінімум, рівень досвідченого користувача у вашій операційній системі, будь-то Windows, Linux чи Macintosh – також є обов’язковою вимогою.

    Взалежності від обраного вами напрямку ваша операційна система буде або Windows (напр. якщо обрали .Net фреймворк від Microsoft), Linux (нарп. якщо працюєте з опенсорсом, напр. Python) чи Macintosh (якщо програмуєте аплікації під дану систему чи під iOS).

    У нас на фірмі більшість працює на Лінуксі (а саме Ubuntu). Сервера власні та й і клієнтські ми крутимо також на Ubuntu. Верстальщик працює за Віндовсом. Я останнім часом локальне середовище маю на Macintosh. А взагалі Python найбільше любить Linux 🙂

    Програмісту спеціалісту адміністрування потрібне також і для інших цілей:

    • встановити робочу систему на продакшин сервер
    • відтестити проблеми алпікації напряму на продакшин сервері
    • допомогти адміну із кодуванням скриптів

    Тому хороше знання хоча б однієї із операційних систем початківцю також необхідне. Цю інформацію також варта внести у своє резюме.

    Продуктивність та Тайм Менеджмент

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

    Спитай Гугла або “Загугли” – це вміння швидко знайти необхідну інформацію в інтернеті. Адже чим швидше знайдеш відповідь – тим швидше вирішиш проблему. Лише з практикою прийде вміння. Перед тим як питати старшого за порадою – заставте себе трохи “погуглити”, і аж тоді звертайтесь по допомогу. Вміння самому швидко вирішувати неочікувані проблеми свідчить про рівень програміста.

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

    • Agile – підхід, цілий клас методологій гнучкої розробки програмного забезпечення
    • Scrum – як одна із методологій гнучкої розробки
    • XP Programming – екстремальне програмування, ще одна методологія гнучкої розробки. До речі до нього входить писати тести ще до написання самого коду, а також парне програмування.

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

    На останок в секції Продуктивності маємо – швидкісне друкування. Я, наприклад, освоїв 10-пальцевий сліпий метод набору ще в універі, коли працював адміном в комп’ютерному клубі (освоював його з допомогою програми Соло на Клавіатурі якщо комусь цікаво). Дозволяє не дивитися на клавіатуру та достатньо швидко набирати текст. Думаю для програміста це не критично вміти, але, як мінімум, класно “повимахуватись” перед колегами :-))

    Fast Typing

    @loneplacebo.com

    Комунікація

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

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

    Чули про таке словосполучення як Командний Гравець? В нього входить:

    • вміння висловити власну думку
    • вміння зрозуміти іншу людину у власній команді
    • вміння допомогти та попросити допомоги
    • вміння уникати та вирішувати конфліктні ситуації з іншими учасниками в команді

    У деяких великих фірмах навіть є спеціальні тренінги, на кшталт – Conflict Resolution Training. Якщо ви геній-програміст, але не йдете на компроміси і вас не “переварює” уся ваша команда, тоді зрозуміло, що толку від вас багато не буде в проекті.

    Досить важливим також є вміння висловлювати власні думки на папері. Це і потреба писати документацію і спілкування текстом (емейли, чати, форуми). Я навіть придумав давати як завдання Написати Односторінковий Твір На Вільну Тему джунікам у себе на інтерв’ю. Таке завдання показує на скільки легко мені буде з людиною в майбутньому спілкуватись текстом, отримувати від неї якісну документацію. Та й загалом я зауважив таку тенденцію: той хто гарно викладає власну думку на папері, також гарно пише код.

    Рівень Сенсея 🙂

    Ну і на завершення оглянемо кілька вмінь та навичок, якими зазвичай володіють супер досвідчені програмери, сеньйори, сенсеї 🙂 Це вже трохи більше, ніж програмування…

    Хороший спеціаліст зазвичай по-трохи розбирається і в суміжних областях та напрямках. Тобто, при потребі, може грати роль широкопрофільного спеціаліста.  Наприклад, сеньйор веб Python програміст, при необхідності, може зробити і весь фронт-енд (html, css, javascript), і задеплоїти аплікацію на продакшин, і навіть підказати дизайнеру, що краще працюватиме на даній сторінці при даному типові користувача.

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

    Другим скілом, який часто зустрінеш серед профіків є вміння менеджити не лише свій код, але і свій час та час інших. Такий програміст зазвичай може Проестімейтити (визначити необхідний час на задачу), Розпланувати та Делегувати (передати іншим на виконання) завдання для всієї команди (звісно тим, в спеціальностях яких він розбирається). Навіть робота напряму з клієнтом, також часто на їхніх плечах!

    Mentoring

    @daveblackonline.com

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

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

    А які ще додаткові навики, на вашу думку, є корисними для програміста? Коментуйте – будемо добивати статтю кількома новими параграфами 😉

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

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