LINUX.ORG.RU

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

 , , ,

Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова

4

6

Тихо и незаметно 30 апреля 2026 года вышло издание 2.92, которое наконец включает в себя читаемый текстовый слой.

Исправлены опечатки и ошибки, обнаруженные в предыдущих изданиях, в частности 2.91 (где введена кликабельная навигация) и 2.9 (первое чисто электронное издание).

Книга предназначена для самообучения основам программирования и в отличии от многих других изданий предполагает фундаментальный подход — вначале основы дискретной математики и использования GNU/Linux или BSD с командной строкой, затем паскаль, потом ассемблер и только потом Си, системное программирование и альтернативные парадигмы (функциональное, логическое и так далее).

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

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

>>> Ссылка на страницу издания

>>> Альтернативные способы скачивания

>>> Новость на сайте автора

★★★★★

Проверено: dataman ()
Последнее исправление: CrX (всего исправлений: 10)
Ответ на: комментарий от Xenius

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

А зачем здесь значки указателя? Есть объект [1, 2, 3]. Его поместили в переменную a, потом его же поместили в переменную b. Потом изменили его первый элемент. Логично, что через вторую переменную также виден изменённый объект.

В Си также

   a = malloc(3);
   a[0] = 1; a[1] = 2; a[2] = 3;
   b = a;
   b[0] = 99;
   printf("%i, %i, %i\n", a[0], a[1], a[2]);
monk ★★★★★
()
Ответ на: комментарий от monk

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

А теперь мы снова возвразаемся к тому, что побочный эффект зависит не от желательности, а от точки отсчета. Дальше сам.

liksys ★★★★
()

Сижу, читаю, офигеваю. Всегда считал банальностью, что паскалевская процедура от паскалевской функции отличается исключительно тем, что процедура не возвращает результат, а функция возвращает, и связано это со странноватым pascal-соглашением о вызовах функций. А тут - эвона оно как, целая философия разворачивается [смайлик яростно жующий попкорн].

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

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

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

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

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

Но также, как рекомендуют struct использовать только для структур без методов, так и функции лучше использовать только для кода без изменения состояния.

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

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

Есть. Пройди тест Войнаровского (опубликован в 2005 году впервые) на логическое мышление и скажи результат. Мне реально интересно, у тебя логика сломана или как. Я прошел тест по ссылке которую дал, чтобы убедиться, что работает и что он не пошлёт регистрироваться, чтобы выдать ответ.

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

В Си также

Нет, не так же. Тут у тебя a и b указатели. С указателями всё очевидно. А у питона нет никаких значков указывающих на указатель или ссылку вроде ^ * или &.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от monk

Это процедура синтаксически

А семантически согласно внутренней реализации компилятора это что? Это процедура согласно каждому первому из десятков/сотен учебников, кроме одного единственного конкретного учебника.

По Столярову, если хочешь выполнить эффект пишешь процедуру

Я хочу выполнить «эффект» и вернуть его результат. Мои действия?

Столяров как раз такой пример и приводит как функции с побочными эффектами

Чему эти эффекты побочны? Какая часть этого функционала непобочна?

Здесь две ответственности на один кусок кода: проверка наличия существующей (и возврат её id) и создание новой, если существующей нет.

Хорошо, мы делаем функцию, которая создает новую запись и возвращает нам ее id. Теперь она потенциально опасна, потому что искомая запись уже может существовать. Нам важно другое - мы не можем в общем случае разделить создание записи и получение ее id. Оба действия должны быть выполнены одной операцией с БД, потому что перед выполнением следующей с БД может повзаимодействовать кто-то еще, и API возвращающий id последней операции (если он вообще есть) вернет что-то другое. Итого, у нас обязательны и создание записи в БД, и возвращение id.

Ну или допустим нужна функция которая делает модифицирующий веб-запрос существующему сервису и возвращает результат. Единcтвенный доступный на платформе http API делает это одним блокирующим библиотечным вызовом, и мы не можем написать ничего меньше чем этот один вызов. Что здесь будет «побочно», а что «непобочно»?

Если она не «Reading an object designated by a volatile glvalue, modifying an object, calling a library I/O function, or calling a function that does any of those operations», то нет никаких эффектов.

Согласно какому определению термина «эффект»? На основе чего сделано это утверждение?

Для меня это так. Но у меня первым языком является Паскаль. Столяров пишет, что в Си процедур нет.

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

А именно?

Каноническое определение звучит как «each software module should have one and only one reason to change». А дальше я лучше процитирую книгу Clean Architecture Роберта Мартина, автора SRP:

