Как преподаватель CS на университетском уровне, вопрос о том, какой язык программирования преподавать на первом курсе программирования, часто поднимается для обсуждения. Есть тысячи языков на выбор и множество религиозных лихорадок (или лихорадок), поддерживающих один языковой лагерь над другим. Все это субъективное смещение, окружающее каждый язык программирования, очень затрудняет выбор педагогом.
Мой вопрос:
Какие объективные критерии может использовать педагог для выбора языка программирования, который будет использоваться в качестве основы для первого курса университетского программирования? На чем основаны эти критерии?
Примечание : я не хочу видеть список языков программирования и почему они являются лучшими для использования. Вопрос не в лучшем языке, а в критериях выбора языка . Ответы могут, однако, использовать языки программирования для иллюстрации конкретных моментов.
Этот вопрос был вдохновлен другим вопросом, который был сочтен не по теме: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language .
источник
SML
просто потому, что маловероятно, что любой студент знает этот язык заранее . Это уравновешивает каждого студента более или менее на том же уровне, чтобы начать курс.Ответы:
Я добавлю свои два цента, хотя считаю, что эта тема - бездонная пропасть. Не поймите меня неправильно, я думаю, что это увлекательный вопрос, но, вероятно, не тот, который мы решим здесь, чтобы удовлетворить всех.
В двух словах, я бы сказал, что язык должен делать то, что вы хотите , простым и недвусмысленным образом, насколько это возможно, и не более того .
Мой собственный опыт основан на обучении нескольких поколений студентов первого и второго курса языку программирования Oberon . Люди, которые знают этот язык, признают его влияние в моих мнениях. Обратите внимание, что этот язык использовался для обучения «Алгоритмы и структуры данных». В то время (тогда) функциональное программирование и объектно-ориентированное проектирование преподавались на отдельных курсах, начиная со второго курса.
Важно : Прежде чем углубляться в специфику какого-либо языка, я хотел бы подчеркнуть, что самое главное - быть абсолютно ясным для себя и своих студентов относительно целей вашего курса. Вы преподаете программирование как таковое ? Или алгоритмы и структуры данных? Или разработка программного обеспечения? Прежде чем выбрать язык, стоит подумать о том, куда вы идете с ним. Различия на этом уровне (цели) - это то, что, по моему мнению, приводит к большинству разногласий по этой теме.
Пункты, которые я считаю важными, могут совпадать с несколькими вещами, которые уже были сказаны, но я полагаю, что большинство в конечном итоге будет подмножеством одного из следующих четырех:
Простота : студенты обычно обучаются программированию, алгоритмам и структурам данных, а не особенностям и тонкостям какого-либо конкретного языка программирования. Вирт использовал цитату Эйнштейна «Сделай это как можно проще, но не проще» в качестве руководящего принципа при разработке Оберона, и есть несколько других языков, которые делают это так же хорошо. Выбранный вами язык программирования должен быть в состоянии реализовать все концепции, необходимые в вашей лекции, но он должен делать это с наименьшим возможным набором функций / деталей. Язык программирования, как правило, просто инструмент, а не цель.
Однозначность : близкий родственник простоты, для каждой концепции должна быть одна конструкция с минимальным перекрытием. Думайте об этом как о существующем только одном «правильном» способе реализации каждой концепции. Три разных типа циклов, которые семантически все делают одно и то же? Или пятнадцать различных способов увеличить переменную? Не хорошо. Это также делает исправление домашней работы или просто понимание кода ваших учеников намного проще. Ваши ассистенты по достоинству оценят это.
Переносимость : студенты будут ходить на занятия с компьютерами Linux, Windows и OSX, и среда программирования должна быть максимально похожа (идентична) для всех трех. Результаты любой программы также должны быть идентичными. Это еще один момент, который оценят помощники преподавателя, отвечающие за оценку домашней работы и решение вопросов / проблем.
Промышленные предпочтения : Серьезно, мы должны начать беспокоиться об этом только в том случае, если сама «Промышленность» решит, какой язык программирования ей больше нравится. Со времени изобретения компьютеров эта цель постоянно менялась. На данный момент, если ваши ученики действительно научатся программировать, то это не будет зависеть от языка. Однако в некоторых областях промышленности удается договориться о стандарте, например,
VHDL для проектирования схемили SQL для запросов к базе данных, так что это все еще верный момент.Опять же, то, как язык подходит этому списку, сильно зависит от того, чему вы пытаетесь научить!
источник
WHILE expr DO stmts END
и т. д.Развитие алгоритмического мышления для решения проблем в качестве основной цели. Одна плохая вещь в использовании объектно-ориентированной парадигмы на первом курсе заключается в том, что привлечение новых учащихся к таким вещам, как наследование, полиморфизм и т. Д., Отвлекает их от вышеупомянутой главной цели. Фактически, введение каких-либо дополнительных соображений помимо этой основной цели, таких как разработка программного обеспечения, переносимость, полезность отрасли и т. Д., По указанной причине является контрпродуктивным.
Не объектно-ориентированный язык: в настоящее время большинство университетов начинают преподавать программирование прямо с объектно-ориентированного языка. Я думаю, что это ошибка. В мире есть вещи, которые можно по-настоящему понять только в противоположность противоположности. Не подвергаясь процедурной парадигме программирования (данные и функции - это два отдельных аспекта программы), многие могут упустить основную идею объектной ориентации (данные и поведение рассматриваются как неразрывно связанные друг с другом). И потому, что объектно-ориентированное программирование очень важно, упустить его основную идею не так уж и мало. Кроме того, поскольку, скорее всего, на более старших курсах студенты CS будут программировать в основном в ОО, они также должны быть ознакомлены с процедурной стороной.
Итак, в конце я бы пошел на процедурный язык, избегая расширенных возможностей, сосредоточив внимание на развитии алгоритмического мышления. Но, избегая расширенных функций, я не имею в виду избегать сложных проблем. Я имею в виду, что даже сложные задачи, студенты должны решить ее, используя первые принципы, простые инструменты.
источник
public static void main()
в Java, которая должна быть в контексте некоторого класса. Это делает Java менее идеальным в качестве первого языка, хотя, конечно, препятствие не слишком велико.public static void main()
на очень долгое время. BlueJ - хороший пример среды IDE, которая позволяет студентам писать программы без единогоmain
места в нем.Поскольку мы говорим о первом курсе по программированию в программе по компьютерным наукам, я бы сказал, что наиболее важным аспектом будет то, каким фундаментальным концепциям CS он научит ваших студентов. Поскольку не существует языка, который мог бы учить всем понятиям одновременно, вам нужно подумать, какие понятия понадобятся в дальнейшем.
Я не согласен с мнением @ Kaveh о том, что актуальность отрасли важна; это может быть бонусом, но здесь это не так важно. Имея прочную основу принципов CS, изучение «промышленного» языка на последующих курсах будет относительно простым.
В качестве дополнительного примечания, независимо от того, какой язык выбран первым, важно как можно скорее познакомить своих учеников с другим, совершенно другим языком.
источник
Моя главная задача - это универсальность в том смысле, что изучение этого языка программирования должно помочь ученику справиться с большинством языков программирования.
Насколько я сожалею об этом, этот критерий исключает чисто функциональные языки. Это также относится к курсу, который не должен использовать экзотические особенности языка.
... но это только здравый смысл.
источник
При выборе первого языка программирования, есть много вопросов, которые необходимо учитывать. Многие из них были рассмотрены в ответах выше. Я включил еще 3, так как они были частью моего ответа на закрытый вопрос ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ), который первоначально вдохновил этот вопрос , Я скопировал свой ответ здесь (и изменил его) на основе текущей политики удаления закрытых вопросов.
Вот 3 момента, которые нужно рассмотреть, используя несколько языков программирования в качестве примеров.
Программирование в большом против программирования в маленьком
При первом обучении программированию нужно научиться программировать в малом , прежде чем переходить к изучению механизмов, помогающих программированию в целом .
Под малым программированием я подразумеваю написание программ, содержащих менее 100 строк. Эти программы будут включать алгоритмы, которые манипулируют простыми структурами данных, имеют простой поток управления и решают простые проблемы. Они, как правило, не будут рассматриваться как приложения .
Под программированием в целом я подразумеваю написание больших программ, построенных из множества компонентов / классов, построенных на основе API, с графическим интерфейсом пользователя, базой данных, возможно, в конфигурации клиент-сервер.
То, о чем должен думать программист при программировании в малом, сильно отличается от того, когда программируется в большом. Программирование в целом требует от программиста задуматься о модульности, хороших интерфейсах, хорошем дизайне, возможности многократного использования и многих других проблемах. Современные языки программирования предоставляют множество конструкций, помогающих программировать в целом. Эти конструкции включают в себя классы, модули, интерфейсы, сокрытие информации и т. Д. При малом программировании эти проблемы гораздо менее важны.
Язык программирования, такой как C ++, имеет множество функций, помогающих программированию в целом, но труднее сесть и начать писать очень простую программу. Ява похожа.
С другой стороны, такой язык, как Python, Ruby, Scheme или Haskell, значительно облегчает непосредственное написание программы.
Высокий уровень против низкого уровня
Такие языки, как C ++ и C, являются языком более низкого уровня. Они позволяют программисту напрямую манипулировать ссылками в памяти. Хотя это позволяет писать очень эффективный код, детали первого уровня могут быть трудными для первого программиста в изучении языка. Некоторые утверждают, что эти детали низкого уровня мешают написанию логики для решения проблемы.
Язык более высокого уровня, такой как Python, облегчает более непосредственное выражение концептов в терминах предметной области.
Статически Типизированный против Динамически Типизированный
C ++, Haskell, Java и многие другие языки имеют статическую типизацию. Это означает, что компилятор автоматически находит места, где возникают потенциальные ошибки, на основе ожидаемых типов значений в каждом месте кода. Существует религиозная война о том, хороша ли статическая типизация или нет, но я буду избегать этой. Одна проблема со статической типизацией для новых программистов состоит в том, что сообщения об ошибках, сообщаемые компилятором, часто трудно понять. Это особенно касается шаблонов C ++ и программ на Haskell в целом.
Python, Ruby и Scheme имеют динамическую типизацию. Это означает, что ошибки обнаруживаются во время работы программы. Можно утверждать, что уже слишком поздно обнаруживать ошибки (но можно также использовать тестирование, чтобы избежать таких ошибок). Опять же, избегая религиозного аргумента, преимущество типа ошибок, с которыми можно столкнуться при написании простых программ на динамически типизированном языке программирования, такого рода, что этот объект не знает, как выполнить эту операцию . В контексте небольшой программы эти ошибки легко понять и отследить.
Такие языки, как C, имеют слабую типизацию, что означает, что, хотя компилятор помогает с некоторыми ошибками, во время выполнения не удается перехватить другие возникающие, такие как недопустимые обращения к памяти. В результате, сообщение об ошибке, возвращаемое программисту, похоже на «Сбой программы». Динамически типизированный язык может перехватывать эти ошибки и преобразовывать их в более понятное сообщение об ошибке.
другие
Для других языков могут вступать в игру другие соображения, такие как поддержка, предоставляемая средой программирования, доступные API, качество книг и онлайн-учебники и т. Д.
источник
В качестве вступительного замечания рассмотрим возможность представления более чем одного языка (в одном курсе). В моем первом семестре мы показали SML и Java. Контраст имел свое собственное и важное сообщение: выбрать правильный инструмент для работы.
Но теперь по критериям, в произвольном порядке.
Трудность в изучении - это субъективный вопрос, но важный: вы не хотите, чтобы ваш ученик тратил время на изучение языка, а на то, чтобы с ним что- то делать . Можно утверждать, что динамические языки, такие как Ruby, могут выиграть на этом фронте: вы можете кормить их чем угодно, и в Интернете есть отличные «фиктивные» учебные пособия. Если я правильно помню, есть также исследования, которые показывают, что студенты, которые не программировали раньше, достигают лучших результатов с функциональными языками, чем с другими.
Богатство : язык (и) должен быть достаточно богат для всех понятий, которым вы хотите научить. Например, если вы хотите обсудить функции высшего порядка, вам нужен язык, где функции являются значениями, например, функциональные языки или Scala.
Масштабируемость . Скорее всего, ваши студенты не будут изучать больше языков самостоятельно, чем те, которые вы им показываете. Таким образом, вы хотите, чтобы выбранные вами языки расширялись в процессе обучения: им нужно написать ваши домашние упражнения сейчас, но они могут также атаковать проект среднего размера позже. Ява и языки с похожей экосферой - хороший выбор здесь.
Поддержка инструмента : это связано с масштабируемостью. Если вы ожидаете / хотите, чтобы ваши студенты работали с языком, то должны существовать хорошие IDE, менеджеры по сборке и библиотеки. Интерактивные оболочки (Ruby, Scala) также хороши, особенно для начинающих. Инструменты должны работать на всех основных платформах.
Документация : Вы, вероятно, не хотите на самом деле учить язык, но попросите студентов учить себя под вашим (абстрактным) руководством. Поэтому хорошая документация важна. Можно утверждать, что чем популярнее и устоявшийся язык, тем лучше документация. Например, документация Scala довольно скудная (но улучшается). Такие инструменты, как Hoogle, являются плюсом.
Доступность : На самом деле есть люди, которые преподают с использованием Matlab или Visual C ++. Учтите, что не у всех может быть лицензия или машина, которая может запускать необходимые программы. Возможно, вам следует отдать предпочтение бесплатным языкам, которые работают на различных платформах.
Чистота : вы, вероятно, хотите изменить образ мыслей ваших учеников. Чем грязнее язык, тем грязнее они будут думать; Я бы никогда не предложил PHP в курсе. Динамические языки в целом имеют здесь недостатки: они допускают, иногда даже поощряют, вредные привычки.
Какие критерии для вас важнее других, также зависит от того, чему вы хотите научить. Это буквально курс программирования? Это курс алгоритмов и структур данных? Это курс, который вводит понятия языков программирования в разных парадигмах? Это курс о разработке программного обеспечения в целом?
источник
For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala.
... или C или Pascal, у которых оба были функциональные указатели почти навсегда. Практически единственным (основным) языком, который этот критерий фактически закрывает, является Java.Увлекательный вопрос; Мне нравится ваш акцент на объективных критериях. Мы хотим, чтобы первокурсники узнали:
концепции программирования : первый язык программирования должен поддерживать: вызовы функций, итерацию, рекурсию
фундаментальные идеи : первый язык программирования должен поддерживать массивы (для первых шагов в небольшом введении в то, как на самом деле работает память и как работают указатели)
практические навыки программирования : как использовать отладчик, как использовать профилировщик, как решать большие проблемы (язык высокого уровня), как собирать большие системы, как разбивать проблемы (декомпозиция проблем), как избежать написания сложный код, как донести до людей намерение за (часто загадочным) рядом исполняемых операторов.
тот факт, что предварительно написанные библиотеки существуют для таких вещей, как sort (), и как их использовать, то есть тот факт, что нет необходимости писать все с нуля.
Другие критерии для первого языка :
интерпретировать (быстрая обратная связь помогает процессу обучения).
интерактивная среда, которая ускоряет обучение, тестирование и отладку.
высококачественный исходный код доступен для чтения студентами на этом языке
«легко читаемый», «синтаксис, приближающийся к естественному языку» (чтобы было проще читать и оценивать SourceCode)
портативный (работает на Mac OS, Windows, Unix). По крайней мере, одна свободная программная реализация языка.
быстро обучать, «несколько ошибок» - например, «может быть, быстрее научить сначала начинающих Python, а затем Java, а не Java как первый OOPL». - «Сравнение объектно-ориентированных языков программирования» и TelescopeRule
Матиас Феллайзен разработал язык программирования с сообщениями об ошибках, предназначенными для начинающей аудитории. Он подчеркивает, что выбор конкретного языка не так важен, как обучение хорошей методологии проектирования. Фактически, он видит первый курс CS как класс гуманитарных наук, обучающий критическому мышлению, решению проблем и вниманию к деталям.
критерии для второго языка программирования
Вещи, которые мы хотим, чтобы студенты изучали, но, возможно, это может подождать второго языка программирования:
«соответствующий» язык, который не слишком эзотерический; что-то "популярное в отрасли"
Теория сложности: как распознать задачи, которые невозможны при современных технологиях.
вещи более высокого уровня: как выбрать правильный инструмент для работы , как использовать компилятор, структуры, объектно-ориентированное программирование, функциональное программирование, логическое программирование, проектирование компилятора, составление и манипулирование функциями (в смысле Lisp / ML), параллельное и распределенное программирование,
вещи низкого уровня: арифметика указателей, компьютерная архитектура. управление памятью, стековые фреймы, программирование сборки, архитектура машины, драйверы устройств и дизайн операционной системы (так что машина не будет «казаться пугающим черным ящиком, в который они не смогут проникнуть»)
РЕДАКТИРОВАТЬ: меня разочаровывает, что публикация резюме того, что я написал, в сотрудничестве со многими другими, "не может быть юридическим постом".
Поэтому я добавляю более формальную цитату к моей предыдущей неофициальной ссылке, пытаясь соответствовать принципам добросовестного использования и другим вопросам авторского права вики.
Этот ответ является кратким изложением «Первого языка первокурсника» (Anon 2011) в репозитории шаблонов в Портленде.
(Anon 2011) Многие анонимные и другие авторы. «Первый язык первокурсников». Портлендский репозиторий. 27 сентября 2011 г. http://c2.com/cgi/wiki?FreshmansFirstLanguage .
источник
Я думаю, что простота и легкость обучения - один из главных критериев. В вводном курсе по программированию мы хотели бы избежать ненужных препятствий программированию и максимально сосредоточиться на принципах программирования и алгоритмического решения задач. Студентам первого курса часто не хватает умения мыслить алгоритмически о проблемах, поэтому курс также посвящен обучению алгоритмическому мышлению.
Другим критерием является полезность языка в отрасли. Мы не хотели бы преподавать язык, который бесполезен в промышленности. Подавляющее большинство студентов собирается работать в отрасли, поэтому необходимо следить за тем, что используется (и будет использоваться после выпуска студентов) в отрасли.
Третий критерий - это курсы, которые студенты будут изучать в последующие годы. Курсы, в частности обязательные курсы, предназначены не для самих себя, а в координации с другими курсами.
Последнее, о чем я могу подумать сейчас, совпадает с ответом jmad: язык должен облегчить изучение других важных языков. Он должен быть достаточно богатым, и освоение последующих важных языков будет простым (здесь важные средства важны с точки зрения студентов).
Я думаю, что многие университеты перенесли свое основное введение в курс программирования с Java / C ++ / C на Python, хотя они могут время от времени предоставлять введение в программирование на других языках (часто для не-компьютерных специальностей, например, C для электротехнических специальностей) хотя они могут проявлять гибкость, если инструктор хочет время от времени экспериментировать с преподаванием другого языка.
источник
Итак, я немедленно откажусь от своей реакции коленного рефлекса, которая заключается в том, что каждый должен изучать программирование через SICP, потому что Lisp - это то, что нужно.
Было уже много хороших критериев для выбора языка ... простота и мобильность являются одними из самых важных. Тем не менее, я также считаю, что для начинающих студентов, программирующих, жизненно важно не получить неправильное представление (или не иметь представления) о том, что происходит за кулисами с современными языками.
Хотя некоторые из этих постов предлагают отличные критерии, я хотел бы использовать определенный язык, чтобы проиллюстрировать, как выглядит «соответствие критериям».
Некоторые из этих проблем были рассмотрены (гораздо лучше, чем я мог попытаться) в блоге Джоэла Спольски « Опасности JavaSchools» . Выбор языков, таких как Java или Python, закрывает две более сложные (и самые важные) концепции в CS; а именно, указатели и рекурсия.
Конечно, преподавание вводного курса по Си будет невероятно плотным, но при этом, вероятно, будет пропущено много важных понятий, связанных с рекурсией. Кроме того, курс преподается в Лиспе придется адресными указателями под кожухами, так
car
иcdr
подразумевают важные концепции , относящиеся к связанным спискам, в то время позволяя на языке обрабатывать детали.По сути, я имею в виду, что студенты должны понимать основы структур данных и алгоритмов, а также практическую реализацию.
Я также не согласен с предложением не использовать объектно-ориентированный язык. Я думаю, что полезность объектно-ориентированных языков для моделирования реального мира является положительным преимуществом для новых программистов, если становится ясно несоответствие импеданса и что объектно-ориентированные языки являются одной из многих парадигм.
Я хотел бы предложить, чтобы Ruby (также предложенный в качестве возможной в другой публикации) являл собой пример многих качеств, которые нужно искать в языке, который можно использовать для введения в курс программирования.
Я обосновываю это утверждение на мгновение, но сначала я хочу прокомментировать одну тенденцию, которая мешает мне в интро курсах CS. Я работаю в университете, который, как и многие школы, недавно перешел на использование Python для своих вступительных курсов. Я твердо верю, что Python - это новая ОСНОВНАЯ, и тенденция языка состоит в том, чтобы выбирать дружелюбие новичков вместо власти и выразительности, как я недавно доказывал в другом месте . Это плохая услуга, и нам нужно думать о программистах, которыми они станут, а не о новичках, которыми они являются в данный момент.
Во всяком случае, оправдывая Ruby как вводный язык ...
malloc()
, научив их расширять язык на C.Во всяком случае, ничто не заменит изучение многих языков, многих парадигм, используете ли вы их профессионально или нет. В принципе, я думаю, что все должны понимать , если не использовать , C и Lisp. Ruby - лучший компромисс, который я могу придумать для вводного семестра.
Во всяком случае ... это мои 0,02 доллара США. Я не пытаюсь убедить вас использовать Ruby, заметьте ... просто использую его как образец качеств, которые нужно искать в языке для преподавания вступительного курса.
источник
Моим первым языком программирования был язык ассемблера игрушек. Вторым был Фортран. В промежутке мне преподавали нотацию «алгоритмов», которая была примерно на Алголе 60. Я оказался вполне в порядке. На самом деле, я думаю, что то, чему меня учили, было в значительной степени идеальным.
Когда я впервые посмотрел на функциональное программирование, но в исследовательских работах, хотя и не на внедренном языке, я сказал: «Вау, это совершенно другое. Это довольно математично!» Большинство людей, которых обучают функциональному программированию, все еще имеют такой же опыт «вау». Я думаю, что это здорово.
Я думаю, что императивное программирование и функциональное программирование - это два совершенно разных взгляда на мир. Мы бы оказали плохую услугу нашим студентам, если бы лишали их такого разнообразного опыта.
Лучший первый язык программирования должен быть как можно более простым и максимально понятным, чтобы ученики могли сосредоточиться на том, как мыслить ясно. К сожалению, простота и понятность сборки, Fortran и Algol 60 не имеют аналогов в большинстве современных языков программирования. Хаскелл - хорошее исключение. Но Haskell сделает мой идеальный второй язык программирования, а не первый. Эйфель или Оберон, возможно, могли бы отвечать всем требованиям.
источник
В Школе естественных наук и математики в Северной Каролине мы познакомили студентов с Python с 2004 года. Мы используем его для обучения процедурному программированию, потому что считаем, что способность писать короткие, правильные процедуры жизненно важна для дальнейшего развития с использованием более тяжелых инструментов, включая OO программирование.
Нам нравится это по этим причинам.
Python не является языком свободного формата. Это заставляет студентов писать свой код в блоках, используя отступы. (В качестве технического примечания мы используем текстовый редактор vim и помещаем [
set tabstop=4 set et
] в .vimrc, чтобы устранить надоедливые проблемы и сделать отступы кода заметными, но не вызвать уродливое чрезмерное горизонтальное отклонение). Наши студенты привыкли видеть иерархическую структуру программ, разделенных пробелами. В результате их привычки форматирования имеют тенденцию быть очень хорошими, поскольку они программируют на других языках.Синтаксическая простота Python делает его удобным для начинающих. Простые программы могут быть написаны с минимумом тайных ключевых слов и магических заклинаний. Мы хотим, чтобы студент, который обычно не думал о программировании, попробовал это. Обратите внимание на прекрасную простоту Python
hello.py
; кристально ясно, что происходит.Python динамически набирается и набирается уткой. Это позволяет легко вводить переменные. Я говорю своим ученикам, что переменные - это просто метки. Они указывают на объекты. Вы отправляете сообщение объекту, используя имя переменной, так же, как кто-то отправляет вам сообщение, позвонив вам по телефону.
Python - это инструмент, который амбициозные студенты не перерастут. Он имеет сложные библиотеки, которые делают множество полезных вещей. Это мощный креативный инструмент, который доступен для начинающих.
Python бесплатный и работает на всех основных платформах. Наша школа представляет собой гетерогенную среду ОС со всеми видами машин. Нам не нужно беспокоиться о таких проблемах, как совместимость. Он будет работать практически на любом компьютере.
Python имеет отличную документацию. Мы призываем наших студентов исследовать, переделывать и красить за пределами линий. Они узнают об использовании документации Python рано и часто начинают изучать интересные вещи вне класса.
Мы были очень довольны Python.
источник
Я бы сказал, что язык (с некоторыми ограничениями) не так важен, как то, что вы делаете с языком. Вы можете узнать примерно то же самое о разработке программного обеспечения, алгоритмах, объектно-ориентированном программировании, компьютерном оборудовании и т. Д. На большинстве языков. Ключ в том, чтобы разработать что-то интересное, которое использует все эти концепции.
(перенесенный ответ с https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )
источник
TL; DR: нет никакого способа объективно ответить на это, потому что нет никаких объективных оснований для критериев позади этого. Это так же произвольно, как пытаться спорить, является ли синий, объективно , «лучшим» цветом, чем красный, или если ванильное мороженое объективно «вкуснее», чем шоколад.
Я думаю, что там уже есть несколько замечательных постов, но я добавлю свои 2 цента.
Этот вопрос сродни вопросу о том, существует ли способ объективно выбрать первый аромат мороженого, который кто-то еще должен попробовать при посещении места мороженого в первый раз. Нет, не существует объективного способа выбрать то, что по своей сути субъективно .
Зачем? Потому что даже если мы посмотрим на разумные критерии, упомянутые в ответе Педро , у каждого все равно будет субъективное представление о том, как каждый фактор «противостоит» взглядам кого-то другого.
Например, является ли Ruby объективно «проще», чем Python? Проще в каком смысле? По отношению к чему? Что значит «проще» для вас ? Означает ли это «меньше строк кода»? Означает ли это «легче читать и понимать»? А как насчет других? Почему кто-то должен согласиться с каким-то конкретным выбором здесь? Я не думаю, что мы можем ответить на этот вопрос объективно .
Это приводит к следующему вопросу.
Как бы ни были разумны некоторые критерии, я думаю, что это больше основано на субъективных предпочтениях, чем на чем-либо еще. Например, нет никаких причин, по которым я должен просто принять критерии простоты , однозначности , портативности и отраслевых предпочтений Педро, независимо от того, насколько разумными некоторые считают это. На самом деле отраслевые предпочтения по определению субъективны и просто приведут к порочному кругу. (Каждый обучается этому, поэтому каждый использует его в промышленности, поэтому каждый обучается этому, ...)
Например, почему нет
Дело в том, что, хотя я мог бы придумать другой набор критериев оценки и при этом считаться разумным, мы не можем утверждать, что он объективно превосходит / уступает другим.
В заключение, нет объективной основы для критериев. Это так же произвольно, как пытаться спорить, является ли синий, объективно , «лучшим» цветом, чем красный, или если ванильное мороженое объективно вкуснее шоколада.
Это не означает, что у вас не может быть веских причин для оправдания ваших предпочтений, но в конце концов, это всего лишь ваши предпочтения.
источник