Что лучше подойдет начинающему программисту: классическая книга по схеме или современный язык, такой как python? - PullRequest
7 голосов
/ 28 июля 2010

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

В настоящее время я увлекаюсьЯ знаю немного языков, большая часть моего опыта в Perl и Shell, и я немного баловался с Ruby.

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

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

Однако даже MIT изменил свой вводный курс с использования SICP и Scheme на курс в Python.

Итак, я прошу васВот советы многих опытных программистов по поводу возраста:

  • Действительно ли Схема (и эти книги) действительно учит кого-то, как правильно программировать?Если да, то какую из двух книг вы рекомендуете?
  • Является ли этот подход к обучению все еще актуальным и применимым?Я на правильном пути?
  • Мне лучше потратить время на изучение более практичного / общего языка, такого как Python?
  • Является ли Scheme (или LISP в целом) действительно языком, который изучаютТолько чтобы никогда не использовать?Или те из вас, кто часто знает в нем код lisp?

Спасибо, извините за бессвязные.

Ответы [ 12 ]

11 голосов
/ 28 июля 2010

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

8 голосов
/ 28 июля 2010
  • Действительно ли Схема (и эти книги) учит тому, как правильно программировать? Если да, то какую из двух книг вы рекомендуете?

Возможно. Вероятно, лучше, чем любая из книг «Учись X в Y».

  • Является ли этот подход к обучению все еще актуальным и применимым? Я на правильном пути?

Да.

  • Мне лучше потратить время на изучение более практичного / общего языка, такого как Python?

Только если вы планируете устроиться на работу в нем. Схема даст вам лучшее основание.

  • Является ли Scheme (или lisp в целом) действительно языком, который изучают, но никогда не используют? Или те из вас, кто часто знает в нем код lisp?

Я использую Emacs Elisp, чтобы настроить мои Emacs. Я также работаю с функциональными языками на стороне, чтобы сохранить гибкость своего ума.

Мое личное мнение таково, что по существу есть два трека, которые необходимо пройти, прежде чем студент сможет заявить, что знает что-то о программировании. Трек one - это сама машина, компьютер. Здесь вы должны начать со сборки и узнать, как работает компьютер. После некоторой работы и понимания - не экономьте - вы должны изучить C, а затем C ++; действительно получить понимание управления ресурсами и что на самом деле происходит. Трек two - это языковой трек очень высокого уровня - в этой области лежат Scheme, Prolog, Haskell, Perl, Python, C #, Java и другие, которые выполняются на ВМ или интерпретаторе. Их также необходимо изучить, чтобы понять, как проблемы можно абстрагировать и обдумывать различными способами, не затрагивая сложную часть реального компьютера.

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

5 голосов
/ 28 июля 2010

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

Lisp и Scheme раньше, чем большинство других языков, поддерживали функции, которые часто были революционными для того времени: замыкания и функции первого порядка, продолжения, гигиенические макросы и другие. С не имеет ничего из этого.

Но они появляются все чаще и чаще на языках программирования, которые Get Stuff Done сегодня. Почему вы можете просто объявить функции, казалось бы, где-нибудь в JavaScript? Что происходит с внешними переменными, на которые вы ссылаетесь из функции? Что это за новые «замыкания», которые PHP 5.3 только что получил ? Что такое «побочные эффекты» и почему они могут быть плохими для параллельных вычислений? Что такое "продолжения" в Ruby? Как работают функции LINQ? Что такое "лямбда" в Python? В чем дело с F #?

На все эти вопросы ответит Схема обучения, но не ответит С.

1 голос
/ 29 июля 2010

Ненавижу говорить, но никто не восхищается программистами за их "хакерские отбивные".Есть люди, которые делают дерьмо, тогда есть все остальные.Многие из прежних типов - это «корпоративные дроны», которых вы, кажется, презираете.

Теперь, на ваш вопрос, я лично люблю Lisp (и Scheme), но если вы хотите что-то, что вы с большей вероятностью будете использовать в индустрии, "Beginning Python" может быть лучшим материалом для вас, поскольку Python найден большечасто в дикой природе.Или, если вам нравится Ruby, найдите какой-нибудь хороший материал по Ruby и начните создавать рабочие решения (то же самое с Java, .Net и т. Д.).

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

1 голос
/ 28 июля 2010

Лучшие языки для начала:

  • язык, на котором вы хотите играть / изучать
  • язык, на котором вы хотите работать

