Чому Python рекомендований як мова програмування початкового рівня? [зачинено]


16

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

Не зрозумійте мене неправильно, мені подобається Python. Мені це дуже подобається! Але його філософія обертається навколо "Ми всі згодні тут на дорослих".

З точки зору досвіду / знань, початківець програміст не є дорослим. Що потім щось означає, що легше застрелити себе в ногу і назбирати шкідливі звички, навіть якщо ви пережили рану.

Я думаю, що "більш статичною" мовою було б важче стріляти собі в ногу, оскільки це буде більш обмежувальним.

Повернутися до мого питання. Чому Python рекомендований як мова програмування початкового рівня?

Назвіть моменти, які сприяють навчанню мови програмування. Або ... це особисті переваги радника?


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

@ Péter Török: Так, і це забирає всю вашу ногу (c ++: D). Я сказав "більш статично", намагаючись уникнути вогняних воєн за щось на кшталт ... я не знаю ... Ява?!?! ... що, здається, всі ненавидять, як вважають у школі / університетах, і люди мають деякі лякає від цього ...
JohnDoDo

1
Я думаю, що C ++ є кращою початковою мовою, тому що це допомогло мені краще зрозуміти речі в інших ланагуах.
системович

1
У мене є яловичина з python як вихідна мова після TAing першого класу програмування першого семестру, який використовував його. Студенти часто не розуміли "типів", і залежність пробілу вбила їх. Вони також важко розібралися в об'єктах, і це «самонавіювання» збило бізнес OO. У цьому є свої достоїнства, але, безумовно, є і його недоброзичливці.
Ріг

2
@MahmoudHossam Я згоден. Я лише підкреслював деякі моменти, що виникають із мого досвіду. У Java, C #, Lisp тощо є свої проблеми. Це були лише основні проблеми, з якими я зіткнувся з навчанням пітона першим програмістам.
Ріг

Відповіді:


30

IMO, найвидатніші моменти, які говорять про Python як мову початкового рівня, це:

  • він має неглибоку криву навчання - перехід від нічого до "Hello world" набагато швидше, ніж у більшості інших мов
  • це інтуїтивно зрозуміло - синтаксис був розроблений відповідно до принципу найменшого здивування, і він цілком відповідає загальному (на жаль, стандартні бібліотеки не завжди дотримуються цієї послідовності)
  • для цього потрібна дуже мала табличка : типовий "Hello world" - це один рядок коду, і прості програми можна писати без додаткового фонового шуму, який потрібно пояснювати (наприклад, ключові слова декларації функцій, заяви про імпорт, конструкції класів, директиви препроцесора, тощо)
  • є чудові, прості інструменти для роботи з кодом python, особливо інтерактивний перекладач; Вам не потрібно вивчати систему складання, IDE, спеціальний текстовий редактор або що-небудь інше, щоб почати використовувати python - командний рядок, інтерактивний редактор та простий текстовий редактор - все, що вам потрібно
  • він використовує динамічне введення тексту , але на відміну від багатьох інших динамічно набраних мов, типи прозорі, а підводні камені, пов'язані з типом, рідкі

Просто хочеться підкреслити інтуїтивність мови. Я бачив, як люди з досвідом програмування 0 швидко навчаються Python. Багато в чому це пов’язано з тим, що синтаксис / граматика дуже близька до розмовної англійської.
Стівен Гросс

12
Останнє: люди часто змішують динамічне введення тексту зі слабким набором тексту. Python динамічно набирається (типи, пов’язані зі значеннями замість змінних), але також сильно набирається (тому програми виходять з
ладу

@missingo Я другий - Орелі очі у вас є;)
yati sagade

@missingno: Я знаю різницю. Прикладом непрозорих типів є клавіші масивів PHP - масиви поводяться інакше для цілих ключів, ніж для будь-якого іншого типу; якщо ви додасте два досить великих цілих числа, ви можете закінчити поплавком. І це лише один приклад - особливо PHP та javascript (дві найпопулярніші динамічні мови в веб-розробці) рясніють неясними випадками набору тексту.
tdammers

Судячи з вашого коментаря, під "типами прозорими" ви маєте на увазі правила, які керують типами, легко зрозуміти? Що саме ви мали намір сказати?
phant0m

8

Привіт, світ у пітоні:

 print "Hi there"

привіт, світ на Яві:

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

привіт, світ у С:

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

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


15
Ви забули "return 0;" заява у вашій реалізації C :) Попередження компілятора!
Стівен Гросс

