Ресурсы по изучению математики для программистов

Как научиться программированию

Итак, вы определились с языком, теперь нужно придумать, как его выучить. А выучить его вам будет не так уж и сложно, как кажется на первый взгляд. У страха глаза велики. Нужно просто приложить усилия и потратить на обучение несколько месяцев. Это не так уж и много на самом деле. Специалисты уже подсчитали, что на изучение programming language нужно в среднем от 6 до 13 недель, если заниматься по 8 часов в день. Если предположить, что вы уже где-то работаете на полный рабочий день, и свободного времени у вас меньше, то это 2-6 месяцев.

Есть еще такая теория как «10,000 hours rule». Она гласит, что в любом ремесле можно стать профессионалом за 10 тысяч часов. Если поделить на 40 часов в неделю, то выйдет около пяти лет. Но это чтобы стать прям экспертом. А для первых серьезных проектов и первой работы достаточно, как мы уже сказали, от нескольких месяцев до полугода.

Где учиться?

  • Книги. У нас в блоге выходила подборка лучших книг для изучения программирования. Рекомендуем к прочтению.
  • Онлайн-курсы. В той же самой подборке о них тоже сказано несколько слов, но если вкратце, то можно заниматься в GeekBrains (рус), Яндекс Практикуме (рус), Codeacademy (англ), Coursera (в основном англ), Skillshare (в основном англ) и так далее.
  • Видеоуроки на YouTube. Есть много хороших бесплатных курсов. В том числе записи уроков из платных видеокурсов прошлых лет — слитых или выложенных самими школами. 
  • Оффлайн школы и тренинги. Это самый дорогой способ научиться программированию, но самый эффективный. Под личным руководством наставника вам будет гораздо проще, ведь не придется задерживаться на одном месте.

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

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

Важные советы

Не переживайте, если у вас что-то будет не получаться, либо вы что-то не поймете сразу. Это нормально. Для этого несколько раз просмотрите изучаемый материал или обратитесь к другому источнику.
Занимайтесь решением трудных задач. Не забывайте о практике. Именно таким способом можно понять тему. Если решение задачи не поддается, то отдохните и потом вернитесь к ней снова.
Изучайте математику каждый день. Уделяйте ей хотя бы час. Это должно войти у вас в привычку.
Помните об отдыхе, но не слишком им увлекайтесь.
Главное – не зазубрить материал, а понять его. Вы должны понимать математику, чтобы правильно анализировать ситуацию, применять нужные формулы и теоремы. При самостоятельном изучении спрашивайте себя, почему нужно сделать так или так. И ищите ответы. При работе с преподавателем направляйте вопросы ему. Переход к следующей теме осуществляйте только в том случае, когда вы уверены, что предыдущая отработана на практике и усвоена вами на 100%.
Займитесь поиском наставника. С этим могут возникнуть трудности, но если у вас получится, то они будут оправданы. Он всегда подскажет и подбодрит вас.
Меняйте ресурсы и площадки при изучении математики

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

Помните, если у вас есть желание, то 50% успеха вам уже гарантировано. Для остальных 50% от вас требуется должный подход и рвение. И тогда все у вас получится.

Английский язык

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

  • лучше понимать код;
  • читать мануалы;
  • взаимодействовать с иностранными заказчиками.

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

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

Полезная литература:

  • English for Information Technology.
  • Career path Software Engineering.
  • Oxford English for Information Technology.
  • Professional English in Use ICT.
  • Check Your English Vocabulary for Computers and IT.

Нужно: всем.

Альтернативный экспресс-тест на склонность к программированию

А вы сможете создать алгоритм приготовления яичницы, не только в «идеальных» условиях, но и придумать несколько успешных альтернативных вариантов, а также создать алгоритм приготовления при исключительных, ошибочных исходных условиях? 

«Если человек сможет расписать по шагам как приготовить яичницу, указав не только happy путь, а так же exceptional и alternative, тогда точно сможет стать программистом» — утверждает Николай Каштанов, ИТ-эксперт ICL Services по предоставлению сервиса. 

Если говорить о личностных качествах, то Федор Зубарев, руководитель программ компании Bell Integrator считает, что чаще всего эти два типа людей потенциально могут стать хорошими программистами:
«1-й: дотошные, пунктуальные, иногда занудные. Люди, готовые разбираться с любой мелочью, вникающие во все детали. 
2-й: люди творческие, немного неаккуратные в различных, в том числе и в бытовых, вопросах. Образование — профильное или чисто математическое»

Узнаете себя в одном из типов? Записывайтесь на бесплатный курс по программированию!

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

