Ivan Shyla
июнь 2015.
10621

С чего начинать обучения программированию во взрослом возрасте, какой язык выбрать и что читать и как практиковаться?

Ответить
Ответить
Комментировать
0
Подписаться
138
6 ответов
Поделиться

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

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

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

В качестве серверных языков популярны php (советую прочитать книжку "PHP and MySQL Web Development" - Luke Welling и Laura Thomson), Java (книга "Философия Java" - Брюс Эккель), Python, c#, ruby. Из клиентских языков наиболее перспективен Java Script. Это единственный язык, который есть в каждом популярном браузере. Специалисты со знанием этих языков с большей вероятностью смогут трудоустроиться на хорошие должности с высоким окладом. Как учатся за границей Правда ли, что каждый десятый американец не умеет читать?Правда ли, что китайские дети начинают свое образование в возрасте двух лет?Почему в Японии дети отказываются от личной жизни в пользу знаний, а наших кнутом не заставить учиться? Больше интересных фактов

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

Если вы хотите заниматься разработкой сложных высоконагруженных проектов, то изучайте C++ (книга Бьерн Струструп - "C++"). На этом же языке пишутся игры. Хорошие специалисты C++ всегда востребованы в серьезных компаниях в разработке критичных к производительности компонентов ПО.

Еще одна перспективная сфера - это разработка приложений для мобильных устройств. Тут используют Java, Objective-C.

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

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

Общая идея состоит в том, что вам нужно попробовать программировать и выучить хотя бы один язык, попрактиковаться, овладеть минимальным набором навыков, которыми обладает хотя бы младший (иногда их называют junior) программист. Где-то в этой точке у вас будет минимальное представление о программировании и о вашем желании продолжать двигаться в ту или иную область. Например, начать получать опыт коммерческой разработки. Это может быть либо фриланс (отличный вариант для тех, кто меняет работу, и не хочет уходить со старой, бросаясь в омут с головой), либо, если есть такая возможность попасть на оплачиваемую-неоплачиваемую стажировку (будет она оплачиваться или нет, зависит от того, достаточно ли у вас навыков и на каком они уровне, а также от того, в каком состоянии находится ИТ-рынок в вашем городе).

Начинать я бы советовал с языка Python. Это довольно популярный язык общего назначения. На нем пишут и серверную часть сайтов, его используют в академических исследованиях и этот язык в целом неплохо для прототипирования. Он хорош лаконичностью и простотой своего синтаксиса (по сравнению с другими ЯП - языками программирования). Несмотря на такую простоту, его активно используют в больших ит-конторах: в Яндексе, в Рамблере, в Мэйл.ру, в Гугл, в Яху и многих других.

Что читать по питону? Если у вас неплохой английский, то можно начать с Learn Python The Hardway. Она хороша тем, что рассчитана на совсем новичков - там описаны основные идеи: что такое интерпретатор, функции, переменные, в чем суть ООП, что такое юнит-тестирование, и как вообще происходит обработка запроса в веб-приложении. Это даст вам больше уверенности в продвижении дальше - не только благодаря теории, но и благодаря тому, что в книге много упражнений для закрепления теории. Не смущайтесь, если задания покажутся нудными - лучше проработать основы и набить руку (в как школе - на простых уравнениях), чтобы потом не задумываться о простых вещах.

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

Попробуйте написать простейший веб-блог. Для этого вам пригодятся хотя бы минимальные знания того, что такое базы данных (БД), как они устроены и умение работать хотя бы с одной. Если их совсем мало или нет - вам поможет книга Мартин Грабер - Понимание SQL. После нее у вас не будет особых трудностей в изучении MyQL и PostgreSQL - две довольно популярных СУБД (системы управления БД). Еще вам будут полезны навыки верстки - в сети полно разных курсов, как платных, так и бесплатных. Достаточно будет минимальных, чтобы создать несколько страничек, откуда создавать и редактировать пост в блоге, выводить список статей, и так далее. По мере появления аппетита (если он начнет появляться) расширяйте идею и добавляйте новые функции - категории, комментарии, скрытые посты, регистрация в блоге, и так далее.

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

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

После этих этапов вы уже будете иметь начальные навыки python, mysql/postgresql, минимальные навыки верстки (в целом для веб-разработчика полезным был бы еще и javascript). С таким набором у вас уже есть неплохие шансы найти оплачиваемую стажировку - иными словами, начать работать младшим программистом.

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

