LINUX.ORG.RU

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

 , , ,

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

4

6

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

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

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

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

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

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

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

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

★★★★★

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

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

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

поплачка для нечётных длин

прежде чем делать последнее мод ( на 1(0)+ ) нужно сохранить тот остаток и если он кратен

в питонячней нотации:

a=n%..... %....
d,o=divmod(a,1(0)+) # т.е для b=1 добавляется div и сравнение
return o==0 and d<base

Ж)

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

длина идентификаторов - имена сущьностей это от того «мы покупаем али продаём?»

в математике приходится делать постоянно трансформации крокодилов поэтому чёрточки идеальные имена

словоЖеСодержащееДокументациюНаСебя оно очень полезно для экономии на квалификации сопровожденцев

зыЖ в сырцах golang - очень выверенный подход - если имя сверхлокально (ну там 2 -3 строки то однобукв) и увеличением использования области и имя всё более уникально_информативно

ну для глобальных там есть «очевидные» сокращения(привычные авторам) всёж

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

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

всёж таки емсквадрат али уравнения Максвелла намеренно лаконичны ибо так проще помнить

так и с именами

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

upd: Notation as a Tool of Thought" 1979 Turing Award lecture Kenneth E. Iverson

http://rkka21.ru/docs/turing-award/ki1979r.pdf

там реально очень точно почему длинное имя это эрзац

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

Мне лень в это вникать. Скажу просто, что синтаксис паскаля выглядит максимально уродливо. Но это не твоя вина.

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

Вкусовщина же. Можешь попросить нейронку переписать один-в-один на C, наверное даже получится. В целом я тут только и делаю что дёргаю функции SDL, так что есть надежда что она не сильно испортит код и он скомпилируется и запустится.

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

Потому что столяров так сказал, или есть какая-то внятная и обоснованная причина?

Ну например, в Qt прямо рекомендуется то же самое. В программе всё в Latin1, весь юникод выносится в файлы .ts. Да, это не догма, если мультиязычности не предполагается, можно оборачивать те же русские тексты во fromUtf8(). Только некоторые не оборачивают, а потом удивляются, что у них программа в одной ОС кажет нормальный текст, а в другой кракозябры. И обёртку легко забыть, если в ОС разработчика всё нормально. Поэтому выносить не-латиницу в отдельные файлы всё же надёжнее.

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

В программе всё в Latin1, весь юникод выносится в файлы .ts.

Нет, так делать точно не надо. ASCII и всё. latin1 откроется кракозябрами в less.

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

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

Как уже выше написали – вкусовщина. И имхо, куда уродливее выглядит описание функций в си-подобных, от которого большинство современных языков (Rust, Go, JavaScript) отказалось.

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

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

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

Если тебе синтаксис паскаля - вкусовщина, то у тебя что-то не так со вкусом.

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

Вы все не правы, это задание (про палиндром) исключительно для ознакомления с div и mod, решать его оптимально или с возможностью расширения, или для чисел в любой системе счисления смысла нет. Начинающий все равно не справиться.

Так что решаете в лоб, разбирая число на цифры d1, d2, d3 и d4 и сравнивая if(d1=d4 and d2=d3).

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

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

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

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

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

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

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

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

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

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

liksys ★★★★
()
Ответ на: комментарий от 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 ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)