Почему, кажется, существует большой страх при выборе «неправильного» языка для изучения? [закрыто]


28

Возможно, это только я, но, как нынешний студент CS, я уже сталкивался со многими вопросами на этом сайте и в других местах, а не просто "Какой язык я должен использовать для x?" но также "Кто-нибудь еще использует язык Y?" Мой первый CS-класс преподавался на Scheme, который, если я не ошибаюсь, не используется широко (по крайней мере, по сравнению с такими языками, как Java, PHP, Python и т. Д.). Многие из моих одноклассников воздерживались от мысли, что им придется изучать язык, который им больше никогда не понадобится, но я не совсем понимаю, откуда взялся такой большой страх перед изучением менее популярных языков. Нет, я не могу использовать Scheme на любой работе, которую получаю, но я, конечно, не жалею, что научился использовать ее (хотя и для начинающего, не очень углубленно в этом семестре). В этом семестре я беру уроки по поисковым системам, что делается в Perl, и снова я вижу, как одноклассники жалуются на выбор языка. Я могу понять, что у меня есть любимый язык и что он не любит других, но почему некоторые начинают беспокоиться о его изучении? Вы действительно можете выучить «неправильный» язык? Разве изучение чего-то вроде Схемы или Хаскелла не является хорошим умственным упражнением, если не больше, и полезно, по крайней мере, знакомству с различными способами решения проблем?


Интересно, что мои первые два года обучения CS были связаны исключительно с C # и Java, и угадайте, что я в итоге использовал в своем первом совместном размещении? Четырехбуквенное слово начинается с буквы «П».
Анон.

6
@ Shewbox, вы правы, они не правы, вы получите преимущество перекрестного обучения, но они этого не сделают. Конец истории.
ocodo

7
Они делают SEO (поисковая оптимизация) с менеджерами по найму.
rwong

1
@rwong: и, к сожалению, некоторым из нас пришлось выучить непростой способ «не использовать XXX один раз и больше никогда его не трогать», потому что некоторые рекуйтеры спамят о совпадениях ключевых слов.

1
@JB: 99% людей заставляют других выглядеть так, будто они целуются.
Майкл К

Ответы:


27

Суть степени CS не в том, чтобы научить вас C # и Java, вы можете изучать их самостоятельно. Его научить вас программированию и вычислениям. Язык это просто деталь. В течение карьеры в программировании вы будете использовать много языков. Сегодня это может быть Java или C #, но через 10 или 15 лет это может быть Erlang или что-то, что еще даже не было изобретено. Изучение разных стилей программирования и разных способов решения проблемы гораздо важнее, чем изучение какого-либо одного языка.


Точно - моя степень предшествует C ++, не говоря уже о Java или C #. Хотя нас учили в основном на языке Паскаль, с ранней стадии нам давали проблемы на разных языках, и на втором курсе у нас был курс «язык месяца», симуляция (используемая для симуляции) остается моей самой любимой памятью - хотя теперь у меня нет шансов написать какой-либо код симуляции - в основном из-за ООП, которому он меня научил (хотя я не знал этого в то время)
Мерф

17

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

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

Первый язык, который вы изучаете, обычно связан с вашим первым набегом в компьютерное мышление. Если кто-то скажет вам, Джимми, что мир перед вами состоит из символов A, B и C, все ваше мышление будет выражаться в терминах A, B и C. До тех пор, пока однажды не появится надуманный ботаник за то, что вы не знаете X , Y и Z концепции. Нет никакого способа узнать это, зная только ABC.

Люди, которые больше всего обеспокоены чьим-либо родным языком, вероятно, являются просвещенными программистами, которые боролись во тьме. О, теперь я знаю, что такое функция первого класса. Чувак, я бы хотел знать о внедрении наследования и зависимости два года назад!

Ваш родной язык не так важен, как ваше отношение к последующим языкам. Если вы видите далеко впереди вас, чтобы знать, что есть мир за пределами BASIC / C / Perl / PHP / и т. Д., То вы далеко впереди игры. Вот почему многие люди фанатики функциональных языков, так как многие активно развивающиеся языки сходятся к ним.


1
Мы все должны начать с этих базовых концепций. Когда кто-то изучает новую концепцию (на примере шаблонов проектирования), он склонен использовать ее повсюду . Если бы я не потратил первые 5 лет, которые я программировал на базовую структуру программы обучения и как думать, как программист, тогда, когда я добрался до ОО, я был бы настолько занят изучением процедурной части, что не мог сосредоточиться на Оо часть. При этом +1 за «Ваш родной язык не так важен, как ваше отношение к последующим языкам» и понятиям .
Майкл К

