LINUX.ORG.RU

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

 , , ,

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

4

6

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

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

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

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

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

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

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

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

★★★★★

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

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

Можно переключаться между UTF-8 и однобайтовыми символами ключом командной строки вместо локали. И кстати по дефолту можно делать автодетект. Валидный UTF-8 крайне редко может совпасть с валидной текстовой строкой в 8-битной кодировке из-за специфической структуры.

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

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

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

это задание (про палиндром) исключительно для ознакомления с div и mod

qulinxao3 с помощью двух mod и решил.

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

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

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

Нет. Отсюда следует, что он очень плохой сектант, который плохо учил заповеди.

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

мы(и даже liksys) все тут секстанты

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

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

Именно он это и предложил. Посмотри верх гостевой или http://www.rebuildworld.net/taboo/unicode.html

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

А насколько я понимаю, не полениться и написать хорошую валидацию UTF-8 и всё что не проходит, считать 8-байтным, то в 99% случаев всё будет работать нормально везде и без локалей и без ручного вмешательства. Но для использования в скриптах ключи обязательно должны быть, чтобы было предсказуемо.

Это если программе не требуется выводить строки на естественном языке для интерфейса. Но можно просто не локализовывать. Или переключать язык и кодировку опять же в конфиге/командной строке, а не локали.

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

Разве @Xenius во всём согласен с автором обсуждаемых книг?

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

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

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

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

[upd]: тут вопрос как часто меняется контекст - если часто аргументы практичней, если редко то глобальность(более того эт же не глобальность хоста - а скорее сессии терминала) - ну и как обычно какого размера серая зона об которую и ломают копья собеседники

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

Именно он это и предложил.

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

Whatever choice you pick, be sure not to get affected by the so-called ‘locale settings’, as locales are prohibited on their own.

Такие вот дела.

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

Да никто ключи и не оспаривает. Нормальным подходом является чекать локаль и isatty(), если не указано иное. Проблема в том, что столярову это тоже не нравится и он предлагает пердолиться с ручными настройками для каждой утилиты отдельно.

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

(речь про однобайтные )

которым мало кто из общеупотребимого софта пользуется - вопрос наибольшего общего

как результат если пользователи в одной «кодировкосфере» они ваще не видят проблемы

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

liksys и др. Ютуб подкинул ролик в тему: https://www.youtube.com/watch?v=lW4tQu19v-A 2 минуты. О том, что на Python нельзя научиться программировать и всё-таки нужен Паскаль. Мне аргументация мужика показалась интересной, не поленился транскрибировать текст whisper'ом.

С какого языка программирования начинается обучение в институте iSpring?

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

И есть тут одна проблема. В чем? Дело в том, что Python — это язык очень простой, чтобы человек без программистской подготовки мог его быстро освоить и писать какие-то простые вещи на нем. И он прекрасно решает эти задачи, его там применяют очень широко.

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

В общем, Pascal — это классика. И когда мы изучаем программирование на классике, есть основание, что некая база, которая сформируется более правильно.

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

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

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

Т.е., чтобы пользоваться на AMD64 FreePascalем нужно сначала установить мегагигабайты чего-нибудь ненужного?

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

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

Но вообще сидеть за Windows и пытаться изучать программирование — время впустую.

Почему сразу впустую? Windows может не лучшая среда для изучения программирования, но и не худшая, всё что надо для изучения можно и под ними делать, даже тот же FreePascal изучать.

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

Windows может не лучшая среда для изучения программирования, но и не худшая

DOS (даже от тех же мелкомягких, хотя лучше Free) — лучше. Не даром до сих пор много где TurboPascal в DOSBox.

macOS — лучше. Это почти полноценный Unix. Хотя конечно костылей и подпорок полно.

Любая BSD — ещё лучше. Это уже наконец полноценная операционная система, а не игрушка как три предыдущие.