"Of all the SOLID principles, the Single Responsibility Principle (SRP) might be the least well understood. That’s likely because it has a particularly inappropriate name. It is too easy for programmers to hear the name and then assume that it means that every module should do just one thing.

Make no mistake, there is a principle like that. A function should do one, and only one, thing. We use that principle when we are refactoring large functions into smaller functions; we use it at the lowest levels. But it is not one of the SOLID principles—it is not the SRP.

Software systems are changed to satisfy users and stakeholders; those users and stakeholders are the “reason to change” that the principle is talking about. Indeed, we can rephrase the principle to say this: A module should be responsible to one, and only one, user or stakeholder.

Unfortunately, the words “user” and “stakeholder” aren’t really the right words to use here. There will likely be more than one user or stakeholder who wants the system changed in the same way. Instead, we’re really referring to a group—one or more people who require that change. We’ll refer to that group as an actor. Thus the final version of the SRP is: A module should be responsible to one, and only one, actor. …

Perhaps the best way to understand this principle is by looking at the symptoms of violating it. …

Two different developers, possibly from two different teams, check out the Employee class and begin to make changes. Unfortunately their changes collide. The result is a merge. "

Ну и еще есть целая статья от него же по теме.

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

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

И ты вёл какие-то курсы по питону, взаимодействовал с учениками?

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

Синтаксически, да

Да и фактически: насколько я помню, функция - это тоже процедура в которую неявно первым параметром передаётся ссылка на Result.

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

Нет, не так же. Тут у тебя a и b указатели. С указателями всё очевидно. А у питона нет никаких значков указывающих на указатель или ссылку вроде ^ * или &.

В приведённом куске кода на Си тоже никаких значков указывающих на указатель или ссылку вроде ^ * или & нет.

А у питона можно считать, что указателем является любая переменная.

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

Да и фактически: насколько я помню, функция - это тоже процедура в которую неявно первым параметром передаётся ссылка на Result.

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

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

И ты вёл какие-то курсы по питону, взаимодействовал с учениками?

Это вряд ли... «Чукча - не читатель...» :))

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

В приведённом куске кода на Си тоже никаких значков указывающих на указатель или ссылку вроде ^ * или & нет.

Есть, [], они только с указателями используются.

А у питона можно считать, что указателем является любая переменная.

Нельзя, потому что оператор a = a + 1;, если бы a было указателем, должно было бы переключить a на следующий адрес с инкрементом равным sizeof(a), а в Python такого не происходит, происходит обычная операция над целыми числами.

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

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

Я хочу выполнить «эффект» и вернуть его результат. Мои действия?

Пишешь процедуру. Потому что первичен эффект. Например, запись в БД и возврат количества изменений - это процедура.

Чему эти эффекты побочны? Какая часть этого функционала непобочна?

Основной результат — вернуть id по переданным параметрам (если это функция). Побочный: создать новую запись.

Хорошо, мы делаем функцию, которая создает новую запись и возвращает нам ее id.

По смыслу это процедура. Задача которой: создание новой записи.

Ну или допустим нужна функция которая делает модифицирующий веб-запрос существующему сервису и возвращает результат.

И здесь процедура. Потому что если сделать функцией, то потом крайне сложно отлаживать что-то вроде:

   z = calcWithModification1() + calcWithModification2() * calcWithModification3();

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

Согласно какому определению термина «эффект»? На основе чего сделано это утверждение?

Так твоего же: Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий)

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

В смысле? Функции возвращают результат.

Thus the final version of the SRP is: A module should be responsible to one, and only one, actor. …

В такой формулировке любой модуль, разрабатываемый одним разработчиком, который лично принимает решения, или для одного заказчика соответствует SRP. Предпочитаю все-таки буквальное «reason to change», где виртуальным заказчиком является любой другой модуль программы.

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

как чел до сих пор фанатеющий по алгол-дереву языков(схема кста в этом дереве) и уважающий Паскаль и ваще всю ветку языка Вирта ( от эйлера через algol-w и все его пошаговые_улучшения_языка до оберона )

имею утверждать что общераспространённый Паскаль был тот ещё упорыш/

магические write read c произвольной арностью

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

и вагон многих ещё лолкеков которые ща уже просто не актуальны и кажутся мелочами либо вообще ушли за горизонт воспоминаний

