Почему Python рекомендуется в качестве языка программирования начального уровня? [закрыто]

16

Я прочитал здесь на P.SE больше вопросов, в которых начинающим программистам рекомендуется выбрать Python в качестве первого языка программирования.

Не поймите меня неправильно, мне нравится Python. Мне это очень нравится! Но его философия вращается вокруг «Мы все взрослые по обоюдному согласию».

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

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

Вернемся к моему вопросу. Почему Python рекомендуется в качестве языка программирования начального уровня?

Какие моменты делают его хорошим для обучения языку программирования. Или ... это личное предпочтение советника?

JohnDoDo
источник
17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot- ну, C и C ++ статически типизированы, и вы были бы очень, очень удивлены, увидев, сколько разных способов вы можете от них оторваться, используя их ...
Péter Török
@ Петер Тёрёк: Да, и это отнимает у тебя всю ногу (c ++: D). Я сказал "более статично", пытаясь избежать пламенных войн за что-то вроде ... я не знаю ... Java?!?! ... что все, кажется, ненавидят, как это думают в школе / университете, и у людей есть некоторые пугает от этого ...
JohnDoDo
1
Я думаю, что C ++ - лучший начальный язык, потому что он помог мне лучше понять вещи в других языках.
Системович
1
У меня есть разногласия с Python в качестве начального языка после обучения в первом семестровом классе программирования, который использовал его. Студенты часто не понимали «типы», и зависимости от пробелов убивали их. Им также было трудно разобраться в объектах с этим «я», ссылающимся на неразумный ОО бизнес. У него есть свои достоинства, но у него тоже есть свои хулители.
Rig
2
@MahmoudHossam Я согласен. Я просто выдвинул на первый план некоторые из основных вопросов из моего опыта. Java, C #, Lisp и т. Д. Имеют свои проблемы. Это были только основные проблемы, с которыми я столкнулся при обучении Python начинающим программистам.
Рог

Ответы:

30

IMO, наиболее заметные моменты, которые говорят на Python как на языке начального уровня, таковы:

  • у него небольшая кривая обучения - переход от «Hello world» к нулю происходит намного быстрее, чем в большинстве других языков
  • он интуитивно понятен - синтаксис разработан так, чтобы следовать принципу наименьшего удивления, и в целом он очень последовательный (к сожалению, стандартные библиотеки не всегда следуют этой последовательности)
  • это требует очень небольшого шаблона : типичный «Hello world» - это одна строка кода, и простые программы могут быть написаны без какого-либо дополнительного фонового шума, который необходимо объяснить (например, ключевые слова объявления функций, операторы импорта, конструкции классов, директивы препроцессора, и т.д.)
  • есть отличные, простые инструменты для работы с кодом Python, особенно интерактивный интерпретатор; вам не нужно изучать систему сборки, IDE, специальный текстовый редактор или что-либо еще, чтобы начать использовать python - командная строка, интерактивный редактор и простой текстовый редактор - все, что вам нужно
  • он использует динамическую типизацию , но в отличие от многих других языков с динамической типизацией, типы прозрачны, а ошибки, связанные с типами, редки
tdammers
источник
Просто хочу подчеркнуть интуитивность языка. Я видел людей с нулевым опытом программирования, которые быстро изучают Python. Во многом это связано с тем, что синтаксис / грамматика очень близки к разговорной речи.
Стивен Гросс
12
Последний пункт: люди часто смешивают динамическое и слабое. Python динамически типизирован (типы, связанные со значениями, а не переменными), но также строго типизирован (поэтому программы
вылетают,
@missingo Я второй - орлиные глаза у тебя;)
yati sagade
@missingno: я знаю разницу. Примером непрозрачных типов являются ключи массива PHP - массивы ведут себя иначе для целочисленных ключей, чем для любого другого типа; если вы добавите два достаточно больших целых числа, вы можете получить число с плавающей точкой. И это только один пример - особенно PHP и javascript (два самых популярных динамических языка в веб-разработке) полны непонятных крайних случаев типизации.
tdammers
Судя по вашему комментарию, под "типами прозрачны" вы имеете в виду правила, которые управляют типами, которые легко понять? Что именно ты намеревался сказать?
phant0m
8

Привет, мир в Python:

 print "Hi there"

Привет, мир на Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

