В предыдущем посте я написал, почему программирование является фундаментальным навыком. Подобное предполагает, что изучает его следует каждому. И, в случае с техническими специальностями, даже не связанными с непосредственной разработкой ПО, это относительно легко. Но как быть в случае, когда вы занимаетесь чем-то довольно далёким от IT?
Но начнём с другого вопроса. Я периодически встречаю обсуждения на тему "с какого языка начинать изучать программирование". Ответы, как правило, сильно субъективные: каждый отвечающий говорит о том, что ему знакомо и что кажется правильным. Часто советуют "классические" компилируемые языки со статической типизацией: C и C++. Нередко упоминают Pascal. Более "современные" ответы: Java, C#, PHP и Python.
Если вы хотите стать программистом, то выбирать язык следует из того, чем именно вы хотите заниматься, поэтому нужно смотреть прежде всего на области применения и широту распространения. Конечно, у всех языков разные углы наклона кривой обучения, но в итоге, сам язык не так важен, как окружающая инфраструктура. А именно: библиотеки, наличие всевозможных фреймворков и готовых решений, шаблонов, книг рецептов и прочего. А также сообщества, которое может прийти на помощь в случае чего. Так, например, если вы хотите заниматься играми и решаете, что вам надо освоить C# + Unity (пожалуй, самая популярная платформа для начинающих разработчиков игр), следует иметь в виду, что помимо языка вам понадобиться освоить интерфейс Unity и логику работы всего движка, а там всё не так просто, как хотелось бы.
Всё вышеперечисленное подразумевает немалое количество времени и сил, потраченных на обучение. И хорошую мотивацию. Что же делать, если ничего из этого нет, если вы не собираетесь становиться профессиональным программистом, но изучить программирование хотелось бы?
Здесь нужно исходить прежде всего из задач, которые перед вами стоят. Например, вы можете заниматься анализом данных, и тогда ваш выбор упадёт на R или Python, скорее всего. Но это всё ещё к вопросу о выборе языка, а не о том, как вам изучать программирование.
В предыдущем посте я написал, что программирование сводится к двум процессам: анализу и синтезу, деконструкции и конструкции, декомпозиции и композиции (названия на любой вкус, суть не меняется). И первый шаг в изучении программирование - это понимание, что оно состоит из двух этих процессов. Что здесь важно: программирование во многом - это декомпозиция задачи на подзадачи. Они, в свою очередь, тоже могут быть разделены на подзадачи. И так далее, до тех пор, пока вы не придёте или к набору подзадач, которые решаются элементарно, или решения которых вам не известны (в этом случае обычно помогают или гугл или старшие коллеги).
Посмотрим на примере. Допустим, нам нужно получить среднее от каких-то значений. Все ведь знают как получить среднее (арифметическое) из нескольких значений? Вы складываете все значения, а потом делите на их количество.
avg = sum(x1, x2, ... xn) / n
Это простая операция, которая во многих языках программирования реализована в виде встроенной функции. Однако, как же нам решать эту задачу "вручную"?
Для начала давайте посмотрим на наши шаги: 1 - мы складываем все значения; 2 - получившийся результат делим на число значений. Здесь пропущен один шаг - вычисление числа значений. Мы принимает это число за что-то изначально известное нам, но это не так. Поэтому алгоритм вычисления среднего становится трёхшаговым: 1 - складываем все значения; 2 - считаем число значений; 3 - делим одно на другое. Из-за того, что мы можем забывать про такие мелочи, как этот "скрытый" шаг, нам зачастую становится трудно решить задачу. Мы не можем сделать быстрый и безболезненный переход от шага 1 к шагу 3 просто потому, что мы неправильно разбили задачу на подзадачи.
Композиция, или синтез, в программировании - это объединение решений подзадач так, чтобы получившийся результат решал нашу задачу. Вышеперечисленные шаги надо делать в правильном порядке. Какой шаг идёт первым (1й или 2й) - не так важно, но что важно - 3й шаг должен быть последним, потому что он зависит от 1го и 2го, от их результатов.
Конечно, это крайне простой пример (мне не удалось придумать проще), но он иллюстрирует те проблемы, с которыми сталкиваются все начинающие программисты. Если вы научитесь разбивать задачи на подзадачи, то знайте - у вас уже есть самый базовый навык программиста, и ради одного этого навыка программирование уже стоит изучать. Если вы научитесь видеть зависимости между подзадачами, то вы сможете программировать.
Выбор языка был самым сложным моментом для меня как не программиста. Не помню уже с какого мотива, но почему-то лет 10 назад выбор пол на Turbo Pascal с Delphi. Полгода мучения с первым и столько же со вторым. В результате в голове остались только какие-то принципы и все. Больше ничего. Потом прижало и пришлось смотреть на HTML кодировку пристально. Пристально настолько, чтобы самому что-то как-то поменять на сайте, пока штатны прогер в очередном запое. Потом на смену винде пришел линукс и знаний начало добавлятся. Скрипты на js, нагло копируемые, изучаемые и изменяемые для своих нужд и так плавно дотопал до Python, который позволяет решать некоторые рабочие задачи, удобен как калькулятор и прост в своем логическом исполнении за счет отсутствия обьявления типов переменных, лишних фигурных скобок и прочего.
Да, это большая проблема и большой вопрос. Возможно, как-нибудь напишу про это отдельно. Но, в конечном итоге, всё зависит от ситуации и контекста.
Да, тут почти по Маслоу, когда потребности формируют спрос, потому стараешься всегда искать инструмент наиболее широкоиспользуемый и универсальный, ведь програмирование не твоя профессия основная и если тратить время на изучение (а время это деньги и прочие затраты психофизические), то хочешь максимальную отдачу. В результате получаешь понимание, что твои желания несколько завышены и начинаешь выбирать предмет изучения более взвешенно, опираясь уже на анализ своей прямой деятельности - где максимально может пригодится.
Именно об этом я и думал написать. Примерно такие вопросы мне уже приходилось решать для студентов.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
yudina-cat, vika-teplo
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
Я пожалуй не соглашусь, в начале пути нужно выбрать язык и идти. Если ты знаешь принципы, алгоритмы, логику и тд то выучить язык это не самое главное. Нужно понимать, что ты хочешь? Научиться писать код или научиться писать эффективный код.
Научиться писать код и, в особенности, эффективный код - это для программистов. Я же говорю о тех, кто программирование как таковым заниматься не планирует.
Язык - это, конечно, важно. Правда, он по ходу может быть изменён, и это нормально. Принципы, логика - это то, о чём я пишу, и это не привязано ни к какому языку.
Я к тому что нужно начинать с малого, изучить общую часть а потом выбирать язык и идти. А не с начало выбрать язык а потом уже понимать базу.
Например логика это баз, системы счисления, шаблоны.
А вот ООП, АОП это уже следующий этап. Третий этап это языки и их синтаксис и специфика.
Про общую часть я и пишу. Вот только для непрограммистов нужна и практика, примерно с самого начала. Иначе, они начинают тонуть в теории, смысла в которой не видят, а это убивает всю мотивацию.
@onixred для начинающих с этим нет больших проблем, как раз. Они редко пишут свои библиотеки и скрипты, которые предназначены для повторного использования.
@karppaul, не забываем еще о Legacy code )
@onixred Опять же, исходя из задач и из возможностей языка и платформы вокруг. Для анализа данных, например, мы брали R, просто потому что есть RStudio. Если и когда для Python появится что-то похожее, то можно будет взять его (хотя Jupyter вполне неплох). Впоследствии, конечно, можно будет перейти и на Python и на Julia, но к тому времени с этим не должно быть огромных проблем. Вообще, это вопрос не самый простой, за 5 минут язык не выбирается. Тот же выбор между Python и R в пользу последнего - результат обсуждений в течении нескольких месяцев с коллегами.
а так ты решаешь за них какой язык им выбирать нужно тогда пару примеров приводить
Отлично разложено. Буду ждать следующих постов.
@eduard постараюсь не разочаровать