LINUX.ORG.RU

Есть ли альтернатива SICP?

 ,


8

5

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

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

Но самое главное — там слишком много воды. Для рассмотрения достаточно простых вещей, там берутся сложные, избыточные примеры. Например, главы о банковских счетах. Ведь основная мысль там — проблема разделения ресурса. Нахрена спрашивается было городить левые процедуры, вроде withdraw, get-money, put-money и проч. (названия там другие, но не суть), если для демонстрации идеи достаточно было change-balance и check-balance. Ведь основная проблема - в том чтобы посмотреть, а потом снять, чтобы другой объект не изменил в промежутке между двумя операциями. Вместо того, чтобы концентрироваться на основной вычислительной проблеме, на нас выливают тонны воды, в которой расмотреть основную мысль не очень то и просто.

Баланс только для примера. Вообще, вся книга написана тяжелым избыточным языком. Примеры нарочито переусложнены и перегружены ненужными (для прояснения текущей идеи) свистоперделками.

В связи с этим, хочу спросить, существует ли другая, возможно, более старая даже, книжка о программировании (и только о нем — не о типах, не об особенностях той или иной парадигмы и пр.), но только без демагогии?

UPD Забыл сказать, что я в корне не принимаю такие подходы, как «Структурное программирование», что-то в стиле «Something considered harmful» «не отстрели себе яйца», и языки заточенные под компиляцию. Поэтому подобные вещи не предлагать:)



Последнее исправление: phill (всего исправлений: 3)
Ответ на: комментарий от phill

Типы ограничивают абстракцию. Если это не так, привидите свой пример, где они ее повышают.

На контейнеры stl посмотри, да?

Я такого даже представить себе не могу.

Это по причине повышенной некомпетентности и чрезмерного ЧСВ. Вряд ли излечимо.

anonymous
()
Ответ на: комментарий от anonymous

Да, я некомпетентен в глубоко-элитарных вопросах контейнеров stl, но не могли бы Вы все таки объяснить попроще, для народа, так-сказать, не прибегая (прячась за?), к узкоспецифичной терминологии. Иначе это смахивает на уход от вопроса.

phill
() автор топика
Ответ на: комментарий от phill

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

anonymous
()
Ответ на: комментарий от Begemoth

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

pylin ★★★★★
()

Без демагогии, говоришь?
Даже старая подойдёт, говоришь?

Ну на тебе старую без демагогии:

Дэвид Кинг. Создание эффективного программного обеспечения: Пер. с англ. — М.: Мир, 1991. — 288 с., ил.
ISBN 5-03-002005-5 (рус.)
ISBN 0-13-189242-8 (англ.)

Из предисловия:

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

PS: Воды там нет.

PPS: Методика очень старая — наверняка, местные «зоилы» забросают какашками :-)

PPPS: Не применяется конкретный ЯП — все примеры на псевдокоде.

DeVliegendeHollander ★★
()
Последнее исправление: DeVliegendeHollander (всего исправлений: 1)
Ответ на: комментарий от phill

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

pylin ★★★★★
()
Ответ на: комментарий от pylin

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

Алсо, Алан Перлис как то заметил, что синтаксический сахар приводит к раку точки с запятой:)

phill
() автор топика
Ответ на: комментарий от phill

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

pylin ★★★★★
()

Без твоих сельских тем как-то скучновато было. С возвращением!

anonymous
()
Ответ на: комментарий от pylin

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

phill
() автор топика

Вообще, вся книга написана тяжелым избыточным языком


чисто американская черта

Deleted
()
Ответ на: комментарий от phill

Я могу абстрагироваться от того, что его тип мужик, и считать его спортсменом

вот это твоё считать как только перестаёт быть в голове - превращается в тип

функция - это тип, абстрагирующий вычисления. структура данных - это тип, абстрагирующий данные

жестко прописанные типы

по-твоему, типизация бывает только статической?

jtootf ★★★★★
()
Ответ на: комментарий от phill

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

pylin ★★★★★
()
Ответ на: комментарий от phill

Синтаксический разбор используется для трансляции

но к синтаксису ЯП это не имеет прямого отношения

вот тут-то я и прозрел

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

