Содержание

Инструкция для тех, кто хочет стать программистом с нуля

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

С чего начать

Есть несколько вариантов развития событий, в результате которых человек становится программистом. Первый — родители-программисты, которые всему научили своих детей. Таким детям даже не нужно идти в университет. Второй вариант — модная профессия программиста. После школы нужно было выбрать, куда пойти учиться, и выбрали модное направление IT, вроде бы понравилось. И последний вариант — хобби, которое переросло в работу.

Если с вами ничего из вышеперечисленного не произошло, значит, у вас есть выбор из четырёх вариантов:

  • Самообразование. Этот вариант можно использовать как самостоятельно, так и в паре с другими методами. В интернете полно сайтов, книг и приложений, которые помогают изучать различные языки программирования и технологии. Но это самый тяжёлый путь для начинающих.
  • Университет. Если вы оканчиваете школу и хотите быть программистом, тогда идите в университет. Если не за знаниями, тогда за корочкой. Она может послужить бонусом при устройстве на работу. Хотя и какие-то знания вы тоже получите. Но не забывайте заниматься и самообучением. К выбору вуза стоит подойти очень ответственно. Внимательно изучите программы обучения и выбирайте лучшие технические вузы.
  • Ментор. Будет очень неплохо, если вы найдёте человека, который согласится помочь вам и направит вас в правильную сторону. Он подскажет подходящие книги и ресурсы, проверит ваш код, даст полезные советы. Кстати, мы уже писали о полезном ресурсе, где вы сможете найти ментора. Наставника можно искать среди знакомых программистов, на IT-тусовках и конференциях, на онлайн-форумах и так далее.
  • Специализированные практические курсы. Попробуйте поискать в своём городе курсы, где вас обучат какому-нибудь языку программирования или технологии. Я был приятно удивлён количеством таких курсов в Киеве, в том числе бесплатных и с последующим трудоустройством.

Какой язык, технологию и направление выбрать

Когда вы станете программистом, через годик-другой будете вольны выбирать любой язык, который вам нравится. Но при выборе первого языка программирования новичок должен учитывать следующие критерии:

  • Наличие на рынке вакансий. Конечная цель этого пути — найти работу программистом. А это будет трудно сделать, если на рынке вакансий никто не будет искать разработчиков на вашем языке программирования. Проверьте сайты с вакансиями, посмотрите, кого больше ищут, выпишите десяток языков. И переходите к следующему критерию.
  • Низкий уровень вхождения. Если вам придётся потратить длительное время на изучение языка, это может отбить у вас охоту к программированию вообще. Почитайте о тех языках, которые вы выбрали выше. Просмотрите литературу, которую нужно будет прочитать, чтобы изучить эти языки. И выберите те, о которых пишут, что они лёгкие, или которые вам показались лёгкими. Такими языками могут оказаться PHP, Ruby, Python.
  • Кайф от процесса. Если вам не нравится писать код на выбранном языке, вы не будете получать удовольствия от этого процесса, от работы и от жизни. А оно вам надо? Делайте правильный выбор.

Также вам придётся определиться с направлением программирования. Мобильное, десктопное, игры, веб, низкоуровневое программирование и так далее. Самые популярные и относительно лёгкие отрасли — разработка под веб, мобильные и десктопные клиенты. Под каждое направление может подходить один язык и совсем не подходить другой. То есть при выборе языка программирования также стоит отталкиваться и от этого фактора.

В любом случае изучите веб-технологии. Это язык разметки HTML, стили CSS и JavaScript, который позволит сделать вашу страницу динамической. На следующем этапе изучите серверный язык (Python, PHP, Ruby и другие) и подходящие для него веб-фреймворки. Изучите базы данных: практически в каждой вакансии программиста это упоминается.

Как получить начальный опыт

Без опыта вы не получите работу. Без работы вы не получите опыт. Замкнутый круг реальной жизни. Но ничего страшного, мы из него выберемся.

Во-первых, не стоит ждать, пока вы прочитаете все книги по выбранному языку программирования. Начинайте писать свои первые строки кода уже после второй главы книги. Выполняйте все задания из книг, перепечатывайте примеры, разбирайтесь в них. Усложняйте примеры и задания из книг своими идеями. Создавайте свои задачи к пройденному материалу. Решайте эти задачи.

Во-вторых, вам нужно найти свои первые проекты. Это, наверное, самый сложный вариант, но рабочий. Вам придётся самому искать заказы, выполнять их, заморачиваться с оплатой. Для новичка это архисложно, но зато затем все остальные варианты покажутся плёвым делом. Выполненные проекты можно будет записать в опыт и показать вашему будущему работодателю. Реальные проекты являются большим плюсом в вашем резюме.

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

Ещё одним неплохим вариантом для получения реального опыта является open source. Таким проектам всегда нужны новые люди, пусть даже и новички. Вы можете поискать в проекте баги или посмотреть в баг-трекере и предложить методы их решения. Найти такие проекты легко на GitHub или других сервисах для хостинга кода. Не стесняйтесь задавать там вопросы.

Четвёртый вариант получения опыта — помощь знакомым программистам. Попросите их передать вам маленькие и несложные задания. Если что-то не будет получаться, у вас всегда будет к кому обратиться. И при этом вы будете участвовать в реальном проекте.

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

Почему стоит выбрать Python

Давайте немного подробнее поговорим о выборе первого языка программирования. Первый язык должен быть простым и популярным на рынке. Таким языком является Python. Я очень советую выбрать именно его в качестве первого языка программирования.

Код программы на Python читабелен. Вам даже не нужно быть программистом, чтобы в общих чертах понять, что происходит в программе. Из-за несложного синтаксиса Python вам понадобится меньше времени для написания программы, чем, например, на Java. Огромная база библиотек, которая сэкономит вам кучу сил, нервов и времени. Python является высокоуровневым языком. А значит, вам не нужно особо думать о ячейках памяти и о том, что там разместить. Python — язык широкого назначения. И он такой простой, что даже дети могут его выучить.

Справедливости ради стоит упомянуть и о других языках программирования. Java может стать неплохим выбором для новичка. Этот язык популярнее, чем Python, но и немного сложнее. Зато инструменты для разработки гораздо лучше проработаны. Стоит только сравнить Eclipse и IDLE. После Java вам будет проще перейти к работе с низкоуровневыми языками программирования.

PHP — ещё один очень популярный язык. И, мне кажется, он даже проще, чем Python. Очень легко найти себе ментора или решение какой-нибудь проблемы на форуме. Всё потому, что в мире существует огромное количество PHP-программистов разного уровня. В PHP нет нормального импорта, есть множество вариантов решения одной и той же задачи. А это усложняет обучение. И PHP заточен исключительно под веб.

Языки C и C# очень сложны для новичка. Ruby — хороший выбор в качестве второго языка, но не первого. JavaScript — очень простой язык, но ничему хорошему он вас не научит. А задача первого языка программирования всё-таки научить вас чему-то правильному, задать какую-то логику.

Важен ли английский язык