И, вероятно, в таком порядке, если только самая неотложная потребность - прокормить себя.

Вот в чем дело: способ научиться программировать - это много делать. Чтобы сделать это много, вам понадобится много терпения и больше, чем немного энтузиазма. Это важнее, чем конкретный язык, который вы выбираете ... но выбор языка, на котором вы любите работать (будь то, что вам нравятся функции или потому что вы чувствуете, что он вас чему-то научит) может быть большой импульс

Тем не менее, вот пара комментариев к Схеме:

Имеет ли Схема (и делает эти книги) действительно научить хорошо программировать?

Особенность Scheme (или чего-то подобного) в том, что если вы изучите ее, она научит вас очень полезным абстракциям, с которыми многие программисты никогда не сталкиваются. функциональный язык программирования никогда не учат. Вы будете думать по-другому. Сущность языков программирования и вычислений будет казаться вам более подвижной. У вас будет лучшее представление о том, как составлять свои собственные квази-примитивы из очень небольшого набора примитивов, а не полагаться на обычно статический набор примитивов, предлагаемый в некоторых других языках.

Проблема в том, что многое из того, что я говорю, может не иметь для вас большого значения в данный момент, и это немного более изнурительная дорога, чем переход на общий динамический язык, такой как Perl, Python или Ruby. ... или даже такой язык, как C, который близок к механике фон Неймана машины.

Это не значит, что начинать там с плохой идеи: я был частью эксперимента, где мы научили Пролог всем вещам начинающим программистам, и это сработало на удивление хорошо. Иногда ум новичка действительно помогает. :) Но Scheme как первый язык определенно нетрадиционный путь. Я подозреваю, что Ruby или Python будут более мягкой дорогой.

Действительно ли Схема (или шутка) язык, который изучают только для никогда не использовать?

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

1 голос
/ 28 июля 2010

Я бы сказал, это зависит от того, что вы хотите сделать.

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

Если вы хотите заняться информатикой, я бы порекомендовал Scheme вместе с SICP.

В любом случае, я бы порекомендовал в конечном итоге выучить несколько очень разных языков, чтобы дать вам больше способов взглянуть и решить проблемы. Например, получение достаточных знаний в Common Lisp сделает вас лучшим программистом на Java. Я бы взял их по одному за раз.

0 голосов
/ 06 августа 2010

К конкретному пункту вашего вопроса «классика», которую вы упомянули, поможет вам точно сказать, что написано в заголовках.SICP о структуре и интерпретации компьютерных программ.Речь идет не об изучении Схемы (хотя вы изучите Схему).HtDP о том, как разрабатывать программы, а не об изучении Схемы (хотя вы изучите Схему).

Схема, в принципе, очень маленькая и лаконичная, почти без ошибок.Это делает его превосходным для перехода к изучению того, как структурировать и интерпретировать программы или как их проектировать.Более традиционные «практические» языки, такие как C, C ++, Python или Java, не обладают таким качеством.Они изобилуют синтаксисом.Изучение с этими языками означает, что вы должны одновременно изучать синтаксические особенности при обучении мыслить как программист.На мой взгляд, это неудачно.В некоторых случаях причуды хороши, в других - случайности истории, но во всех случаях это неудачно.

0 голосов
/ 28 июля 2010

Я согласен с gruszczy. Я бы начал программировать с C.

Поначалу это может быть немного страшно (по крайней мере, для меня: S), но в конечном итоге вы будете благодарны. Я имею в виду, что я люблю Python, но, поскольку я сначала выучил C, кривая обучения для других языков была не очень крутой.

Начните с C и сделайте это так.

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

0 голосов
/ 28 июля 2010

Начать кодирование в C. Сначала это должно быть ужасно, но это учит вас самым важным вещам, таким как: указатели, повторяемость, управление памятью. Попробуйте прочитать несколько классических книг по программированию, таких как Искусство компьютерного программирования Дональда Кнута. После того, как вы освоите это, вы можете подумать об изучении объектно-ориентированного программирования или функционального программирования. Первые основы . Если вам удастся выучить их, вам больше ничего не будет трудно.

0 голосов
/ 28 июля 2010

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

Если ваш поиск знаний больше ориентирован на разработку алгоритмов и науку программирования, начните с C. Если ваш поиск больше для практических целей, я слышал, что Ruby - хорошая отправная точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...