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

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

«Нет ничего невозможного», — говорит Дмитрий, iOS-разработчик компании SFERA. Навыки написания программ может приобрести любой желающий в любом возрасте. Главное — мотивация и упорный труд».

Мы побеседовали с Дмитрием о том, как стать квалифицированным программистом и какие перспективы есть у этой профессии.

1. С чего начать изучение программирования?

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

2. Какие источники для изучения использовать?

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

Следующие книги помогут вам в освоении профессии:

  • «Паттерны проектирования», Эрик Фримен, Элизабет Фримен;
  • «Чистый код», Роберт Мартин;
  • «Совершенный код. Мастер-класс», Стив Макконнелл;
  • «Алгоритмы: построение и анализ», Томас Кормен, Чарльз Лейзерсон;
  • «Искусство программирования» (все тома), Дональд Кнут;
  • «Сколько стоит программный проект», Стив Макконнелл.

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

3. Как выбрать язык программирования?

После освоения основ переходите к языкам Pascal и С++. Далее из множества языков выберите тот, который подойдет под ваши цели и задачи. Создание кодов начинайте с самых простых команд. Затем напишите те программы, которые облегчат выполнение определенных задач в будущем. Занимаясь по 2–3 часа в день, вы сможете начать писать уже через 2–3 месяца. И не переходите на следующий уровень, не разобравшись досконально с каждой мелочью.

4. Как наработать опыт?

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

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

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

На этих ресурсах вы сможете обмениваться опытом с коллегами:

5. Будут ли востребованы разработчики в будущем?

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

В российском IT-проекте SFERA успешно взаимодействуют как профессионалы, так и начинающие специалисты. Они создают уникальную платформу, которая объединяет десятки мобильных приложений. А цель ее разработки — развитие пользователей и экономия их времени.

Чтобы узнать больше о масштабном IT-стартапе SFERA, подписывайтесь на наши страницы в социальных сетях:

0
26 комментариев
Написать комментарий...
Роман Анисимов

Глупости какие-то. Так квалифицированным программистом не стать никогда. То же самое, что и учиться в онлайн-школе типа GB или SB.

1) С чего начать изучать программирование?
С программирования. Других вариантов здесь быть не может. Берём простейший код, который понятен будет построчно, изучаем, к чему приводит каждая строчка, пишем что-то своё. После самые простейшие задачи решаем кодом. Не получается – гуглим. Не находится конкретный вопрос – ищем конкретное решение. Это как ГДЗ в школе: если воспользовались, будьте добры для начала разобраться в решении, а не просто переписывать. Просто так в программисты не идут. Придумайте задачу, которая должна быть решена при помощи кода: автоматизация рутины, программа, приложение, бот. По мере разрастания функциями и возможностями, будут появляться новые знания. Да, многое будет непонятно в начале (например, нашли функцию для работы с сетью, но всё, что смогли там сделать – вписать свой URL и параметры, – это замечательно, уже разобрались и в такой мелочи), но постепенно будете возвращаться к своему коду, будете встречать каждый раз в разных вариациях какие-то конструкции, тогда потихоньку начнёте вникать в их суть по мере усложнения требований к своей разработке. Даже если понимаете, как работает функция, но не можете запомнить её – а зачем? Главное, что в будущем будете знать, какая функция нужна, и где её искать. Чем чаще её использовать – тем быстрее она запомнится. Математика нужна, но какая именно? Обычно достаточно математики 6 класса. Так что если в школе было всё до этого момента хорошо – то не о чем переживать. Математическое мышление – это уже другая сторона, здесь нужно по мере прочтения задачи представлять ход её решения, хотя бы пошаговый, без чисел. Тут уж сами, просто нужно больше решать задач, в которых много действий, и одно выходит из другого. Ещё может понадобиться координатное мышление, чтобы не теряться в многомерных массивах – для этого нужно чертить графики, координатные точки и т.п., это 7 класс, алгебра.