Важен! Не знаете? Учите. Знаете? Совершенствуйте. Учитесь читать, писать, слушать и говорить на английском. Делайте упор на техническую литературу. Слушайте англоязычные подкасты. Читайте англоязычные учебники по программированию.

Что нужно знать, кроме языка программирования

Конечно же, кроме языка программирования и английского, нужно знать что-то ещё. А вот что — зависит от направления, которое вы выберете. Веб-программист обязан знать HTML, CSS, JavaScript. Десктоп-программист учит API операционной системы и различные фреймворки. Разработчик мобильных приложений учит фреймворки Android, iOS или Windows Phone.

Всем нужно выучить алгоритмы. Попробуйте пройти курс на Coursera или найти подходящую для себя книгу по алгоритмам. Кроме этого, нужно знать одну из баз данных, паттерны программирования, структуры данных. Стоит также познакомиться с репозиториями кода. Хотя бы с одним. Обязательно знание систем версионного контроля. Выбирайте Git, он самый популярный. Вам нужно знать инструменты, с которыми вы работаете, операционную систему и среду разработки. И главный навык программиста — уметь гуглить. Без этого вы не проживёте.

Последние шаги

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

lifehacker.ru

Программист — Википедия

Программи́ст — специалист, занимающийся непосредственной разработкой программного обеспечения для различного рода вычислительно-операционных систем.

Программирование, как род занятий, может являться основной профессиональной деятельностью специалиста, либо использоваться в качестве вспомогательной деятельности для решения иных профессиональных задач, либо же использоваться в непрофессиональной сфере (как инструмент решения задач или ради получения удовольствия от процесса программирования). Термин «программист» не обязательно подразумевает профессиональное образование или профессиональную деятельность.

Как основная профессиональная деятельность, программирование используется в технической и в научной областях.

В технике выделяются: средняя техническая квалификация техник-программист (ранее «программист-лаборант») и высшая техническая квалификация инженер-программист. Предметом деятельности специалистов с соответствующей квалификацией (техников и инженеров) является проектирование, разработка и производство программного обеспечения, как промышленной продукции, удовлетворяющей заданным функциональным, конструктивным и технологическим требованиям (результатом деятельности является программное обеспечение). В России подготовка инженеров-программистов ведётся по профилю подготовки «Программное обеспечение вычислительной техники и автоматизированных систем» направления «Информатика и вычислительная техника»[1].

Существует подготовка математиков-программистов по направлению «Математическое обеспечение и администрирование информационных систем»[2].

В конце 2000-х в России появилось новое направление подготовки программистов «Программная инженерия»

[3]. Областью профессиональной деятельности выпускников по этому направлению является индустриальное производство программного обеспечения. Данное направление подготовки отличается от подготовки инженеров-программистов по профилю «Программное обеспечение вычислительной техники и автоматизированных систем» тем, что общеинженерные дисциплины заменены дисциплинами из новой области знания инженерия программного обеспечения. Объектами профессиональной деятельности инженеров по производству программного обеспечения являются не программы и программные комплексы, а методы и инструменты разработки программного продукта, а также процессы жизненного цикла программного продукта.

Предметом деятельности программистов в науке является решение задач с применением методов прикладной математики и реализацией на ЭВМ (результатом деятельности является полученное при помощи программы решение задачи).

В России подготовка специалистов в этой области ведется по следующим направлениям:

  • 01.03.02 «Прикладная математика и информатика»
  • 02.03.02 «Фундаментальная информатика и информационные технологии»
  • 02.03.03 «Математическое обеспечение и администрирование информационных систем»
  • 09.02.03 «Программирование в компьютерных системах»
  • 09.03.01 «Информатика и вычислительная техника»[1]
  • 09.03.02 «Информационные системы и технологии»
  • 09.03.03 «Прикладная информатика»
  • 09.03.04 «Программная инженерия»[3]
  • 10.03.01 «Информационная безопасность»
  • 10.05.03 «Информационная безопасность автоматизированных систем»
  • 38.03.05 «Бизнес-информатика»

Как вспомогательная деятельность программирование в настоящее время используется в широчайшем круге профессий.

В связи со значительным распространением в современном обществе вычислительной техники и, соответственно, программирования как рода деятельности в настоящее время потребность в профессиональных программистах в развитых странах и странах третьего мира значительно превосходит возможности высшего образования по подготовке на соответствующих специальностях, при этом предъявляемые квалификационные требования в бизнесе в большинстве случаев значительно у́же, чем подготовка по специальности в вузе (см. напр.[4]). В связи с этим, очень широко распространено самообразование программистов и профессиональная деятельность в области программирования без получения формального образования по соответствующей специальности, а специалистам, получившим программистские специальности, необходимо постоянно совершенствовать свои знания и умения и оперативно осваивать новые технологии.

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

По ошибке программистами порой называют системных администраторов и других специалистов ИТ.

Прикладные и системные программисты[править | править код]

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

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

Первыми аналогами программируемых устройств были музыкальная шкатулка и шарманка, программа записывалась на вращающийся вал. Тот же принцип двоичной системы, как и на перфокарте: звук воспроизводился выступом на валу («кулачком»), нет выступа — нет звука, кроме того, шарманка предусматривала смену программ и имела 6-8 запрограммированных мелодий.

Первым программируемым устройством принято считать жаккаров ткацкий станок, построенный в 1804 году Жозефом Мари Жаккаром, который произвёл революцию в ткацкой промышленности, предоставив возможность программировать узоры на тканях при помощи перфокарт.

Первое программируемое вычислительное устройство, Аналитическую машину, разработал Чарльз Бэббидж (но не смог её построить). 19 июля 1843 года графиня Ада Августа Лавлейс, дочка великого английского поэта Джорджа Байрона, как принято считать, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости.

В своей первой и единственной научной работе Ада Лавлейс рассмотрела большое число вопросов. Ряд высказанных ею общих положений (принцип экономии рабочих ячеек памяти, связь рекуррентных формул с циклическими процессами вычислений) сохранили своё принципиальное значение и для современного программирования. В материалах Бэббиджа и комментариях Лавлейс намечены такие понятия, как подпрограмма и библиотека подпрограмм, модификация команд и индексный регистр, которые стали употребляться только в 1950-х годах.

Однако ни одна из программ, написанных Адой Лавлейс, никогда так и не была запущена.

Аду Августу, графиню Лавлейс, принято считать почётным первым программистом (хотя, конечно, написание одной программы по современным меркам не может считаться родом занятий или профессиональной деятельностью). История сохранила её имя в названии универсального языка программирования «Ада».

Первый работающий программируемый компьютер (1941 год), первые программы для него, а также (с определёнными оговорками) первый язык программирования высокого уровня Планкалкюль создал немецкий инженер Конрад Цузе.

Имена людей, впервые начавших профессионально выполнять работу собственно по программированию (в отрыве от наладки аппаратуры компьютера), история не сохранила, так как поначалу программирование рассматривалось как второстепенная наладочная операция.