GNU/Linux ещё лучше — все плюсы BSD, но более удобные базовые утилиты и запускается на почти любом компе без извращений с поддержкой 99% существующего железа, тогда как на macOS если не mac, BSD, если комп специально не подбирать и так далее будут проблемы.

Haiku не пробовал, но вроде где-то как BSD.

Вот и выходит, что Windows худшая. Всё что угодно другое, кроме совсем экзотики лучше.

Мы, например, используем pascal и в школе и в первых двух курсах вуза

А какой именно? Надеюсь не ABC.NET, который по факту не паскаль?

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

Не даром до сих пор много где TurboPascal в DOSBox.

А DOSBox там работает на Windows 11? 🥁

TurboPascal можно ьез особых проблем запускать на 32-разрядной Windows XP без всяких DOSBoxов. Многое и на 32-разрядной Windows 10 для x86 работает.

DOSBox нужен только потому, что Microsoft не стала заказывать или разрабатывать NTVDM для x64 с симулятором 16-разрядных режимов x86 так, как раньше это делала для несовместимых платформ ( и сейчас делает для того, чтобы 32-разрядные win32 приложения можно было выполнять на ARMовых windows )

А чтобы на современных 64-разрядных x86-писишках заработал FreeDOS, нужна ещё эмуляция писишки 1990-х. Не всегда она встроена в современную писишку.

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

И FPC и TP — это паскаль. Просто разрешили не фиксированный порядок секций, например можно константы объявить между главной программой и процедурами, чтобы ограничить видимость, добавили новых типов данных вроде LongInt или Extended и так далее.

А в ABC просто воткнули почти весь .NET и переменные для цикла объявляют в заголовке цикла и локальные переменные подпрограммы объявляют внутри begin/end, а не между заголовком и begin/end и убрали некоторые вещи вроде readstr, хотя её можно заменить на val и, самое важное, оно не компилируется в нативный код и там указатели сделаны кое-как и сами разработчики говорят что всё может ломаться.

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

TP — это паскаль. Просто разрешили не фиксированный порядок секций, например можно константы объявить между главной программой и процедурами

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

В официальной документации ТурбоРаскаля написано, почему ТурбоПаскаль — не совсем Паскаль.

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

Разве в современном .Net нет AOT генерации нативного кода?

ABC.net производит файл .exe на байткоде .NET. А как оно запускает уже не принципиально. В то же время FPC даёт нормальные elf-бинарники.

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

Для этого он использует встроенный компоновщик или системный?

Какой есть, тот и берёт. У меня собственный не установлен, поэтому он берёт системный /usr/bin/ld

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

Нужно установть не более, чем для пользования gcc или clang

Те же сотни мегагигаБ Solaris, macOS, GNU±.linux и Windows 64-bit

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

Но суть в том, что остаток от 1001 проверяет сходятся ли первая и последняя цифра, если нет, то в конце будет не ноль, если да, они обнулятся. А остаток от деления на 110 будет равен нулю только если последняя цифра 0 и цифры десятков и сотен совпадает. То есть да, если не проверять диапазон, должно работать.

Но ты не доказал, что находятся только палиндромы. Что тоже просто сделать, но нужно расписать.

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

лукавство в том что одного языка не достаточно - если это освоение языка на уровне ремесла а не на уровне виртуоза

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

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

т.е. вон реально отличный пример среда Алана Кея - где попытка весь софт компа сунуть в 10К строк и для этого попытка на очередном ветке переосмыслить tmg и metaII и получить свой оконачательные смолток как реально универсальный двигатель компактификации любой идеи предназначенной к исполнению вычисляющей машиной

вопрос как управляются с нужным диапазоном бойлерплэйта(его излишек как и не достаток приводит к ухудшению поддержки если первое общее место public static void то второе это буквально форт apl j k которые излишне terce для «простецов» :) )

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

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

