LINUX.ORG.RU

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

 


9

4

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

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

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

★★★★★

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

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

А напомни чем такое объясняется?

Это иррациональное поведение, это нельзя описать разумной логикой. При этом он это делает - дает «разумное» объяснение: борьба с институтом авторского права, и в противоречие своим словам вставляет целые страницы про его права как автора.

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

С С у студентов серьезные проблемы с динамической памятью. По крайней мере на младших курсах. Поэтому первые же структуры данных вызывают серьезные проблемы именно из-за необходимости правильно следить за malloc/free.

Во-вторых, проблемы с address of / deference: когда чтобы программа скомпилировалась, в scanf подставляют malloc, потому что он void* возвращает.

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

В общем я бы советовал или gc языки для начала (Ява вызывала гораздо меньше проблем даже у непрофильных групп), или value-языки, типа C++, где указатели у Страуструпа появляются только к концу книги. Алгоритмы типа сортировок и поиска вполне можно на STL освоить.

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

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

«Никому не нужного» — это 4.1п17, корректно писать «мне». Паскаль вообще-то вполне годный ЯП для прикладного программирования, но не повезло ему с распространённостью, это да. Тем не менее, на нём пишут, Total Commander/Double Commander, например. Это раз.

Си как первый язык — очень коварная вещь. Можно потратить много времени, например, на те чудовищные костыли на изоленте, которые там вместо модульности. А это синтаксическое чудо, когда объявление функции выглядит почти так же, как объявление переменной, и только дойдя до скобочек с аргументами, человек о чём-то начинает догадываться? И в плюсы с жабой это непотребство затащили. А вот в Go, Rust и JavaScript для функций отдельные ключевые слова, как в Паскале, что куда более логично. Отсутствие строк и гениальная попытка выдать за оные массивы байтов с ноликом в конце — тоже очень доставляющая вещь, которая, да, уместна при написании ядра ОС, но уже куда менее уместна в чём-нибудь чуточку более высокоуровнем, а для обучения студентов это вообще пушка. Си можно давать (тем, кому он реально нужен) вторым языком. Это два.

Наконец, покажите мне программиста, который всю жизнь пишет на одном ЯП. Я ТАКИХ НЕ ЗНАЮ (ну кроме разве что 1С-ников, и то не всех, и у них вообще профессия очень специфическая). Человек должен познать базовые принципы программирования и уметь изучить нужный ЯП по мере необходимости. А при таком подходе строгий синтаксис паскаля — огромный плюс. А то так можно и питон в качестве первого ЯП подсунуть, а потом человек будет удивляться, зачем в других языках типы объявляют. (Вот например, у меня как программиста едва ли не главное упущение — я в начале своего пути не изучил ни одного функционального ЯП. Если б я это сделал, я бы вряд ли в дальнейшем всю жизнь писал на лиспе или хаскеле, но в качестве базиса, «задачу можно решать и так», это бы мне, подозреваю, помогло.) Это три и это главное.

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

С С у студентов серьезные проблемы

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

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

С С у студентов серьезные проблемы с динамической памятью. По крайней мере на младших курсах. Поэтому первые же структуры данных вызывают серьезные проблемы именно из-за необходимости правильно следить за malloc/free.

Во-вторых, проблемы с address of / deference: когда чтобы программа скомпилировалась, в scanf подставляют malloc, потому что он void* возвращает.

Если это профильное направление, то всё правильно: с этого нужно НАЧИНАТЬ. Кто не отсеялся, к профессии годен.

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

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

А, JS, наверное. Пусть учатся простые сайты делать

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

Раст слишком сложный для первого языка

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

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

С С у студентов серьезные проблемы с динамической памятью. По крайней мере на младших курсах. Поэтому первые же структуры данных вызывают серьезные проблемы именно из-за необходимости правильно следить за malloc/free.

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

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

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

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

Можно потратить много времени, например, на те чудовищные костыли на изоленте, которые там вместо модульности.

Изолента — это фикция модульности Паскаля. А в реальности в разработке имеем сборку и линковку кучи объектников, зачастую на разных ЯП, — и пока это остаётся актуальным, это необходимо ЗНАТЬ.

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

Скорее всего придется, но знать, как она работает стоит. Если же человека приучить к магии vector, то тяжело потом объяснять как работает это всё внутри. Если ему не нужно это знать, то и питона хватит. В современных плюсах и new писать зашкварно, но если человек не знает, как указатели работают, то и как компьютер работает, он не понимает, а значит не программист.

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

Конечно, лучше Страуструп. Для тех, кто в танке, «Programming: Principles and Practice Using C++» это не «The C++ Programming Language», а совсем другая книга, предназначенная для обучения программированию с азов. И там Страуструп всё разжёвывает для новичков. Поэтому она такая толстая (1300 страниц).

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

Лишнее забивание головы синтаксисом, который скорее всего никогда не понадобится.