В 2009 году в России официально утверждён день программиста, который ежегодно празднуется 13 сентября (в високосный год — 12 сентября) — празднование Дня Программиста установлено на 256-й день года.[5] Это число не случайно: оно получается от возведения числа 2 в восьмую степень и отражает количество различных значений, которое можно сохранять в одном байте.

  • Про программистов и хакеров есть много анекдотов, в которых высмеивается их оторванность от жизненных реалий и склонность следовать алгоритмам и в жизни[6].
  • На ежегодно проводимом международном чемпионате по программированию ACM ICPC команды, представляющие российские и украинские вузы, традиционно занимают призовые места, а чемпионами становились в общей сложности больше шести раз[7][8][9].
  • Профессия входит в список ТОП-50 самых востребованных профессий по версии Минтруда РФ[10].

ru.wikipedia.org

25 самых популярных мифов о программировании и программистах

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

Сфера информационных технологий для непосвященного кажется загадочной и непостижимой. Любая тайна рано или поздно начинает обрастать стереотипами и мифическими образами, не избежало этой участи и программирование. В Волшебной Стране IT, где всегда тепло, а деньги растут прямо на деревьях, появились новые герои и артефакты: Всесильный Хакер, Идеальный Язык и Загадочная Женщина-Программист, подобная коту Шредингера.

Тру-программист, какой он

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

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

Настоящий Программист в миру – это бородатый человек в толстом свитере с кофейными пятнами. В ночи он крадется к компьютеру, чтобы немного покодить в тишине, а днем прячется от людей по темным углам.

Миф 1. Программисты не любят общаться

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

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

Миф 2. У программистов скучная жизнь

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

На самом деле программисты, как и люди любой другой профессии, разные. У каждого свои увлечения: танцы, рисование, экстремальный спорт, путешествия. Есть у них только одна общая беда – нехватка времени на все эти радости.

Миф 3. Хороший программист может все

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

Основные суперсилы тру-программиста:

Конечно же, это не так. В сфере информационных технологий существует огромное количество направлений деятельности, не связанных напрямую друг с другом: кто-то работает с «железом», кто-то – с программами, кто-то – с сетями. Не станем же мы требовать от высококлассного педагога младшей школы провести ребенку операцию по удалению гланд только потому, что объект манипуляций тот же самый?

Миф 4. Программисты умеют только писать код

Создатели подобных мифов о программировании несомненно очень далеки от этой сферы и не представляют, как происходит процесс разработки.

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

Идеальным представляется вариант сотрудничества профессионального бухгалтера, который знает, чего он хочет, и кодера, который разбирается в программировании и знает, как объяснить машине, что нужно делать. Увы, так это не работает.

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

Миф 5. Тру-программист все пишет с нуля

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

В этом случае не появилось бы 90% всех существующих программных продуктов, работа которых основана на других программах, библиотеках и фреймворках. В программировании господствует идеология разделения труда и переиспользования уже готовых компонентов системы, модульность. Это позволяет в разы упростить и ускорить разработку, повышая ее качество.

Как стать тру-программистом

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

Миф 6. Долгий тернистый путь

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

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

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

Это, однако, не отрицает пользы академического образования в области программирования. Глубокое понимание базовых концепций, большой опыт решения задач – великолепный фундамент для будущей работы.

Миф 7. Легкий приятный путь

Стать программистом можно за 30 минут в день. Достаточно пройти какие-нибудь курсы или посмотреть пару видеоуроков. Это очень просто, почему все люди еще не начали писать код?

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

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

Миф 8. Все курсы одинаковые / Идеальный курс

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

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

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

Миф 9. Начинать следует со сложных языков и концепций

Неизвестно откуда взялся этот нелогичный миф, однако он довольно распространен среди новичков в программировании.

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

Миф 10. Для начала нужно досконально изучить синтаксис языка

Пока не вызубришь наизусть все 999 операторов, классов и методов, переходить на следующий этап нельзя.

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

Миф 11. Я выучил HTML и CSS, значит, я уже программист

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

7 страшных мифов о программировании

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

Миф 12. Надо быть очень умным / иметь особый талант

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

Все не так страшно, как кажется. Хороший программист — это не гений с феноменальной памятью, не талантище, который рождается раз в сто лет под счастливой звездой. Хороший программист – обычный человек, который любит учиться, готов узнавать новое и применять свои знания. Как говорится, 99% успеха – это труд, и только 1% приходится на врожденные способности.

Миф 13. Надо много запоминать

Тру-программист знает все алгоритмы, помнит все классы, методы и синтаксические правила языка.

На самом деле для успешной работы достаточно обладать необходимым минимумом знаний, который очень быстро закрепляется в памяти при постоянном использовании. То, что требуется по ходу проекта, легко «загуглить», а современные инструменты разработчика предоставляют удобные «умные подсказки».

Умение находить информацию ценится в IT-сфере гораздо выше, чем хорошая память.

Миф 14. Нужно хорошо знать математику

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

Единственный раздел математики, в котором программист действительно должен разбираться – это логика.

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

Миф 15. Нужен крутой компьютер

И десяток мониторов в придачу. Без этого программисту никак нельзя. Такие гипотетические затраты сразу отбивают у новичков желание погружаться в эту сферу глубже.

Компиляторы языков программирования не требуют больших мощностей или нескольких мониторов. Работать можно и на обычном ПК.

Миф 16. Все в программировании уже сделано до меня

Этот стереотип идет в паре с убеждением новичков в том, что они никогда не догонят опытных программистов.

IT-сфера – самая динамично развивающаяся индустрия в мире. Каждый день появляются новые технологии и инструменты. Чтобы оставаться конкурентоспособным, нужно все время учиться и развиваться. Знания устаревают крайне быстро.

Отсутствие опыта может стать для молодого программиста преимуществом, так как позволяет не держаться за старое. Свежий взгляд всегда найдет новые возможности.

Миф 17. Я слишком стар / слишком молод

Что бы ни твердили создатели мифов о программировании, ему, как и любви, «покорны все буквально возраста». Дверь в IT-мир не закрывается в 30 лет.

Особенно полезны эти навыки для детей. Да-да, уже с 7-8 лет ребенок вполне способен понять базовые концепции и алгоритмы. Для детей даже существуют специальные языки и среды разработки, например, Scratch. Подобные занятия развивают логику, память, аналитическое мышление.

Миф 18. Женщины не могут быть хорошими программистами

Рождение этого стереотипа кажется особенно странным, если вспомнить, сколько талантливых женщин-программистов знает история.

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

Языки программирования

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

Миф 19. Все языки одинаковые / разные

Языки программирования похожи между собой, но одинаковыми их никак нельзя назвать.

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

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

Конечно, существуют низкоуровневые, высокоуровневые и другие специфические языки, непохожие ни на кого, но их мало + они узконаправленные.

Миф 20. Идеальный язык

Новички, приходя в программирование, первым делом задаются вопросом, какой из всего многообразия существующих языков самый лучший, удобный, полезный – идеальный! Какой язык учить?

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

