В последнее время часто встречаются рекомендации учить Питон. Курсы, уроки, примеры.
Python считается легким языком для тех, кто хочет научиться программировать. Но здесь и кроется подвох.
Легких или трудных языков программирования не существует.
Существует программирование как таковое. Это набор общих, универсальных, абстрактных понятий, а языки всего лишь описывают эти понятия, но не могут сделать их ни труднее, ни легче.
Например, вот несколько строчек, которые делают одно и то же на разных языках:
a = 5
a := 5;
$a = 5;
var a = 5;
int a = 5;
var a:Integer = 5;
Они все записаны по-разному, но разве их сложность сильно отличается? Конечно, нет. И даже не надо ничего учить, чтобы кое-что здесь сходу понять. Здесь переменной a присваивается значение 5.
Можно заметить, что запись "а = 5" выглядит проще остальных. Вроде как в ней меньше всего лишних непонятных знаков. Стало быть, этот язык самый легкий? Поначалу да. Но у легкости есть и свои подводные камни, на которые вы однажды наткнетесь.
В любом случае, все эти отличия настолько незначительны, что вы потратите максимум на один день больше, чтобы их преодолеть. Что такое один день в сравнении с годами практики?
Гораздо интереснее другое: перейдите от изучения языка к изучению самой операции, и сразу появятся вопросы. А что значит "переменная"? А что значит "присваивается"? А что такое "значение"? А почему оно 5? Как видим, эти вопросы от выбора языка не зависят.
Если вы точно понимаете, что это все значит, значит, ваш склад ума подходит для программирования и вы можете легко учить любой язык – да хоть и Питон.
Дело не в языках, а в том, что некоторые люди, например, в упор не понимают, что такое "переменная", в чем ее смысл. И когда такие люди учатся программировать,
язык становится для них чем-то вроде вызубренного набора заклинаний.
Они знают, что если напишут вот такое заклинание, то получат вот такой результат. Как черная магия. Но до них не доходит, что это заклинание можно написать еще сотней способов, и получить совершенно разные результаты. Потому что в их уме не были сформированы соответствующие понятия и связи между ними.
Такие люди даже могут добиться успеха. Некоторые пишут с нуля свою первую в жизни игру, выкладывают ее куда-то, и даже зарабатывают на ней деньги. Некоторые работают программистами. Они приходят на собеседования – рассказывают про всякие крутые вещи, которые они делали, а спросишь, скажем, про множественное наследование (* см. в конце), и всё, они повисли наглухо. Они всю жизнь переписывали готовые заклинания и не знали, для чего там эти буквы пишутся. Но тем не менее они чего-то добились, и кто я такой, чтобы их осуждать?
В конце концов, у каждого свой путь.
Если ваша цель – написать по-быстрому игру и монетизировать ее, и вы достигли этой цели любым легальным способом, то вы всё сделали правильно.
Но, как говорится, на длинной дистанции вы неизбежно столкнетесь с тем, что вам не хватает опыта. Нужно что-то сделать, а шпаргалки кончились. Дальше сами.
В процессе изучения языка, само собой, вы ознакомитесь и с новыми, более сложными понятиями программирования в целом. Но если вы раньше о них не знали, то будете думать, что это такие свойства языка. Вы даже можете понять их по-своему правильно, но искаженно или однобоко, что опять же помешает вам в дальнейшем.
Поэтому, если ваша цель – долгосрочное погружение в программирование, советую отложить пока Питон. Он никуда не уползет, и поверьте, после понимания основ программирования изучить его будет в разы проще и быстрее. То есть вместо, скажем, месячного курса вы потратите на изучение... один час. А также прицепом пойдут и другие языки. Ваше время не будет потрачено зря.
Кроме того, чтобы написать программу, нужно знать ее предметную область. В зависимости от того, делаете вы веб-сайт или 3D-игру, нужно знать, как устроены куки, GET и POST запросы, спрайты, модели и т.д. Язык не научит вас этому, и не научит думать. Языком можно записать только то, что вы уже обдумали, или... скопировать чужое заклинание.
В следующих выпусках я покажу на простых примерах, как связаны абстракции программирования и материя реального мира.
(* Дополняю в связи с появившимися комментариями: множественное наследование – это не необходимое знание. Этот вопрос просто для оценки кругозора. Можно спросить про что угодно. Про статические вызовы, про исключения, про ссылочные типы. Просто, если человек утверждает, что он может включить телевизор, то логично ожидать от него, что он также сможет включить и утюг. А если он не сможет этого сделать, значит он и телевизор включает, не понимая, что делает.)
(* И ещё одно дополнение: статья не о том, что Python учить не надо.)