LINUX.ORG.RU

Переиздание книг Столярова по программированию

 


9

4

Скандально известный на ЛОРе Андрей Викторович Столяров выпустил новое издание своего учебного пособия «Программирование: введение в профессию» и обновил PDF-версии:
«Азы программирования»
«Системы и сети»
«Парадигмы»
В новом издании 4-томник стал 3-томником.

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

>>> Сайт автора

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Zhbert (всего исправлений: 3)

Ответ на: комментарий от lv

Вообще асм это самое ПРОСТОЕ, что есть в машине.

Просто команды, записанные в столбик:

mov eax, 1234
add eax, 5678

Нужно будет вникнуть только во флаги арифметических операций и ветвления. В этом месте, возможно, придётся немного позубрить перед появлением автоматизма. Но автоматизм и не нужен, нам же на асме реальное продуктивное ПО не писать.

Я вообще не понимаю, почему все так боятся асма. Какой-нибудь JavaScript по модели исполнителя в разы сложнее. Писать на JS, разумеется, проще. А вот понять принцип — вовсе не проще.

я в 14 лет просто справочник по Спектруму открыл и почитал. Там было «API» его прошивки и система команд проца. Журнал «Радио» еще был. А сейчас вообще кайф — кроме обычного компа, еще куча доступной техники, начиная от копеечных микроконтроллёров и заканчивая малинкой, куча бесплатных и платных книг, туториалов, видеокурсов.

Вот эти, которые в ВУЗе не способны программу 1-го курса освоить и даже не интересуются тем, чтобы самим начать себя обучать — у них какое будущее? Программисту и дальше по жизни нужно учиться непрерывно.

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

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

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

понятно что семантика ресурсов в асме несколько более буквальна

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

qulinxao3
()

практика использования не HLL […] стимулирует не думать о необходимости освобождать ресурсы

Эээ… А HLL с автоматической сборкой мусора чем стимулирует думать о необходимости освобождать ресурсы?

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

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

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

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

Если в x86 нормально вникать то разница уже другая %)

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

Если мы говорим не о самостоятельном изучении, а о обучении профессиональных программистов в ВУЗе, то подготовить среду для обучения - задача преподавателя.

Но почему-то топят о первичности алгоритмов, которые же проще на паскале/(или может сразу С?) изучать.

А почему бы не начать с архитектуры? Тогда АСМ->С->pytho&friends.

Или типо профессиональному программисту архитектура не нужна и его учат только алгоритмам и парадигмам, а АСМ как-нибудь сбоку, как и С?

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

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

если асм какого бюроуза 5500 то да - либо учебной машины у которой

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

и где один тип - слово- длины 2**(2**(2** …))) т.е либо 1 бит либо 2 бита либо 4 бита либо 16 бит либо 65536 бит

ващет есть mmix- очень хороший асм

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

Вообще асм это самое ПРОСТОЕ, что есть в машине.

Просто команды, записанные в столбик

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

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

Как вы объясните новичку, что в JS число передаётся по значению, а массив — по ссылке? Он и слов таких не знает: «передача по ссылке».

Вот читаю в учебной статье: «при передаче значения в функцию, эта функция получает копию данного значения».

Копию чего получает функция при передаче массива? Неразрешимый парадокс. МАГИЯ.

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

упс s_не_на_

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

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

вопрос что считать средой обучения - а что тем чему обучаем.

обмазываться битами тоже интересно

можно и астронавтов абстракций обучать

солнышко светит - простой продукт растёт.

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

Чтобы понимать JS, нужно УЖЕ понимать концепцию указателя. Иначе вы в самих основах языка запутаетесь, где-то сразу после того, как потребуется создать объект с полями, аналог структуры в паскале, если идти по учебному курсу.

Я не исключаю, что есть такие уникумы, которые осваивают идею указателя/ссылки даже если она не названа в языке напрямую, а всячески избегается и замалчивается (и при этом активно используется).

Но при этом сказать, что такую модель проще понять, чем Си и асм… что-то тут не так.

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

Писать инструкции в столбик – это не база, тем более когда есть нормальные редакторы исходных текстов. База – ISA и ABI, когда до них дело дойдёт.

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

Как вы объясните новичку, что в JS число передаётся по значению, а массив — по ссылке? Он и слов таких не знает: «передача по ссылке». лол в том что «сол пишется с мягким знаком, а вилька без»

в двухтомнике хювенена лисп ( как раз есть речь про отличие между символом 5 и значением 5) - тот же #define true 0 об этом

в JS -модели все числа иммутабельные по этому они могут и по «ссылке» как и все ваще объекты передаваться

а вот то что в JS-модели некоторые(смотрящие на примитивы) имена разименновываются в отличии от имён на составные

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

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

Писать инструкции в столбик – это не база, тем более когда есть нормальные редакторы исходных текстов.