Не нужно искать Святой Грааль программирования: его не существует. Новичку следует просто выбрать себе понравившийся язык и познавать его возможности.

Миф 21. Веб-программирование – это несерьезно

Долгое время язык PHP среди разработчиков считался, мягко говоря, несерьезным. Сделанный на коленке, он просто не мог стать основой чего-то большого и сложного. Сейчас мнение изменилось, PHP занял свою нишу в IT-сфере.

JavaScript всегда был игрушечным языком, пригодным только для простенькой анимации веб-страниц. Сейчас этот язык усердно борется за звание самого универсального, успешно осваивая серверную сторону разработки.

Веб-программирование – большая и активно развивающаяся сфера. Сейчас это очень серьезно.

Миф 22. Программирование – это скучно

Одно из самых упоительных чувств, испытываемых программистом – чувство творца. Благодаря ему из небытия возникают программы, которые могут приносить людям пользу и радость.

Навыки программирования применимы во всех сферах жизни: от сельского хозяйства до авиастроения и космической промышленности. Программисты пишут игры, социальные сети, мобильные приложения – разве это скучно?

Волшебная Страна IT

Окутанная туманом стереотипов и мифов о программировании, Волшебная Страна IT завлекает молодых адептов иллюзиями и обещаниями.

Миф 23. Программист = миллионер

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

Спрос на IT-специалистов на рынке труда высок, но работодатели ищут работников с опытом, поэтому первое время придется довольствоваться небольшими зарплатами и нарабатывать портфолио.

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

Миф 24. Новички никому не нужны

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

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

Миф 25. Навыки программирования нужны только программистам

Программирование – умение специфическое, и оно нужно лишь тем, кто занимается им непосредственно? Это не так.

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

Основы компьютерной грамотности должны стать таким же естественным знанием, как умение умножать числа.

proglib.io

Как найти свою первую работу программистом? От резюме до испытательного срока / Mail.ru Group corporate blog / Habr

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

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

Итак, как же новичку получить первую работу?


Оно должно как-то называться. Существуют два варианта.
  1. Допустим, вы программировали на разных языках. В школе наверняка писали на Pascal, а потом что-то делали на C++. Если вы постарше, то, возможно, знакомы с Delphi. Поэтому в названии резюме можно указать все языки, на которых вы писали. Авось какой-то заинтересует потенциального работодателя. Например, так: «Программист: delphi, python, php, html, java, c#, ruby, scala».
  2. Можно указать, что вы специализируетесь на чём-то одном, например на Python. Обычно, если в названии резюме перечислена куча языков, то понятно, что вы не умеете ничего. Всего коснулись поверхностно. В глазах работодателя вы будете человеком-оркестром, который пришёл на прослушивание в консерваторию. Не надо так делать. Зачёркиваем длинную простыню и оставляем просто «Программист на Python». Повышайте свою самооценку, не акцентируйте в резюме неуверенность в себе, связанную с нехваткой опыта.

Из этого следует правило: выберите один язык программирования и специализируйтесь на нём. В университете я писал на С++, потом понял, что связанные с ним вакансии меня не очень прельщают, поэтому надо двигаться в другом направлении. Я выбрал для себя C# и Java. Мне они оба очень понравились, и я долго не мог определиться, какой мне больше по душе: тут есть такая-то фича, здесь такая, казалось бы, одинаковые. Я купил две здоровенные толстые книжки — по C# Эндрю Троелсена и по Java Брюса Эккеля. На каждую я потратил по две недели и начал откликаться на вакансии по обоим языкам. Думал, куда раньше возьмут — в тот язык и буду углубляться. Сейчас я понимаю, что переложил ответственность за выбор языка с себя на мироздание, на судьбу, на работодателя.

Приходя на каждое из собеседований, я чувствовал себя неуверенно. На обоих языках я писал одинаково слабо. Не надо было так делать. Надо было принять волевое решение. Не можете выбрать — киньте монетку. Главное, определиться с каким-то одним языком.

Какой язык лучше всего указать в резюме? Языков много, но они очень часто друг друга взаимозаменяют. Не все из них живые. Основное правило — выбирайте популярные языки, не надо брать экзотику. Не нужно слушать, что какой-то Haskel очень крутой, классный, умеет делать всё и вся, а функциональные языки программирования такие волшебные… Каждый хвалит свой язык.


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

Так что при выборе языка обращайте внимание:

  • на его популярность;
  • на решение задач, которые вам интересны;
  • на простоту освоения: на начальном этапе лучше выбрать попроще.

Сейчас по количеству вакансий наиболее востребованы следующие языки: Javascript, PHP, Java, C++, Python, C#, Ruby, Swift, Objective-C. Выбрав какой-то язык, скорее всего, вы на нём и остановитесь. Может быть, через два года разочаруетесь или решите перепрофилироваться. Но это будет немножко больно. С другой стороны, свой опыт вы сможете легко применить в другой сфере деятельности.
  • Если речь пойдёт про frontend — то есть разработку визуальной части сайтов, — то здесь всё просто, нужны три языка: HTML, CSS, JavaScript.
  • А вот для разработки серверной части вариантов много. Самый популярный язык — РНР. Мне на каждом докладе говорят, что про РНР плохо отзываются, какой-то он не такой. Многие высказывают гипотезы, что он умрёт. Но ничего подобного, половина сайтов написана на РНР, половина вакансий — на РНР, ВКонтакте — на РНР, как и многие другие крупнейшие проекты. Никуда язык не денется. Если в нём будут критические проблемы, то их просто исправят. Появился Ruby on Rails, классный движок — ну, ничего страшного, на РНР стали появляться фреймворки, в которые внедрили аналогичные фичи. Всё хорошо. Отдельно скажу, что Python многих прельщает простотой и универсальностью.
  • С точки зрения мобильной разработки есть всего два варианта. Если хотите писать под Android — это Java. Если под iOS — Swift или Objective-C. И то и другое — хорошие решения.
  • Разработка под desktop и серверы: Python, Javaб С++ или C#. Здесь есть простор для метаний. Python попроще, чем остальные. На Java можно писать под Android. На C# — углубляться в разработку игр и сайтов. C++ больше подходит для тех задач, где требуется высокая скорость работы. В остальном у них возможности совпадают, просто на Java сайты пишут реже.

Возникает резонный вопрос: если начинаешь с нуля, то имеет ли смысл изучать сразу новый язык? Например, в Apple перешли с Objectivе-C на Swift, потом появился Swift 2 и 3. Обычно я консервативен и считаю, что новое не всегда оправданно и действительно выстреливает. Появляется новый язык, по нему нет вакансий, но где гарантия, что они появятся потом? Может, на нём так и напишут с пяток проектов.

Что касается Objectivе-С и Swift, я давно присматриваю за этими языками, и буквально на днях количество вакансий на Swift сравнялось с Objective-C. Мое мнение, это очень серьезный показатель, что Swift будет только набирать обороты и со временем может вытеснить Objective-C.