Привет, мир в C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

Пришло время поговорить о компиляции для двух других, и Python намного проще. Мне нужно поговорить только об одной идее, на которую я заинтересован, - все механизмы, которые усложняют дело, просто исчезают в python. Я могу подождать, пока они не будут готовы говорить о модулях, не нужно торопиться, чтобы получить stdio.h для простых программ. Я могу подождать, пока они не будут готовы к таким темам, как классы, не нужно спешить с ними для их первых программ. У него есть REPL для дурачения в командной строке. Python очень хорош в концептуальном минимуме. Это хорошо, потому что помогает начинающим сосредоточиться на задаче.

stonemetal
источник
15
Вы забыли "вернуть 0;" утверждение в вашей реализации C :) Предупреждение компилятора!
Стивен Гросс
2
Вот почему BASIC существовал в первую очередь. 10 печать "Hello World!" 20 КОНЕЦ Для дополнительного кредита, программа Python завершается с ошибкой «Привет, мир!»? юнит тест :-)
Росс Паттерсон
3
То же самое в F #: printfn «Привет, мир!». Да, F # хорош для начинающих!
Ден
7

Это необычная точка зрения.

Согласие взрослых - очень маленькая часть философии Python. Это, конечно, не "вращается" вокруг этого. Это даже не часть "Zen of Python", которую вы получаете, если делаете это import thisв интерпретаторе.

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

В любом случае, «согласные взрослые» на самом деле говорят только об отсутствии частных объектов в Python. Что само по себе, на мой взгляд, является еще одним показателем того, почему это хорошо для начинающих: вам не нужно беспокоиться о таких вещах, как интерфейсы, когда вы только начинаете.

Даниэль Роузман
источник
1
Да, но в отношении этих «частных» частей, поскольку у вас есть доступ к ним, у вас может возникнуть соблазн взломать некоторые обходные пути / ярлыки вокруг них, не зная лучше.
JohnDoDo
@JohnDoDo Какая разница, если в C # или Java я решил преобразовать privateполя publicв хакинг? Кстати, в Python вы можете поставить перед свойством свойство с подчеркиванием, чтобы сделать его приватным (хотя на самом деле не скрытым)
OnesimusUnbound
4

Есть два разных пункта. Когда вы воспитываете ребенка, вы должны поместить их в пузырь, в котором есть только безопасные вещи, или позволить им играть во дворе, где они могут споткнуться и упасть?

Быть внутри пузыря очень ограничительно. Вы должны написать свой код очень конкретным образом, чтобы он работал. Когда люди только начинают, все, что не может сделать то, что он хочет, считается расточительным. Это также может привести к «Я не знаю, почему это там, но кто-то сказал мне, что это необходимо».

В Python этого не существует. Если вы хотите сказать «Hello World», вы просто print "Hello World". Использование Python в качестве точки входа позволяет кому-то взяться за дело и просто написать код, который ему нужен, чтобы добиться желаемого. Первый программист не может понять значение инкапсуляции, прежде чем они поймут основы программирования.

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

Другие преимущества:

  • Много библиотек, которые делают много вещей
  • Гибкость в обучении как объектно-ориентированному, так и функциональному программированию, не создавая впечатление, что один был вынужден вписаться в язык, предназначенный для другого.
unholysampler
источник
3
Встречная аналогия: учите своего ребенка не играть с огнем. 1) Вы можете поговорить с ним, объяснить, что такое огонь и что делает огонь, показать PowerPoint слайды, что угодно ... или 2) позволить ему играть с огнем и обжечься. Второй метод действительно намного эффективнее. Что меня интересует, так это возможность того, что он может поджечь дом или даже полюбить его и стать пироманом, потому что никаких мер безопасности не было принято. Вид экстремальной ситуации, но не могу выразить это словами.
JohnDoDo
1
@JohnDoDo - Так пусть он обожжется ... это лучшая школа, а кто не сгорел на матче в детстве? Это не убьет его ...
Ладья
1
@JohnDoDo: То, что язык позволяет вам играть с огнем, не означает, что учитель не указывает, что огонь очень опасен, и объясняет, как его избежать. Я думаю, что другая вещь, которую вы упускаете, это то, что кто-то не привязан к языку. Получив базовые знания о программировании, они могут использовать другой язык для изучения больших понятий (например, не сжигать здание).
unholysampler
3

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

  • Абсолютный минимум стандартного кода для простых программ.

  • Вывоз мусора.

  • Динамическая типизация.

  • Чистый, простой синтаксис.