2
Ось чому BASIC існував в першу чергу. 10 ПЕЧАТЬ "Привіт, світ!" 20 КІНЦЯ Для додаткового кредитування програма Python не спрацьовує "Хіба вона сказала" Hello World! "?" одиничний тест :-)
Росс Паттерсон

3
Те саме у F #: printfn "Привіт, світ!". Так, F # добре для початківців!
День

7

Це незвична точка зору.

Згода для дорослих - це дуже мала частина філософії Пітона. Це, звичайно, не обертається навколо цього. Це навіть не частина "Дзен Пітона", який ви отримуєте, якщо зробитеimport this перекладачем.

Інші речі, такі як "явне краще, ніж неявне", "просте краще, ніж складне", і "підрахунок читабельності" набагато важливіше для Python, і показують, чому Python є гарною першою мовою.

У будь-якому разі, "дорослі, що погоджуються", насправді стосуються лише відсутності приватних об'єктів у Python. На мою думку, це ще одна вказівка ​​на те, чому це добре для початківців: вам не потрібно турбуватися про такі речі, як інтерфейси, коли ви тільки починаєте.


1
Так, але щодо тих "приватних" частин, оскільки ви маєте доступ до них, ви можете спокуситися зламати деякі обхідні шляхи / ярлики навколо них, не знаючи краще.
JohnDoDo

@JohnDoDo Яка різниця в тому, якщо в C # або Java я вирішив перетворити privateполя, щоб publicїх зламати? BTW, у Python ви можете встановити властивість за допомогою підкреслення, щоб зробити його приватним (хоча і не дуже прихованим)
OnesimusUnbound

4

Є два різні декілька пункту. Виховуючи дитину, чи слід їх класти в міхур, в якому є лише безпечні речі, або дозволити їм грати у дворі, куди вони можуть подорожувати і впасти?

Перебувати всередині міхура дуже обмежує. Ви повинні написати свій код дуже специфічним чином, щоб він запустився. Коли люди вперше починають, все, що не існує, щоб робити те, що людина хоче, вважається марнотратним. Це також може призвести до того, що "я не знаю, чому це існує, але хтось сказав мені, що це потрібно".

У Python такого не існує. Якщо ви хочете сказати "Hello World", ви простоprint "Hello World" . Використання Python як точки входу дозволяє комусь вдарити по землі і просто написати код, який їм потрібен, щоб зробити те, що вони хочуть. Перший програміст не може зрозуміти значення інкапсуляції, перш ніж вони зрозуміють основи програмування.

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

Інші переваги:

  • Багато бібліотек, які роблять багато речей
  • Гнучкість викладати як об'єктно-орієнтовані, так і функціональні методи програмування, не здаючись, що один змушений вписуватися в мову, розроблену для іншої.

3
Лічильна аналогія: Навчити дитину не грати з вогнем. 1) Ви можете поговорити з ним, пояснити, що таке вогонь і чим займається пожежа, покажіть, що PowerPoint слайди все, що завгодно .. або 2) нехай він грає з вогнем і згоряє. Другий метод справді набагато ефективніший. Мене цікавить - це можливість, що він може підпалити будинок або навіть подобатися йому і стати піроманією, оскільки не було вжито заходів безпеки. Вид екстремальної ситуації, але насправді це не можна висловити словами.
JohnDoDo

1
@JohnDoDo - Тож нехай він згорить ... це найкраща школа, і хто не згорів на матчі як дитина? Це не вб'є його ...
Грак

1
@JohnDoDo: Тільки тому, що мова дозволяє грати з вогнем, не означає, що вчитель не вказує, що вогонь дуже небезпечний, і пояснює якийсь спосіб його уникнути. Я думаю, що інше, чого ти не вистачає, - це те, що хтось не прив’язаний до мови. Отримавши базове розуміння програмування, вони можуть використовувати іншу мову, щоб вивчити більші поняття (як, наприклад, не спалення будівлі).
unholysampler

3

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

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

  • Збір сміття.

  • Динамічне введення тексту.

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

Порівняйте це, наприклад, з Java або C ++ і з труднощами пояснення всіх понять, які беруть участь у програмі "Привіт, світ". До складних речей належать:

  • Інтроспекція (еквівалент Python рефлексії).

  • Накладення мавп.

  • Те, що можна зробити з величезною стандартною бібліотекою.

Однак, ніхто, хто знає лише Python, не є хорошим програмістом, тому що ніхто, хто знає лише одну мову чи один стиль мови, не є хорошим програмістом. Кожен, хто серйозно займається програмуванням, повинен врешті-решт навчитися чомусь нижчого рівня, тільки не в той час, як він / вона все ще намагається покращити контроль потоку, рекурсію та інші основи.


2