Итак, мы выбрали язык и указали его в резюме. Далее перечисляем технологии, которые мы знаем. Давайте снова разбираться, что круче. Допустим, вы программируете на PHP. Имеет ли смысл писать, что вы знаете С, С++, Pascal, C# и так далее? Не надо перечислять все технологии, которые напрямую не относятся к вашей компетенции. Надо назвать вакансию «программист: РНР». В таком случае работодателю неинтересно, что вы когда-то писали на С и Visual Basic. Весь этот длинный хвост можете не указывать.

Есть и другой вариант. Допустим, я программист на РНР, но знаю все эти технологии, потому что они относятся к веб-разработке: и РНР, и YII2, и HTML, разные фреймворки. Если будете искать вакансию веб-разработчика, то наверняка увидите здоровенную простыню дополнительных требований с кучей умных слов. И многие этого пугаются, особенно в веб-разработке, страшно, что надо столько знать… К этому надо стремиться: знать Webpack, работать с разными БД и так далее.

Многие для повышения авторитета сразу пишут, что я и это знаю, и это примерно знаю, но я новичок и готов получать пока 15—30 тысяч, и опыта работы у меня нет. Какое будет впечатление у работодателя? То же самое: человек-оркестр.

Есть и другая проблема. Допустим, работодатель поверит, что вы всё это знаете. Он же на собеседование придёт с этим списком, ткнёт в любую технологию и скажет: «Теперь мы говорим про React, что ты знаешь про него? А это что? А это? Ясно, React мы не знаем».

Вычёркиваем.

«Хорошо, поговорим про MySQL, напиши мне транзакцию, которая делает то-то и то-то».
«Ну, я в MySQL установил только среду разработки, два select-а сделал…»

MySQL тоже вычеркиваем. Всё остальное он даже смотреть не будет. Работодателю уже будет неинтересно, что вы полгода жарили РНР: он поймал вас на вранье. Так что зачеркиваем всё перечисленное.

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

Более того, даже не пытайтесь ознакомиться со всеми этими многочисленными технологиями. Если вы РНР-программист — так и напишите, что знаете РНР и немного HTML и CSS для верстки. Ещё знакомы с одним фреймворком — всё, работодателя это устроит. Он не будет вас гонять по YII, поскольку вы и не указали, что знаете его. Работодатель понимает, что вас можно гонять по РНР.

Если так получилось, что вы уже много чего потрогали, то честно напишите: поверхностное знакомство с такими-то технологиями. Может, для работодателя это будет плюсом.


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

Когда я набирал в команду джуниоров по C#, мы опубликовали вакансию и в течение двух-трёх недель получили 50 откликов. У нас не было кадровика, поэтому мы пошли программерским путём: всем кандидатам выслали тестовое задание. Кто его сделал, проходил дальше. И мне как работодателю не были интересны сертификаты и диплом. Я даже на резюме не смотрел, пока человек не присылал мне решение тестового задания. Но для кадровика это может быть важно.


Очень важная вещь на этапе отбора. Если у вас есть портфолио, то работодатель-программист сможет понять, в состоянии ли вы решить задачу аналогичную той, которую вы уже решали.
Что можно написать в своём портфолио? Если вы хотите разрабатывать сайты, то просто придумайте себе задачку и решите её за необходимое время. Сделайте небольшой сайт и выложите его, лучше всего на Github. И напишите: я создал небольшой интернет-магазин, использовал такие-то технологии, вот код. Для работодателя это будет показателем, что вы ещё и про Git знаете. Он понимает: если я возьму этого новичка на работу, он мне за два дня сделает примерно то же самое, с чем сам разбирался месяц. И не надо будет ему платить за то, чтобы он выучил, что такое Bootstrap, познакомился со всякими нужными штуками. Он сам уже это изучил и теперь в состоянии решить задачу за пару дней. Поэтому не пренебрегайте портфолио. Вам оно очень сильно поможет.
Если он у вас есть, то опишите его. После этого вас будут отрывать с руками. После окончания университета я получил два отклика на своё резюме, а через год просто не знал, как его спрятать. Потому что всем нужны программисты, и кадровики видят: этого парня вытерпели год и не уволили, он не облажался, значит, толковый человек. Если я его возьму к себе на работу, то, скорее всего, я тоже смогу терпеть его как минимум год, его код не надо будет выбрасывать.
Резюме готово, что делать дальше? Прежде чем откликаться на вакансии, надо немного психологически настроиться, чтобы процесс пошёл правильно. Представьте свой идеальный рабочий день, что бы вам хотелось получить в итоге? Иначе мы просто будем белкой в колесе, станем бежать за какой-то мечтой, каким-то счастьем. Представьте, как выглядит ваш офис, ваши коллеги, какое у вас самоощущение, какими проектами вы занимаетесь. Просто настройтесь на то, какие эмоции вы будете испытывать, когда станете ходить на работу. Сделайте запрос мирозданию: «Хочу, чтобы было так, так и так». И успокойтесь, всё у вас будет хорошо.

Расскажу о том, как я устроился в компанию GeekBrains. В какой-то момент мне надоело программировать. Это классное занятие, я пять лет ему отдал, но меня не очень удовлетворяли цели компании, в которой я работал. Я подумал, что мне было бы интересно открыть свою школу и учить людей. Дать им возможность получить новую специальность, новую профессию. Потом я увидел вакансию и начал преподавать в GeekBrains, совмещая это с основной работой. Затем я просто попросился к ним на работу.

Так выглядел мой разговор с генеральным директором GeekBrains.

Гендир: «А что ты умеешь делать? Ты на C# программируешь, а мне нужен Ruby».
Я: «Я не хочу программировать, я умею то, умею сё».

Через две недели я вышел на работу.

Наверно, вы представляете: «Я найду работу так: выложу резюме, на него откликнутся, я приду на собеседование, и всё получится». Но работа может найти вас совершенно другим способом. Например, вы зарегистрируетесь на фрилансерском сайте, выполните какой-то заказ, и у вас появятся постоянные клиенты. Или друг пригласит вас к себе работать. Не зацикливайтесь на способе достижения цели. Просто будьте открыты к предложениям, откуда бы они к вам ни пришли.

Не расстраивайтесь, если вас не позвали на собеседование после того, как вы откликнулись на вакансию. На начальных позициях предложение сильно превышает спрос. Я сам допускал эту ошибку, находил одно предложение о работе и думал: блин, мне это подходит, тут и компания недалеко от моего метро, и требования несложные. Мне кажется, что я им классно подхожу, а они, заразы, даже не посмотрели моё резюме. Ну что такое? Наверное, во мне что-то не так. Или они прочитали, но ничего не написали. Всё, резюме плохое, надо дорабатывать портфолио, что-то ещё делать. А на самом деле, может, им просто некогда. Они уже давно взяли кого-то на работу и просто не стали снимать вакансию, потому что у новичка ещё не закончился испытательный срок.