В чем проблема писать на асме в нормальном редакторе исходных текстов?

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

если человек знает что такое почтовый(тот который улиточный) адрес - значит человек знает что такое указатели.

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

если человек отличает слово зелёный от зелёного цвета - значит человек знает что такое указатели

Смаллиан - как же называется эта книга - аутореферентнные высказывания https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D1%80%D0%B5%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F

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

База - это примитивы, на основе которых можно конструировать более сложные понятия.

И тут первичнее процессора с АСМом разве что понятие машины тьюринга.

Тогда начинать с задач дешифровки, Тюринга, а первым языком давать БрэйнФак :)

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

Я выше точно так же аргументировал. Мне сказали, что студенты не отличают индекс в массиве от значения. Ну вот такие студенты…

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

Для изучения базы совсем не обязательно использовать примитивные инструменты прошлого тысячелетия.

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

Только через кровь и пот. Чтобы не сразу выветрилось!

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

Для изучения базы совсем не обязательно использовать примитивные инструменты прошлого тысячелетия.

Это какие же?

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

модель коробок-переменных … усложняет понимание языков

Просто детали реализации конкретного вычислителя протекают в описание процесса вычисления и отвлекают на себя и без того ограниченные ресурсы мясного компьютера. Рич Хикки называет это PLOP (place-oriented programming).

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

Сказать что внутри функции можно изменить, а указатели показать на примере var mem = [];

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

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

немыслимые системы и posiwid

и конечно:

My second remark is that our intellectual powers are rather geared to master static relations and that our powers to visualize processes evolving in time are relatively poorly developed. For that reason we should do (as wise programmers aware of our limitations) our utmost best to shorten the conceptual gap between the static program and the dynamic process, to make the correspondence between the program (spread out in text space) and the process (spread out in time) as trivial as possible.

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

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

Ради возможности вносить исправления заменой перфокарт, они мирились с многократным перерасходом картона по сравнению с расходом на объектный код.

А если на студенческой машине установлен тот же FreePascal, то есть и GNU binutils (и GDB, кстати). И GNU as успешно справляется с инструкциями, записанными в строчку, а не только в столбик:

as
mov $5, %edi; mov $60, %eax; syscall
ld a.out -o bye
ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
strace ./bye
execve("./bye", ["./bye"], 0x7ffc06f1b7b0 /* 20 vars */) = 0
exit(5)                                 = ?
+++ exited with 5 +++
objdump -d bye

bye:     file format elf64-x86-64


Disassembly of section .text:

0000000000401000 <__bss_start-0x1000>:
  401000:       bf 05 00 00 00          mov    $0x5,%edi
  401005:       b8 3c 00 00 00          mov    $0x3c,%eax
  40100a:       0f 05                   syscall

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

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

Ерунда.

Моя мысль была о концептуальной простоте парадигмы асма. Это не более сложно, чем «команды, записанные в столбик». То есть последовательно, как на пачке инструкция по варке макарон.

А вы докопались до оформления. Хоть в строчку пишите, хоть рюшами украсьте.

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

Не только оформление. В GDB есть команды для пошагового выполнения программы next/step по строкам исходника и nexti/stepi по инструкциям.

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

Ошибка типа же. Всё правильно.

a = f() требует non-void справа. А f(), x слева non-void не требует.

Тут скорее поражение мозга паскалем у тех, кто придумывает процедуры вместо системного подхода к типам.

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

Более тупого вброса сложно представить %)

Как раз пример очень хороший! И правильный. Потому что он из реальности. Студент садится дома делать задания и пишет такой код. И у него должно работать. Иначе у него будет расстройство и он на всё забьёт, так как делал всё верно, как учили, а оказалось, что ничего не работает. Раньше против этого использовали простой приём: запрещали русские буквы и говорили, что они — магия. Это работало, оставляя некоторое чувство неудовлетворённости, но только до тех пор, пока студент не начинал писать в файлы в Винде, путь к которым содержит не ASCII символы. А переименовать все выше стоящие папки — это та ещё история.

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

Вот как раз профессиональных программистов можно учить и с Паскаля. У них времени — вагон. Вот если мы учим электронщика, физика или химика, ситуация гораздо хуже, потому что у него на программирование есть 1,5 (лекция раз в две недели и практика раз в неделю) пары в неделю 1-2 семестра. После этого преподаватели других курсов ждут, что студент сможет обрабатывать результаты физпраков с помощью программ, строить графики, использовать МНК (аппроксимация, в том числе интерполяция точек) и др. Они ждать не могут. А информатику он не сдавал и вообще программировать в школе не учился совсем, он физику или химию сдавал. Тут ни Си, ни Паскаль не проходят, банально вы не успеете дойти до практически полезных вещей, а курс уже закончится, приходится пользоваться Питоном.

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

