Отже, ви вирішили стати програмістом . Записки програміста

04.08.2015

Отже, ви вирішили стати програмістом

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

Слід звернути увагу на кілька моментів. По-перше, в листі йшлося конкретно про веб-розробки, і відповідав я, відповідно, на нього. Однак тут я постараюся відповісти на більш загальне питання, тобто, як стати яким-небудь програмістом взагалі. По-друге, я не є великим гуру програмування або кимось на зразок нього. Але, враховуючи, що я в деякому сенсі займаюся програмуванням якийсь час, думаю, я можу дати непогані напуття в питанні «з чого почати». Потрібно також розуміти, що тут немає єдиного незаперечно правильної відповіді.

Існує думка, що програмування — це свого роду мистецтво. Мовляв, програмісти подібні художникам, скульпторам і іншого роду творчим особистостям. Останнім часом я не схильний так вважати. Програмування — це в першу чергу рішення завдань. і лише потім все інше. Відповідно, щоб зрозуміти, яким інструментарієм (мовами програмування. ОС, СУБД і так далі) вам потрібно володіти, потрібно визначитися з двома речами.

По-перше, що вам цікаво (іншими словами, які завдання ви хотіли б вирішувати )? Комп’ютерні ігри, сайти, мобільні програми, антивіруси, якісь наукові вишукування або щось ще? Ми присвячуємо роботі близько третини свого життя (пам’ятаємо, що ще приблизно третина йде на сон), у зв’язку з чим хотілося б, щоб ця третина була, ну я не знаю, не нудною. По-друге, яку завдання ви хочете вирішити конкретно для себе. зайнявшись програмуванням? Ви хочете влаштуватися в одну з відомих ІТ-компаній, заробляти якомога більше грошей, переїхати в інше місто, іншу країну, або, може бути, працювати там, де співробітники мають вільний графік і не носять піджаків?

Сформулюйте питання правильно, в стилі «я хочу працювати в компанії Х, бо я чув, що там дуже круто, а ще там працює більшість моїх друзів», і ви отримаєте половину відповіді. Скажімо, при такій постановці питання, ви могли б подивитися вакансії компанії Х, і, за вимогами, що пред’являються до кандидатів, зрозуміти, які навички вам знадобляться. Або, ви могли б спробувати влаштуватися в цю або подібну компанію стажистом за смішні гроші і всьому навчитися на місці. Зараз це звичайна практика. Через брак фахівців у галузі багато компаній охоче беруть на роботу студентів на півставки. Часто на цій же роботі можна написати дипломний проект.

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

Так от, я схильний вважати, що від початкового вибору ніші буде істотно залежатиме вся ваша подальша кар’єра. Сувора дійсність така, що ви не можете бути одночасно супер крутим розробником драйверів для Windows, великим розробником користувацьких інтерфейсів для мобільних пристроїв і визнаним фахівцем в області штучного інтелекту. І якщо змінити вид діяльності в рамках однієї ніші ще якось можна, скажімо, перевчитися з веб-програміста на Python на мобільного Java-розробника, то стрибати між нішами, швидше за все, не вдасться. Проблема не стільки в тому, що Python-програміст не в змозі навчитися писати драйвери, а в тому, що ніхто не довірить йому цю роботу без наявності відповідного досвіду.

У зв’язку з цим, уважно ставтеся до вибору ніші. «Низькорівнева» ніша приваблива, крім іншого. тим, що в ній абсолютно очевидний вибір мови програмування, а також тим, що вона меншою мірою схильна до впливу моди (нові фреймворки, мови програмування і тп). У свою чергу «високорівнева» ніша хороша, знову ж таки, крім іншого. тим, що у вас (майже?) не буде боліти голова про помилки на зразок переповнення буфера або витоку пам’яті. Велику частину часу вас буде мало турбувати, скільки тактів процесора або мегабайт пам’яті споживає ваш додаток. Перед вами величезний вибір парадигм програмування, СУБД і інших засобів.

Однак вибір «високорівневої» ніші не означає, що ви можете нічого не знати про асемблері, Сі, C++, пристрої операційних систем і так далі. І навпаки. Хороший Python-програміст знає, як знайти вузьке місце у своїй програмі і при необхідності переписати її на Сі, а крутий сишник знає, як заощадити час, згенерувавши шматок шаблонного коду скриптом на Python, після чого протестувати його ще одним скриптом на Python.

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

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

Про що повинні бути ці книги? Ну, в першу чергу, непогано б читати щось, пов’язане зі специфікою вашої роботи. Але не тільки. Читайте книги про алгоритми, операційні системи, СУБД, системи контролю версій. просто книги про розробку (тут згадуються, наприклад, Спольски, Макконнелл, Брукс, Фаулер…). Вони знадобляться вам незалежно від вашої роботи і вибраної ніші. Також вивчайте нові мови програмування. Як я вже колись писав, це рідко виявляється марною тратою часу .

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

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

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

В двох словах, моє бачення приблизно таке. Якщо у вас є питання або доповнення, я буду щиро радий ознайомитися з ними у коментарях.

Короткий опис статті: як стати програмістом з нуля Нещодавно мені прийшов цікавий лист. Автор (що характерно, дівчина) цікавився, що потрібно робити, щоб стати програмістом. З чого почати, яка мова

Джерело: Отже, ви вирішили стати програмістом | Записки програміста

Також ви можете прочитати