Я думал о добавлении этого в. Я вовсе не говорил, что базовые языки не имеют своего места. На самом деле, они делают (на ранних этапах обучения). Я просто не упомянул об этом.
Марк Канлас

О Майкл, твоя редакция намного класснее, хахахаха.
Марк Канлас

Если одноклассники ОП обеспокоены тем, что Схема - неподходящий язык для изучения, то, вероятно, они не настолько образованны. :)
Дэвид

Некоторые языки имеют сложный синтаксис, хотя на самом деле просты (производные C), другие имеют простой синтаксис, хотя на самом деле являются сложными (Groovy). Под этим я подразумеваю - в C / C ++ или Objective-C - все декларативно и процедурно в любой активной области кода, тогда как что-то вроде Groovy имеет много вещей, «происходящих под капотом», которые «скрыты» синтаксическим сахаром. Мое предложение новичкам, как правило, состоит в том, чтобы использовать сложные синтаксические языки, которые более точно отражают работу компьютера на самом деле - потому что эти знания упрощают использование других языков.
dcgregorya

11

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

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

Разница между Карьеристом и тем, кто учится ради обучения. Карьерист беспокоится, что они изучат «Неправильную вещь», и что они будут сожалеть об этом, потому что это не будет «Правильная вещь, чтобы дать мне работу». Человек, который учится ради обучения, понимает, что у него есть 4 года, чтобы потратить время на изучение всевозможных полей с относительно управляемым давлением; Карьерист считает, что задача школы - научить их чему-то. Ученик выясняет, когда они попадают на незнакомую территорию, и у него больше шансов найти для них подходящую работу. Карьерист заканчивает работу бухгалтера второго уровня в фирме третьего уровня, оплачивает счета и обижается на своего босса.

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


9

Да, изучение функциональных языков, таких как Scheme и Haskell, полезно в качестве введения в функциональное программирование. Насколько ваши одноклассники жалуются на Perl, хотя Perl не так популярен, как раньше, он, безусловно, все еще широко используется в бизнесе.

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


5

Возможно, потому что на людей повлияли такие высказывания, как классический троллинг Эдсгера Дейкстры: «Практически невозможно научить хорошее программирование студентам, которые ранее имели опыт работы с Бейсиком: как потенциальные программисты, они умственно изуродованы вне надежды на возрождение». ( ссылка )

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


5

Ваш первый язык должен быть ориентирован на понятия, а не на синтаксис или идиомы. Используя это как руководство:

  • Perl означает много поиска специальных переменных и загадочного синтаксиса
  • PHP означает смешивание понятий из-за его органического роста
  • Java означает небольшую путаницу, поскольку не все на самом деле является объектом
  • Assembly / C / C ++ означает кучу низкоуровневых вещей, что замечательно, если вы хотите заниматься разработкой встроенных систем, но отвлекает от понятий более высокого уровня
  • SQL полезен, чтобы увидеть, как естественный язык может (и не может) отображаться в код и структуры данных
  • В Visual Basic для приложений основное внимание уделяется специальным, одноразовым вещам, и поэтому слишком легко пропустить важные понятия, такие как правильная обработка ошибок и рефакторинг.
  • LISP выглядит как простой синтаксис, но также содержит слишком много сокращенных выражений, которые откровенно бессмысленны без подробного знания их полных имен.
  • Haskell часто очень похож на математику, но может быстро выродиться в синтаксический суп
  • Python ... На самом деле, Python - единственный язык, на который я не могу найти серьезных возражений для начинающих. Может быть, просто потому, что это последний язык, который я выучил, и следующий язык научит меня ошибочности моих действий.

Я заметил, что вы ничего не написали о C # или VB.Net.
HK1

4

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

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

Не зная их, я не могу с уверенностью сказать, почему они так себя чувствуют. Может быть, они ленивы. Может быть, они использовали язык раньше и ему не понравилось. Возможно, они боятся попробовать другой язык. Кто знает. Что я знаю, так это то, что как студент CS, исследователь и работавший в промышленности, зная различные языки, это огромный актив, и вы никогда не знаете, что собираетесь использовать или нет. Пример: Когда я только начинал изучать C, мой учитель познакомил нас с утилитами сценариев оболочки и командной строки, такими как grepи awk. Мои друзья не удосужились изучить их до уровня компетентности. Теперь я использую их на работе каждый день.

В этом семестре я беру уроки по поисковым системам, что делается в Perl, и снова я вижу, как одноклассники жалуются на выбор языка.