PHP имеет дурную репутацию языка с очень низким порогом входа, который прививает плохие привычки в программировании. Но это порождает долгие холивары среди программистов, поэтому нужно помнить, что это всего лишь мнение. Зато php очень распространен, почти в любом городе есть вакансии на нем. Обратной стороной этого является то, что у вас много конкурентов и не самая высокая зарплата (в среднем, программисты на python и ruby получают чуть больше). На php были написаны Facebook, Вконтакте, Badoo и другие сервисы.

Ruby стал популярен сравнительно недавно. У него хорошее и активное сообщество, которому много курсов. Часто его используют в связке с Ruby on Rails - это фреймворк, также как и Django, только для руби.

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

Java, как было сказано выше, язык довольно популярный и хорошо оплачиваемый. Она используется в банках, для разработки различного корпоративного ПО, она используется для программирования на Android, она используется и как веб-серверная часть некоторых больших сайтов. По Java все хвалят "thinking in java". Кажется, на русский книга тоже переводилась. Чем актуальней вы найдете переиздание, тем лучше.

Си активно используется в программировании микроконтроллеров и встроенных систем. На нем также пишут приложения для десктопов в целом. И часто переписывают критичные в плане быстродействия части своих приложений. Если интересно - вы можете купить какие-то электронные конструкторы типа Arduino (хотя полно и их аналогов, ардуино просто были одними из первых и наиболее популярных), и поиграться с ними - помигать светодиодами, подключить к ним датчики температуры и другие, подключить железку к компьютеру и передавать на компьютер данные, как-то обрабатывать эти данные. А может быть, вы захотите потом эти данные показывать на комьютере, в веб-браузере? А может быть, вам захочется потом написать к этому и мобильное приложение? Кто знает. Вы найдете много хороших идей по теме "Умный дом". Как на специальных форумах, так и на Хабрахарбе - habr.ru. По Си очень полезны Керниган и Ричи. "Язык С".

Еще есть Objective-C и Swift - оба языка для программирования в экосфере продуктов Apple: iOS, MacOS. Первый постарше и посложнее в плане синтаксиса, второй - более новый, похож по синтаксису на Python. Чтобы писать под Apple, вам понадобится макбук. Проблемой обоих языков является то, что на русском языке по ним информации в разы меньше, чем по Java, Си или Питону.

Освоив Java или что-то от Apple, вы сможете заниматься мобильной разработкой. Это довольно востребованное направление на рынке сейчас, и мобильные разработчики часто получают чуть больше. Правда, мобильная разработка в основном востребована в городах с развитым IT-рынком (много айти-компаний, много вакансий).

Вполне возможно, что вы не захотите тратить много времени на обучение по книгам. Тогда вы можете пойти на курсы обучения программированию - такие есть и в сети - что-то типа видеокурсов. Есть курсы офлайн - когда вы приходите из занимаетесь с преподавателем в группе. Это дороже, но быстрее. Из хороших курсов вспоминается hexlet.io - там не так много, хотя вводный курс в Java и Ruby есть. Еще вспомнил курсы "Специалист" - specialist.ru . Несмотря на не выглядящий современным сайт, на фоне остальных курсов эти, на мой взгляд, неплохи. У них есть как онлайн обучение, так и офлайн.

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

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

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

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

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

Полезно также будет узнать про системы контроля версий (VCS). Достаточно и git (по моим наблюдениям, он чуть более распространен), но hg тоже полезен.

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

Держите в голове идею, что в программировании нельзя один раз выучиться и все. Вам придется постоянно обновлять свои знания, потому что IT - это быстроразвивающаяся отрасль. Иногда для того, чтобы держать себя в тонусе, достаточно просто читать книги и новости, а иногда полезно сделать свой pet-project (еще их называют side project) - просто для себя. Такие проекты особенно хорошо и интересно делать, чтобы решить какую-то вашу собственную задачу.

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

Помните, что упорство и практика - два самых важных инструмента. Сразу после головы, конечно же. :)

В общем, удачи!

В самом начале пройдите несколько курсов на codecademy.com - это поместит вас в контекст и развлечет :)

Курсы по программированию разных университетов можно найти и на coursera.org (некоторые даже дают сертификат).

Показать ещё 3 ответа
Ответить