функция - это тип, абстрагирующий вычисления. структура данных - это тип, абстрагирующий данные

То, что Вы называете абстракцией, на самом деле называется барьерами абстракции.

по-твоему, типизация бывает только статической?

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

phill
() автор топика
Ответ на: комментарий от jtootf

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

phill
() автор топика
Ответ на: комментарий от phill

То, что Вы называете абстракцией, на самом деле называется барьерами абстракции.

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

С точки зрения семантики никакой разницы между статической и динамической типизацией нет

и где в динамической жёстко прописанные типы?

jtootf ★★★★★
()
Ответ на: комментарий от phill

не имеет прямого отношения

Вы все таки почувствуйте разницу между парсингом и синтаксисом

так не имеет прямого отношения или есть разница?

парсинг - это синтаксический анализ. разница между синтаксисом и синтаксическим анализом, очевидно, есть (как и, скажем, между функцией и её аргументом), но не имеет прямого отношения?

как между теплым и мягким.

как между тёплым и утеплителем. так аналогия будет более точной

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

жёстко прописанные типы

А что это? (Не)строгую типизацию знаю, (не)явную типизацию знаю, жётско прописанную типизацию - не знаю.

aedeph_ ★★
()

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

Прочитал более-менее полностью, по-моему, только три книжки: «Как написать игру на ассемблере, выпуск 2-й», «Turbo-assembler» и «Компьютерная графика: полигональные модели».

mv ★★★★★
()
Ответ на: комментарий от aedeph_

Преобразования - это уже семантика.

Да ты больной, по-ходу.

anonymous
()
Ответ на: комментарий от jtootf

несущественно

Ви таки, не можете отличить абстракцию от барьеров абстракции. Это скорей противоположность.

и где в динамической жёстко прописанные типы?

Там же, где и в статической — на уровне транслятора.

phill
() автор топика
Ответ на: комментарий от aedeph_

не знаю

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

anonymous
()
Ответ на: комментарий от aedeph_

(Не)строгую типизацию знаю

Все школьники и индусы ее знают. А профессионалы, внезапно, знают толко сильную/слабую.

anonymous
()
Ответ на: комментарий от anonymous

Все школьники и индусы ее знают. А профессионалы, внезапно, знают толко сильную/слабую.

Да, это более корректно, но «знать» ее невозможно, это субъективная оценка, нет четких критериев.

anonymous
()
Ответ на: комментарий от aedeph_

жётско прописанную типизацию

Где ты там «прописанную типизацию нашел», ты как себе это представляшь, убогий ты наш? Там написано: типы.

anonymous
()
Ответ на: комментарий от jtootf

как между тёплым и утеплителем. так аналогия будет более точной

Да. Но непонятно тогда, с чем Вы спорите.

phill
() автор топика

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

ilammy ★★★
()
Ответ на: комментарий от ilammy

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

anonymous
()
Ответ на: комментарий от anonymous

Напомнить, как придурки из MIT сосут на олимпиадах ACM?

не показатель

anonymous
()
Ответ на: комментарий от anonymous

По ссылке не «компиляция assembly в машинный код», а преобразования машинного кода в машинный код (или assembly в assembly, без разницы) для большей эффективности. То, что такое преобразование существует, не означает что между assembly и машкодом есть отличие.

Но за ссылку спасибо, познавательно.

unlog1c ★★★
()
Ответ на: комментарий от unlog1c

ты так не шути.

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

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

в ассемблере же у тя есть уже имена наряду с .

qulinxao ★★☆
()
Ответ на: комментарий от unlog1c

Нет, там как раз про компиляцию из ассемблера - языка с символьными метками, в машинный код, то есть, в язык с числовыми меткасм и константами. А некоторые ассемблеры еще и длинные immediate раскрывать умеют, прикинь? И я еще про макросы молчу и про сложные константные литералы.

anonymous
()
Ответ на: комментарий от anonymous

Хорошо, убедил. Тогда вопрос вдогонку: какие из языков компилируются сначала в assembly, чтобы потом пройтись по результирующему коду ассемблером?

unlog1c ★★★
()
Ответ на: комментарий от qulinxao

в маш коде нет символьных имён

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

unlog1c ★★★
()
Последнее исправление: unlog1c (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.