LINUX.ORG.RU

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

 


9

4

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

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

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

★★★★★

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

почему в паскале строки ограничены в 255 символов «исторически»

это только для типа ShortString, для остальных 3 типов строк ограничений нет

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

Какие-то невероятные истории, что ученик не понимает

Типичная картина мира тех, кто никогда не пробовал давать частные уроки программирования (хотя бы даже для подготовки к ЕГЭ по информатике). Даже для очень многих преподавателей – вот это вот «да что тут непонятного» определяет картину мира. А то, что в группе реально после очередного объяснения что-то поняли трое из двадцати – этого мы не видим, поскольку те трое, которые поняли, создают поток фидбека, достаточный, чтобы остальные за ними просто спрятались.

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

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

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

С этим согласен.

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

А с этим — нет. У меня не было опыта преподавания, но был опыт общения со старательным и неглупым старшекурсником, впоследствии получившим красный диплом в каком-то провинциальном ВУЗе, о котором я рассказывал в каменте Переиздание книг Столярова по программированию (комментарий), не понимавшем на тот момент внутреннего устройства списка. А не понимал он этого из-за полного непонимания указателей. И это при том, что на младших курсах он изучал яву, потом самостоятельно изучал питон, а в тот момент не менее семестра (а может и больше) изучал си. Но указатели ему почему-то не объяснили. А он был одним из лучших на курсе.

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

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

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

А не понимал он этого из-за полного непонимания указателей.

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

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

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

для остальных 3 типов строк

В современном fpc я насчитал 6 типов строк, включая PChar. Правда, знать об этом надо в исключительных случаях.

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

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

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

Ещё в роли string могут использоваться unicodestring в режиме совместимости с уникодным дельфи. Ещё есть RawByteString, если надо работать с файлами в разных кодировках, WideString, если надо использовать COM+ под виндой. В общем, геморроя, конечно, гораздо меньше, чем с utf8 в голой C89, но тоже имеется.

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

Кстати, о птичках. Точнее о котиках. Ещё точнее, о юникотиках. Есть небольшой вопрос к нашим фанатам сишечки. Вот такой код на паскале

program hello;
var
  s1, s2: string;
begin
  s1:='Привет ';
  s2:='мир!';
  Writeln(s1+s2);
end.
одинаково хорошо отработает и в турбопаскале под досом с cp866 и в fpc под линуксом с utf8. Чо как там у вас в сишечке с этим? Как там strcat с utf дружит? scanf нормально русские буквы понимает?

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

Попрошу уточнить, а этот код он в одной и той же кодировке всегда сохраняется «в турбопаскале под досом с cp866 и в fpc под линуксом с utf8»?

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

Сохраняется в родной кодировке для системы. Условно, набирается студентом с учебника. А уж что там с кодировкой и что это вообще такое, не его недалёкого ума дело. Доживёт до следующего курса, узнает.

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

то же самое и на Си будет, никакой разницы

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

Перед тобой пронумерованные коробки. Ты открываешь коробку 1000, видишь там бумажку с числом 2000. Открываешь коробку 2000 и кладёшь туда 1 бакс.

Мля, первогодки путаются в нумерации вектора, т.е. не понимают, что такое индекс элемента массива и чем он отличается от значения, хранящегося в a[i], а вы тут про какие-то коробки.

Каждому овощу – свой фрукт. Когда оне изучат устройство компа, узнают о машине Поста/Тьюринга, попрограммируют различные прикладные программы, попрограммируют на ассемблере, вот тогда и НУЖНО Си.

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

Ещё раз: по-любому порог вхождения в Паскаль НИЖЕ, чем у Си. И нет смысла извращаться с обходом особенностей Си, превращая его в… Паскаль.

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

И зачем учить таких тупней? Индустрия без них не обойдется? Пусть идут в таксисты.

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

Вашу ж мать, с понятием индекса у переменной знакомятся в школе без всякого компухтера! В математике оно используется. Или с 90-х всё настолько деградировало?

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

Как раз в паскале можно сказать «магия» или нормально объяснить — на результат использования ссылочных параметров это не повлияет. А в си без крестов отделаться словом «магия» не получится, потому что программист, даже начинающий, должен чётко понимать, чем отличается *p от p.

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

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