Не парьтесь, ребята. Отправьте 100, 200, 300 откликов, сколько найдёте. И законом больших чисел вы сообщите мирозданию, что реально хотите работу. Вас пригласят на пять собеседований, на одном из них вы устроитесь на работу — всё. Если вам посылают тестовое задание, не пренебрегайте им. По моему опыту, 90 % кандидатов отваливаются, когда получают тестовое задание.


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

Если вас взяли на испытательный срок, то не надо всех заваливать вопросами, иначе подумают, что вы дурак. Но не надо кидаться и в другую крайность, когда начинающему разработчику дают задачку, и он уходит в себя на три дня, потому что сам пытается во всём разобраться. А работодатель думает: неужели вам мало трёх дней на такую простую вещь? Так что не стесняйтесь задавать вопросы. Если вы больше часа занимаетесь какой-то задачкой и у вас не получается, подойдите к старшему, спросите, он вам поможет, всё будет хорошо.


Друзья, и напоследок напутствие: не бойтесь экспериментировать. Ищите себя, находите то, чем вам нравится заниматься. Нет ничего хуже, чем десять лет просидеть на нелюбимой работе из страха, что не сможете устроиться на другую. Если вам нравится программировать — начинайте обучаться этому ремеслу, совмещайте учёбу с основной работой. Если хотите — приходите к нам в GeekBrains, и мы вам обязательно в этом поможем. Удачи вам, и до новых встреч!

habr.com

Полезные ресурсы для программистов

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

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

Интеллектуальные и умные

1. ХабрХабр 
Конечно, на Хабре не только статьи об IT, но и масса занимательной информации по дизайну, менеджменту, обучению и т.д. Однако, если вы спросите у программиста, что он читает чаще всего, ответ будет один – Хабр.
2. RSDN
Стоящий ресурс, на котором вы можете найти книги, обсудить проблемы на форуме, прочитать статьи по актуальным вопросам. Разработчики создавали этот ресурс, чтобы восполнить пробелы в знаниях программистов и компенсировать нехватку материалов на русском языке. Согласитесь, получилось неплохо?
3. Microsoft Developer Network
Если вам интересны продукты компании Microsoft, тогда онлайн журнал поможет вам ознакомиться с ними более детально.
4. SQL.ru
Если вы думаете, что это ресурс об SQL, то ошибаетесь. Программисты найдут неплохой форум, подборку отличной литературы, что особенно полезно новичкам, предложения по работе и не только.
5. Хакер
Сайт журнала «Хакер». Несмотря на то, что здесь немного специализированной информации по программированию, вы найдете массу околотематических статей. Кроме того, только тут множество советов и рекомендаций по защите от взломов.
6. ACMQUEUE
Статьи, видео, аудио по тематике. На английском языке, зато полезно и по делу.
7. The Register
Нельзя не отметить данный новостной ресурс. О последних событиях в IT-сфере, разработках и продуктах, вы, без сомнения, узнаете именно на The Register.
8. OpenNET
Отличный профессиональный ресурс, где масса новостей, форум и полезные материалы.
9. DOU
Нужно, потому что тут есть вакансии, оповещения о семинарах, тренингах, онлайн-конференциях и прочих необходимых вещах. Еще Ленин завещал учиться, поэтому такие ресурсы лишними не бывают.
10. Driver.ru
Огромная библиотека драйверов. Особенно полезно для молодых мастеров.

Обучение (и не обязательно платное)

1. MITOPENCOURSEWARE
Более 2000 курсов по различной тематике. Бесплатные ресурсы предлагают вам учебники, руководства, проекты, мультимедийные материалы и многое другое.
2. COURSERA
Уникальный проект, разработанный профессорами Стенфордского университета. Более 200 курсов из 33 стран мира. И все это бесплатно!
3. TheCodePlayer
Если вы часто заглядываете программисту через плечо и пытаетесь понять, чем он занимается, посетите данный ресурс. Пошаговые видео-руководства демонстрируют, как создаются с нуля крутейшие вещи.
4. Codecademy
Обучайтесь самостоятельно или с друзьями. Здесь довольно весело и, между прочим, бесплатно!
5. GENERAL ASSEMBLY
Интересные и полезные livestream. Вы можете приобрести электронный билет и получить доступ.
6. ELOQUENT JAVASCRIPT
Введение в Java Script и программирование. Отличная книга с примерами и разборами.
7. Learn Ruby
Всем, кто интересуется Ruby, это, без сомнений, придется по душе.
8. LCodeTHW
Изначально это был проект по изучению Python, однако впоследствии значительно расширился до Ruby, C, SQL, Regex.
9. udemy
Огромное количество, как платных, так и бесплатных курсов. Примечательно, что среди лекторов есть Марк Цукерберг.
10. treehouse
Более 600 видео-уроков по языкам программирования и не только. За ежемесячную плату.

Общение и обмен знаниями

1. CyberForum.ru
2. Клуб ПРОграммистов и другой Клуб ПРОграммистов
3. Исходники.ru
4. DoYouKnowThat?RU
5. Stack Overflow

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

Отдохнуть

1. Говнокод
Можно посмеяться над чужими ошибками, но соблюдать осторожность, чтобы не допустить аналогичные.
2. bash.im – Цитатник Рунета
Тут и комментарии излишни. Смех, да и только!
3. IT happens
Веселые шутки и прочие забавные истории из жизни.

Есть что добавить?

say-hi.me

20 самых рекомендуемых книг для программистов на русском языке

В общий список вошло 5 720 книг. Ниже вы найдёте 20 самых упоминаемых из них, которые когда-либо выходили на русском.

По просьбе Лайфхакера своими мнениями насчёт некоторых изданий поделились отечественные эксперты.

1. «Эффективная работа с унаследованным кодом», Майкл К. Физерс

Автор объясняет, как быстро разбираться в унаследованном коде, как тестировать его, как правильно вносить изменения. Книга содержит множество эффективных приёмов, предназначенных специально для этих задач.

Купить на Litres.ru

2. «Приёмы объектно-ориентированного проектирования. Паттерны проектирования», Эрих Гамма и другие

Классика для программиста. Первая книга, посвящённая именно шаблонам.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Издание уже 20 лет переиздаётся в изначальном виде. В этом, конечно, главный недостаток книги: некоторые шаблоны уже неактуальны. Думаю, её полезно читать уже после других, более современных, книг по паттернам проектирования. Тем более что она написана сухим академическим языком. Для понимания паттернов эта книга не must read, но её прочтение добавляет крутости в глазах коллег-программистов. 🙂 Начинать я советую с «Паттернов проектирования» (Head First Design Patterns).

Купить на Litres.ru

3. «Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин

Интересная, но во многом спорная книга о том, как писать понятный и поддерживаемый код.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Почему спорная? Книг про написание кода уже огромное количество, и часть приёмов являются общепризнанными. Но каждый автор добавляет что-то своё. Лично для меня мнение Боба Мартина кажется иногда странным и противоречащим другим источникам. Не must read, но прочитать всё же стоит. Качество кода после прочтения становится лучше.

Купить на Litres.ru

