Чому схема є моєю першою мовою в університеті?


80

Я чую про C, C ++, Java щодня, коли люди починають говорити про інформатику, але в моєму першому класі інформатики нас просять писати в Scheme (DrRacket).

Чому так?

Які відмінності це призведе до мого майбутнього розуміння програмування?

ОНОВЛЕННЯ: Я закінчив свій перший термін, але не повністю виконаний зі схемою. У моєму другому терміні (який зараз є) ми взялися за програмування на С. Спочатку було засмучено вивчати покажчики, але зараз я відчуваю себе набагато краще.

Не можна сказати більше того. Я намагаюся навчити себе Java (або C ++?) Для частини OOP, якої мені не вистачає. Поки що мені найбільше подобається функціональне програмування. Лямбда просто захоплююча. :)


148
Вітаю, мені здається, що ви, можливо, їдете в одну з небагатьох шкіл, що залишилися, яка насправді намагається викладати інформатику. Схема навчання як першої мови - це дуже добре. Ні, це не так комерційно, як багато інших, але це чудова мова для вивчення справжньої суті інформатики.
Джеррі Труну

21
C, C ++ і Java - галузеві побічні продукти інформатики. Цілі корені схеми - в інформатиці. Мови в комерційному використанні мають стільки ж спільного з інформатикою, скільки Макдональдс і з кухнею.
JasonTrue

33
Ці хлопці вірні; ви плутаєте комп’ютерне програмування з інформатикою - як сказав Дайкстра, це як плутати конструкцію телескопа з астрономією. Схема про найкращу мову для вивчення основних понять з інформатики . Якщо ви очікуєте, що ступінь інформатики - це те, як навчитися писати додатки для бізнесу на Java, можливо, ви будете записані в неправильній програмі.
Ерік Ліпперт

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

4
Як тільки ви зіпхнете ноги під собою, зрозумівши основний синтаксис Схеми, спробуйте прочитати "Маленький схемер". Це тонка книга, але якщо ви зможете зрозуміти все, що в ній, ви по-справжньому зрозумієте основи функціональних мов програмування.
Ерік Ліпперт

Відповіді:


91

Звучить чудова школа! Діалекти Ліспа набагато ближче слідують математичній парадигмі алгоритмів. Вони змушують програмістів вивчати рекурсію та функціональний стиль. Це відмінний досвід. Ваша школа перебуває в ряді з MIT, який досі використовує Абельсона та Суссмана для необхідних CS 6.001.

Ця стаття може бути втішною та корисною для розуміння проблеми.


6
"Сила", мабуть, не є хорошим словом для використання. Як щодо "поїзда"?
Баррі Браун

4
Насправді, в навчальній програмі МЕП МТС відбулися значні зміни протягом останніх кількох років. Їх вступний курс зараз розділений на два курси (див. Mit.edu/6.01/mercurial/fall11/www/index.html за перше півріччя), і більшість мовних вказівок є на Python.
jonsca

4
Я погоджуюсь, що схема - це чудова мова, і її добре вивчити. Однак, давайте зіткнемося з цим; майже кожна робота з програмування в реальному світі використовує необхідну мову; більшість справді серйозних завдань програмування вимагають C ++, а програмісти на C ++ зазвичай активно відштовхують вас від тих чи інших причин використовувати всі приємні математично засновані ідеї для розробки програм. Рекурсія не зіграє великої ролі у ваших імперативних програмах.
Фелікс Домбек

4
@FelixDombek, ви впевнені? Усі ідеї? Дійсно? Обов'язковий цикл - це також математична ідея, зауважте.
SK-логіка

3
@FelixDombek, я бачу лише причину використовувати ітерацію замість хвостової рекурсії в C ++. Усі інші форми рекурсії подаються точно так само, як і в реалізаціях функціональних мов. Тож я взагалі не можу погодитися з вашим зауваженням. Чим більше математики ви вкладете в своє кодування C ++, тим краще. Сумніваюсь, ви спробуєте реалізувати, скажімо, червоно-чорні дерева на C ++ без рекурсії.
SK-логіка

37

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

Не хвилюйтесь; Ви, зрештою, вивчите Java / C / C ++, можливо, починаючи другий курс. Якщо ви почали вивчати Java 6 зараз, до того часу, як ви закінчите Java 8, вона закінчиться. Або його замінить Python. Або якась інша мова, яка ще не була винайдена, але сприймає галузь штурмом. Краще відкладати навчання "популярних" речей якомога довше, щоб це не застаріло, коли ви потрапляєте в робочу силу.