Паскаль продукт эпохи больших машин - и при начальной тормазнутости cc и даже pcc у последних при всём Сяшном кракозаберном синтаксисе(особенно по практическим удобствам вот та самая спираль парсинга вызовов и обьявлений) сяшка разрабатывалась на условно-персональной системе и поэтому так удачно зашла на персоналках - форт частично поэтому тож ну и ещё к меньшему размеру памяти заточенный

у эталонного Паскаля ваще кстати отсутсвола модульность - т.е ровно как в Сяшке ожидались текстовые инклюды

более того Паскаль изначально как и все языки той эпохи не предпологает наличия ОСи

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

Есть, [], они только с указателями используются.

Ну тогда в питоне тоже есть.

Нельзя, потому что оператор a = a + 1;, если бы a было указателем, должно было бы переключить a на следующий адрес с инкрементом равным sizeof(a), а в Python такого не происходит, происходит обычная операция над целыми числами.

Число такой же объект. Операция + возвращает новый объект-число, полученный на основании значений аргументов.

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

Чак Мур ваще в одного творил массово-ядерные(на тысячи ядер) процы с микрофортами(меньше чем у риска набор маш команд) — там реально очень интересные показатели количества потребных транзисторов к общей вычислительной мощности и сверхмалому энергопотреблению - и было это уже к середине 90ых

однако «эволюции важней» приспособленное а не сверхоптимальное

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

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

ибо в Питоне имена(которые по инерции называют переменными) это по сути ключи к (неявному)словарю окружения

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

у питона нет переменных в классическом смысле

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

в отличии от этого в Питоне всякое имя это ключ в некотором словаре

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

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

Ячейка. Только в ней не значение, а адрес значения. Зато единообразно, а не так, что массив передаётся по ссылке, а он же как поле структуры по значению.

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

высокоуровнево в Питоне всё на словарях

так то cpython очевидно использует разные «суперкомпиляции» под разные случаи - но на уровне синтаксиса всё есть имя (ключ в некотором словаре) а уж какой там объект («простой» али составной) это неотличимая частность

на уровне семантики в Питоне нет ссылок - можно типо навертеть именующие имена через тот же locals()[someName] для получения «разыименнующего указатель выражение» - но так больше обфустикации чем пользы

зы: основной тэйк что классические переменные это псевдоним адреса (глобального али индекса от вершины стека не суть) - в отличии от этого в Питоне это индекс в словаре

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

Я имел ввиду, как функции реализованы в Паскале. Это также процедура, которой компилятор неявно подсовывает дополнительный параметр - ссылку на результат.

определённый регистр или несколько регистров назначаются для передачи аргументов и результата

Это и называется «соглашение о вызовах функций». В pascal параметры в стек слева-направо, очищает вызываемый (отсюда, кстати, и va_args не было и явное разделение процедур и функций). В cdecl параметры в стек справа-налево, очищает вызывающий, результат в eax.

Там ещё и гибридный stdcall и регистровый fastcall и т.д. и т.п.

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

Я хотел сказать, что ABI диктуется не языком программирования, а парой процессор-компилятор, но я понимаю, что вы хотите сказать. Для конкретной тройки - язык, компилятор, процессор всё что вы говорите возможно и так, но стоит изменить компилятор-процессор, и соглашение о том, как передавать параметры и результат может быть совсем другим. Существует, например, компилятор паскаля для arm? Конечно, например FPC. Где там eax? Там есть R0, который используется для возврата результата, но в принципе, R1,R2 или R3 тоже могут использоваться, а могут и все сразу.

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

Физика: правила Кирхгофа, закон Джоуля-Ленца, комплексное сопротивление, скорость и частота света, уравнения Максвелла, лагранжиан и гамильтониан, квантовая механика

Ничего себе! Квантовую механику я ещё худо-бедно знаю, но комплексное сопротивление! И особенно правила Кирхгофа!!! Это уж, простите, какие-то запредельные требования.

Несправедливо забыта лингвистика, кстати.

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

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

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

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

И ты вёл какие-то курсы по питону, взаимодействовал с учениками?

сапог_на_голове.jpg

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

Я прошел тест по ссылке которую дал

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

Мне реально интересно, у тебя логика сломана или как.

https://psytests.org/result?v=logM22&f=1zzzzz

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

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

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

Пишешь процедуру. Потому что первичен эффект.

Но сам Столяров на практике в таком случае пишет функцию, и вроде даже другим советует.

Основной результат — вернуть id по переданным параметрам (если это функция). Побочный: создать новую запись.

В требованиях к функции есть оба действия - она должна убедиться что объект есть, и вернуть его id для последующей работы. Отсутствие любого из них делает функцию бесполезной для задуманного применения. По какой причине они вдруг разделились на основной и побочный, да еще и именно так?