Perl очень мощный, и если вы знаете, как его использовать, он может сделать вашу жизнь намного проще. Он также похож на Python, и Python активно используется одним из лучших рекрутеров студентов CS: Google. Ваши одноклассники должны есть это. FWIW, я знаю Perl и Python для среднего уровня (не новичок, но не эксперт).

Я могу понять, что у меня есть любимый язык и что он не любит других, но почему некоторые начинают беспокоиться о его изучении?

Молодой и тщеславный? Я тоже был таким. Но мое "раздражение" было больше в области математики. Так что из этого опыта я бы поспорил, что они взволнованы об этом, потому что им не нравится изучать новые вещи или что им трудно выучить новые языки. (Но тогда все, что стоит знать, не упадет вам на колени, говорю я)

Вы действительно можете выучить «неправильный» язык? Разве изучение чего-то вроде Схемы или Хаскелла не является хорошим умственным упражнением, если не более того, и полезно, по крайней мере, знакомству с различными способами решения проблем?

К первому предложению: Нет, но вы определенно можете изучать языки, которые вы бы предпочли не иметь + кашель + Лисп + кашель + =)

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


1
Что не так с Лиспом?!?! :)
Майкл К

1
+1 за «выучить как можно больше языков». Если вы знаете множество языков, выбор одного из них для данной задачи становится тривиальным.
Майкл К

1
@Michael: Более того, это облегчает изучение нового, так как вы уже будете знать большинство концепций.
Дэвид Торнли

@ Майкл: Ничего плохого в Лиспе =). Я просто не парень с языком функционального программирования. Плюс так много скобок !! Однако я видел ОЧЕНЬ элегантные решения, реализованные в Лиспе. Большое уважение к Scheme и Lisp гуру.
аква

3

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

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

  1. Чтобы быть хорошим программистом, необходимо иметь высшее образование в области компьютерных наук.
  2. Степень магистра в области компьютерных наук делает людей плохими программистами.
  3. Сертификаты абсолютно необходимы для продвижения вашей карьеры.
  4. Сертификаты - это красный флаг, указывающий на плохого программиста.
  5. Степень колледжа в области, отличной от компьютерных наук, как правило, приводит к лучшим программистам.
  6. Вы не хороший программист, если вы не программируете по вечерам и выходным.
  7. и на это идет.

Одна постоянная константа всего этого заключается в том, что 99% компаний хотят, чтобы у вас был X- летний опыт работы с Y- технологиями ... А поскольку у человека есть только столько доступных циклов, то что они тратят на эти циклы, очень важно.


2

Я думаю, что страх при выборе «неправильного» языка для изучения в основном связан с отсутствием информации и отсутствием руководства , например:

  • Ошибка серебряной пули . Неправильное представление о том, что существует правильный язык для работы, среды или проекта. И если вы выберете не тот, вы поджарены.
  • Не понимая, что программирование выходит за рамки языков . Язык это просто инструмент, как пишущая машинка или компьютер для писателя. Речь идет не об изучении нюансов инструмента (синтаксиса), а о том, что инструмент позволяет вам (концепции, абстракции и т. Д.) Создавать.

Вот почему, например, Scheme такой замечательный язык обучения. Программирование - это две вещи: абстракция и повторное использование. Схема имеет ровно две особенности: абстракция функции и вызов функции (то есть повторное использование). Черт, у него даже нет синтаксиса!
Йорг Миттаг

2

Мы подвержены большему количеству мнений.

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

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


1

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

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


1

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

Теперь Java полезна, верно? LOL Все учат Java. Это то, за что вы не хотите конкурировать. Ваше резюме будет в стеке 1000-х годов с заголовком Недавний выпускник CS, который знает Java. На самом деле, вам, вероятно, лучше учиться по схеме трудоустройства, так как это секретный признак того, что вы поступили в элитный университет, а не в какой-то хреновый общественный колледж.

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

(PS MIT отказался от схемы и переключился на Python)


Как ни печально, когда мы отказываемся от Scheme, каждый программист должен читать SICP. Я склонен продвигать это при каждом удобном случае.
Захари К

Это напоминает мне о моих университетских днях. Через несколько лет после того, как я начал, отдел CS перешел с C ++ на Java в качестве основного языка обучения. Спустя пару лет (когда я пытался преподавать учебные пособия по структуре данных), стало ясно, что никто из учеников ничего не понимал в распределении памяти (например, они были полностью потеряны в стеке или куче). Следовательно, они не поняли базовых операций над структурами данных, которые мы пытались им научить. Вскоре C ++ снова стал любимым языком.
Смитко

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

1

Время - самый редкий товар из всех, когда вы выходите в реальный мир, и никто не хочет тратить время на навыки, которые не принесут им никакой реальной выгоды.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.