У меня очень мало опыта (суммарно программистом я проработал 16 месяцев), тем не менее, я хотел бы дать несколько советов себе-в-прошлом, ну, или иными словами всем тем, кто сейчас учится в университете и планирует стать разработчиком ПО. Ни в коей мере не претендую на мудрость или опытность. Немного подумав, я понял, что все эти советы как никогда актуальны для меня и сегодня тоже. Первую заметку я опубликовал в своем блоге в прошлом году, а сейчас публикую здесь список, расширенный советами читателей блога.
Все советы автономны и их порядок не имеет значения.
Какой язык должен знать любой разработчик? Не, не Си и не Джаву. Английский. Учите английский, и не только технический, но и разговорный.
Программируйте. Программируйте. Программируйте. Менеджеры той компании, где я работаю, придерживаются мнения, что резюме программиста это github. Конечно, это лишь выражение, смысл в том, что от программиста в первую очередь ожидают код, а потом – оценки, рекомендации и сертификаты. Программируйте. Опыт важнее оценок и точка. Если работодатель настаивает на обратном, то подумайте дважды, перед тем, как устраиваться к нему на работу.
Познакомьтесь с UNIX. Установка Убунту и компиляция ядра – это не знакомство с UNIX. Почитайте о том инженерном и научном фундаменте который лежит в основе философии UNIX. Не обязательно становится крутым сисадмином и поднимать десяток серверов, лучше просто привыкните к принципам работы и UNIX way.
Математика – это главное. Не смотря на сугубую потребительскую направленность многих софтверных компаний, фундаментальные науки остаются основой всего.
Задавайте вопросы. Естественно, если не нашли ответ в гугле. Соответственно, не задавайте вопросы, на которые может ответить гугл. Сайт StackOverflow – ваш лучший друг. Задавайте вопросы в интернете, среди друзей, учителей, коллег. Глупый вопрос лучше незнания.
Познакомьтесь с системами контроля версий. Хотя бы с основными – SVN, Git, Mercurial. Откройте репозиторий на своей машине и используйте его для домашних заданий и собственных проектов.
Познакомьтесь с современными инструментами разработки. Зачастую в университетах не уделяют внимания средам разработки и другим программам и утилитам, необходимым для полноценной работы. Многие IDE бесплатны, попробуйте Eclipse, NetBeans, Emacs, XCode, привыкните к принципам работы, найдите удобный для вас инструмент.
Научитесь пользоваться отладчиком. Это настолько критично, что совершенно непонятно, почему университеты уделяют этому так мало внимания.
Познакомьтесь с методологиями разработки. Сложно им придумать применение в университетской жизни, но все же возможно. Как минимум, вы можете попробовать использовать какую-нибудь методологию в своем с другом проекте.
Познакомьтесь с шаблонами (паттернами) проектирования. Про это уже сто раз говорили, но я повторюсь. Здесь вы не отвертитесь и применить хотя бы пару основных паттернов где-нибудь просто обязаны. Достаньте свой телефон и взгляните на первую попавшуюся программу: представьте, как можно к ее разработке применить какой-нибудь паттерн.
Программируйте в команде. Даже вдвоем вы получите неплохой опыт, особенно если примените вышестоящие советы: используйте систему контроля версий, примените какую-нибудь методологию, используйте какой-нибудь паттерн. Возможно, на этот момент вам будет казаться, что все это не имеет большого смысла и куда проще и быстрее было бы писать код не замарачиваясь, и, скорее всего, вы окажитесь правы, но не забывайте – вся учеба это скорее упражнение, чем работа. Практикуйте парное программирование.
Работайте над собственными проектами. Обратно к первому пункту – программируйте, но не ограничивайтесь домашними заданиями или упражнениями из книг. Начните свой проект.
Изучите новый для себя язык программирования. Иногда слышу нечто вроде «нас учат чему-то, но я не знаю, где это будет применяться в жизни». Такие люди зачастую настолько уверены в бесполезности некоторых этих знаний, что после окончания университета работают по какой-то другой специальности потому что их не научили программировать на популярном сегодня языке программирования. Забудьте фразу «мне это не понадобится в будущем». Когда в детском саду учат читать, то никто не готовит профессиональных чтецов. Детей просто учат пользоваться инструментом для получения информации.
Свыкнетесь с мыслью, что кодинг – далеко не единственное, что придётся делать. Скорее всего, разработчику нужно будет работать с клиентами, искать решения проблем, бороться с инструментами и технологиями.
Принимайте решения и убеждайте людей. Если вы не согласны с проектным менеджером или клиентом, то попробуйте убедить их вместо того, чтобы исполнять ненавистную вам задачу с тихими матами под нос.
Настаивайте на приятной для вас обстановке. Хорошему работодателю главное – продуктивность разработчика, а если не нравится рабочее место, то сложно быть продуктивным. Это понятие включает в себя не только стол и стул, но и график работы, здание, офис, атмосферу, инструменты разработки и так далее.
Не забывайте о принципе Парето. 20 процентов усилий дают 80 процентов результата. Это, естественно, не правило, но вполне очевидная тенденция.
Прочтите классику: Code Complete, The Pragmatic Programmer, The Practice of Programming, Design Patterns.
Учитесь планировать. Те же университетские задания – оцените, сколько у вас уйдет времени, а по окончании проанализируйте работу. Делайте это постоянно и для разных типов работы. Разработчик, который выполняет работу вовремя намного ценнее разработчика, который иногда выполняет работу быстрее других. И не волнуйтесь, если так и не научитесь чётко оценивать объем будущей работы – этого никто не умеет делать :-)
Расставляйте приоритеты. Еще один совет в от Капитана Очевидность. Вкупе с предыдущим советом можно в разы повысить эффективность.
Не зацикливайтесь на обеспеченности работой. Не работайте против своей воли только потому что сейчас и здесь платят деньги. Лучший способ обезопасить свою карьеру – постоянно развиваться и работать с удовольствием.
И самое главное: если вам не нравится программирование, то не становитесь программистом. Очень просто :-) Ничем хорошим работа без удовольствия закончиться не может.
Надеюсь, еще через пять лет я дополню этот список новыми советами, а пока можете посоветовать что-нибудь сами.
Все советы автономны и их порядок не имеет значения.
Какой язык должен знать любой разработчик? Не, не Си и не Джаву. Английский. Учите английский, и не только технический, но и разговорный.
Программируйте. Программируйте. Программируйте. Менеджеры той компании, где я работаю, придерживаются мнения, что резюме программиста это github. Конечно, это лишь выражение, смысл в том, что от программиста в первую очередь ожидают код, а потом – оценки, рекомендации и сертификаты. Программируйте. Опыт важнее оценок и точка. Если работодатель настаивает на обратном, то подумайте дважды, перед тем, как устраиваться к нему на работу.
Познакомьтесь с UNIX. Установка Убунту и компиляция ядра – это не знакомство с UNIX. Почитайте о том инженерном и научном фундаменте который лежит в основе философии UNIX. Не обязательно становится крутым сисадмином и поднимать десяток серверов, лучше просто привыкните к принципам работы и UNIX way.
Математика – это главное. Не смотря на сугубую потребительскую направленность многих софтверных компаний, фундаментальные науки остаются основой всего.
Задавайте вопросы. Естественно, если не нашли ответ в гугле. Соответственно, не задавайте вопросы, на которые может ответить гугл. Сайт StackOverflow – ваш лучший друг. Задавайте вопросы в интернете, среди друзей, учителей, коллег. Глупый вопрос лучше незнания.
Познакомьтесь с системами контроля версий. Хотя бы с основными – SVN, Git, Mercurial. Откройте репозиторий на своей машине и используйте его для домашних заданий и собственных проектов.
Познакомьтесь с современными инструментами разработки. Зачастую в университетах не уделяют внимания средам разработки и другим программам и утилитам, необходимым для полноценной работы. Многие IDE бесплатны, попробуйте Eclipse, NetBeans, Emacs, XCode, привыкните к принципам работы, найдите удобный для вас инструмент.
Научитесь пользоваться отладчиком. Это настолько критично, что совершенно непонятно, почему университеты уделяют этому так мало внимания.
Познакомьтесь с методологиями разработки. Сложно им придумать применение в университетской жизни, но все же возможно. Как минимум, вы можете попробовать использовать какую-нибудь методологию в своем с другом проекте.
Познакомьтесь с шаблонами (паттернами) проектирования. Про это уже сто раз говорили, но я повторюсь. Здесь вы не отвертитесь и применить хотя бы пару основных паттернов где-нибудь просто обязаны. Достаньте свой телефон и взгляните на первую попавшуюся программу: представьте, как можно к ее разработке применить какой-нибудь паттерн.
Программируйте в команде. Даже вдвоем вы получите неплохой опыт, особенно если примените вышестоящие советы: используйте систему контроля версий, примените какую-нибудь методологию, используйте какой-нибудь паттерн. Возможно, на этот момент вам будет казаться, что все это не имеет большого смысла и куда проще и быстрее было бы писать код не замарачиваясь, и, скорее всего, вы окажитесь правы, но не забывайте – вся учеба это скорее упражнение, чем работа. Практикуйте парное программирование.
Работайте над собственными проектами. Обратно к первому пункту – программируйте, но не ограничивайтесь домашними заданиями или упражнениями из книг. Начните свой проект.
Изучите новый для себя язык программирования. Иногда слышу нечто вроде «нас учат чему-то, но я не знаю, где это будет применяться в жизни». Такие люди зачастую настолько уверены в бесполезности некоторых этих знаний, что после окончания университета работают по какой-то другой специальности потому что их не научили программировать на популярном сегодня языке программирования. Забудьте фразу «мне это не понадобится в будущем». Когда в детском саду учат читать, то никто не готовит профессиональных чтецов. Детей просто учат пользоваться инструментом для получения информации.
Свыкнетесь с мыслью, что кодинг – далеко не единственное, что придётся делать. Скорее всего, разработчику нужно будет работать с клиентами, искать решения проблем, бороться с инструментами и технологиями.
Принимайте решения и убеждайте людей. Если вы не согласны с проектным менеджером или клиентом, то попробуйте убедить их вместо того, чтобы исполнять ненавистную вам задачу с тихими матами под нос.
Настаивайте на приятной для вас обстановке. Хорошему работодателю главное – продуктивность разработчика, а если не нравится рабочее место, то сложно быть продуктивным. Это понятие включает в себя не только стол и стул, но и график работы, здание, офис, атмосферу, инструменты разработки и так далее.
Не забывайте о принципе Парето. 20 процентов усилий дают 80 процентов результата. Это, естественно, не правило, но вполне очевидная тенденция.
Прочтите классику: Code Complete, The Pragmatic Programmer, The Practice of Programming, Design Patterns.
Учитесь планировать. Те же университетские задания – оцените, сколько у вас уйдет времени, а по окончании проанализируйте работу. Делайте это постоянно и для разных типов работы. Разработчик, который выполняет работу вовремя намного ценнее разработчика, который иногда выполняет работу быстрее других. И не волнуйтесь, если так и не научитесь чётко оценивать объем будущей работы – этого никто не умеет делать :-)
Расставляйте приоритеты. Еще один совет в от Капитана Очевидность. Вкупе с предыдущим советом можно в разы повысить эффективность.
Не зацикливайтесь на обеспеченности работой. Не работайте против своей воли только потому что сейчас и здесь платят деньги. Лучший способ обезопасить свою карьеру – постоянно развиваться и работать с удовольствием.
И самое главное: если вам не нравится программирование, то не становитесь программистом. Очень просто :-) Ничем хорошим работа без удовольствия закончиться не может.
Надеюсь, еще через пять лет я дополню этот список новыми советами, а пока можете посоветовать что-нибудь сами.