От младшего разработчика к старшему
Доброй день, Хабр. Вдохновленный статьей про системных администраторов, я решил написать нечто аналогичное для разработчиков.
Но прежде чем вступать на путь взращивания из себя старшего разработчика, нужно задать себе простой вопрос: «А мне нравится программировать?».
Старший разработчик. Взято отсюда.
Конфуцию принадлежит изречение: «Выбери себе занятие по душе, и тебе не придется работать ни одного дня!». И для разработчика это верно на сто процентов. Если приносит удовольствие написание кода, если переполняет радостью от того, что работает фича, если программа идет «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. Докапывайся и разбирайсяЭто основной принцип развития. Не зная, как работает фундамент, невозможно понимать работу мало-мальски сложной системы. И, хоть все и говорят про абстракции, мы-то с вами знаем, что они текут. Поэтому в каждой проблеме нужно выяснять причину. Иначе получим культ карго. Не знаю, насколько люди осознают это, но только понимание принципа работы системы позволяет что-то делать в предсказуемые сроки. Это касается кстати не только программирования, но и вообще любой работы.
Изучай исходники того, с чем работаешь. Понятное дело, они доступны не всегда. Но если повезло иметь исходники, обращайся к ним. Если ты работаешь с Java — смотри как написаны классы библиотеки. Читать чужой код просто полезно, потому что читая — учишься, а заодно и понимаешь, что происходит когда вызывается та или иная функция.
6. Никогда не останавливайсяКаждый раз, когда получаешь какой-то кусочек знаний — например, принцип работы TreeSet — нужно почувствовать момент «Я крутой! Я знаю как это работает!». А в следующий момент усмирить гордыню и пойти дальше. Пусть получение знаний станет вдохновением для дальнейшего обучения.
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).
Читать все лучше в оригинале. Понятно, что для этого нужен английский, но все лучшие материалы по программированию все равно на нем.
И какого качества код у меня будет получаться?Единственный важный критерий у кода, кроме корректности его работы, является его читаемость. В большинстве случаев(молчим про производительность), ясный код — хороший код. Не буду припоминать про психоманьяка, который будет поддерживать код, но стремление к хорошо читаемому коду вытянет вас до высот.