Превращение в высококлассного специалиста требует труда, терпения и времени не только самого юниора, но и компании — стартовой точки его карьерного пути. Пользу от новичка мы уже описывали в статье «Сколько стоит труд стажера?». Чтобы стать ценным для работодателя, следует прислушиваться к советам опытных коллег, добившихся успеха. Соискатели, мотайте на ус!
— Публикуя вакансию, мы получаем множество откликов. И только один кандидат из двадцати пяти способен выполнить тестовое задание. То есть далеко не каждый, кто хочет быть программистом, в итоге становится профессионалом. Как думаешь, есть ли предрасположенность к работе в этой области?
Безусловно, быть хорошим разработчиком, впрочем, как и хорошим поваром или слесарем, дано не каждому. Если говорить о специфичных для кодера чертах характера, то необходимы следующие.
01 | Усидчивость, терпение и способность выполнить задачу, даже если она не решается с наскоку. | |||
02 | Системный подход и инженерный склад ума. Я подразумеваю умение человека «воспарить» над проблемой, увидеть ее в целом, а затем решать тактические задачи. Должно быть общее видение, а не как у клопа на обоях, который видит только перед собой. | |||
03 | Математическое мышление и четкость формулировок. Зачастую юниоры не умеют точно выражать мысли словами. |
— Умение четко формулировать нужно для общения или влияет на качество кода?
Грамотный специалист должен уметь общаться с другими участниками процесса. Типичный недостаток, с которыми я сталкивался: в команде нет единой терминологии, коллегам сложно понять друг друга.
На задачу надо смотреть сквозь призму потребностей заказчика, иначе результат может не удовлетворить последнего. Если задание сформулировано неточно, необходимо задать вопросы и получить дополнительную информацию.
Если человек хочет стать не просто разработчиком, а лидом, коммуникативные способности очень важны. Но не обладая базовыми навыками решения алгоритмических задач, далеко не продвинешься.
— Получается, у профессионализма две составляющие: личные качества и технические знания. Что бы ты посоветовал для развития тех и других?
Будем говорить только о людях с задатками. Человек может научиться исключительно у кого-то, невозможно получить знания только из книжки.
— Речь идет о получении опыта под руководством?
Да. В любом деле нужен учитель, у которого можно перенять знания. Причем важно принятие обучения и правильный настрой: «мне надо многое узнать, я хочу достичь вершин в профессии, но сейчас я в начале пути», а не «я и так все знаю».
— То есть понять свой уровень и иметь некое смирение?
Да. Смирение и понимание, что пока я не опытен, должен делать то, что мне говорят, выполнять указания уважаемого мной человека, даже если я считаю их не правильными, не логичными. Соответственно, я должен частично принимать на веру как оформлять код, как общаться с заказчиком. Если ты готов принимать знания от старших коллег, тогда развитие будет.
Важно умение спрашивать. Многие зацикливаются на проблеме, тратят неимоверное количество времени безрезультатно, не спросив старшего. С другой стороны, задавать вопросы лучше в подходящий момент, а не постоянно отвлекая коллег. Но есть молчуны, которые сидят неделю, ничего не спрашивают, в итоге изобретают велосипед.
— Чтобы задать правильный вопрос, тоже требуется определенный опыт?
Да, надо понимать, что задача, которую ты решаешь, — типичная. Именно поэтому юниорам необходим надзор.
Резюмируем про личные качества. Нужно войти в положение ученика, который принимает знания, задает вопросы, идет по стопам, перенимает опыт. Когда, допустим, тебе передают проект, знания можно подчерпнуть, глядя на написанный до тебя код: как он оформлен, какие подходы применялись, и делать по аналогии. Некоторые начинают писать по-своему, выдумывая методы, не глядя по сторонам, а правильнее смотреть, как делает профессионал.
— Можно ли развить технические навыки, посещая курсы, получая сертификаты?
Я думаю, это полезно. Но важнее, на мой взгляд, разработка «для себя». У человека должно быть желание кодировать. В школе, в ВУЗе следует решать реальные задачи на своем уровне, пробовать разные технологии на практике, выбрать свою область интереса.
— Насколько вузовское образование дает техническую базу?
Могу сказать только о личном опыте. Математический факультет дает хорошую базу, которая приводит в порядок ум имеющим склонность к точным наукам.
Но если человек не будет самостоятельно изучать, пробовать, то развиваться на основе университетской базы невозможно. ВУЗ дает базовые алгоритмические основы, но, даже сдав успешно все экзамены, не станешь достойным специалистом.
Чтобы подготовиться к трудоустройству после выпуска, нужно во время учебы писать код, интересоваться, экспериментировать. Иначе после ВУЗа подготовка будет лишь теоретическая. Технологии развиваются быстро, система образования не успевает адаптироваться, применять новые методики, вводить новые предметы. То, что было трендом 5 лет назад, сейчас не используется так широко, а средства разработки 10-летней давности уже вовсе не востребованы.
— Но университет учит учиться.
Безусловно. Соответственно, в студенчестве следует учиться и параллельно кодировать.
— Есть люди, которые хотят программировать, но им не хватает инженерного склада ума, врожденной составляющей. Уйти ли таким людям в смежную область (менеджер проектов, тестировщик) или им лучше сконцентрироваться на узкой специализации: не получается делать сложные системы — овладей в совершенстве простыми. Что привлекает человека в программировании?
Каждому нравится что-то свое.
— А что тебя привлекло?
Я с детства увлекался электротехникой, паянием, схемами, правда, в основном, в теории.
— Такое возможно?
Да. Я изучал книги серии «Своими руками». Например, «Радиоприемник и принципиальная схема приемника»: описывается предназначение каждого блока, какие детали требуются, как собрать. Но до практики дело не доходило: я сталкивался с операциями с грубыми материальными элементами — припои, детали разные. И появлялись несовершенства: чуть не так припаяешь, не так залудишь контакт, он будет плохо держаться, рассыпаться. Очень не идеально получалось при кустарном производстве. Честно говоря, ничего серьезного не спаял. А теория была интересна, в теории все классно. К примеру, «Юный техник для умелых рук» содержал схему микро ЭВМ. У меня не получилось бы собрать ее, но я изучил, как функционируют технологические элементы.
В школе я обнаружил в программировании то, чего мне не хватало в электротехнике: операции с тонкоматериальными инструментами, с информацией. Или ноль, или один. Резистор ты можешь припаять хорошо, хуже, совсем не припаять. При обработке информации не так. Столкнувшись с реальным кодированием, я увидел: то, что придумал человек — не идеально. В крупных проектах человеческий разум не может охватить все, и постоянно сыплются ошибки, но это не сравнимо с паянием. Есть некое подобие идеала: как ты напишешь программу, так она и будет работать, все зависит от твоей силы разума и умения посмотреть на ситуацию со всех сторон. Вот что меня привлекло.
— Какие технологии ты бы посоветовал изучать сейчас новичкам, какие наиболее востребованы?
В первую очередь, веб-технологии и все, что касается сетевых программ. Python/Django, .NET и Java позиционируются как мастодонты, основательные, с очень богатым аппаратом. .NET — быстрая разработка, много специалистов и, соответственно, проектов. Широкий спектр задач на РНР — это открытый, кроссплатформенный язык. 99% хостингов поддерживают сайты на PHP. Новых задач может и мало, но проектов по поддержке старых продуктов достаточно.
— Сталкивалась с негативным отношением к PHP. Даже сложилось впечатление, что некоторые не делают разницы между проектами на PHP и понятием «говнокод».
На самом деле разруха в головах, а не в PHP.
— То есть не PHP плох, а проекты написаны на PHP плохо?
Логическая связь такая. PHP освоить легко: не строго типизирован, много модулей, и его начинают изучать все, кому не лень, включая говнокодеров с недостаточно системным складом ума. Они и рождают говнокод — когда в любое удобное место страницы можно вставить кусок кода, который что-то сюда выведет, — и начинают городить это без системного подхода. PHP позволяет так делать, чем некоторые и злоупотребляют. Но на PHP написаны серьезные ресурсы, например, ВКонтакте, FB. Хотя сейчас там что-то, наверное, переписано на Python. Лет 6 назад все крупные продукты, к которым не имел отношение Microsoft, были на PHP.
— Что скажешь о Java?
Неоднозначное отношение. Один из древнейших языков, на нем писались сложные продукты в 90-х: банковские системы, Lotus Domino — аналог SharePoint, используемый в правительственных учреждениях. Он позиционируется как кроссплатформенный. Даже когда Java устанавливаешь, появляется сообщение, что в мире 9 млрд устройств, на которых может быть запущена Java. Отчасти так и есть, поскольку Java — интерпретированный язык. Ты пишешь код, который можно запускать на разных устройствах, там интерпретаторы стоят. Но есть свои шероховатости.
— Читала на Super Job, что самая высокая зарплата у Java-девелоперов. Возможно, потому, что они работают в основном в банках?
Да, вероятно. Век Java постепенно заканчивается. Много было веб-приложений с кусками Java-кода, разные банк-клиенты. В браузере загружается кусок кода с сервера и выполняется уже на компьютере. Из браузера нельзя получить доступ к оборудованию, для этого используется кроссплатформенный Java. Но современные браузеры отказываются от поддержки Java. Например, Chrome. Появляются новые технологии.
— Что самое новое?
HTML5, CSS3 — их надо изучать. Понимать и уметь объяснить, как работает веб-страница: что происходит, когда в браузере что-то набираешь и нажимаешь Enter, какой обмен данными идет с сервером. Двигаясь таким образом, можно стать вдумчивым специалистом. А без понимания дальше решения типовых задач по шаблону не продвинуться. Можно, конечно, этим всю жизнь заниматься, но мне кажется, тот, кто идет в программисты, хочет заниматься чем-то новым, творить. Иногда нужно проявлять инициативу. Быть полуроботом не очень хорошо для нашей профессии. Надо учиться предлагать решения, развивать творческий подход, — еще одна составляющая личности разработчика.
Иногда решение задачи напоминает написание драматического сценария. Один герой должен сказать то-то, а другой — сделать следующее. Так и в программировании: у нас есть компоненты, которые взаимодействуют, обмениваются сообщениями.
— С обывательской точки зрения трудно совместить творческий подход и представление о программисте как об унылом зануде, который все делает по алгоритму.
Унылый зануда — не программист, унылый зануда — это унылый зануда. Скажем так, у зануды есть определенные качества, важные для нас: усидчивость, въедливость, но нашим коллегам нужны еще и другие качества, которые мы перечислили.