4. «Предметно-ориентированное проектирование», Эрик Эванс

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

Леонид Выговский, системный архитектор IT-компании LiveTex

— Из этой книги выросли концепции СQRS, BDD, onion-architecture и много других интересных идей. Единственный недостаток: книга насквозь теоретическая. Практическую пользу она приобрела только с выходом книги Вона Вернона «Реализация методов предметно-ориентированного проектирования» (Implementing Domain Driven Design). Поэтому читать их надо последовательно, сразу друг за другом.

Купить на Litres.ru

5. «JavaScript: сильные стороны», Дуглас Крокфорд

Обязательная книга для веб-разработчиков. В ней Дуглас Крокфорд рассказывает о преимуществах языка JavaScript и учит грамотно их применять для создания эффективного кода.

Купить на Litres.ru

6. «Шаблоны корпоративных приложений», Мартин Фаулер и другие

Книга описывает базовые принципы проектирования ПО для корпоративных платформ.

Купить на Litres.ru

7. «Совершенный код. Мастер-класс», Стив Макконнелл

Классическая книга о том, как писать код лучше.

Михаил Осотов, директор по производству «Центра высоких технологий»

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

Купить на Litres.ru

8. «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие

Из серии книг по написанию понятного и качественного кода, «Рефакторинг» — лучшая.

Леонид Выговский, системный архитектор IT-компании LiveTex

Выговский: «Она не только показывает хороший код, но и на примере плохого объясняет, чем именно он плох. Эта книга — must read для всех. Причём чем раньше вы её прочтёте, тем лучше. Качество кода после прочтения сильно вырастет».

Если книгу Фаулера вы уже прочли, обратите внимание на «Рефакторинг с использованием шаблонов» (Refactoring to Patterns) Джошуа Кериевски, которую рекомендует Михаил Осотов.

«Рефакторинг с использованием шаблонов» Кериевски — отличная книга для тех, кто каждый день сталкивается с проблемой легаси-кода и технического долга в своих проектах.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Эта книга поможет сохранить свои нервы, подружиться с рефакторингом и сделать код лучше.

9. «Паттерны проектирования», Эрик Фримен, Элизабет Фримен и другие

Серия Head First, на мой взгляд, идеально подходит для новичков в области разработки ПО.

Михаил Осотов, директор по производству «Центра высоких технологий»

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

Купить на Litres.ru

10. «Язык программирования C», Брайан У. Керниган, Деннис М. Ритчи

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

11. «Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ», Скотт Майерс

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

Купить на Litres.ru

12. «Экстремальное программирование: разработка через тестирование», Кент Бек

Автор на примерах описывает методику разработки ПО, которая предполагает тестирование программ ещё до написания их кода.

13. «Алгоритмы. Построение и анализ», Томас Х. Кормен и другие

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

Купить на Litres.ru

14. «Регулярные выражения», Джеффри Фридл

Издание об эффективной работе с текстом в Perl, PHP, Java, Python, Ruby и других языках программирования.

Купить на Litres.ru

15. «CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#», Джеффри Рихтер

Классический учебник по разработке приложений для платформы Microsoft, в том числе с помощью Silverlight, Windows Presentation Foundation, ASP.NET и прочих технологий компании.

Купить на Litres.ru

16. «Современное проектирование на C++», Андрей Александреску

Книга для опытных программистов на C++. Автор предлагает новый подход к разработке, сочетающий метапрограммирование шаблонов, обобщённое программирование и объектно-ориентированное программирование на этом языке.

17. «Microsoft ASP.NET 2.0. Базовый курс», Дино Эспозито

Детальное руководство для опытных специалистов по ASP.NET 2.0. Книга учит создавать мощные, надёжные и масштабируемые сайты на этой платформе.

Купить на Litres.ru

18. «Шаблоны тестирования xUnit. Рефакторинг кода тестов», Джерард Месарош

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

19. «Компиляторы. Принципы, технологии и инструментарий», Альфред В. Ахо и другие

Книга описывает базовые принципы разработки компиляторов и делает особый акцент на оптимизации кода. В помощь читателю — большое количество примеров из практики.

Купить на Litres.ru

20. «Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET», Кржиштоф Цвалина, Брэд Абрамс

Издание содержит лучшие приёмы разработки библиотек для платформы Microsoft .NET Framework. Книга должна упростить работу любого .NET-специалиста, который пишет код для других разработчиков.


Полный рейтинг англоязычных книг доступен на сайте Dev-Books. Там же можно просмотреть списки самых популярных книг на определённые темы, будь то Java, Database Design или CSS.

Dev-Books →

lifehacker.ru

Игра для программистов — Википедия

Игра для программистов — компьютерная игра, в которой человек не участвует напрямую в игре. Вместо этого он пишет управляющую программу, сражающуюся с себе подобными программами. Такие игры являются сложным и нетривиальным упражнением для программистов.

Классификация игр для программистов[править | править код]

По языку программирования[править | править код]

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

По цели игры[править | править код]

По цели игры такие игры делятся на:

  • Бои в памяти. Задача программы — «завесить» программу противника.
  • Настольные игры (например, на заре кибернетики были популярны шахматные турниры среди ЭВМ).
  • Боевые роботы. Целью игры является создать управляющую программу для боевого робота или танка. В некоторых играх также можно изменять конфигурацию робота (тип мотора, брони, орудий и т. д.). Бои роботов довольно зрелищны для посторонних.
  • Прочие игры. Управление гоночной машиной, колонией микробов, и т. д.

В 1961 году в Bell Labs была разработана игра «Дарвин». В начала 1980-х годов под влиянием «Дарвина» была разработана игра «Бой в памяти». Ей суждено было стать популярной, она даже перешагнула железный занавес: в Переславле-Залесском была своя команда по «Бою в памяти».

В 1970 году прошёл первый шахматный турнир среди ЭВМ.

В 1985 году Томом Пойндекстером была разработана игра C Robots — первая программистская игра, в которой надо было управлять боевым роботом. Боевой робот — тележка, снабжённая радаром и миномётом. Для сканирования местности надо было указать, на какой угол повернуть радар, и остроту диаграммы направленности. Чем шире диаграмма, тем больше шансов, что вражеский робот попадёт в сектор обзора, но и точность сканирования, соответственно, меньше. Миномёт стреляет осколочным снарядом, для выстрела надо задать направление и расстояние, на котором должен приземлиться снаряд. У этой игры было много недостатков: интерпретатор был достаточно неудачным; робот, который стрелял много, обычно побеждал робота, который стрелял метко.