И здесь процедура. Потому что если сделать функцией, то потом крайне сложно отлаживать что-то вроде

Зачем нужно умножать структуру с телом ответа и кодом результата на что-то? А чистую функцию с математическим вычислением удобно отлаживать? По такому принципу их тоже процедурами нужно сделать.

Процедура хороша тем, что её нельзя использовать как часть выражения

А что в этом хорошего то? И если это так хорошо, то почему процедуры исчезли из современных языков почти полностью? А в некоторых на возврате результата вообще вся обработка ошибок построена.

Так твоего же

Это определение термина «побочный эффект». Я спрашиваю определение термина «эффект». Желательно со ссылкой на источник. Потому что классически деление происходит на side effect и primary effect, которые вдвоем охватывают все случаи. Соответственно, было бы логично предположить, что «эффект» без уточнения просто включает оба класса. Но это вступает в противоречие с написанным, где «эффект» приравнивается к «побочному эффекту» в C и C++.

Функции возвращают результат

Это не ответ на поставленный вопрос. Полотно вычислений на 300 строк в теле чистой функции это что? Это ведь должно быть чем-то?

В такой формулировке

Что поделать, это единственно правильная формулировка под «брендом» SRP.

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

Причём тут сапог? Я спросил, ты на самом деле что-то преподавал или просто придумал программу курса?

Теперь, когда мы выяснили, что с логикой у меня всё в порядке

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

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

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

Но вообще, можешь прочитать конкретно пункт 4.8.3 Побочные эффекты и 4.8.4 из второго тома, страница 68-71? Ладно, ты не согласен с определением. Но как насчёт выводов?

Кстати там есть ссылка на страницу 33 вот с такими примерами кода:

1:

int string_length(const char *str)
{
    int i;
    i = 0;
    while(str[i] != ’\0’)
        i++;
    return i;
}

2:

int string_length(const char *str)
{
    int i;
    for(i = 0; str[i]; i++)
        {}
    return i;
}

3:

int string_length(const char *str)
{
    const char *p = str;
    while(*p++);
    return p - str;
}

4:

int string_length(const char *str)
{
    const char *p;
    p = str;
    while(*p)
        p++;
    return p - str;
}

5:

int string_length(const char *str)
{
    const char *p;
    for(p = str; *p; p++)
        {}
    return p - str;
}

Как по-твоему, какие из этих вариантов допустимы, а какие нет и почему?

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

Но сам Столяров на практике в таком случае пишет функцию, и вроде даже другим советует.

На Паскале? Есть пример?

По какой причине они вдруг разделились на основной и побочный, да еще и именно так?

Потому что это функция. У неё основной результат это получение возвращаемого значения. Если это не так, лучше её сделать процедурой.

Зачем нужно умножать структуру с телом ответа и кодом результата на что-то?

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

А чистую функцию с математическим вычислением удобно отлаживать?

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

Этим, кстати, хорош Haskell. Тесты для него писать одно удовольствие (а для инвариантов он их сам генерировать умеет).

А что в этом хорошего то?

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

И если это так хорошо, то почему процедуры исчезли из современных языков почти полностью?

Потому же, почему сейчас из языков исчезает наследование, а из некоторых и обработка исключений. Процедуры требуют дисциплины программирования, которую невозможно проконтролировать компилятором. Поэтому в современных остались там, где дисциплину можно обеспечить административными методами (ABAP, 1С, Ada, …).

Это определение термина «побочный эффект». Я спрашиваю определение термина «эффект».

Так побочный эффект, это эффект там, где он не является основной задачей. В остальном эффект и побочный эффект идентичны.

Потому что классически деление происходит на side effect и primary effect, которые вдвоем охватывают все случаи.

И что такое primary effect в C++?

Это не ответ на поставленный вопрос. Полотно вычислений на 300 строк в теле чистой функции это что? Это ведь должно быть чем-то?

Не понимаю вопроса. Тело функции, наверное.

Что поделать, это единственно правильная формулировка под «брендом» SRP.

Хорошо, термин SRP мной применён некорректно. Но в том же тексте есть безымянный принцип, на который я фактически ссылаюсь: Make no mistake, there is a principle like that. A function should do one, and only one, thing.

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

Ты можешь посмотреть на примеры кода и подписать какие по-твоему ОК, какие нет? Ладно, не хочешь читать фиг с тобой.

Ну и про сапог - ты что имел ввиду?

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