не понимают, что такое индекс элемента массива и чем он отличается от значения, хранящегося в a[i]

Ска, а номер дома они не путают с количеством людей живущих в нем?! Или если сказать «первый отпуск», они будут думать что отпуск равен одному дню?

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

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

И зачем учить таких тупней?

Скажите, вас учили складывать, дав сначала аксиоматику Пеано и таблицы десятичных логарифмов?

Или всё же сначала на пальцах, потом на спичках/чёрточках, потом, ПОСЛЕ изучения состава чисел, дали таблицу сложения и научили складывать в столбик на бумажке?

Речь идёт не о когнитивных способностях студентов, а о их базе знаний, которая ой какая разная. Студен, который пришёл на программирование, потому что у него была пятёрка по информатике, а быть программистом модно, вполне может выучится в хорошего специалиста, тогда как «хакер», написавший текстовый редактор ещё в школе, изучив перфоленту с ОС для ДВК-2 (реальный случай, между прочим), может вылететь в первом семестре и в итоге НИКОГДА не стать профессиональным программистом.

Вашу ж мать, с понятием индекса у переменной знакомятся в школе без всякого компухтера!

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

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

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

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

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

А я встречал целый 10 класс, который не знал, что такое число пи. Т.е. не определение, а греческая буква «пи», которая равна где-то чуть больше трёх, – неизвестная для них информация.

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

Как там strcat с utf дружит? scanf нормально русские буквы понимает?

А почему он не должен понимать?

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

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

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

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

Что представляет сложность, так это алгоритмы. Тут требуется постоянная прокачка абстрактного мышления и зачастую нехилый математический аппарат. Легко сказать, что «алгоритм, описанный тут, нужен, что бы делать то-то». А вот КАК он это делает — попробуй разберись.

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

(реальный случай, между прочим), может вылететь в первом семестре и в итоге НИКОГДА не стать профессиональным программистом.

А почему, кстати?

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

А почему, кстати?

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

Могу привести другой пример незнания: мой сокурсник не знал, что такое Кровавое воскресенье. Хотя учился в школе, как и я, ещё при коммунистах.

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

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

Тут вы немного путаете ЭВМ и процессор.

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

Лично для меня, сколько помню свои интерес к теме, никогда не представляла большой сложности техническая часть ЭВМ.

Что представляет сложность, так это алгоритмы.

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

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

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

не единственно верный капитальный труд!

насколько автор коснулся smalltalk self лисп_в_си-одежде(динамические скопцы поправленные в алгол без бегин_ендов схемы простой для забывания) Mocha LiveScript ScriptEasy Javascript Jscript WSH Flash(вечно живой) (ой реквайа - наконец-то(лет так 30 - «кондратьевские» циклы в ОЙ-ты)(модульность Оберона(а точнее Модулы) без пересборки всего мира) модульность в) ES6 -2015 - 6 лет

крч по большому не TAoCP от Столярова - его отношение к невеб JS какое?

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

да блин основная трудность в обучение это:

@дети запомните(не пытайтесь понять - это нужно запомнить!одынОдын!@ - сол пишется с мягким знаком а вилька без!!!

Паскаль это информатика из европы (IAL и прочая и легендарный двухтомник Бауэр Ф.Л., Гооз Г. Информатика. Вводный курс)

C это уних и телефония (почта и телеграф то же самое тут :) )

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

а какая разница в преподавании между: индексом в массиве; указателем в память; ключом в ассоциативном контейнере ключ-значений?

т.е нет ли в этом «сол с мягким знаком и вилька без»

ваше отношение к новеб JS?

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

iмхо код это данные и

(function(...rest){
  console.log("Литерал это данные "+" вызов литерала это код" )}
)()

замыкания/сборка_мусора «устаревшая» -отМакарти технология которой ужо 60 лет

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

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

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

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

из «Истории Техники» в части судьбы Фарадея видно отличие между «академией» и индустрией

прелесть ситуации в том что игра с больше чем 2 сторонами и поэтому сложно провести биение на 2.