Игра C Robots была усовершенсовована Дэвидом Мальмбергом и переведена на язык Паскаль, она получила название Pascal Robots (или P-Robots). В игру был добавлен расход топлива; если робот оставался без топлива, ему оставалось только ждать, пока кто-то не прикончит его. Появились препятствия и командная игра. Добавлена возможность конфигурировать робота: можно выбрать одну из трёх пушек, один из пяти моторов, один из пяти топливных баков, один из трёх вариантов брони, а также дополнительное оборудование: защитное поле, дистанционные бомбы, ремонтный комплект и маскировку. Впрочем, баланс между оборудованием не был проработан, и был написан робот Now, эксплуатирующий этот дисбаланс. Now не имел никакого интеллекта; фактически он являлся огромным топливным баком, снабжённым лёгким мотором, лёгкой бронёй и защитным полем. Пользуясь тем, что у роботов с лёгкой бронёй защитное поле расходует очень мало топлива, Now легко выигрывал и в массовой перестрелке, и один на один. Также после того, как были опубликованы исходные тексты Pascal Robots, обнаружилось несколько несоответствий поведения игры заявленному в документации: например, в документации сказано, что дистанционная бомба поражает всех роботов независимо от того, включен ли щит; в реальности защитное поле спасает от бомбы.

Пожалуй, самая известная игра о боевых роботах — Robocode, разработанная в IBM. Эта игра сильно отличается от Pascal Robots. Если в Pascal Robots программист задаёт роботу, в какую сторону ехать, и он автоматически выйдет на этот курс, то в Robocode надо задавать, на какой угол повернуть руль и с какой скоростью ехать. Все роботы экипированы одинаково. Также снаряды поражают не осколками, а прямым попаданием.

Игра Robocode также в некоторой степени решила «проблему арбитра». Если в Pascal Robots, чтобы не допустить утечки кода, нужна была нейтральная сторона, проводящая соревнования (арбитр), то в Robocode можно просто выложить для свободной скачки class-файл своего робота. Обфускация достаточно надёжно защищает робота от декомпиляции.

В 1995 году прошли первые заезды в автосимуляторе RARS (англ.)русск. (Robot Auto Racing Simulator). В 1997 году был начат проект TORCS, позволявший ездить как людям, так и роботам.

В 1996 году на платформе ZX Spectrum появилась игра Ивана Гудкова «Солдат будущего» В игре могло участвовать 4 робота. Был режим командной игры 2×2. Роботы могли работать в паре, распознавать союзников. Модульное программирование. У игры был большой потенциал, но длина программы робота была искусственно ограничена и пространства для творчества было мало.

Ныне существует много игр для программистов, но лишь немногие из них действительно популярны.

Турниры по настольным играм среди ЭВМ малопопулярны, чаще проводятся шахматные турниры между людьми и компьютерами. Лучшие из шахматных программ для ПК (2006 год) играют на уровне гроссмейстера, программы для специализированных компьютеров уверенно обыгрывают даже чемпионов. На начало 2010-х годов основная настольная игра для компьютеров — го; компьютер играет в го на уровне хорошего любителя.

Наиболее известные игры для программистов[править | править код]

Бои в памяти[править | править код]

  • Дарвин — компьютерная игра для программистов, в которой сражались несколько ассемблерных программ до момента, пока одна из программ не захватит всю память.
  • Бой в памяти — разновидность компьютерной игры «Дарвин», где программы написаны на язык Redcode и работают под управлением Memory Array Redcode Simulator.

Управление боевыми роботами[править | править код]

  • C Robots
  • Pascal Robots
  • Robocode[1] — битва роботов-танков. Программы можно писать на Java или .NET.
  • Robot Battle
  • Robotwar
  • Robot Warfare 1 — битва роботов на 2D поле.
  • Scalatron — соревнование роботов на арене. Сражение роботов предусмотрено, но для победы сражаться не обязательно. Программы пишутся на Scala или Java.
  • Grobots — игра-стратегия, в которой пишутся программы для управления командами роботов. Программы управления роботами пишутся на диалекте языка программирования Forth. Игра может быть использована для обучения и изучения Forth[2].
  • Imperfect World Of Robots (IWOR) — моделирование мира, в котором роботы, управляемые программой, будут жить, работать, защищать свое «племя», производить потомство. Игра имеет важное и полезное отличие (с точки зрения обучения программированию на базе этой игры; проведения соревнований) от других игр — роботы, написанные для неё, используют для своего функционирования «сокеты» и «сообщения», поэтому они могут быть написаны практически в любых языках программирования и работать на машинах с различными операционными системами. Эта игра — серверного типа.
  • B.O.T.S : BOts Tactical Simulation — концепция игры похожа на другие игры, такие как CRobots или JRobots.
  • JRobots — клон C Robots в Java.
  • General Game Playing — в этой игре человек программирует не робота, как во многих других играх, а правила игры, однако вполне возможно запрограммировать эту игру, как игру, управляющую боевыми роботами, действующими по запрограммированным игроками правилам игры (например, программирование «базовых» игровых правил может быть осуществлено организаторами соревнований, а игроки, на основе правил игры, разрабатывают правила для роботов). Эта игра реализует искусственный интеллект — вместо того, чтобы действовать на основе заранее заданных человеком «жестких правил поведения в типовых ситуациях», боевая машина в игре будет сама определять своё поведение и принимать решения — в соответствии с предоставленными ей игровыми правилами, являющимися ограничениями для возможных действий. Игра является одновременно и игрой и научно-исследовательским инструментом и инструментом обучения в области искусственного интеллекта.
  • OpenNERO — игра является одновременно и игрой и научно-исследовательским инструментом и инструментом обучения в области искусственного интеллекта. Управление боевыми роботами в игре осуществляют компьютерные нейросети. Особенностью игры является её графика, она лучше, по сравнению с другими играми из настоящего списка, есть мультиплеер. OpenNERO была использована для реализации нескольких демонстраций и упражнений для учебника Рассела и Норвига «Искусственный интеллект: современный подход»: методов искусственного интеллекта, таких как полный перебор, эвристический поиск, сценарии, обучение с подкреплением и эволюционные вычисления, а также проблем искусственного интеллекта, таких как перемещение по лабиринтам, сбора предметов и «роботизированная битва». Методы и задачи учебника реализованы в нескольких различных средах (или «модами»). Neural networks research group имеет некоторые другие проекты, близкие по духу к описанной игре и которыми также можно пользоваться для игровой, научно-исследовательской и образовательной деятельности.

Прочие[править | править код]

  • Colobot — трёхмерная обучающая стратегическая игра, в которой можно запрограммировать роботов на встроенном языке.
  • Ceebot — серия трёхмерных обучающих игр для детей, созданных на основе игры Colobot и ориентированных на использование в школах.
  • Robot Auto Racing Simulator или RARS — трёхмерный симулятор гонок между запрограммированными гоночными автомобилями.
  • TORCS — автосимулятор, основанный на RARS, и пригодный как для обычной езды, так и для соревнования между запрограммированными гоночными автомобилями.
  • Snake Battle — «визуальное» программирование боевых змеек.
  • Война вирусов — игра, имитирующая развитие двух колоний вирусов, которые развиваются сами и уничтожают друг друга.
  • Захват флага — командные соревнования, целью которых является оценка умения участников атаковать и защищать компьютерные системы.
  • CheckiO — изучение языка программирования Python. Возможность играть в различные игры путём программирования условий.

ru.wikipedia.org