«Уверен, что добиться успеха в том или ином виде деятельности можно только упорным трудом, который всегда приносит должное вознаграждение. Разработка софта — не исключение. Если такая работа продолжает радовать, если хочется еще что-то поделать „для себя“ — поисследовать, изучить что-то новое — признаки таланта налицо.» — убежден Сергей Стрелков, руководитель направления собственных разработок компании КРОК.

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

Начало усердной работы: профессия «Веб-разработчик».

Кто должен заняться программированием

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

Контент-менеджер и бильд-редактор

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


Настройка текстового редактора в Bitrix. Источник

В любом случае знания языка разметки HTML для контент-менеджера обязательны. Некоторые начинающие изучать HTML и CSS в итоге идут дальше и становятся полноценными frontend-разработчиками.

SEO-специалист

Поисковая оптимизация — это точка экстремума, место встречи веб-разработчиков и SEO-специалистов

Ошибки первых могут сильно мешать работе вторых, поэтому нормальное взаимодействие между этими отделами на понятном друг другу языке очень важно, если проект хочет появляться в поиске «Яндекса» и Google


Навыки в резюме SEO-специалиста.

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

Менеджер проектов

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

Менеджеры часто работают с базами данных и аналитикой — для этого и нужно знание SQL-запросов. Кроме того, сложные функции в Excel можно заменить макросами. Иными словами, некоторые знания базового программирования упрощают и ускоряют работу менеджеров.

Интернет-маркетолог

Если программирование и маркетинг кажутся вам вещами несовместными, вы удивитесь. Здесь тоже всем заправляет аналитика, а для решения ее задач в последнее время активно применяется язык программирования Python. Специально для этих целей созданы библиотеки NumPy, Matplotlib, Pandas, Jupyter и другие.


Пример работы с данными в библиотеке NumPy. Одной строкой кода можно посчитать средний чек и отсортировать таблицу. Источник

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

Для карьеры

Где нужна. Даже если ваша работа не связана с математикой напрямую, она может содержаться под капотом в разных инструментах типа формул и макросов в Excel или скриптов для анимации в After Effects.

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

  • Вариации тестов на IQ: логические задачи, задачи типа «выберите лишнюю фигуру», «продолжите ряд чисел» и так далее.
  • Задачи с подвохом: «Сколько настройщиков роялей живёт в Москве?», «Сколько теннисных мячиков влезет в маршрутный автобус?».
  • Реальные математические задачи. Встречаются реже всего и никогда не выходят за рамки школьной программы. Чаще всего сводятся к квадратному уравнению или теореме Пифагора.

Наконец, третий способ применения математики на работе — символический, когда важно не знание математики, а интерес к ней. Например, если гендир окончил мехмат МГУ, то руководителем департамента скорее станет тот, кто понимает (или старается понять) его шутки про матан и топологию

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


Кадр: фильм «Матрица»

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

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

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

Наконец, для того чтобы понимать математиков, можно просто попросить объяснить. Коллеги тоже люди, им нравится чувствовать себя умными и образованными. Зачем-то же, в конце концов, они учились на мехмате?!

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

Также обратите внимание на курсы в Skillbox, например «Excel + Google Таблицы с нуля до PRO». Упражняться в решении тестов можно по сборникам вроде «Большой книги IQ-тестов» Ф

Картера и К. Рассела. Общую эрудицию — знание географии, биологии, истории, литературы — подтяните с помощью базы вопросов «Что? Где? Когда?». Ответы и ссылки на источники там есть

Упражняться в решении тестов можно по сборникам вроде «Большой книги IQ-тестов» Ф. Картера и К. Рассела. Общую эрудицию — знание географии, биологии, истории, литературы — подтяните с помощью базы вопросов «Что? Где? Когда?». Ответы и ссылки на источники там есть.

Хорошие темы для small talk с коллегами, идентифицирующими себя как математиков, — это история, философия и методы этой науки. Книг на эту тему великое множество, посоветуем три и одну статью:

  • В. А. Успенский, «Предисловие к математике». Автор — одновременно и крупный математик, и известный лингвист.
  • Д. Пойа, «Математика и правдоподобные рассуждения». Двухтомник о том, как математики думают и делают открытия. Много примеров и упражнений.
  • С. Сингх, «Великая теорема Ферма». Об истории доказательства знаменитой теоремы.

В 1960 году физик Юджин Вигнер написал статью «Непостижимая эффективность математики в естественных науках». Одно название ласкает слух любого математика («непостижимая»!), а идеи оттуда можно обсуждать часами — они, к слову, до сих пор звучат очень современно.

