Какие языки (или классы (как в парадигмах) языков программирования плюс рекомендуемый язык этого класса) должен преподавать каждый студент, изучающий информатику, в колледже, по вашему мнению? Мотивировать ваши ответы; почему этот язык? Какая польза от этого? Каким концепциям он учит (лучше, чем язык X)?
Примечание / уточнение : Этот вопрос касается информатики с упором на разработку программного обеспечения, а не чисто информатику. В центре внимания все еще образование в области компьютерных наук, а не образование в области разработки программного обеспечения.
Ответы:
Я собираюсь дать список:
Студенты должны как минимум подвергаться воздействию всех этих парадигм . Не только один или два.
Я предполагаю, что многие люди предложат Python для описания процедурного стиля, стиля ООП и, возможно, других, но у меня недостаточно личного опыта работы с Python, чтобы я мог с уверенностью рекомендовать его.
источник
Лично мне несколько грустно, что функциональные языки преподаются не так часто, как раньше. Я думаю, что, по крайней мере, студенты-компаньоны должны быть знакомы с языком из всех основных парадигм: процедурной, объектно-ориентированной, функциональной и динамической.
источник
Я думаю, что хорошо сбалансированный студент CS должен быть обучен языку в каждом из 4 типов языков программирования:
Функциональный - Lisp / Haskell / PostScript. У меня нет большого опыта работы с Haskell, но я слышал, что другие программисты в восторге от этого. Понимание конструкций функционального программирования и их полезности во многих ситуациях поможет программисту лучше разбираться в алгоритмах на других языках.
Объектно-ориентированный - выбирай. C # / Java / Python / Ruby / Ядда Ядда Ядда. Этому типу нужно учить просто потому, что этого хочет современный бизнес.
Императив - С / Фортран / Паскаль. Они менее распространены в наши дни, но их все же следует изучать с практической / исторической точки зрения. Методы, которые они используют, все еще имеют практичность, потому что на каждом языке все сводится к инструкции. И императивные языки очень хороши в перечислении и следовании инструкциям.
Логический - Пролог. Я никогда не находил хорошего практического применения ни для одного из этих языков, но я нашел некоторые концепции, лежащие в основе логических языков, полезными при попытке выяснить, как написать некоторые из моих методов в более объектно-ориентированных языках. В студенческие годы мне не удавалось долго концентрироваться на логических языках, и я думаю, что более сильная концентрация могла бы принести мне пользу.
источник
Язык № 1, который должен знать каждый выпускник CS, - это язык, который максимально увеличивает их потенциал для получения отличной работы. Это изменится с течением времени, изменится в зависимости от индивидуального определения отличной работы и будет варьироваться в зависимости от географического региона.
На данный момент я скажу, что английский является языком № 1, который должен знать каждый майор CS (это, конечно, зависит от региона).
источник
Я думаю, что это меняется со временем, но в идеале - 3 языка с 3 очень разных точек зрения. В мои дни это были процедурные, ОО и функциональные - Паскаль, С ++ и LISP. Я не так продан на этих трех. Но когда я беру интервью, я ищу:
Как другая профессия - я думаю, что программы CS должны обучать студентов на известных языках на рынке. В любой момент времени я думаю, что 2-3 языка имеют серьезное значение для большинства рабочих мест. Я думаю, что школа обязана предоставить учащимся возможность выучить 2 из 3 языков с глубиной обучения, по крайней мере, на одном.
источник
Для студентов CS ищите языки программирования, которые тесно связаны с обсуждаемыми концепциями CS. Я бы предложил:
Список можно продолжать таким образом, но основная идея довольно проста: научите студентов тому языку программирования, который будет наилучшим образом соответствовать тому, как вы хотите преподавать концепции.
источник
Yacc
чтобы понять, что происходит за кулисами, какой бы язык программирования вы не использовали. это помогает понять основные понятия, такие как мертвый код, и различные типы оптимизаций, которые (хороший) компилятор сможет сделать для вас.
источник
Лисп (с CLOS для ООП) и Хаскелл. Этот вопрос не ограничивается студентами. Новые модные языки программирования заимствовали (скопировали, украли? ... нет, это неплохо) из множества возможностей. Вы можете подготовить себя к будущему. Функциональное программирование (стиль) сегодня более важно и вводится в императивных языках программирования, таких как C # (LINQ) или C ++ (лямбда) и многих других. Жаль, что некоторые студенты изучают только Java.
источник
Я думаю, что язык не так важен, как полагают люди.
Да, вам нужно знать, как программировать и т. Д., Но многие великие программисты самоучки опираются на свой реальный опыт, который помогает им при разработке.
Студенты могли бы с некоторыми уроками о том, как программировать в реальном мире, а не только о методах книги, это сделало бы их более «округленными» и, по моему выбору, лучшими разработчиками / выпускниками.
Я узнал больше о программировании и разработке программного обеспечения после того, как я покинул университет и начал работать!
источник
ДЕЙСТВИТЕЛЬНО ЛИ ЭТО?
Обычно зуд за этим вопросом звучит так: «Какие умные слова я могу добавить в свое резюме, которое принесет мне самую прибыльную / интересную / сложную / легкую работу?». Хотя этот вопрос имеет свои достоинства, так как большинство резюме сначала проверяются специалистами отдела кадров, которые не понимают, что они ищут. но это очень мелко, так как после того, как вы прошли ворота, вам нужно доставить товар.
Дело не в том, какие языки ты знаешь, что делает тебя хорошим или плохим программистом, а в том, как ты можешь это использовать. Для этого есть в основном две категории программистов:
Те, которые концентрируются на изучении языка до его сути. Наиболее важным является язык и как его использовать. В крайних случаях они имеют тенденцию к супероптимизации каждого маленького кусочка кода и часто используют неясные функции только потому, что могут.
Тогда есть те, которые хотят узнать о методах и парадигмах. Какой язык они используют, на самом деле не имеет значения, поскольку он может элегантно выразить их ментальную картину. В крайнем случае они будут склонны использовать UML или другие подобные системы, надеясь, что другие сделают основную работу по его кодированию.
На мой взгляд, вам нужны оба. # 1 обеспечит краткосрочные навыки, а при грамотном выборе облегчит вам работу с HR, но # 2 останется с вами на протяжении всей вашей карьеры и определит вас как программиста.
№ 2 предоставит руководство и организует ваш ход мыслей в направлении рабочего решения стоящей перед вами проблемы, но без 1 он остается идеей, навсегда проплывающей в объятиях испепеляющего рая (или ада, в зависимости от того, откуда вы на него смотрите).
# 1 даст вам возможность воплощать идеи в реальные рабочие системы, но без 2 ваши системы будут стремиться к раковым бесформенным монстрам.
источник
Я считаю, что вы частично ответили на свой вопрос самостоятельно.
Действительно важно дать студентам возможность вступить в контакт с несколькими парадигмами, реальные языки не должны иметь значения.
Конечно, важно, прежде всего, обучать тем парадигмам, которые предоставляют большинство возможностей для работы (возможно, в настоящее время ООП). Соответственно, также лучше преподавать широко используемый язык для этой парадигмы, поскольку это более полезно, чем изучение того, что вы, вероятно, никогда не будете использовать. Поэтому я также ненавидел писать псевдокод на экзаменах. Псевдокод хорош, если у него нет фиксированного синтаксиса. Вы должны просто быть в состоянии донести понятия.
Так конкретно:
ООП: .NET или Java
По крайней мере, 1 дополнительная парадигма программирования, чтобы студент узнал о других подходах.
Функциональный: Лисп?
источник
Язык ассемблера и микрокод. Студент CS должен понимать все основные уровни абстракции между булевыми конечными автоматами и последним высокоуровневым функционалом / OOP / и т.д. парадигма языка программирования.
Basic или Logo или Squeak (et.al.), если они когда-либо захотят понять, как научить маленьких детей компьютерной грамотности.
Фортран, Кобол и Лисп, если они хотят понять историю языков программирования и узнать, какие реальные проблемы решают современные практики.
источник
Выбор 3 или более языков из разных парадигм не так уж и сложен, было дано много хороших ответов. Но если бы мне пришлось выбирать только один язык, я бы выбрал Scala, потому что он функциональный и объектно-ориентированный. Вы можете объяснить и сравнить различные подходы на одном языке.
источник
Не забывайте стековые / конкатенационные языки! Они могут быть настоящими сумасшедшими. Они подчеркивают сложность построения, используя небольшие, простые для понимания примитивы. Вы можете использовать их для написания бессмысленного (или молчаливого) кода, который кажется чертовски чистым.
Классический язык - это Forth , но сейчас я перехожу на Factor . Также стоит проверить Джой и Кэт . Не пропустите сочинительный язык вики . Это веселее, чем мешок с молотками!
источник
Что-то функциональное, Haskell или Lisp будет моим первым выбором, но, возможно, Erlang. Функциональные языки действительно научат вас, как создавать абстракции очень мощным способом.
источник
Несмотря на отсутствие мейнстрима, я обнаружил, что D, а именно версия 2, предоставляет некоторые интересные уроки, которые нельзя легко выучить где-либо еще. Это более серьезная попытка, чем любой другой язык, который я могу придумать, чтобы заставить императивное / процедурное, объектно-ориентированное и функциональное программирование хорошо играть друг с другом и позволить программированию на очень низком уровне (указатели, ручное управление памятью, inline ассемблер) и очень высокий уровень (общее и генеративное программирование) на одном языке.
Это ценно, потому что вместо того, чтобы рассматривать парадигмы изолированно, как если бы они существовали в разных вселенных, вы можете видеть лес сквозь деревья. Вы можете увидеть сильные и слабые стороны каждой парадигмы на детальном уровне, когда будете смешивать их в свои программы. Вы увидите, как основные аспекты парадигм могут быть реализованы в библиотеках с точки зрения низкоуровневого кода. Модуль стандартной библиотеки std.algorithm реализует важные примитивы функционального программирования, но представляет собой простой, простой D-код без всякой магии. Так же, std.rangeреализует ленивую оценку, но опять-таки довольно простой D-код. Вы понимаете затраты, связанные с примитивами каждой парадигмы, потому что черты D, близкие к металлическим, делают то, что на самом деле происходит под капотом, относительно прозрачным. Вы даже можете написать что-то низкоуровневое, похожее на C, а затем создать симпатичный, высокоуровневый интерфейс к нему на том же языке, не мешая волшебным слоям клея.
источник
Псевдокод.
Специалисты в данной области должны быть в состоянии объяснить свои идеи последовательным, структурированным образом без жаргона, специфичного для фреймворка или синтаксиса. Мне не нужно знать разницу между вашими квадратными скобками и скобками, чтобы понять ваш алгоритм. Мне не нужно знать, что
??
значит, или чтоgrep
переключатели.Пишите на простом языке, но структурируйте и отформатируйте его как код. Любой может реализовать это на любом языке, который им нравится.
редактировать: этот ответ частично мотивирован неспособностью некоторых программистов писать псевдокод.
Преимущества псевдокода в том, что непрограммные заинтересованные стороны могут его понять. Я не предполагаю, что вы хотите, чтобы БА и пользователи проверяли ваш код, однако это может помочь, когда непрограммист понимает требуемый алгоритм. Psuedocode устраняет необходимость объяснения
for (int i = 0; i < j; i++)
и что по сути является шаблонным жаргоном.источник
C.
Конечно, нужно знать больше, чем один язык, а не только старый процедурный язык. Но если бы мне пришлось отправиться на необитаемый остров только с одним компилятором, я бы пошел с моим старым добрым gcc. Вы можете понять высокоуровневое программирование, если знаете о низкоуровневом программировании. Я думаю, что это не так, наоборот.
источник
Некоторыми языками программирования, которые применялись для приобретения общих навыков решения проблем, и концепциями программирования являются Logo и Karel, их следует изучать перед C / C ++ / Java / Lisp / PERL / Assembly / любой парадигмой программирования.
Студенты получают очень практическое введение в программирование.
источник
Что-нибудь с объектами. Просто убедитесь, что они хорошо это изучают.
Я бы нанял отличного Java-программиста для C # в любое время, но у меня было бы много сомнений нанять человека, который никогда не писал реальный код
источник