2) Какие источники для изучения использовать?
Интернет. Всё. Никаких книг. Книги по программированию – это как минимум прошлое. Чтобы понимать программирование, писать красивый код, нужно писать код и смотреть на код других. Красивый код = понятный, масштабируемый и универсальный код. Всё, что написано в книгах – это от помешанных гиков для помешанных гиков, адекватным программистам там не место. Я серьёзно. Назовите мне компанию, которая использует ПАТТЕРНЫ ПРОГРАММИРОВАНИЯ. Да, знать это желательно, но необязательно, ничего не потеряете. Так или иначе, это всё равно придёт с опытом, рано или поздно.

3) Как выбрать язык программирования?
"Pascal, C++" – отличный разброс. Я, как и многие другие, начинал с Pascal; кто-то начинал с C++; кто-то с Python; кто-то с Basic. Каждый язык хорош в своей области. Хотите писать макросы для офиса – берём Basic; создавать десктопные программы максимально быстро с красивыми формами – берём Pascal и оттуда идём в Delphi (это тот же язык); хотите контролировать каждый байт памяти и иметь низкоуровневый контролируемый доступ к железу – C++ (это игровые движки, очень нативный код (максимально совместимый с железом)), на котором можно писать быстрейшие приложения, очень мощный, но очень сложный для начинающего. Python – для быстрых прототипов (часто используется в спортивном программировании, хакатонах), но очень медленный и очень зависимый от многих факторов и навыков программиста, здесь нужна внимательность. Как выбрать язык – вечный вопрос. Я не знаю. Наверное, под задачи, которые необходимо выполнить. Ведь есть же ещё веб-программирование и даже визуальное программирование.

4) Как наработать опыт?
Разрабатывать проекты, писать код, улучшать код, общаться на форумах, отвечая на вопросы, участвуя в обсуждениях, изучая неизвестные вопросы. На работу берут новичков реже, чем комета Галлея снова пролетает мимо нас. В нормальные студии разработки не будут брать новичков, потому что это затратно по деньгам и времени, его ещё нужно обучать, чтобы он разобрался с внутренними спецификациями разработки, следить за ним. Какие-нибудь компании офисные наймут, может, но программирования там не увидите. Но никогда не нужно сдаваться, вдруг повезёт. habr – туда же, к литературе; StackOverflow – будет попадаться в гугле чаще, чем видите себя в зеркале.

5) Будут ли востребованы разработчики в будущем?
Такие, как интервьюируемый – скорее всего нет. Разработчик, программист – это не про код, это про умение изучить и влиться в незнакомую область за минимум времени; это про умение найти максимально эффективное решение вне зависимости от имеющихся инструментов; это про тех, кто знает, что написать одну строчку в день – это нормально.

Ответить
Развернуть ветку
Игорь Лушкин

Вы знаете, Дмитрий, является Менеджером Проекта и ведущим специалистом по IOS. Работал преподавателем в университете. Наверное стоит прислушаться к такому уровню специалиста. 

Ответить
Развернуть ветку
Роман Анисимов

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

Ответить
Развернуть ветку
Игорь Лушкин

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Kipparis

В Кнуте и Кормене описанные решения и базовые принципы построения решений которые используют для ответа в интернете (полностью прочитал эти книги).
Более того, там описанны базовые структуры данных и их применения (например, кто знает на чем написан словарь в cpp и насколько быстро выполняется вставка, какие есть альтернативы)(другой пример, как работает unordered_map и как устроено хеширование) . 
Так что, говоря что "плохо слушать человека который рекомендует эти книги" ты сам показываешь что не знаешь никаких основ, и в программировании ты только мимолетом.
Итог: изучение советую начать с того, чтобы понять как устроена динамическая и статическая память, затем изучить алгоритмы и структуры данных (по вышеупомянутым книгам + Гасфилд - работа со строками очень популярно). После всего этого, можно прийти в любой язык программирования и полностью понимать. 
P. S. Можешь изучать английский язык просто практикуясь, но только захочешь сделать что то свое - получится каша. А можешь изучать структурированно, по книжкам - сможешь творить правильные вещи

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Атанов Владимир

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