Профильные науки

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

  • найти ближайший магазин;
  • решить домашку по математике;
  • рассчитать стоимость строительства;
  • отредактировать фотографию;
  • создать 3D-модель;
  • сохранить запись в базе данных;
  • проанализировать статистику;
  • перевести текст.

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

Нужно: всем.

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

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

Давайте так. Мы будем описывать разные ситуации. Читайте каждый пункт по очереди. Если поймете, что этот пункт не про вас, переходите к следующему. И так пока не получите свой ответ.

  1. Хочу что-то предельно простое, может даже не самое практичное. Ваш язык: Ruby.
  2. Я хочу начать кодить для себя, из любопытства или в рамках самосовершенствования. У меня нет на примете проекта, который мне бы хотелось реализовать. Посоветуйте мне лучший способ начать. Ваш язык: Python.
  3. Я хочу начать кодить для себя, из любопытства или в рамках самосовершенствования. У меня нет на примете проекта, но я хотел бы выучить такой язык, чтобы после него было легко переключиться на любой другой (даже если изначально изучение первого языка будет трудным). Ваш язык: С++.
  4. Я хочу кодить для себя, и у меня на примете есть проект. Он связан с сайтами. Хочу выучить самый простой язык из тех, что позволит мне создавать сайты в интернете. Ваш язык: JavaScript.
  5. Я хочу кодить для себя, и у меня на примете есть проект. Он связан с сайтами, но в будущем я хотел бы работать не только с ними. Ваш язык: Python.
  6. Хочу стать программистом для себя, и есть идея проекта, связанного с приложениями на Android. Ваш язык: Java
  7. Хочу стать программистом для себя, и есть идея проекта, связанного с приложениями на iOS Ваш язык: Objective-C
  8. Хочу стать программистом для себя, и есть идея проекта, связанного с компьютерными играми или сложными программами в 3D. Ваш язык: C++
  9. Я иду в программирование ради денег, и хочу получить хорошую работу. Компания не имеет особого значения. Ваш язык: Java или Python.
  10. Я хочу устроиться на работу в компанию и работать с веб-интерфейами. Ваш язык: JavaScript.
  11. Хочу устроиться в компанию и работать с сайтами. Готов потрудиться чуть больше, но охватить при этом более широкий спектр знаний. Ваш язык: PHP.
  12. В будущем я хочу устроиться в крупную корпорацию вроде Google или Facebook. Ваш язык: Python.
  13. В будущем я хочу устроиться работать в Apple. Ваш язык: Objective-C.
  14. В будущем я хочу устроиться работать в Microsoft. Ваш язык: C#.

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

Мифы профессии

А если программист ещё и геймер… Всегда можно найти пару 😉

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

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

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

Программист имеет низкий потолок в карьере. Нет, любой программист имеет возможности горизонтального и вертикального роста

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

Программистов заменят роботы. Буду краток. А кто роботов будет программировать? 😉

Математика в анализе данных

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

Чем очень хорош ШАД — здесь ты сразу замечаешь взаимосвязи, видишь, зачем нужна конкретная теорема, зачем нужна линейная алгебра и зачем нужна статистика, где всё это используется в текущий момент и так далее. Всё начинает иметь смысл.

Практически всё машинное обучение и нейронные сети — это смесь теории вероятностей, математического анализа и линейной алгебры

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

Александр Баталов, технический директор Zavento:

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

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

В учёбе

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

Парадокс: заговора математиков по проникновению во все отрасли не существует, но математика тем не менее повсюду.

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

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

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

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

  • Иногда вместо контрольных разрешается сдавать рефераты и доклады по истории математики или про применение математики в вашей специальности.
  • Если вы получаете образование не в первый раз, то попытайтесь перезачесть математику из прошлых дипломов. Упирайте на то, что раньше трава была зеленее и математику преподавали лучше, даже если это было год назад.
  • Попробуйте поучаствовать в какой-нибудь околоматематической активности «на зачёт» — например, в организации викторины в школе или в волонтёрской работе на Дне математики в вузе.


Фото: Andika Christian / Unsplash

Международный день математики — 14 марта, он же День числа пи. Неофициальный День математика в университетах нашей страны отмечается 1 апреля (не спрашивайте почему). Математикам Нобелевскую премию — учтите это, если будете сочинять преподавателю поздравление с этими праздниками.

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

  • Пользуйтесь интернет-ресурсами: сайтом Александра Емелина, YouTube-каналом 3Blue1Brown, уже упомянутой Академией Хана.
  • Объединяйтесь в группы и чаты для совместного разбора тем и задач.
  • Найдите репетитора — с соседнего факультета, из другого вуза или в интернете. Порекомендовать репетитора, разумеется, попросите самого преподавателя математики.
  • И, конечно, не пропускайте уроки, лекции и семинары.