Во времена koi7 запрещали? Это именно вброс. Обьъясняю. Онромное количество софта на си и крестах 15 лет работает с utf8, а тут «вопрос с подвохом». Очевидно, что конкатенация не зависит от кодировки.

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

Тут скорее поражение мозга паскалем у тех, кто придумывает процедуры вместо системного подхода к типам.

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

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

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

Концепупальная простата omG

brain и его F - чего уж пупальней проще.

асм можно и структурно - целамя мода в 1970+-N лет была - один из аргументов за Си был что кроме того что он так же структурен как тогдашние асмы - он ещё и менее привязан к конкретной машинке.

qulinxao3
()

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

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

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

Очевидно, что конкатенация не зависит от кодировки.

Конкатенация работает, но ввод-вывод и имена файлов в Windows будут поддерживать UTF-8 только после явного переключения локали, которое завезли только в Windows 10. Традиционно в Windows при использовании libc приходилось использовать специальные W-функции с UTF-16 чтобы работал Юникод.

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

А почему бы не начать с архитектуры?

Вы в ВУЗе вообще учились? Или в школе? Сколько предметов сразу изучают?

Так вот с архитектуры и начинают. На одной лекции. А на другой лекции В ЭТОТ ЖЕ ДЕНЬ идут алгоритмы. А на третьей какие-нибудь математические основы ЭВМ,

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

Большинство современных программистов НЕ работают с указателями

Без работы с указателями вы замучаетесь писать сложные программы. Придётся писать с глобальными массивами как в NES играх, где нельзя было стрелять больше чем тремя пулями. В скриптовых (Python, JavaScript, Lua) языках почти все переменные на самом деле указатели.

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

Без работы с указателями вы замучаетесь писать сложные программы. Придётся писать с глобальными массивами как в NES играх, где нельзя было стрелять больше чем тремя пулями. В скриптовых (Python, JavaScript, Lua) языках почти все переменные на самом деле указатели.

Они передаются по адресу/ссылке и доступны к изменению, но явной работы с указателями нет. Есть работа с разными именами одного и того же объекта (одно в запускающей функции, другое — в запускаемой) и студент должен понимать, что в подпрограмму передаётся имя объекта, а не копируется содержание, если только это не так называемые «простые типы», которые передаются всегда по значению. Что изменение объекта в подпрограмме приводит к его изменению в запустившем коде. Но ни адресной арифметики, ни разыменования указателя в явном виде для программиста нет. Именно это и реализовано в Паскале, поэтому на Паскале почти все программы и пишутся без явной работы с указателями. Просто в Паскале можно передать любой параметр как var или не как var, а в Питоне всё упростили и сказали, что все составные объекты передаются как var, а простые — копируются.

И да, в Фортране по умолчанию все массивы кроме ссылочных, в том числе динамические, всегда передаются по значению (ужас-то какой!)

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

В винтажном FORTRANe всё передаётся по ссылке, даже константные выражения. Из-за этого программисты пользовались своеобразной арифметикой ссылок.

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

Вы в ВУЗе вообще учились? Или в школе?

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

На одной лекции. А на другой лекции В ЭТОТ ЖЕ ДЕНЬ идут алгоритмы. А на третьей какие-нибудь математические основы ЭВМ

Ага, а ещё матан, история философии, физика и прочее.

Так вот, имхо, если уж всякой «шляпотени» и так в курс понапихано, почему бы ей и архитектуре ЭВМ не уделить больше внимания на первом курсе, а со второго уже начать упарываться в СтАлг и парадигмы?

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

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

В винтажном FORTRANe всё передаётся по ссылке, даже константные выражения. Из-за этого программисты пользовались своеобразной арифметикой ссылок.

Наверное, это очень винтажный Фортран. По крайней мере, начиная с 77 стандарта, уже почти всё передаётся по значению.

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

Началося…

Во многих учебных заведениях используется Windows, причём часто не последней версии, так что с этими проблемами приходится считаться. Я не видел учебных заведений с Линуксом как в России, так и в Японии.

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

Это просто другой способ мышления.

Да. И он в какой-то мере ближе к машинному представлению.

Но в индустрии преобладает вариант представления через функции. В системе типов void — вполне легитимный особый тип.

Процедуры к системе типов просто некуда притянуть, всё равно получится «функция, возвращающая <ничего>». А системы типов — это фундаментальная штука. Без оперирования типами не построить компилятор, вообще ничего не сделать. Только сидеть на уровне ассемблера.

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

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

а в Питоне всё упростили и сказали, что все составные объекты передаются как var, а простые — копируются

«это» специфическое «упрощение»

в перволиспах всё передавалось по ‘хендлу’ а вот уже нужный бит из value от ‘хендла’ сообщал это атом али точечная пара ака car.cdr

питоновское упрощение это упрощение реализации а не упрощение самого языка как вышеприведённый перволисп

ps. ‘хендл’ обычно был raw-адресс но это не важно для понимания перволиспов - в отличии от .

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