Схема / ракетка допоможе вам зосередитись на важливих поняттях: дизайн алгоритму, структури даних та маніпулювання інформацією. Ви знаєте, що є загальним для всіх мов.


36

Вітаємо, зараз вас перетворюють на еквівалент вегана в комп'ютерному світі, і через два роки ви не зможете закінчити будь-яку дискусію, не повідомивши людей про вищу моральну основу, на яку ви виступаєте. ;)

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

Багато поганих ферм-мавп-колах вчать вас ремеслу, і тоді вам може трапитися наука з цього, але це не гарантується. (і ви можете закінчитися досить дивними помилками щодо цього)

У будь-якому випадку, як почесний член функціональної натовпу, коли ви виходите звідти, ви завжди будете відчувати себе не зрозумілим і недооціненим .

Що, припустимо, для середньостатистичного комп’ютерного майстра не є новим.

Зараз у вас є високий ризик:

  • намагаючись завершити академічну кар’єру ,
  • приступати до досягнення доктора наук ,
  • ... emacs .

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


2
Вибачте, щоб некрозувати коментарі, але чому emacs? Мені цікаво. Я в тому ж човні, що і ОП (починаючи з осені першокурсником коледжу), і ми будемо використовувати Ракетку (подібно до схеми).
Кевін Джонсон

2
@ KevinJohnson emacs часто називають операційною системою, написаною на LISP, що випадково допомагає багатьом людям редагувати код . Якщо ви робите функціональні парадигми і (як викладаєте) подібні до непристойності синтаксисів, подібних до LISP, це, швидше за все, зросте на вас як на ваш бажаний редактор тексту.
ZJR

1
"навчить вас науці, з якої ви черпаєте ремесло": +1
Джорджіо

23

Які відмінності це призведе до мого майбутнього розуміння програмування?

Це трохи схоже на запитання, як читання Шекспіра допоможе вам написати курсові роботи. Програмування (будь-якою мовою) - це лише засіб для висловлення своїх ідей у ​​виконаному вигляді. Інформатика надає концептуальні будівельні блоки, які дадуть вам щось цікаве. Синтаксис схеми порівняно простий, тому ви можете швидко дійти до цікавих ідей і не стикаючись з великою кількістю помилок компілятора, стандартних бібліотек тощо.

Зверніть пильну увагу на уроці - ви збираєтеся дізнатись багато цікавого в цьому семестрі.


14

Здається, ви дуже новачок у програмуванні, не маючи попереднього досвіду в цьому взагалі. Ось ось кілька уточнень:

Чому схема, а не C / C ++ / Java ...?

Вивчаючи мову програмування (аналогію можна зробити з англійською мовою), ви вивчаєте синтаксис, який потрібно дотримуватися, щоб ваш код був граматично правильним. Однак мова не навчить вас логіці вирішення проблем. Для того, щоб засвоїти цю логіку, ви вивчаєте різні парадигми програмування .

Кожна мова може реалізовувати (більш-менш точно) одну або кілька парадигм. Парадигма - це спосіб структурувати свою логіку, а парадигма, реалізована за допомогою схеми, називається функціональним програмуванням (FP).

Тож справжнє запитання, яке ви задаєте, це: Чому ПП?

Як ви вже згадували, C, C ++ та Java (які не реалізують FP) набагато популярніші. Власне кажучи, (і з різних причин кожен має свою думку) ПП не дуже популярний в галузі.

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

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


1
Схему не потрібно використовувати функціонально, хоча більш ймовірно, що ви це зробите, ніж у C, C ++ та Java.
Рікі Кларксон

"Це схоже на школи, які викладають латинську мову з метою вивчення англійської літератури.": Або з класами операційних систем, які навчають Unix-подібну ОС замість інших, більш широко розповсюджених ОС.
Джорджіо

11

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

Після того, як ви зрозуміли ці поняття, їх легко застосувати до інших мов.


4
"Повсякденні мови, що використовуються в більшості підприємств, можуть бути цілком придатні для створення потрібного сьогодні програмного забезпечення". Зважаючи на типові показники вартості, якості та успішності, це досить оптимістичне твердження :-)
Jörg W Mittag

Це, безумовно, правда! Ось чому я написав "може" замість "є" :-)
перд

1
"Після того, як ви зрозуміли ці поняття, їх легко застосувати до інших мов." - Це твердження занадто правдиве. Я підозрюю, що мені знадобиться близько тижня, щоб зібрати синтаксис майже будь-якою новою мовою та бути досвідченим. Мене навчали C / C ++ та Асамблеї в школі, але я навчав себе Python на стороні та Лісп для дослідницького проекту. Без фундаментального розуміння, яке я отримав від Python, Lisp та Assembly, я сумніваюся, що я був би майже програмістом, який я є сьогодні.
Уейн Вернер

