Це вже 4-ий пост у серії Програміст Початківець. У попередній статті ми з вами спробували розібратися та отримати кілька вказівок щодо того, яку технологію, напрямок та мову обрати для початку, щоб збільшити шанси на успіх.
В цій же ж статті я хочу розглянути дуже важливу проблему для початківця – як отримати першу практику програмування. Адже усі ми добре знаємо, що людину яка просто вчилася програмувати неохоче розглядають навіть на посаду джуніора. Значно краще, коли кандидат вже має хоча б приклади коду, додатки, або навіть цілі проекти написані власноруч. Підкріплюючи своє резюме власними досягненнями (кодом), та ще й хорошим кодом, ви в стократ підвищуєте свої шанси на успіх. Але що є ще важливішим в даному випадку – це практика, адже це завжди досвід, навички та “набивка руки”, через які спеціаліст будь-якого рівня переходить на ще вищий!
Мотивуємось!
Отже, прочитали масу книг, туторіалів, переглянули тону відео та аудіо матеріалів з демонстраціями створення програм, але ще й досі ні раз нічого не створили самі. Особливо чогось такого, щоб стало комусь, чи навіть самому собі, у пригоді.
Рекомендую не чекати допоки дочитаєте всі книги, допоки прийде натхнення, муза чи будь-яке інше неземне створіння та почне шептати нам на вушко чарівні коди ))). А заставити себе засукати рукава і починати писати свої перші, нехай навіть і криві, рядочки коду. Виконувати вправи та експериментувати із прикладами з навчальних матеріалів вже з перших прочитаних рядочків книги чи уроку. А ще краще – ускладнювати ці приклади власними ідеями та додатковими задачами, які ж самому і вирішувати. І якомога більше – писати, писати і ще раз писати код… Не бійтеся робити помилки, на початку ваш код і так буде жахливим 😉 Тому чим швидше ви почнете, тим швидше ваша суцільна помилка перетворюватиметься у все кращий та більш продуманий код під назвою ПРОГРАМА.
Реальні Задачі
Ок. Спробували. Трохи пописали власних експериментальних програм, прикладів з книжок та інших навчальних курсів. Але ж звичайно це ще не реальна задача. То ж що далі?
А далі пробуємо шукати, або на крайній випадок придумувати собі реальні задачі. Давайте пройдемося по кількох дієвих варіантах, які можуть дати нам реальні проекти на старті програмістської кар’єри:
Фріланс Сайти
Почав одразу мабуть з найважчого варіанту. Так, шукати самому першу роботу, платну, та ще й в незнайомої людини, початківцю надзвичайно важко. Але, якщо ви вперті, не боїтеся робити помилки, критики і 10-20 перших відмов не зачіпають вашої гордості – тоді цей варіант може бути саме для вас 🙂
Якщо вдалося отримати реальний платний проект, виконати, та ще й успішно (навіть якщо він і невеликий), тоді усі наступні варіанти будуть як то кажуть, як два пальці… і вам вже нічого не страшно! Ви отримаєте масу досвіду, та ще й такого, який без вагань можна записувати у ваше резюме, і воно матиме неабияку цінність при розгляді вашої кандидатури на місце праці!
Що ж для цього треба?
- знання російської або англійської мови. Останнія дає доступ до більшої кількості фрілансових сайтів
- зареєструватися на одному або краще одразу кількох сайтах з пошуку IT проектів
* російськомовні портали: freelansim.ru, freelancer.ru, freelance.com.ua, freelancehunt.com, www.fl.ru, і ще багато інших. Який краще – чесно не знаю. Ще коли фрілансив – більше користувався англомовними порталами. Якщо маєте досвід – пишіть в коментарях, буде усім цікаво і корисно дізнатися!
* англомовні сайти: elance.com, odesk.com, freelancer.com, і ще багато інших. Мій улюблений був odesk.com. - заповнюєте там свій профіль, вміння, навички, бажаний рівень оплати і тд. Важливо – спеціалізацію, щоб замовники могли вас знайти по ваших вміннях.
- шукаєте невеликі проекти, чи навіть маленькі завдання, які потрапляють під ваші вміння і знання. В кожному завданні буде велика доля нового, і в будь-якому випадку прийдеться щось по ходу діла освоїти – це нормально.
- оберіть 10-20 таких завдань, що вам припали до душі і подайте свою пропозицію на дані завдання. При цьому пробуйте детально описати ваше рішення, покажіть, що ви володієте предметом, задайте кілька питань, та надайте приблизні оцінки по часу та ціні на дане завдання. По використанню фріланс сайтів, та те як правильно подавати заявку на проект можна підготувати окремий пост. Детальніше тут затримуватися не будемо.
- і чекаєте. Є ряд проектів і замовників, які спеціально шукають виконавців без досвіду і попередньої історії на фріланс порталі, щоб здешевити виконання завдання. Ви як початківець із свого боку, для набивки руки і виграшу перших проектів – можете надати вигідніші умови потенційному клієнтові, щоб збільшити шанси виграшу завдання.
- як тільки вас обрали – надайте детальну інфу щодо виконання завдання і ваших планів, часу та ціни. Обговоріть усі деталі перед тим як починати. Краще відмовитися від “мутного” завдання чи проекту потративши на нього 2 години, ніж після 2 тижнів роботи.
- доведіть завдання до кінця, вкладіть максимум вмінь, щоб клієнт був у захваті. Тоді і отримаєте омріяний перший реальний досвід і високий рейтинг від замовника!
Одна з 10-20-ти заявок та й вистрелить. Хто шукає, той знаходить.
Хочу ще раз наголосити. Даний варіант лише для супер-вмотивованих, дуже впертих та з твердими горішками ;-)) Конкуренція зазвичай висока, і якщо ви занадто близько до серця приймаєте відмову (особливо якщо провели годину готуючи заявку на проект), тоді краще з фрілансерства не починати. Інакше – буде суцільний демотиватор.
Я наприклад, навряд чи зміг би з цього почати свою кар’єру програміста. Фрілансив вже коли мав хороший досвід в програмуванні.
Зробити реальний проект друзям чи знайомим
З точки зору технічної – це по-суті майже один в один як фріланс. Ви вирішуєте реальну потребу реальних людей. Тобто кінцевий результат – програмний продукт, який можна сміло заносити у власне портфоліо.
Але тут є одна велика різниця – клієнтом, замовником у даному випадку є ваш тато чи мама, друзі, знайомі. Ця людина уже вас знає і вам довіряє, тому отримати такий проект є значно простіше. Єдине, що я дуже раджу у даному варіанті – обов’язково домовтеся про ПЛАТНЕ виконання даного проекту. Не для заробітку, а для певних зобов’язань як на вашого друга, так і на вас як виконавця. Це допоможе вам успішно завершити проект, та ще й на вищому рівні, адже ваш товариш у даному випадку вже захоче “щось трошки краще”, ніж просто те, що получиться у вас з першого разу 😉
Це може бути веб-сайт для вашого сусіда, який займається ремонтом взуття. Це може бути простенька програма ведення обліку магазину для вашого батька. Це може бути простенька флеш гра (наприклад шашки) для вашого товариша, якому треба написати дипломну 😉 Це може бути автоматизована програма розсилки емейлів, чи смс повідомлень. Це може бути що-завгодно.
Отже, план дій:
- визначаємо список речей, які ми вміємо робити нехай навіть поки лише з книжок та простеньких завдань (веб-сайт, десктопна програма, простенька гра, мобільна аплікація, і т.д)
- розпитуємо друзів, знайомих, родину, членів сім’ї про їхні проблеми. Шукаємо, щось таке, що можна вирішити з допомогою програмування (постіть в соц. мережах, або навіть напряму контактуйте людей, що можуть бути зацікавлені у ваших навичках)
- знаходимо людину, для якої вирішуємо реальну проблему власними знаннями у програмуванні
- домовляємося про деталі, час, ціну
- успішно виконуємо і маємо запис у резюме 🙂
Якщо ви зовсім невпевненні у власних силах, не насмілюєтеся взяти хоча б чисто символічну суму за власний час, вміння та знання, тоді робіть безкоштовно. Це все одно краще, ніж нічого. Але в такому випадку буде більша ймовірність, що при першій трудності при виконанні завдання – можете здатись і відмовитися від проекту.
Якихось особливих рекомендацій тут немає. Зазвичай, коли ви працюєте із знайомою вам людиною – невеликі затримки, чи перші помилки в програмі – на все це ви матимете час, і лояльність замовника.
Це один із найпопулярніших і найдієвіших варіантів для початківця програміста набути практику і перший реальний проект у власне резюме. В мене багато знайомих програмістів саме так почали свою кар’єру, просто створивши кілька веб-сайтів друзям.
ОпенСорс, Cпринти
OpenSource – це програмне забезпечення з відкритим вихідним кодом (сорсами). Наприклад, операційна система Windows не є OpenSource, адже вона є платною і до її внутрішнього коду ніхто, окрім програмістів компанії Microsoft, немає доступу. А от операційна система Ubuntu (базована на Linux) – є однією з найпопулярніших у світі серед OpenSource. ЇЇ код можна собі стягнути, власноруч змінити його і прямо з сорсів заінсталювати дану операційну систему вже з власними правками.
У світі OpenSource багато волонтерів та ентузіастів світу програмування. Активні “опенсорщики” – це люди ідейні, які безплатно вкладають свій час у код, яким діляться з іншими, з цілими спільнотами. Навколо великих і популярних OpenSource проектів збираються величезні юрби програмістів, вони організовують регулярні події, конференції, зустрічі, спринти, щоб ділитися досвідом та щоб знайомитися в “offline” світі 🙂
Досвідчені програмісти створюють власні програмні продукти, бібліотеки та діляться ними з іншими. Такі проекти завжди потребують свіжої крові і завжди радо вітають новачків. От тут і є гарна можливість для початківців набратися досвіду та засвітитися. Крім того, запис Core Contributor (дописувач коду) в якусь популярну опенсорсну програму, бібліотеку чи фреймворк – неабияк позитивно впливає на тих, хто буде приймати у вас інтерв’ю. Адже бажання програміста з власної ініціативи безкоштовно писати код означає, що він дійсно кайфує від своєї праці, а не просто косить бабло 😉
Отже, який план дій, якщо ви вирішили допомогти OpenSource проекту і потім внести його у графу власного резюме:
- шукаємо проект:
* він має підходити вам під ваші знання звісно
* він має бути вам самим корисним та цікавим (напр. якщо хочете програмувати під веб, тоді логічно шукаєте популярні веб-фреймворки, CMS системи і інші бібліотеки що мають відношення до вебу). Я наприклад дописую у проекти, які використовую під час своєї роботи, обслуговуючи клієнтів.
* рекомендую пройтись по тому, що ви вже знаєте, якими програмами користувалися, і дізнатися чи часом вони не opensource, і чи можете ви там чимось допомогти
* інакше – заходимо на github.com, або bitbucket.org, реєструємось, та шукаємо щось цікавеньке і підходяще для себе. Так, треба буде підівчитися як працювати з репозиторіями коду (git, hg). - варта завжди починати з найпростішого – фіксити баги, тобто шукємо баг трекер (список поточних помилок та проблем проекту), і починаємо по них проходитися і пробувати це фіксити
- активно починаємо комунікувати із членами спільноти даного обраного програмного забезпечення. Обидві з наведених вище систем збереження сорс коду надають багаті інструменти комунікації всередині спільноти, обговорення проблем, конкретних багів, та менеджменту коду.
- не бійтеся питати і “діставати” людей в спільноті. Крім того, що отримаєте підказки що як, чому і як дописувати патчі (правки коду), ще й станете відомі серед спільноти
- після того як освоїлися з дрібними багами, можете переходити до “жирніших” проблем у обраному вами проекті. Пропонувати новий функціонал, братися за глобальні існуючі проблеми обраної системи, бібліотеки чи фреймворку.
Я наприклад, являюсь котріб’ютором Plone CMS, дописую патчі в Python Django Web-Framework, пробував дописувати патчі до мови Python, а також велику частину бібліотек та додатків до вище згаданих систем публікую як OpenSource у себе на github.com/vipod.
І ще одне, постійно публікуючи власні, а також дописуючи код до вже існуючих бібліотек, систем, фреймворків, програмних продуктів, ви можете просто скинути лінк на ваш публічний код вашому потенційному працедавцю, і все! Досить часто це визначальний і єдиний критерій, який без подальшого технічного інтерв’ю може все для вас порішати 😉 Тому дуже рекомендую активно брати участь в публічних OpenSource проектах, а також ділитися власними наробками.
Підсобник другу, знайомому, ментору
Про цей варіант я вже частково згадував у одному із попередніх постів. По суті ви шукаєте людину, яка вже краще від вас вміє програмувати і має хороший практичний досвід реальних проектів. Проситесь у помічники і погоджуєтесь за воду і сухарі допомагати йому в його ж роботі.
Натомість ви отримуєте від нього: поради, підказки, досвід і що найголовніше – копняк під зад. Навіть, якщо людина займається не зовсім тим, чим ви би хотіли, або про що ви не дуже знаєте (читали книги по іншому :), рекомендую погоджуватися. Після першої практики освоїти наступну технологію буде значно легше, навіть самостійно. А перша практика під наставництвом більш досвідченого програміста – неоціненна.
Список дій лише коротенько нагадаю, адже в попередньому пості є більш детальна інформація:
- найважче – знайти ту людину, де і як – читайте в цьому пості
- далі погоджуєтеся і слідуєте вказівкам вашого новоспеченого ментора
- прикладаєте максимум зусиль, щоб якомога краще виконувати відведене вам завдання
- намагаєтеся якомога більше отримати і перейняти знань та досвіду від вашого наставника
- успішно закінчуєте проект
Варта також поцікавитись у вашого ментора чи можете ви згадати ваш спільний з ним проект у власному резюме для інтер’ю.
Власний Проект, Стартап, Продукт, Ідея, Хакатони, Коворкінг Спейси
Згідно з невеличким опитуванням, яке я проводив отут, даний варіант є одним із найпопулярніших серед тих, хто вже здобув цю першу життєвонеобхідну практику програмування.
Цей варіант також вимагатиме від вас неабиякої самомотивації. Тому одразу рекомендую починати не самому, а із друзями та знайомими програмістами. Бажано звичайно, щоб компанія зібралася більш досвідчених, ніж ви. Тоді користі буде значно більше саме для вас 😉 Ви ж розумієте, що у випадку, коли працюєте над власним проектом, з’являються кілька додаткових питань:
- треба самому придумати над чим працювати
- треба самого себе заставляти, мотивувати та доводити справу до кінця
- знаходити користувача власного програмного продукту
- ну і звісно – вчитися програмувати та здобувати практичний досвід
Тому робити це все в команді – значно краще і більше шансів на успішне завершення.
Список дій для варіанту розробки власної ідеї:
- придумуємо над чим працювати, або шукаємо людей з ідеями
- збираємо команду. Серед друзів та знайомих, відвідуємо місцеві IT події, коворкінг простори та хакатони, знайомимося з новими людьми, однодумцями.
- погоджуємося що, як будемо робити
- програмуємо і успішно запускаємо
- робимо запис в резюме про розроблений проект та власну роль у ньому
Десь приблизно так, якщо без детальних детальнюсіньких деталей 😉
Спортивне Програмування
Ну і як останній варіант не можу не згадати Спортивне Програмування. Ті, хто любить азарт, дух змагання, шкількі та університетські олімпіади, вам думаю варіант з участю в програмістських змаганнях також припаде до душі.
Я, чесно кажучи, трохи скептично відношуся до цьго варіанту, як повноцінного методу набору першої практики з програмування. Адже ті задачі змагальні можуть не мати відношення до тих реальних задач, з якими прийдеться стикатися на роботі. Навіть у себе на інтерв’ю на посади джуніорів я стараюся не давати якихось теоретичних, “заумних” головоломок, а просто даю конкретне практичне завдання, де треба засувакати рукава і показати кінцевий результат. Пракитчне завдання має перевірити саме ті вміння та досвід кандидати, які йому безпосередньо пригодяться на місці роботи.
Навів цей варіант швидше для повноти списку. Якщо все ж таки є бажання позмагатися з іншими програмістами, то існує велика кількість сайтів, де можна прийняти участь у різноманітних форматах змагань не виходячи з дому. Наприклад:
- www.topcoder.com
- projecteuler.net
- codeforces.ru
- і багато багато інших.
Цей метод дуже класно розвиває вміння розв’язувати проблеми. А вже чи ці проблеми видумані чи реальні – інше питання.
Друзі, а як ви думаєте, на скільки дієвий метод і чи взагалі його можна віднести до методів здобуття практики програмування, Спортивне Програмування?
І на завершення…
Як тільки ви почнете писати власний код, у вас досить часто виникатимуть ситуації, які можна буде вирішити не одним, а кількома способами. В таких випадках вам, як початківцю, часто доведеться майже навмання вирішувати який же ж спосіб обрати. Щоб на практиці зрозуміти, освоїти і відпрацювати кращі практики, правила та неофіційні домовленості між програмістами стосовно вирішення тої чи іншої задачі, в нагоді стає надзвичайно потужний інструмент під назвою Читання Чужого Коду.
Особливо читання чужого коду стає в нагоді, коли програмуєте під існуючу платформу, бібліотеку чи фреймворк, де вже існують певні домовленості в написанні коду та розв’язанні певних проблем, чи навіть стосовно стилю та формату того ж коду. В такому випадку, читаючи код написаний іншими програмістами, дозволить вам напряму навчатися з коду від інших.
Отже, що залишилося?
- обираємо один з вище описаних варіантів
- і діємо згідно списку дій у тому варіанті 😉 Все доволі просто.
Якщо у вас уже є практика програмування та участі в реальному проекті, прошу ділитися в коментарях. Думаю користь читачам початківцям буде неоціненна!
А тих, хто лише починає – прошу також коментувати з результатами застосування інформації в даному пості. Цікаво, що ж для вас краще спрацює…
Хочете першими дізнаватися про наступні статті у нашій серії “Програміст Початківець”? Тоді підписуйтесь на розсилку мого блогу:
За русский язык и русский е-мейл тут не сильно бьют ?
Спасибо за хорошую статью. Про фриланс всеми руками и ногами за.
Маленький совет новичку – не гоняться за баблом. Не бояться работать за еду какое то время. В идеале найти почасовую плату, например, на freelancer.com это от 2$/h с условием, что вы возьмете меньше за час (пусть это будет даже в 5 раз меньше чем готов платить заказчик за проект), но зато вы больше посидите над кодом и гуглом, в итоге если договоритесь, то и вы и заказчик останетесь в плюсе.
Погоджуюсь із коментарем. Сам колись так починав.
Cпортивне програмування породжує програмістів, тобто тих, хто вміє вирішувати алгоритмічні задачі за допомогою мов програмування ( алгоритми+бази даних =програми), а Ви тут описуєте как стати розробником-джуніором.
Розробник і програміст то є різні речі:) Гуанокодер по розробці сайтів може бути цілком успішним розробником ( в плані заробітку),головне щоб його проекти працювали адекватно задачі,та мали хороший дизайн. Пошук непримхливого та грошовитого клієнта теж важливий.
Але такого успішного розробника неможливо назвати хорошим чи успішним програмістом, тому що хороше програмування передбачає максимальну оптимізацію щодо використання алгоритмів та щодо застосування коду.
А хороший програміст що лупає якусь маловідому скалу не дуже потрібного опенсорсу, або на якійсь мало застосовуваній мові, може бути неуспішним( некондиційним) розробником, свого рода невдахою – в плані успішності життя та набування грошей.
Отже, поняття розробника та програміста це різні поняття, ці множини лише перетинаються. Спільним є те,що розробники застосовують “наукові праці” програмістів, як-от фреймворки чи мови програмування. А в якості зустрічного кроку 🙂 наймають їх на роботу в свої розкручені проекти.
Спільна множина має називатися “кодери” – люди які застосовують код для своїх потреб.
Код програмістам він цікавий як естетична чи життєва цінність,
свого роду ідеологія життя, а девелоперам – як засіб досягти успіху, карь’єри, самовираження, грошей…як лайфхак. Перше що приходить в голову – раніше в лісники йшли люди що любили природу,вони садили ліси, а сучасним лісникам ліс цікавий як спосіб заробітку… нехай шляхом вирубування дерев.
Говорячи конкретніше, спортивне програмування само по собі створює ілюзію, наприклад таку: “я піду у політех, мене там зроблять програмістом, потім зразу на фірму”.
Між тим в школах треба вчити щось більш конкретне та просте, ніж алгоритмічні головоломки.
openSource – гарна ідея. Треба буде спробувати.
Що стосується мотивації, то на мене сильно вплинула книга “Steve Jobs” by Walter Isaacson