али системе Чака Мура который на форте сделал софтину OCAD Для реализации железа и вдальнейшем уроборостно забутстрапил на железо свою форто-среду для продолжения разработки своей многоядерной зазнобы

вот это Жемчуги Инжинегрии

а ютуборолика Автор обычный кулик восхищённый дефектом утёнка

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

Мой пример тривиален, очевиден

Менее очевиден, чем сравнение цифр.

пример @qulinxao3 - вообще нет

Он на самом деле тоже тривиален, и не требует упомянутой теоремы об остатках.

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

там достаточно понимать позиционную нотацию

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

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

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

Только в программировании учат ошибкам, а не тому, как их избежать.

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

ТП это модула

у Вирта реально не маркетинг

так что все его языки это «выдержанный» Algol-60 c ароматами той тары за 50 лет в которой созревала идея универсального императивного языка - апогеем которого стал «Active» Oberon - т.е Oberon (чьё определение 17 страниц в отличии от стандарта на поцкаль в 1к страниц) + та или иная модель конкуреннтности (зависит от реализации) - ибо сама классическая Среда Oberon тех врёмён когда прогресс не упёрса в на пальцах одной руки гигагерцы.

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

к Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий) ну тот же Вирт отказался во многих местах Oberon'а от повсеместного begin - который атавизм ещё из IPL-58 Algol 60

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

там ещё +

div(т.е см где показали что просто цепочки модов не достаточно для нечётных длин тогда перед последним мод стоит сохранить и неполное частное для проверки что оно меньше базы нотации позиционной)

вопрос почему так ? :)

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

вот какому Паскалю стоит учить и какой Паскаль стоит форсит автору того ролика

https://wiki.oberon.org/ob/docu

а по факту Автор собирает урожай с того факта что до сих пор много где Паскаль(Тупо и Бормо) жив в мозгах училок и прочих хозы которым не пилятся новые бюджеты поэтому посконо имеющееся (нищиту за добродетель)

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

Не совсем понял вопрос. Вроде бы пример трёхзначных чисел это поясняет: r = 100 это как раз случай, когда неполное частное (r / 10) равно базе (10). В таком случае число заведомо не палиндром, но как раз эта проверка и нужна.

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

там была @теорема@ :

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

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

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

Вопрос - почему достаточно( и как вылезает необходимость для нечётных длин) проверка на размер последнего неполного частного - т.е почему на чётных длинах последнее неполное частное (ну если считать что мы получаем дерево через ряд divmod где неполные частные нам не особо интересны кроме случая терминального на нечётной длине) всегда меньше базы

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

Но с точки зрения того, чтобы научиться программированию, Python недостаточно.

Да, поэтому следом за ним должен идти си.

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

Пошло-поехало.

Ничего нового я тут не вижу. Ложные аналогии и использование устоявшихся в СНГ практик.

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

Менее очевиден, чем сравнение цифр.

Нет.

Он на самом деле тоже тривиален, и не требует упомянутой теоремы об остатках.

Требует комментария.

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

от которой начинает болеть голова

Очевидно, организм отторгает несвойственную для тебя деятельность. Программирование - не твоё, не надо себя мучить, займись чем-нить другим.

психуешь от злости

Да, не твоё. Программисты не «психуют».

задаёшь 1000 вопросов клоду,

Общаться с бредогенераторами это вообще 🤦.

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

там была @теорема@

А, ну я просто её не читал, и вывел доказательство самостоятельно. Могу расписать, но не хочу спойлерить Xenius решение (он ещё не ответил на мой вопрос).

Вопрос - почему достаточно( и как вылезает необходимость для нечётных длин) проверка на размер последнего неполного частного

На примере четырёхзначных чисел: 110 * 10 = 1100 ≥ 1001, и потому не может быть остатком от деления на 1001. Так что результат деления на 110 не больше девяти.
То же рассуждение обобщается на все случаи кроме случаев вида 10, 100, и так далее. Это как раз последний шаг у чисел нечётной длины.

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