Да не синтаксисом, а принципами. А прозрачный синтаксис просто облегчает понимание.

в реальности в разработке имеем сборку и линковку кучи объектников, зачастую на разных ЯП

Это более низкоуровневая вещь, один из столпов модульности. Но это далеко не вся модульность.

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

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

Если люди - это кому надо за 21 день в джуна и сразу бабло грести в смузихлебном, модном, молодёжном месте, то ты прав - времени нет. Тем более сишечку учить, туда сразу надо с Go или Ruby заходить.

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

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

Паскаль вообще-то вполне годный ЯП для прикладного программирования

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

синтаксическое чудо

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

Это два

Это чушь. Студент должен понимать, что никаких строк у него нет. Как только он поймет, как работают кирпичики, из которых состоит комп, можно давать что-то высокоуровневое, чтобы он учился архитектуре. Чтобы потом не было охреневания от того, что он складывает строки в JS и удивляется, почему оно так медленно работает, это же просто переменные!

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

Да. Для этого отлично подходит сишка.

А при таком подходе строгий синтаксис паскаля — огромный плюс.

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

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

Я с трудом назову более отвратно объясняющего популярного автора, ну кроме Лутца, но он просто зануда.

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

Хз, многие студенты были довольны.

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

И физику преподают совсем не так, как выписывал Ньютон (тот сразу в дифференциальной форме и через импульс).

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

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

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

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

Да. Для этого отлично подходит сишка.

Паскаль не хуже сишечки подходит для объяснения как оно

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

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

Си слишком завязан на использование указателей и для обучения алгоритмам есть языки нагляднее и проще. Особенно, если специальность не связана с IT.

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

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

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

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

И как сишка этому мешает? Откройте Прату, опять же, почитайте. Почему-то все тут уверены, что сишка - это в омут с головой, но это не так.

liksys ★★★★
()

Если отфильтровать афтарскую лирику «говно ненавижу дебилы кругом», то довольно годные книги.

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

Если цель изучить только реализацию алгоритмов, то ничего лучше и доступнее жс не существует.

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

Си слишком завязан на использование указателей

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

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

не повезло ему с распространённостью

Это сейчас. В 80-е вон даже apple свой диалект сваяла и писала прикладуху на нём. Я видел нескольких людей, которые вполне комфортно себя чувствовали, используя delphi и как-то не страдали из-за этого - реализовывали всё что им было нужно.

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

Столман, которого мы заслужили.

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

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

Нафиг ее учить, если ее надо закопать? Что-то более-менее серьезное все равно не напишешь. Да и у «проффов» то переполнение буфера, то ещё какая-то хрень.

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

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

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

Ты это не мне рассказывай. Я и про fpc/Lazarus знаю. Но вот у моего оппонента какая-то нездоровая категоричность.

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

Скорее всего придется

Похоже, ты плохо представляешь, насколько это непросто сделать.

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

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

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

Согласен, но мне и стиль нравится, как если бы Миша Вербицкий программированием бы занялся.

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

Вот видишь, ты даже не знаешь, о ком речь.

Christian Ghisler (рус. Кристиан Гислер) - автор и разработчик программы Total Commander, царь левой и император правой файловой панели, бог разнообразных плагинов и властелин кнопки F8. Живёт в Швейцарских Альпах, рыбачит в Женевском озере, питается швейцарским шоколадом, носит швейцарские часы, на которые установлена специальная версия TC работающая на механическом заводе и перемещающая само время. Характер имеет несговорчивый и скрытный, однако, если задобрить его хорошим плагином, дарит лицензионный ключ весом в полпуда из чистого золота (за которым надо ехать в Швейцарию). Украдено отсюда.

Так и твой Quantum Core могут обозвать никому не нужным…

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

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

Какая может быть профессия у школьников и вчерашних абитуриентов?

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

У Столярова никакого опыта разработки нет.

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

Но вот у моего оппонента какая-то нездоровая категоричность

Это называется «здравый смысл». Я против того, чтобы студентам забивали голову одноразовой херней.

Вот видишь, ты даже не знаешь, о ком речь.

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

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

+1. любой справочник интереснее читается, чем Страуструп, уж слишком всё сухо изложено.

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

мамкиным нигилистам

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

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

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

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

Этот настоящий программист сломался и перегорел, кажется.

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

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

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

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

Я знаю о книгах Праты, даже студенту одному рекомендовал. Он был очень доволен книгой.

КР хоть и написана очень хорошо, но сами авторы её для начинающих не рекомендовали в предисловии.

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

для ряда вещей (например, обучение стилю программирования) си подходит не очень хорошо

Где пруфы, Билли? Я уже устал в каждого, кто голословно заявляет этот бред, кидаться Пратой.

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

Ага, а матан преподают исключительно будущим профессиональным математикам.

Программирование не только будущим программистам в качестве предмета дают.

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

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

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