Мечтаете стать режиссером? Этот материал для вас. Рассказываем про лучшие зарубежные киношколы, а также о том, зачем туда, собственно, идти.
Профессия Программист — Факты
Кто такой программист?
Программист — это специалист, который пишет и тестирует код для программного обеспечения. Термин «программист» может использоваться для обозначения разработчика программного обеспечения, инженера-программиста, специалиста по компьютерам, аналитика программного обеспечения и др.
В обязанности программиста обычно входят: написание программ и приложений на различных компьютерных языках (таких как C++ и Java), создание и совершенствование операционных систем (iOS, Android), разработка веб-сайтов, обновление и расширение существующих программ, проверка программ на наличие ошибок и исправление неисправных строк компьютерного кода, создание и тестирование кода в интегрированной среде разработки (IDE), техническое обслуживание, сетевая архитектура.
При поиске работы можно встретить вакансии по языкам, с которыми работают программисты (программист С++, программист Java, PHP-программист), по типам задач (программист 1С, web-программист, front-end / back-end разработчик) и по уровню (intern, junior, medium, senior).
Зарплата программиста в России и за рубежом
| Страна/ регион | Мин. зарплата /год | Ср.зарплата/год | Front-end разработчик | Разработчик игр | Программный инженер |
|---|---|---|---|---|---|
| Москва | 6,474 USD | 9,792 USD | 15,117 USD | 10,577 USD | 7,298 USD |
| Регионы РФ | 4,855 USD | 9,152 USD | 12,948 USD | 9,711 USD | 6,474 USD |
| США | 70,500 USD | 86,800 USD | 76,000 USD | 86,200 USD | 82,000 USD |
| Великобритания | 42,126 USD | 91,474 USD | 77,031 USD | 88,398 USD | 82,246 USD |
| Австралия | 35,366 USD | 49,080 USD | 56,803 USD | 57,741 USD | 59,184 USD |
| Канада | 42,574 USD | 92,243 USD | 75,687 USD | 85,147 USD | 83,571 USD |
| Германия | 38,328 USD | 47,123 USD | 42,512 USD | 42,512 USD | 41,837 USD |
| Франция | 41,500 USD | 52,072 USD | 44,986 USD | 48,923 USD | 48,923 USD |
| Чехия | 123,372 USD | 310,124 USD | 28,540 USD | 31,558 USD | 29,916 USD |
| Китай | 26,801 USD | 37,611 USD | 45,831 USD | 47,897 USD | 47,897 USD |
| Сингапур | 32,169 USD | 69,875 USD | 57,482 USD | 64,865 USD | 63,283 USD |
Данные, указанные в таблице, приблизительны.
Преимущества профессии программиста
Недостатки профессии программиста
IT специализации
В качестве перспективных направлений на будущее можно выделить компьютерную безопасность и искусственный интеллект.
Как стать программистом?
Чтобы стать программистом, образование необязательно, тем более что сфера IT развивается со скоростью света и традиционные вузы и колледжи не успевают за новшествами науки. Однако опытные специалисты все равно настаивают на получении высшего или хотя бы среднего специального образования. Чтобы самостоятельно освоить сферу IT, потребуется гораздо больше времени и усилий, чем в вузе, где уже есть наработанный учебный план, система обучения, стимулы в виде оценок и наставники, знающие свой предмет. Если же все-таки ваш выбор — самостоятельное обучение, то необходимо запастись терпением и упорством. Важно читать профессиональную литературу, посещать курсы и много практиковаться. Однако надеяться на высокие инженерные и исследовательские должности не стоит — для них необходимо высшее образование. После школы или колледжа вполне реально начать с позиции простого разработчика, развиваться и впоследствии стать хорошим специалистом.
Среднее специальное образование программиста
Обучение в колледжах имеет следующие преимущества:
Специальности в колледжах бывают различными, например: компьютерные сети, сетевое и системное администрирование, информационные системы и программирование. Для поступления необходимо пройти конкурс аттестатов. Студенты стажируются во время учебы и после ее окончания могут сразу трудоустраиваться. Далее многое зависит от самого специалиста: непрерывное самообразование обеспечат профессионалу хорошие рабочие предложения и высокий заработок.
Учебные заведения в зарубежных странах также предлагают специальное образование для будущих программистов. Например, в муниципальных колледжах США есть программы по компьютерным наукам, управлению данных и т. д., а также короткие курсы. После окончания колледжа в США можно поступить в университет на бакалавриат или начать работать. Колледжи TAFE в Австралии реализуют множество различных программ по информационным технологиям. Например, по разработке веб-сайтов / программного обеспечения, цифровым медиа-технологиям, веб-технологиям, информационным технологиям сетей, программированию. Как правило, квалификации после колледжей — сертификат и степень ассоциата. Аналогичные программы можно найти в профессиональных училищах и институтах Германии и Франции.
Высшее образование программиста
Обучение в вузе дает студентам более качественную базу знаний, чем колледж. Университетские программы более обширные, а количество опытных преподавателей в вузах больше. Программы, предлагаемые университетами: прикладная математика и информатика, математика и компьютерные науки, фундаментальная информатика и информационные технологии, информатика и вычислительная техника, прикладная информатика, программная инженерия.
Предметы, преподаются, как правило, следующие: основы программирования, компьютерные сети компьютерная графика, языки программирования, теория информации и машинное обучение, математический анализ, алгебра и геометрия, программная инженерия, интеллектуальные системы, современные информационные системы и т.д. Также студенты проходят практику во время учебы.
Требования для поступления на IT
Поступление в вузы разнится в зависимости от страны и программы. Обычно требуются:
Лучшие вузы в IT России
| № Предметного рейтинга QS 2020 года | Университет | Стоимость в год Бакалавриат, для граждан РФ |
|---|---|---|
| 51-100 | Московский государственный университет имени М. В. Ломоносова | 5,274 USD |
| 101-150 | Санкт-Петербургский национальный исследовательский университет информационных технологий | 3,048 USD |
| 101-150 | Санкт-Петербургский государственный университет | 3,759 USD |
| 151-200 | Московский физико-технический институт | 3,642 USD |
| 151-200 | Высшая школа экономики | 5,260 USD |
IT программы лучших зарубежных вузов 2020
| № Предметного рейтинга QS 2020 года | Университет | Бакалавриат / год | Страна |
|---|---|---|---|
| 1 | Massachusetts Institute of Technology (MIT) | 55,450 USD | США |
| 2 | Stanford University | 73,964 USD | США |
| 3 | Carnegie Mellon University | 50,976 USD | США |
| 4 | University of California, Berkeley | 14,254 USD | США |
| 5 | University of Oxford | 30000 Приблизительно GBP | Великобритания |
| 6 | University of Cambridge | 45,235 USD | Великобритания |
| 7 | Harvard University | 49,653 USD | США |
| 8 | Swiss Federal Institute of Technology of Lausanne (EPFL) | 1560 CHF | Швейцария |
| 9 | Swiss Federal Institute of Technology (ETHZ) | 1320 CHF | Швейцария |
| 10 | University of Toronto | 44,955 USD | Канада |
Все данные необходимо уточнять в вузах.
Какие качества нужны программисту?
Программирование подходит людям, которым нравится находить решения проблем. Это, наверное, и есть ключевой элемент IT. Здесь специалисту нужна доля креативности, незаурядный ум и желание постоянно учиться. Не помешают терпение и упорство перед лицом трудностей, когда не получается код или нужно найти маленькую ошибку. У будущих программистов также должны быть хорошие аналитические способности и развитая логика.
В школе желающим стать IT-специалистом следует уделить внимание информатике, логике, математике, физике, английскому языку. Однако здесь нельзя сказать категорично, потому что, например, знание математики для простых задач не всегда обязательно. Тем не менее, для полноценного роста и успеха в профессии математика нужна, чтобы как минимум направить мышление в правильное русло.
Этой профессии присущи высокая концентрация на одной проблеме и длительная мыслительная деятельность, поэтому неусидчивость и рассеянность могут стать препятствием при становлении хорошим программистом. Помимо технических умений, которым научат в вузах и колледжах, IT-специалисту дополнительно понадобятся soft skills Мягкие (гибкие) навыки : быстрое чтение и понимание письменных инструкций, самостоятельность, любознательность, критическое мышление, умение слушать (для слаженной работы в команде) и внимание к деталям. Еще один навык необходимый программисту — это слепая печать. Она значительно повышает эффективность и скорость работы. Человек, владеющий десятипальцевым методом, быстрее набирает символы и активно пользуется горячими клавишами. Слепая печать — один из тех hard skills, что пригодятся в любой профессии.
Главный совет: начать писать коды и практиковаться как можно раньше, чтобы понять, подходит профессия вам или нет.
Где работают программисты?
Программисты могут работать в любой индустрии, где используются приложения, программы, сайты, работа в интернете. Многие стремятся попасть в крупные технологические компании, например в Google, Apple, Samsung, Yandex, Amazon, Microsoft, Facebook.
Большинство IT-специалистов работают в традиционном офисе. Однако часто их работа может быть выполнена удаленно, поэтому некоторые работодатели разрешают своим программистам работать из дома.
В России, как и во многих развивающихся странах, наблюдается стремление программистов уехать работать за рубеж. Во многом это объясняется недостаточно высокими зарплатами, застоявшейся корпоративной культурой и ограничением свободного пространства, а именно неготовностью к созданию чего-то нового и приверженностью привычным технологиям. Программирование — многообещающая и растущая отрасль, в которой поле для открытий и новшеств безгранично. Однако не все компании создают благоприятные и комфортные условия для сотрудников, вследствие чего не только теряют талантливые кадры и стопорят улучшение своего продукта, но и препятствуют развитию индустрии в стране в целом.
Известные программисты
Дориан Накамото — один из «подозреваемых». Отрицает причастность к биткойну
Существуют разные теории о том, кем является или являлся Накамото. Эксперты находят пасхальные яйца в его посланиях и изучают речь Накамото с лингвистической точки зрения, чтобы понять, японец ли разработчик или нет, но так и не могут прийти к единому ответу. Ясно только то, что Накамото навсегда повлиял на финансовые транзакции, а сам биткоин продолжает оставаться ведущей мировой цифровой валютой.
Ада Лавлейс — английский математик и первый в мире компьютерный программист. Дочь известного поэта Байрона родилась в 1815 году в Лондоне. Лавлейс создала описание вычислительной машины и написала первую в мире программу. «Мать всех программистов» ввела такие термины, как «цикл» и «рабочая ячейка». Она на много лет опередила свое время и оказала огромное влияние на историю компьютеров.
Эвелин Бойд Грэнвилл
Эвелин Бойд Грэнвилл — вторая афроамериканка, получившая степень доктора математики в Американском университете. Позже она также получила PhD в Йельском университете в 1949 году. Грэнвилл начала карьеру с преподавательской должности в Fisk University, а затем присоединилась к американским лабораториям космической техники, где помогала в космических миссиях США, изучая траектории ракет и вычисления орбит. Работая в IBM, Эвелин Бойд Грэнвилл разработала программное обеспечение, анализирующее спутниковые орбиты для космических программ NASA. В 1967 году она вернулась к преподаванию и продолжала отстаивать интересы женского образования в области технологий в течение оставшихся 30 лет своей карьеры.
20 вещей, которые я узнал за 20 лет работы инженером-программистом
Наткнулся на любопытный материал, в котором автор систематизировал и записал свой опыт инженера-программиста в 20 тезисов. Я работаю в коммерческой разработке ПО больше 25 лет, и этот текст отозвался во мне практически каждой буквой — большинство советов я тоже регулярно практикую, не облекая их в формат ёмких афоризмов. В общем, решил сделать перевод.
Особенно отзываются пункты «стройте компактные системы» и «лучший код — это отсутствие кода». Последний совет я превращаю в цитату из какого-то второсортного фильма про самураев: «Лучшая победа — та, которую ты одержал, не доставая меч из ножен» (думаю, сослуживцы за моей спиной уже закатывают глаза). И, конечно, бесконечные разговоры про легендарных 10x-программистов постоянно хочется прервать советом не связываться с 0,1x-программистами (которые реально существуют, в отличие от 10x).
Дисклеймер от автора оригинальной статьи
Учиться на чужом опыте и ошибках очень важно, но мы часто забываем, что большинство советов имеют контекст, который далеко не всегда учитывается.
«Вам просто нужно повысить цены» — говорит компания, которая 20 лет работала в бизнесе, выставляя поначалу низкие цены для привлечения клиентов.
«Вам нужно внедрять микросервисы» — говорит компания, которая построила монолит, набрала тысячи клиентов и перешла на микросервисы, когда столкнулась с проблемами масштабирования.
Без понимания контекста советы бессмысленны или, что ещё хуже, вредны. Если бы эти компании последовали собственным рекомендациям в начале пути, они, скорее всего, навредили бы сами себе.
Для понимания контекста расскажу, откуда берутся советы в этой статье. Первую половину карьеры я работал инженером-программистом в небольших компаниях и стартапах, потом перешёл в консалтинг и работал в нескольких действительно крупных компаниях. Затем основал Simple Thread, которая выросла из команды 2 человек до 25. 10 лет назад мы работали в основном с малым и средним бизнесом, сейчас — со средним и большим.
Советы в этой статье от человека, который:
почти всегда работал в небольших командах, где приходится делать много, имея очень мало;
ценит работающие решения выше конкретных инструментов;
постоянно начинает новые проекты, но поддерживает ряд систем;
ценит производительность инженера выше большинства других критериев.
Мой опыт за последние 20 лет сформировал отношение к разработке и убедил меня в некоторых утверждениях, которые я оформил в виде списка. Надеюсь, он вам будет полезен.
1. Я все ещё многого не знаю
«Как ты можешь не знать, что такое BGP?» или «Ты никогда не слышал о Rust?» — некоторые из нас не раз слышали подобное.
Причина, по которой многие любят разработку, заключается в том, что мы учимся всю жизнь. И в создании софта есть огромные области новых знаний, которые с каждым днём только растут. Можно десяток лет работать программистом и всё равно иметь огромный пробел в знаниях по сравнению с кем-то, кто также провёл десятилетия в, казалось бы, аналогичной роли.
Чем раньше вы это поймёте, тем быстрее сможете избавиться от синдрома самозванца и с удовольствием учиться у других.
2. Самое сложное в разработке — сделать продукт, который действительно нужен
Знаю, что это уже стало клише, но многие инженеры скептически относятся к данному пункту, поскольку считают, что он обесценивает их труд. Чушь, на мой взгляд. Напротив, этот момент помогает подчеркнуть, в насколько сложной и иррациональной среде нам приходится работать, ведь именно эти аспекты так усложняют нашу деятельность.
Можно разработать самую технически впечатляющую вещь в мире, а потом никто не захочет её использовать. Такое случается постоянно. Проектирование софта часто связано со слушанием — нам приходится быть сразу инженером-программистом, экстрасенсом и антропологом.
Инвестиции в процесс проектирования (с помощью UX-специалистов или путём самообразования) принесут огромные дивиденды. Ведь как реально подсчитать стоимость разработки неправильного ПО? Это гораздо больше, чем просто потерянное время инженера.
3. Лучшие инженеры-программисты думают как дизайнеры
Великие инженеры-программисты глубоко задумываются о пользовательском опыте. Они могут не думать об этом в терминах вроде внешнего или программного API, UI, протокола или любого другого интерфейса. Великие инженеры думают о том, кто будет его использовать, почему он будет использоваться, как он будет использоваться и что важно для пользователей. Учет потребностей конечного потребителя — это залог хорошего пользовательского опыта.
4. Лучший код — это отсутствие кода или код, который не нужно поддерживать
Всё, что нужно сказать: кодеры будут кодить. Если спросить человека любой профессии, как решить ту или иную проблему, он выберет то, что у него хорошо получается. Это просто человеческая природа. Большинство инженеров-программистов всегда будут склоняться к написанию кода, особенно когда нетехническое решение не очевидно.
То же самое относится к коду, который не нужно поддерживать. Инженерные команды часто хотят изобрести колесо, когда оно уже существует. Здесь нужно соблюдать баланс, есть много причин для развития собственных разработок, но остерегайтесь токсичного синдрома «изобретено не здесь».
5. Программное обеспечение — это средство достижения цели
Основная работа любого инженера-программиста — предоставление ценности. Немногие разработчики понимают это, ещё меньше тех, кто это осознает. А ведь осознание приводит к другому способу решения проблем и другому взгляду на инструменты.
Если вы действительно верите, что выбор ПО зависит от цели, то будьте готовы найти «правильный инструмент для работы», который может и не являться софтом.
6. Иногда нужно перестать точить пилу и просто начать пилить
Некоторые сразу бросаются в проблему и начинают писать код. Другие — начинают исследовать и попадают в аналитический паралич. В таких случаях установите дедлайн и начните изучать решения. Вы гораздо быстрее узнаете что-то, когда непосредственно станете решать задачу.
7. Если у вас нет представления о границах возможного, вы не сможете спроектировать хорошую систему
С этим я часто сталкиваюсь, поскольку мои обязанности уводят меня все дальше и дальше от повседневной разработки ПО. Следить за командой разработчиков — огромный объём работы. И если вы не понимаете, на что способна ваша команда, то сможете разрабатывать решения только для самых простых проблем. И опасайтесь тех, кто давно не писал никакого кода.
8. Каждая система в конечном счёте отстой, смиритесь с этим
У Бьерна Страуструпа есть цитата: «Есть только два вида языков: те, на которые все жалуются, и те, которыми никто не пользуется». Это можно распространить и на большие системы. Не существует «правильной» архитектуры, вы никогда не закроете весь техдолг, не разработаете идеальный интерфейс, ваши тесты всегда будут слишком медленными.
Это не оправдание тому, чтобы не делать что-то лучше, а наоборот, способ дать вам перспективу. Меньше беспокойтесь об элегантности и совершенстве, стремитесь к постоянному улучшению и созданию пригодной для жизни системы, в которой вашей команде нравится работать и которая стабильно приносит пользу.
9. Никто не спрашивает «почему» в достаточной степени
Используйте любую возможность поставить под сомнение предположения и подходы, которые «всегда делались так, как надо». В команде появился новый сотрудник? Обратите внимание, где он запутался и какие вопросы задаёт. Поступила заявка на новую функцию, которая не имеет смысла? Убедитесь, что вы понимаете цель и то, что требует эту функциональность. Если не получаете чёткого ответа, продолжайте спрашивать, пока не поймёте.
10. Сосредоточьтесь на том, чтобы избежать 0,1х-программистов, а не найти 10х-программистов
10x-программист — это глупый миф. Идея о том, что кто-то может сделать за 1 день то, что не менее компетентный, трудолюбивый, и такой же опытный программист может сделать за 2 недели, глупа.
Я видел программистов, которые пишут в 10 раз больше кода, а потом вам приходится исправлять его в 10 раз дольше. Кто-то может быть 10х-программистом только в том случае, если вы сравниваете его с 0,1x-программистом — тот, кто тратит время, не просит обратной связи, не тестирует свой код, не рассматривает крайние случаи и так далее. Нужно заботиться, чтобы не допустить 0,1x-программистов в команду, а не искать мифического 10x-программиста.
11. Одно из главных отличий между сеньором и джуном — свое мнение о том, как все должно быть
Ничто не беспокоит меня больше, чем сеньор, не имеющий никакого мнения о рабочих инструментах или о том, как подходить к созданию программного обеспечения. Лучше высказать мнение, с которым я буду категорически не согласен, чем не иметь мнения вообще.
Если вы используете инструменты, но ненавидите их, вам нужно изучить больше. Попробуйте другие языки, библиотеки и парадигмы. Существует мало способов повысить уровень своих навыков быстрее, чем активный поиск того, как другие решают задачи с помощью инструментов и методов, отличных от ваших.
12. Людям не нужны инновации
Люди много говорят об инновациях, но обычно они ищут дешёвые преимущества и новизну.
Если вы действительно привносите новшества и меняете то, что людям привычно — ждите отрицательных отзывов. Но если верите в то, что делаете, и знаете, что это действительно улучшит ситуацию, приготовьтесь к долгой битве.
13. Ваши данные — самая важная часть системы
Я видел много систем, в которых целостность данных держалась в основном на надежде. Любое отклонение от идеального сценария в такой системе, и мы получаем частичные или грязные данные, а работа с такими данными в перспективе превратится в кошмар.
Важно помнить, что данные скорее всего сильно переживут вашу кодовую базу. Приложите усилия, чтобы всё хранилось в порядке, и это окупится.
14. Ищите технологических акул
Старые технологии, которые остались на плаву, — это акулы, а не динозавры. Они настолько хороши, что пережили быстрые изменения, которые постоянно происходят в мире технологий. Заменяйте их только в том случае, если у вас есть очень веская причина. Эти инструменты не будут модными и современными, но позволят выполнить работу без множества бессонных ночей.
15. Не путайте скромность с невежеством
Есть много программистов, которые не высказывают мнения, если их прямо не спросить. Если кто-то не высказывает своё мнение вам в лицо, это не значит, что ему нечего добавить. Иногда самых громких хочется слушать меньше всего.
Поговорите с окружающими, запросите фидбек и советы.
16. Программисты должны регулярно писать
Инженеры-программисты должны регулярно вести блог или дневник, писать документацию и вообще делать всё, что требует от них высокого уровня навыков письменного общения. Письмо помогает думать о проблемах и более эффективно общаться с командой. Это один из важнейших навыков, которым должен овладеть любой программист.
17. Рабочие процессы должны быть минимально энергозатратными
Сейчас все хотят быть agile, но «agile» — это создание вещей небольшими порциями, обучение, а затем итерация. Если кто-то пытается вложить в это гораздо больше, значит, он что-то продаёт. Для этого необязательно переставать помогать сотрудникам или отказываться от отчётности, но вы когда-нибудь слышали, чтобы люди из ваших любимых IT-компаний и масштабных опенсорс-проектов хвалились тем, какой у них клёвый Scrum? Процессы должны оставаться лёгкими и гибкими до тех пор, пока не появится потребность в большем. Доверьтесь своей команде, они всё сделают.
18. Инженеры-программисты, как и все люди, должны чувствовать ответственность
Если вы отвлечёте кого-то от результатов его работы, то он будет меньше заботиться о ней. Это почти тавтология и основная причина, почему кросс-функциональные команды работают хорошо, и почему DevOps стал таким популярным. Дело не только в передаче обслуживания и неэффективности, а в том, чтобы управлять всем процессом от начала до конца и нести прямую ответственность за предоставление ценности.
Дайте группе увлечённых людей полную ответственность за проектирование, создание и выпуск софта (или чего-то ещё) — произойдут удивительные вещи.
19. Собеседования не помогут определить, насколько хорошим членом команды будет человек
Собеседования лучше проводить, чтобы понять, кто такой человек и насколько он заинтересован в нужной области знаний. Пытаться выяснить, насколько хорошим членом команды он будет, — бесполезное занятие.
То, насколько человек умён или осведомлён, также не является хорошим показателем, каким членом команды он станет. Никто не скажет вам на собеседовании, что он будет ненадёжным, жёстким, напыщенным или никогда не будет приходить на собрания вовремя. Некоторые ищут «сигналы» для таких вещей, вроде «Если они спрашивают об отгулах на первом собеседовании, значит, они точно не будут ходить на миты!», но это все ерунда. Если вы опираетесь на подобное, то просто гадаете и отбрасываете хороших кандидатов.
20. Стремитесь к созданию более компактной системы
Есть много факторов, которые будут подталкивать вас к созданию большой системы. Распределение бюджета, невозможность решить, какие функции следует сократить, желание создать «лучшую версию». Все эти вещи очень сильно подталкивают к тому, чтобы сделать слишком много. Нужно бороться с этим.
В процессе разработки вы узнаете так много нового, что в результате итераций получите гораздо более крутой результат. Для многих это крайне трудно.
Ваша история
Вот и всё: 20 лет разработки программного обеспечения превратились в 20 мудрых пунктов. Если согласны или не согласны с мыслями в статье, или если есть, что добавить и чем поделиться — пишите в комментариях.