Я бачу Python як хороший вибір. Як правило, для програмування "початкового" рівня вам потрібно щось просте, але продуктивне. Отримання швидких відгуків підтримує як мотивацію, так і швидкість навчання. Смію сказати, що справа не в тому, щоб навчитися "правильному шляху", а просто "зачепитись і закохатись у програмування на все життя". Решта прийде добре пізніше через досвід, середню освіту, що завгодно.


1

ІМХО, навчити людей кодувати "безпечними" мовами - дуже погана ідея. Люди припускають, що все легко, і думають лише про додавання шарів і шарів коду. І втрачаєш будь-який шанс налагодити / виправити проблеми, коли вони виникають.

Хороші програмісти абсолютно повинні знати C / C ++ або навіть збірку. І їхня думка також повинна виходити з того боку. І ні - "О, GC, це робить Magic (tm), ми круті, і чому у C ++ немає GC, це дурно". ставлення.


1

Для початківця-програміста відсутність статичних типів - це особливість, а не помилка!

Навчившись програмувати навіть найочевидніші речі, важко зрозуміти. Системи динамічного типу дуже прості та виходять із шляху більш актуальних тем у вступному курсі, як модуляризація, потік управління тощо.

Існують також деякі концептуальні переваги динамічного набору тексту в навчальних умовах:

  1. Типи пов'язані зі значеннями, а не змінними. Це, мабуть, інтуїтивніше, оскільки відображає причину, по якій програми насправді завершуються збоєм.

  2. Повідомлення про помилки набагато більш негайні та конкретні. У Python ви отримуєте чудовий слід стека та повідомлення про те, що насправді пішло не так. У статично типізованих мовах ви отримаєте попередження компілятора кажучи , що б піти не так.

    Студенти, які працюють із компілятором, можуть працювати лише над програмами, які вони повністю розуміють, щоб не зіткнутися з помилкою компіляції, яку вони не можуть вирішити.

  3. Перевірка помилок під час виконання дозволяє запускати неповні програми. Це дозволяє отримати додаткові додаткові програми, де студент може спочатку турбуватися про те, щоб зробити початок програми правильним і лише потім побачити, що відбувається.

  4. Деякі важливі поняття, такі як параметричний поліморфізм та типи качок, безкоштовно дістаються в динамічній мові, але вимагають складніших типів систем статичної мови.

Нарешті, хоча вам все одно доводиться працювати з однаковою складністю, ви не отримуєте всіх переваг статичного набору тексту при запуску програми:

  • Програми для початківців невеликі і не мають багато шляхів коду (тому вам не доведеться турбуватися про те, що вводити помилки в рідко доступних бітах коду)

  • Програми Begginer не користуються інтерфейсами та функціями високого рівня настільки, що також не так багато, щоб отримати користь у відділі "використовувати тип типу для проектування програми".


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 цей тип відступів просто недійсний. Вони змушені використовувати щось, що принаймні читабельне, навіть якщо це трохи непослідовно. Це дає їм звичку, яка, сподіваємось, продовжиться, коли вони зрештою вивчать якусь іншу мову.


0

Python - це чудова перша мова з більшості причин, зазначених вище. Зокрема, однією з вимог до першої мови є ніжна крива навчання, яку має Python. Наприклад, вам не потрібно знати все про заняття, наприклад, щоб розпочати роботу. У цьому відношенні це трохи схоже на Основні, з яких багато хто починав.

Одне, що досі не було висвітлено, - це те, що багато мов мають ніжну криву навчання, але швидко натрапляють на цегляну стіну, намагаючись робити більш досконалі речі. Old-school Basic є хорошим прикладом цього. З Python ви можете вступити в деякі дуже вдосконалені речі, перш ніж відчувати, що якась інша мова може бути кращим вибором.

На той час початківець може зрозуміти більше про вибір та компроміси, і він готовий до C / C ++, Java, Assembler, Prolog, Lisp тощо. Насправді, Lisp також може бути гарною першою мовою, хоча це досить суворо. !


-1

Ключовою проблемою Python як першої мови є динамічне введення тексту та відсутність змінного оголошення. ІМХО - це єдине головне питання з мовою.

Просте додавання рядка, який говорить про те, що я збираюсь лише зберігати рядок у змінному foo, дозволяє програмісту, середовищу розробки, мові (а для "професійного коду" бідний дурень, якому доводиться холодно і підтримувати його згодом) працювати разом. Для звичайних розробників та початківців особливо не має сенсу використовувати змінну для більш ніж одного типу. Цілком нормально в рідкісних випадках, коли має сенс використовувати явний тип var / object, що дозволяє динамічно вводити текст.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.