Ответить
Развернуть ветку
Роман Анисимов

Про какую базу идёт речь? Язык ассемблера – это работа с инструкциями для конкретной архитектуры процессора, здесь не поможет ни база, о которой явно идёт речь (типа "я знаю принципы ООП" и т.п.), ни увлечение кодингом, потому что это очень специфическая область, напрямую связанная со знанием внутреннего устройства работы процессора. Этим нужно заниматься сознательно. Если я знаю C++, мне несложно будет разобраться в C-подобных языках, но я ничего не пойму на asm, мне придётся изучать целое направление, и мне точно не поможет моё знание stl или типа того. "Формошлёп на iOS" – это очень точно, потому что ничего сложного в программировании 2D–приложений нет, какие бы функции это приложение ни предоставляло.

Ответить
Развернуть ветку
Игорь Лушкин

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

Ответить
Развернуть ветку
Mikhail Bezverkhy

Апелляция к авторитету против фактов, хм, к чему бы прислушаться

Ответить
Развернуть ветку
Daniel Wojewski

Актуальны ли эти советы, если есть желание стать iOS/macOS разработчиком?

Ответить
Развернуть ветку
Роман Анисимов

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

Ответить
Развернуть ветку
Владислав Сомов

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

Ответить
Развернуть ветку
Максим Петров

ну, может это не так и плохо, что забросит. Ибо разраб - не пальцем деланный "ссыкун", простите:) 

Ответить
Развернуть ветку
Az Idea

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

Ответить
Развернуть ветку
Роман Анисимов

Что Вы имеете в виду?

Ответить
Развернуть ветку
Az Idea

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

Ответить
Развернуть ветку
Роман Анисимов

Про эксель всё равно непонятно. Если вопрос в том, нужно ли дата-аналитику эксель – я не знаю, потому что я в этой области не разбираюсь, для меня она сложная. Программисты 1С будут нужны как никто в нашей стране. Насколько я понимаю, язык не такой сложный. Про горизонты сказать не могу. Вообще плохо выбирать язык, оглядываясь на рынок. Программирование – это постоянный огонь. Если его нет, то будь у тебя даже должность от 100к в программировании, очень скоро наступит выгорание. Этим нужно жить, это должно быть хобби, тогда и по случаю можно в любую область влиться, при этом огонь всё ещё будет гореть. Лучше узнавать об интересуемом направлении из видео с нормальными разработчиками, таких полно.

Ответить
Развернуть ветку
Az Idea

Роман! Благодарю, что нашли время на ответ. Здесь в столбе тоже появились подсказки.
И от души приношу сорри: за вклинивание "когда большие пацаны речь толкуют", - зуб даю - этот материал положил началу входа к вам, к профи нематериального!

Ответить
Развернуть ветку
Атанов Владимир

Поддерживаю

Ответить
Развернуть ветку
Константин Нагибович

"Качественные коды" - дальше не стал читать.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Панда Ву

Как программист Дмитрий может и неплохой, но советчик нулевой. Какой нафиг паскаль в 2020 году? Алё? С++ для новичка? Математика, Дональд Кнут... это всё для тех кто с 1 курса универа в айтишники пошел.

Если это читает жаждущий стать программистом:

1) не ссать
2) начинаем с языка scratch и курсов CS50 на ютубе
3) javarush. Если дошел до 12 уровня и не слился - потенциал есть.
4) параллельно проходим hexlet начиная с базовых курсов
5) потом практика на выбранном языке на hackerrank
6) по дороге станет ясно где и в каком порядке добывать информацию

Удачи!

Ответить
Развернуть ветку
Руслан Манкулиев

А у Дмитрия есть фамилия?

Не серьёзно это как то, я настроился на серьёзный лад. А там безликий Дмитрий ...эх😒.

Ответить
Развернуть ветку
Артём Антипин

Ещё одни инфобизнесмены. Полюбила молодежь лёгкие денежки на курсах.

Ответить
Развернуть ветку
23 комментария
Раскрывать всегда