Будьте осторожны со шпаргалками из интернета — как правило, преподаватели знают их все наизусть. К тому же бездумное заучивание не даёт понимания — а того, кто не понимает, о чём говорит, на экзамене видно сразу. Соответственно, риск дополнительных вопросов → стыд-позор-провал → пересдача.

Миф №2: машина умеет думать

— В общем, код любой программы представляет собой набор команд, а компьютер их тупо исполняет.
— То есть, он не понимает сути самих команд? Но как он воспринимает текст, который я ввожу на экране?
— Когда ты крутишь педали на велосипеде — понимает ли он, что ему сейчас нужно поехать вперёд?
— Нет, но ведь едет. Поскольку его цепь преобразует вращение педалей во вращение колёса.
— Именно! Также и компьютер преобразует введённый тобой текст в набор чисел.
— Каким образом?
— У каждого символа текста есть свой числовой код, который знает компьютер. Это называется кодировкой. Например, английская «a» кодируется числом 97, а знак равенства — числом 61.
— Поэтому машина и может понимать текст, который мы ей сообщаем?
— Нет, она «понимает» не смысл. А лишь то, каким образом этот текст хранить, и как к нему обращаться.
— Выходит, сначала мы вводим текст, затем компьютер разбивает его на символы, а каждый символ уже представляет в виде числа?
— Верно. Сложные структуры представляются в виде более простых, которые и «понимает» машина.
   Скажите мне, из чего состоит жилой дом?
— Ну… Из этажей.
— А из чего состоят этажи? И так далее.
— Этажи — из стен. А стены — из кирпичей. А кирпичи…
— Вот числа для компьютера — это то же, что и кирпичи для дома. Символы — это стены. Отдельные предложения — этажи. А книги — целые дома! Но у программистов есть преимущество перед строителями.
— Какое?
— Строитель не может строить целыми этажами, он вынужден всегда класть кирпичи. Даже если некий сверхмощный подъёмный кран позволит ему строить готовые этажи, он не сможет строить им целые дома или жилые кварталы. А программист сможет! Раз он уже «обучил» машину понимать конечный текст — то, по сути, он «обучил» подъёмный кран строить готовый дом за одно действие.
— То есть, программист может использовать всё более и более сложные структуры данных?
— Да. Поэтому первая из составляющих его работы — представить понятные человеку данные (текст, изображение, звук) в виде объединения более простых данных, уже понятных компьютеру. Разработчик практически «с нуля» составляет структуру, которая должна полностью описывать понятную человеку вещь — причём таким образом, чтобы эта структура была легко расширяемой и изменяемой (ведь в программу часто приходится вносить какие-то новые возможности).
— Хех! Выходит, что он строит резиновые дома из съёмных панелей!
— Примерно так. Однако, ещё ему придётся не только описать, что же ему нужно построить — но и как всё это построить. То есть, придумать алгоритм. Это вторая из составляющих его работы.
— Программист придумывает алгоритм на каждое действие?
— Именно. Поэтому алгоритмов получается очень много. Но его работу облегчает то, что одни действия могут содержать в себе другие, уже описанные им ранее.
— И здесь ему на помощь приходит язык программирования?
— Не совсем…

Миф №3: язык программирования нужен для составления алгоритмов