Про примеры кода не будет комментариев? Я зря их копировал и исправлял выравнивание?

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

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

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

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

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

массово-ядерные(на тысячи ядер) процы с микрофортами(меньше чем у риска набор маш команд)

Что можешь посоветовать почитать по этой теме?

ptah_alexs ★★★★★
()
Последнее исправление: ptah_alexs (всего исправлений: 1)

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

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

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

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

Обычные книги, не лучше и не хуже других. Не понимаю почему народ так набросился на писателя тут.

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

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

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

Попытки расширения Паскаля в диалектах – это затаскивание в него возможностей Си и С++, но зачем это, если более разумно и актуально полноценно изучать эти самые Си и С++? Или вообще специализированные инструменты вроде Octave, GNUPlot, R или просто bc/dc и остальных утилит вроде sed?

Здесь уместна рекомендация завместо Паскаля использовать связку Tcl/Tk, Столяров освещает вопрос программирования на. Скрипт с GUI на Tcl/Tk накропать много быстрее, чем прогу на Паскале, что искупит его более медленную работу, особенно если это из разряда «пару раз запустил, записал результат, вставил в приложение к статье и забыл».

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

Тут некоторая терминологическая путаница, у Столярова разъясняется, почему не следует использовать Си при введении в программирование, а вот первым языком, который у него действительно изучается как ЯП и есть Си. Т.е. следует различать "обучение программированию с использованием дидактического инструмента «Паскаль» и «обучение программированию на языке Си» (позволю ремарку, что бОльшая часть «толстых» книг по программированию вообще не по программированию, а описание какого-либо языка, т.е. «руководство по языку», а не «как написать что-угодно на ЯП»).

Си (С++, Go, Rust, Java, Питон и т.п.) не годен как ДИДАКТИЧЕСКИЙ инструмент в пропедевтике программирования.

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

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

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

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

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

LOL как он есть: чувак, не знающий программирования, причисляет паскаль к мейнстримным языкам на основании того что он был в единственном учебнике программирования, который он пытался читать. Да и тот от не умеющего программировать Столярика :-D

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

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

Чтобы написать одну книгу необходимо самому прочитать не менее десяти книг. У меня столько сил и времени, да и способностей писать нет. Мне понравился подход в книге, о которой я узнал тут, Джесси Либерти и Брэдли Джонса «Выучи Си++ самостоятельно за двадцать один день»: делай то и это, получишь это и то. Читать просто так уже времени и желания нет. Читаешь, чтобы что-либо сделать на основе прочитанного и ни строкой более.

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

Я правильно понял, вы - ученик Столярова? Или, по крайней мере - адепт и последователь его идей?

Про примеры кода не будет комментариев? Я зря их копировал и исправлял выравнивание?

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

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

Лучше бы баги поправили - абсолютно же все глючные.

И в чём конкретно они по-твоему глючные?

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

хз

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

вроде как последнее издание Таненбаума и У по распределённым системам(ну это не так плотно параллельно но всёж делает более понятным почему уже в конце 60ых всякие дейскстры и ко угорали по инвариантам и пред пост условиям - на фоне нарождающегося цунами хакеров которым отладка критерий истины) - оно кста на python Для большей доступности  — Таненбаум всёж индустрия учебников

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

если жи по конкретно orisc? процам Мура то архивы

https://habr.com/ru/companies/ua-hosting/articles/318144/ первая сыль по https://www.google.com/search?q=Мур forth cpu

чисто пример что чел маштаба Кнута(тех для себя) собрал полную проектировочную линию процессоров - экономике от чего то такое не нужно

Ж) Ух ты какая вкуснятина выпущена (144 ядерный форт-процессор)

. https://excamera.com/files/j1.pdf  — сам текст

, https://www.researchgate.net/publication/228489082_J1_a_small_Forth_CPU_Core_...

https://www.researchgate.net хорошее место почти как archive.org https://arxiv.org/

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

И в чём конкретно они по-твоему глючные?

А сами не видите? Там и корки, и бесконечные циклы, полный букет.

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

Лучше бы баги поправили

А кто на самом деле должен баги исправлять? Правильно,

bugfixer ★★★★★ (08.05.26 20:20:50 CDT)

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

в книжке Петрова о распределённых и реализациях систем хранения (бд) есть цитата Алана Кея - о современной (цитата вроде как 2002 года - книжка ~2020) индустрии софтописа как попкультуре - которая намеренно не имеет памяти ибо иначе сложнее модой рулить

qulinxao3 ★☆
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.