Сравните это, например, с Java или C ++ и трудностью объяснения всех понятий, связанных с программой «Hello, world». Сложные вещи включают в себя:

  • Самоанализ (эквивалент Python для отражения).

  • Обезьяна исправления.

  • Вещи, которые можно сделать с помощью огромной стандартной библиотеки.

Тем не менее, никто, кто знает только Python, не является хорошим программистом, потому что никто, кто знает только один язык или один стиль языка, не является хорошим программистом. Любой, кто серьезно относится к программированию, должен в конечном итоге научиться чему-то более низкому уровню, но не тогда, когда он / она все еще пытается ухватиться за управление потоком, рекурсию и другие основы.

dsimcha
источник
2

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

MaR
источник
1

ИМХО, учить людей программированию на «безопасных» языках - очень плохая идея. Люди предполагают, что все легко, и думают только о добавлении слоев и слоев кода. И потерять возможность отлаживать / исправлять проблемы, когда они возникают.

Хорошие программисты обязательно должны знать C / C ++ или даже ассемблер. И их мышление должно исходить и с этой стороны. А не - «О, GC, это делает Magic (тм), мы крутые, и почему C ++ не имеет GC, это глупо». отношение.

кодировщик
источник
1

Для начинающего программиста отсутствие статических типов - это особенность, а не ошибка!

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

Есть также некоторые концептуальные преимущества для динамического набора текста в образовательной среде:

  1. Типы связаны со значениями, а не переменными. Это, возможно, более интуитивно понятно, поскольку отражает причину сбоя программ.

  2. Сообщения об ошибках гораздо более непосредственные и конкретные. В Python вы получаете отличную трассировку стека и сообщение о том, что на самом деле пошло не так. В статически типизированном языке вы получаете предупреждение компилятора о том, что может пойти не так.

    Учащиеся, работающие с компилятором, могут работать только с программами, которые они полностью понимают, чтобы не столкнуться с ошибкой компиляции, которую они не могут решить.

  3. Проверка ошибок во время выполнения позволяет запускать неполные программы. Это позволяет создавать более инкрементные программы, в которых ученик сначала может беспокоиться о том, чтобы правильно начать программу, и только потом видит, что происходит.

  4. Некоторые важные понятия, такие как параметрический полиморфизм и типизирование утки, предоставляются бесплатно на динамическом языке, но требуют более сложных систем типов на статическом языке.

Наконец, хотя вам все еще приходится справляться с той же сложностью, вы не получаете всех преимуществ статической типизации при запуске программы:

  • Программы для начинающих невелики и не имеют много путей к коду (поэтому вам не нужно сильно беспокоиться об ошибках типов в редко используемых фрагментах кода)

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

hugomg
источник
1

Для начинающих программистов в Python есть одна очень, очень , очень важная вещь, которую все, кажется, упустили из виду: форсирование правильного отступа.

Как и некоторые другие комментаторы, я учил начинающих в течение нескольких лет. Было очень странно видеть такие вещи:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

Теперь представьте себе это ужасное несоответствие более ста строк кода. Для некоторых студентов все их проекты выглядели так.

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

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

Izkata
источник
0

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

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

К тому времени новичок сможет лучше понимать варианты и компромиссы и готов к C / C ++, Java, Assembler, Prolog, Lisp и т. Д. На самом деле, Lisp может быть хорошим первым языком, хотя и довольно строгим !

rzzzwilson
источник
-1

Ключевая проблема с Python в качестве первого языка - это динамическая типизация и отсутствие объявления переменных. ИМХО они единственная серьезная проблема с языком.

Простое добавление строки, гласящей, что я собираюсь сохранить строку только в переменной foo, позволяет программисту, среде разработки, языку (а для «профессионального кода» - бедному дураку, который должен прийти в себя и поддержать его впоследствии) работать вместе. Для обычных разработчиков и начинающих особенно не имеет смысла использовать переменную для более чем одного типа. Это вполне нормально в тех редких случаях, когда имеет смысл использовать явный тип var / object, который допускает динамическую типизацию.

JohnC
источник