От младшего разработчика к старшему

в 7:49, , рубрики: обучение, Программирование, разработка, Учебный процесс в IT, метки: ,

Доброй день. Вдохновленный статьей про системных администраторов, я решил написать нечто аналогичное для разработчиков.

Но прежде чем вступать на путь взращивания из себя старшего разработчика, нужно задать себе простой вопрос: «А мне нравится программировать?».

image
Старший разработчик. Взято отсюда.

Конфуцию принадлежит изречение: «Выбери себе занятие по душе, и тебе не придется работать ни одного дня!». И для разработчика это верно на сто процентов. Если приносит удовольствие написание кода, если переполняет радостью от того, что работает фича, если программа идет «just as planned» и это вызывает эмоциональный подъем — да, программирование будет приносить удовольствие и деньги, а главное — построение карьеры разработчика превратится в сущее удовольствие.

Так что же нужно делать?
1. Начинай рано

Основы алгоритмов начались у меня в начальной школе. В 7м начали преподавать паскаль, в 10м — C. Естественно, вряд ли здесь есть пятиклассники, но посыл таков: как только замечен первый интерес к программированию, его стоит подкреплять знаниями. Причем, школа все равно не даст хорошего понимания: если даже есть уроки программирования, то они не дают столь основательные знания, как книги. Итак, для старшей школы и просто для знакомства с темой предлагаю классическую «Керниган, Ричи: Язык программирования C». Признаться, эту книгу я заменил книгой с тем же названием, но за авторством Подбельского и Фомина.

2. Учись сам

Серьезно. Научиться программировать можно только программируя. Читай книги и мануалы. Разбирай примеры. Пиши собственные программы. Когда-то давно я хотел посмотреть одно аниме, но русского дубляжа не было, были субтитры в str(так ведь?). Беда в том, что инет был медленный и дорогой(привет, диалап!), а найденные субтитры отставали на пяток секунд. Понятное дело, что править файлы руками было очень долго, поэтому на C + WinApi было написано диалоговое приложение, которое принимало файл, размер и знак смещения, и формировало мне исправленный файлик сабов. Написано было естественно криво и бажно, но

а) Я решил задачу
б) Разобрался с основами WinApi
в) Научился дебагу и отладочному выводу

3. Поступи в универ по специальности

Даже если само программирование давать будут мало, в учебе есть несколько плюсов:

1. Математическая основа. Математика все равно пригодится. Будете ли вы писать простейший графический редактор под Android или игры под linux, будете ли реализовывать алгоритм шифрования — математика все равно нужна.

2. Будущие коллеги. Эти ребята — твои одногруппники и сокурсники — они тоже программисты в будущем! Ты можешь обменяться с ними опытом, а через 5 лет получить возможность устроиться в хорошую фирму по рекомендации. Да и всегда приятно обсудить профессиональные проблемы.

3. Связи университета. У пристойного университета всегда есть сотрудничество с IT-компаниями. Это могут быть разработчики железа, программного обеспечения или и того, и другого. Из этих компаний будут приходить специалисты и читать лекции — да, по субботам с утра. Но это возможность обучаться у людей, которые на волне в своей отрасли.

4. Начинай работу рано

Пытайся устроиться на стажировки. Много фирм-разработчиков особенно сейчас ориентируют свой кадровый поиск на студентов 2-3-4 курсов. Это связано в первую очередь с недостатком квалифицированных кадров, а потому компании решают выращивать такие кадры самостоятельно. После успешной стажировки обычно обещают рабочее место на 20-30 часов в недели и не самые плохие деньги.

4. Разбирайся в основах

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

Изучи структуры данных и алгоритмы. Они — основа всего. Решая любую прикладную задачу, сначала выбирают структуры данных и описывающие их объекты, и только потом их используют. Структуры данных в основе вообще всего.

5. Докапывайся и разбирайся

image

Это основной принцип развития. Не зная, как работает фундамент, невозможно понимать работу мало-мальски сложной системы. И, хоть все и говорят про абстракции, мы-то с вами знаем, что они текут. Поэтому в каждой проблеме нужно выяснять причину. Иначе получим культ карго. Не знаю, насколько люди осознают это, но только понимание принципа работы системы позволяет что-то делать в предсказуемые сроки. Это касается кстати не только программирования, но и вообще любой работы.

Изучай исходники того, с чем работаешь. Понятное дело, они доступны не всегда. Но если повезло иметь исходники, обращайся к ним. Если ты работаешь с Java — смотри как написаны классы библиотеки. Мало того, что читать чужой код просто полезно, потому что читая — учишься, но и дает понимание того, что происходит когда вызывается та или иная функция.

6. Никогда не останавливайся

Каждый раз, когда получаешь какой-то кусочек знаний — например, принцип работы TreeSet — нужно почувствовать момент «Я крутой! Я знаю как это работает!». А в следующий момент усмирить гордыню и пойти дальше. Пусть получение знаний станут вдохновением для дальнейшего обучения.

image

7. Пользуйся лучшими инструментами

Писать в блокноте хорошо до тех пор, пока не наталкиваешься на инструмент с подсветкой синтаксиса. Такой инструмент хорош до тех пор, пока не знаешь, что такое автодополнение. Мысль понятна.

8. Общайся со старшими

Они опытней тебя и они поделятся опытом. Всегда спрашивай как лучше. Когда терзаешься между двух сомнительных вариантов, есть вероятность, что ты просто не видишь хороший. Сходи к своему техническому руководителю, он подскажет.

9. Помогай другим

Не смотря на то, что предыдущий принцип хорош, есть еще лучше: помогая другим, учишься сам. Зарегистрируйся на stackoverflow.com и отвечай. Мало того, что это хороший способ развития, профиль на SO — это строчка в резюме и путь к careers.stackexchange.com.

10. Ходи на собеседования

Внезапно, не для того, чтобы сменить работу. Зная, что спрашивают технические специалисты, можно понять, в каких областях знаний пробел. После можно придти домой и этот пробел начать восполнять.

Понятно как стать программистом. А как стать старшим?

В моем понимании, старший программист — это человек, который может сделать весь проект сам, как минимум. Это значит, что он понимает принципы работы платформы. Он знает жизненные циклы приложения(не только, запустилось — поработало — выключилось, но и написано-протестировано, зарелизено, проапдейчено, удалено). Он может продумать архитектуру. Он может выстроить экосистему разработки. Старший программист — не просто разработчик. В его обязанности входит не только разработка, но и обеспечение процесса этой разработки. Это значит, что он хорошо знает свои инструменты. Он знает, как обеспечить качество продукта(тесты, инспекции), он знает, что собирать бинарник в один клик — важно.
Он может поставить задачи коллегам и подчиненным.

Как этого всего достичь?

Для меня ответ только один — собственные проекты. Открытые или нет, на заказ или на энтузиазме, не важно. Если вы устроились работать программистом, до «project setup» вас вряд ли допустят. А старшие — люди занятые, им не всегда удобно рассказывать, почему так или иначе выполнены тысячи мелочей. Понимание мелочей придет тогда, когда произойдет попытка с нуля поднять проект самостоятельно: настроить репозиторий с исходным кодом, создать структуру проекта, наладить инфраструктуру тестов, поднять continious integration, настроить на проект баг-трекер.

Что читать?

Я сам в основном java-программист. И потому книг по c++ или python советовать не буду. Вот список того, что я читал сам:

0. Язык программирования C(Подбельский, Фомин).
1. Java Certification for Java 6 2nd edition
2. Effective Java (Joshua Bloch)
3. Code Complete (Steve Macconnell).
4. Concurrency in Practise(Dug Lea & others).

Читать все лучше в оригинале. Понятно, что для этого нужен английский, но все лучшие материалы по программированию все равно на нем.

И какого качества код у меня будет получаться?

Единственный важный критерий у кода, кроме корректности его работы, является его читаемость. В большинстве случаев(молчим про производительность), ясный код — хороший код. Не буду припоминать про психоманьяка, который будет поддерживать код, но стремление к хорошо читаемому коду вытянет вас до высот.

Автор: dzigoro

* - обязательные к заполнению поля