9

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

Ось що один з ( по загальному визнанню упереджено) авторів HTDP повинен сказати про те , як вчення Scheme підготував магістрантів на Північно - Східному університеті за програмою кооперативного освіти ( «кооперативні»: студенти альтернативних семестрів академічного навчання з семестрів очного зайнятість).

До мого приходу Північно-Східний протягом двох десятиліть використовував стандартну навчальну програму: три терміни модної на даний момент мови (Pascal, C ++, Java), використовуючи набір надзвичайно насичених графікою вправ, переплетених із уроками з практичних програм. Навчальна програма була широко опублікована в SIGCSE та суміжних спільнотах, але вона не працювала. На висоті веб-бульбашки лише близько третини студентів отримали співпрацювання з програмування; Більшість інших опинилися як «техники», як вони себе називали: переміщення комп’ютерів, запуск сценаріїв, налаштування маршрутизаторів та мереж тощо. І все це навчання коштувало $ 150 000 за навчання.

Через рік на Північному Сході наш декан попросив мене взяти перший курс. Перший екземпляр мав успіх - всупереч прогнозам деяких місцевих викладачів. Хоча це і вважалося випробуванням, ми перейшли до програми TeachScheme! навчальна програма постійно; декан запропонував мені розробити мостовий курс, щоб підключити курс HtDP до решти навчальної програми; це розпочало мою співпрацю на HtDC з Viera Proulx. Див. Постскрипт нижче. Через пару років я почав чути від нашого кооперативного факультету, що частка програмних позицій зростає. До 2007 року - в останній раз, коли я брав участь у курсі - мені сказали, що співвідношення програмування в першому кооперативі зросло до двох третин і вище. Тим часом всі TeachScheme! курси викладали численні викладачі з досить різними стилями викладання та особистостями, ніж я. Співвідношення кооперативів з програмування зросло до трьох чвертей і більше, і всі викладачі нижче за течією задоволені навичками програмування студентів.

Редагувати: для тих, хто дуже зацікавлений у раціональній навчальній програмі, ось головне пояснення архітектора - http://www.youtube.com/watch?v=m3be1PHW5X0


6

Моя школа також почала зі схеми. Однією з причин, про яку було сказано, це допомогло вирівняти ігрове поле. Більшість 1-го року Comp Sci може мати деяку або багато експозиції на більш поширених мовах. Менш вірогідним було те, що хтось із людей знає багато схем.


4
Я згоден; Я почав CS, знаючи Pascal, C, Basic, x86 Assembler, а інші мали досвід різних мов або взагалі жодного. Нас познайомили з МЛ, в якому не тільки ніхто не мав жодного попереднього досвіду, але який мав настільки іноземну парадигму, що це було як би починати спочатку навіть для самих досвідчених серед нас. Пізніше я думаю, що ML (функціональна парадигма) - це найкорисніше, що я дізнався в CS.
KaptajnKold

6

Насправді, оскільки Lisp (схема, що є діалектом) є Grande Dame функціональними мовами (подумайте про F #, Groovy, Clojure, Haskell тощо), то така підготовка не залишає вас і у комерційних недоліках, оскільки це найгарячіша Тема про блок розвитку прямо зараз.


4

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

Мови, схожі на Lisp, хоч і мають чистоту та простоту в дизайні, що робить їх трохи легшими для викладання. Хоча приємна користь у тому, що згодом у вас буде набагато простіше вивчити щось на зразок Scala.


3

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

Що стосується вашого питання, чому обрана схема: відповідь полягає в тому, що вона є однією з найпростіших мов там, і вона дозволяє вам робити багато (особливо коли ми починаємо грати з ледачими списками згодом). Більше того:

  1. Людям, які не мають досвіду програмування, легше вчитися. Існує не так багато технічних деталей і лише кілька спеціальних форм.
  2. Це дозволяє більш високий рівень абстракції. Хороший курс може зосередитись на навчанні програмістів думати, а не зосереджуватися на технічних деталях, що дозволяє студентам стати кращими програмістами.
  3. Списки дивовижні. Є стільки, що ви можете зробити з ними. Автомобіль та компакт-диск виявляються потужними інструментами, і лише коли ви починаєте працювати з покажчиками, ви усвідомлюєте, що схема була дивовижною при обробці списків.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.