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

Рассказывает Сергей Чернов специально для «Типичного программиста»


1. Выберите цель изучения языка программирования

Например: веб, десктоп, смартфоны и пр. В результате круг языков сократится. Если цель — просто попробовать программирование, то стоит выбрать легкий и интересный язык. На эту тему также уже высказывались эксперты Tproger.

2. Задай вопрос на форуме

Зная цель, вы можете точнее задать вопрос на профильных форумах. Например: «я хочу разрабатывать приложения для iPhone (под iOS), какой язык мне нужно изучить?» Также можете собрать статистику, какой язык нужнее на рынке труда и в какой сфере. Буквально, говоря о мобильной разработке, численно сравнив аудиторию пользователей Android, iOS и Windows Phone.

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

3. Читайте различные статьи на тему программирования

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

4. Изучите информацию об изучаемом языке

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

5. Разберитесь в основных приемах программирования

Ниже будет приведен примерный список таких приемов. Здесь понадобится поискать и составить список ссылок на справочники по языку, уроки и начать углубляться в изучение синтаксиса. Выше все было абстрактно, теперь практика. Начните с простого: вывести на экран «Hello, world!», сортировать массив, найти слово в тексте, перевернуть изображение и далее с повышением уровня сложности.

6. Создайте что-то «настоящее»

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

7. Совершенствуйте код

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

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

8. Сравнивайте себя с другими

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

Пример

Рассмотрим, как бы человек мог ответить на эти вопросы.

1. Я хочу создавать игры!

У меня мечта сделать игру типа «Марио» для компьютера, в перспективе хотелось бы делать игры для смартфонов и зарабатывать на этом, хотелось бы создавать несложные утилитки для себя.

2. Я выбрал ActionScript 3.0.

Спросил на форуме, что почитать, нашел кучу литературы, стал читать и ничего не понимаю.

3. Я изучаю статьи.

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

4. Я выясняю, как грамотно писать на языке.

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

5. Я могу программировать и хочу создать что-то простое!

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

Математика
  • Генерация случайного числа;
  • Тригонометрические функции (синус, косинус, тангенс).
Графика
  • Работа с картинками, пикселями, прозрачностями, цветом;
  • Программное рисование;
  • Вывод изображений на экран, работа со слоями (z-индекс);
  • Способы компоновки изображений (объединение, родители, потомки);
  • Изменение состояния объектов (размеры, координаты, поворот).
Текст
  • Поля ввода, отображение текста на экране;
  • Работа с текстовыми данными (поиск, замена, объединение, регулярные выражения);
  • Форматирование текста, использование стилей для форматирования.
Файлы
  • Сохранение данных в файл;
  • Использование локальных баз данных.
Интернет
  • Загрузка внешних данных;
  • Отправка данных на сервер.
Интерактивность
  • Управление с мышки, клавиатуры, сенсорного экрана;
  • Вспомогательные компоненты графического интерфейса (кнопки, флаги, радио, всплывающие меню и т.д.).
Анимация
  • Изменение состояния отображаемых объектов во времени;
  • Работа с видео.
Время
  • Таймеры.
Работа со звуком
Работа с возможностями устройства
  • Например, GPS, вебкамера, микрофон, акселерометр и т.д.

6. Я решил сделать игру по всем правилам геймдева.

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

7. За моими плечами простецкая игрушка Пятнашки, 2048.

Я разобрался как делать приложения для смартфона из моего же кода. Мне понравился Air. Я делаю парсер сайтов на нем. У меня куча идей и проектов. Я прокачиваюсь дальше.

Пётр Соковых, транслятор двоичного кода в русский язык