т.е автор вроде почти(если вообще не) упоминает ski комбинаторы и прочую ... следоваетельно на оси курсы-универ он около нуля у точки комьюнити-колежа

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

Разговор не о изучении указателей в нужное время, а о том, что в Си эти указатели потребуются в первой же программе с диалоговым режимом. А всякие инклюды в первой же программе.

Это да.

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

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

Т. е. он несправедливо относится к этим языкам или наоборот?

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

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

ща можно начитать с Lisp ээ Scheme c 'use strict' JS202X и гумуса полно и хардкорного сs c турчиноподобной суперкомпиляцией и прочей ssa @оно живое@ И всякой твари по паре и текстбуков (и хороших и плохих что дополнительный критерий селекции ) и реально дисеров полно.

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

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

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

зы. ⫠ из https://www.crockford.com/nion.html

и да Четыре Йоркширца (Монти Пайтон в Голливуде) https://www.youtube.com/watch?v=H2QJxGUU1Ks

школяров многолетно натаскивают арифметикой - а на выходе выпускники-программисты не могут решать уравнения 4 степени в уме

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

Java это корпоративная бюрократия(всякая б. к. ващет но не все к. закрепощены)

имхо обучения можно начинать с JS ибо у каждого есть браузер - а линуксы в JS ужо как лет «двадцать» отранслировали.

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

Проблема указателей и массивов высосана из пальца.

ага - ибо «что для одного константа для другого переменая»

и разница между символом и символизируемым

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

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

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

:(

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

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

Not Your Personal Army

а ваще тебе лично : https://www.eecg.utoronto.ca/~jzhu/csc326/readings/iverson.pdf notation as tool of thought -

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

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

liksys

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

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

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

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

си это реально переносимый ассемблер отсюда его достоинства и обратные достоинству продолжения.

в части переносимости ща JS202X как бы тоже хорош

а по части общеизвестности и доступности в части basic вроде как шире известен

при чём ту же суперкомпиляцию(да и ваще тему jit трансляции) и понять и реализовать и объяснить на JS202X проще чем на святом ассемблере-Си в котором частности Си-машины лишь дополнительная прослойка между JS-машиной и SSA

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

https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BA%D1%81%D1%82

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

как уже тут тебе заметили - затруднение в другой плоскости.

у мирсистемщиков есть интересная сказка о генезисе современных детских садов (им недавно(-5+(+-)5лет) 100 лет как раз) как и ваще всей линейки доШК/ШК/постШК системы «образование» о важности снизить давление на рынок труда со стороны молодёжи и том что некоторые системы общежития не могут полноценно заполнить образованием время лиц которым запрещено международными нормами трудовая деятелность

ваще кому интересно тому занимательно

а приохотить к умственному труду это очень сложно :)

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

а могли бы из 0 и 1 brainfuckить gui И многопоточность

зы. ващет если делать инструменты , затем инструменты инструментов и т.п целевой язык перестаёт быть ТАК значимым.

а вот если всё (да и ещё и ручками) вносить в машину на host-языке - тогда и разгорается флэйм.

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

двухтомник хювенена и второго фина/шведа - как раз Линус тогда же linux’ил

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

Паскаль не паскаль а Algol-W

ТурбоПаскаль не паскаль а ТопМодула

да и {$I } не #include но явно не модульность

собирать мандалу из зёрнышек в том и смысл.

зы. хохма что Си не разрабатывали «оно само» при попытке уфортраница используя bсpl затем В и его безтиповая машина у которой атом был 16 битный а нужно было и 16 и 8 ибо мало памяти.

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

Где требуется меньше пояснений?

'use strict'
console.log('Крокфорд Д. - Как устроен JavaScript - 2019.pdf')
qulinxao3 ★★
()
Ответ на: комментарий от mister_VA

Так это основа. Процессор и память. Если понять основной принцип на примере какого-нибудь простого микроконтроллера или старого i8080, то проблем с пониманием абстракций процедура, функция, массив, указатель не возникнет. Тут получается связь одного с другим прямая.

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

Ну вот я и писал - может первым языком вобще АСМ лучше брать? Перед этим, конечно, архитектуру ЭВМ изучив :)

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