— Правда, многие из нынешних языков программирования уже содержат «в себе» набор заранее составленных алгоритмов, которые разработчик может использовать в качестве готовых. Поэтому язык всё же немного облегчает процесс составления алгоритмов.
— То есть, если один программист составил какой-то алгоритм, то его тут же могут использовать другие?
— Да, и это происходит постоянно. Это одна из причин, почему отрасль IT так быстро развивается. Однако новые алгоритмы приходится составлять самому.
— А составь какой-нибудь прямо сейчас!
— Легко. Классический пример: у вас есть книга, в ней 1000 страниц. Вам нужно открыть в ней, к примеру, 875-ю страницу. Как бы вы стали это делать?
— Ну, просто пробежал от первой до 875-й, только и всего.
— Угу, и придётся тебе глядеть на номер каждой страницы. А представь, если все их уголки слиплись — сколько времени тогда пройдёт? А вот мне достаточно перебрать лишь 3 страницы!
— Как?
— Вначале я выберу страницу, которая находится посередине книги, то есть 500-ю. Потом посмотрю: в какую из образовавшихся половин должна попасть искомая страница?
— Во вторую. А дальше что?
— То же самое. Интервал с 500-й по 1000-ю я снова поделю надвое, открыв центральную страницу. Получится интервал от 750-й страницы до 1000-й, в нём я опять выберу центральную. Какой будет номер?
— 750 плюс 125… Так это же и есть 875!
— Вот видишь. Всего 3 действия! Даже если я буду не совсем точен при выборе центральной страницы, я всё равно найду нужную намного быстрее тебя. Этот алгоритм носит название «дихотомия». Хотя в реальности программисты используют куда более сложные алгоритмы.
— И ты можешь записать его на бумаге?
— Конечно. Где там моя ручка?
— Ну как, алгоритм ясен?
— Хм… Да, и впрямь ясен.
— Сейчас он записан в виде, уже слегка похожем на реальный программный код.
— А в чём отличия?
— В реальном коде все слова будут написаны на английском, а также будет заранее описана структура «книга» (помните, что я раньше рассказывал про структуры данных?). Плюс, для действий «ищем» и «удаляем» тоже будут составлены свои алгоритмы. Но в целом — всё то же самое.
— И ты занимаешься этим изо дня в день?
— В основном.
— И тебе не скучно?
— Ничуть!

Базовые требования к профессионалу

  • Критическое мышление — умение выделять главное в требованиях, подходить к своему и чужому коду с точки зрения постоянной оптимизации и улучшения; навыки поиска лучших путей решения задач.
  • Ориентированность на работу с деталями — в программировании не бывает мелочей. Даже если вы не написали ни строчки кода, вы наверняка слышали шутки про то, как отступ или потерянная точка с запятой отнимают часы в поисках бага и причин ошибок при компиляции. Невнимательный программист — нонсенс.
  • Сосредоточенность, усилие, терпение — нередко приходится писать большие фрагменты кода, глубоко погружаться в поиск решения задачи. Любой отвлекающий момент растянет эти процессы надолго, поэтому программист должен иметь явно выраженный навык «свинцовой задницы», позволяющей дотошно разобраться в проблеме.
  • Склонность к переработкам — вас сейчас возмутит этот пункт, особенно если вы выпускник или студент. Как так, переработка?! Только платно, по ТК РФ и вообще! Но нет, поработав немного, особенно на удалёнке, вы заметите, что с радостью отдаёте работе гораздо больше часов жизни, чем ей положено. Кстати, не замечал, чтобы кто-то активно боролся с этим явлением. Например, я пишу эту статью, на моих часах 00:09, а впереди ещё много текста и размышлений + основная работа 😉
  • Навыки активного слушания и общения — вам придётся понимать, что вам хочет объяснить внешний или внутренний заказчик. Да, иногда их ТЗ звучат как описания товаров с Алиэкспресс, и вам придётся вытягивать детали в процессе тесного диалога и длительного обсуждения. 
  • Умение работать в команде — программист никогда не работает один и нужно уметь вписаться как в команду, так и в правила управления разработкой, методологии и code style вашей компании.
  • Потребность в самообучении — именно потребность. Вы должны непрерывно и осознанно изучать новые фреймворки, библиотеки, SDK, API, языки программирования и прочие инструкции и материалы. Остановитесь — через 6-12 месяцев отстанете от поезда.
  • Ответственность — программист всегда отвечает за качество кода, который он создал, за работу программы, за её стабильность и быстродействие. Если вы склонны валить вину на тестировщика, заказчика или коллегу-разработчика, вам лучше пойти в менеджеры проекта (очень злая шутка, простите). А если серьёзно, программист отвечает за программу не меньше, чем хирург за операцию или строитель за мост или здание. 

Программирование — фундаментальный навык

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


Цитата из книги А.Г. Гайштута «Калькулятор — твой помощник и соперник в играх», 1988 год.

Если говорить серьезно, то программирование — фундаментальный навык по той простой причине, что оно заставляет мыслить абстрактно. В его основе лежат принципы анализа и синтеза, или композиции и декомпозиции — это одно и то же по своей сути. В английском языке существует понятие “computational thinking”, которое можно определить как совокупность умений мыслить абстрактно, критически и разделять задачу на небольшие части. Именно этому может научить программирование, по мнению экспертов.

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

Математика

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

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

Полезная литература:

  • Томас Кормен. «Алгоритмы: построение и анализ».
  • Дональд Кнут. «Искусство программирования».

Нужно: всем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector