LINUX.ORG.RU

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

 , ,


24

11

На официальном сайте А. В. Столярова объявлено о выходе первого тома книги «Программирование: введение в профессию». Первый том, озаглавленный «Азы программирования», включает две части: «Введение» и «Язык Паскаль и начала программирования». Обе части, как и вся книга в целом, ориентированы на использование ОС Unix (в основном Linux); в предисловии автор, обращаясь к «коллегам-преподавателям», заявляет, что книга вряд ли будет им полезна, если командная строка ОС Unix не станет их основным инструментом для повседневной работы с компьютером.

Электронная версия первого тома (PDF) доступна на сайте в открытом доступе.

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

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

>>> Подробности

★★★

Проверено: anonymous_incognito ()
Последнее исправление: CYB3R (всего исправлений: 5)
Ответ на: комментарий от ASM

Учить студента пользоваться компьютером на прикладном уровне полное безумие?

Полное безумие - учить студента всему и сразу.

Вы git и тесты относите к магии?

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

Deleted
()
Ответ на: комментарий от cvs-255

То есть это все-таки троллинг?

Какой нафиг троллинг, это мой диссер. Мне за InteLib учёную степень дали, а примерно двум десяткам моих дипломников — дипломы.

Не, ну я всё понимаю, но InteLib — это не один человеко-год по трудозатратам, стал бы я это всё ради троллинга делать?

Croco ★★★
() автор топика

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

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

Хотите сказать, что в 2011-2012 году на первом курсе ВМК не было первый год C?

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

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

В следующем издании укажите, что книга не является учебником паскаля,

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

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

«0 или 1» - это не тип, а две константы.

Ну ноль ладно, но 1 — это константа типа int.

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

очень советую прочитать стандарт C11

Не надо читать эту гадость. Подобные «документы» годятся только на то, чтобы их закопать. Желательно вместе с их авторами.

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

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

А вот если встроенные операторы сравнения выдают 0 или 1 (то есть целочисленный или нумерованный тип) --- это значит, что логического типа в языке нет. И без поломки обратной совместимости никогда не будет.

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

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

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

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

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

Вы же агитируете за C с классами!

Абсолютно верно.

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

Если вам нужна «безопасность кода» (то есть чтобы компилятор прощал безалаберность кодера) и сборка мусора, то пишите на Java или C#. Или на вижуал васике. Или на любом другом языке высокого (очень высокого) уровня. Можно даже интерпретируемом.

C++ в качестве «ещё одного высокоуровневого языка» не имеет никакого смысла, вся его ценность (была) заключена в том, что это исходно был язык НИЗКОГО уровня, но с возможностью создания сколь угодно высокоуровневых абстракций. То, что получилось из C++ в результате героических усилий террористов-стандартизаторов, есть просто ненужный бастард.

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

«0 или 1» - это не тип, а две константы.

Виноват, тип int

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

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

Есть такой замечательный сервис http://exercism.io/ , который позволяет легко перейти к TDD. Доступен для (почти) всех современных языков.

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

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

Не надо читать эту гадость. Подобные «документы» годятся только на то, чтобы их закопать. Желательно вместе с их авторами.

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

Если языком не пользуетесь, то да, это «гадость».

Любой продукт поставляется и инструкцией по использованию, если продукт полностью логичен то читать инструкцию не надо, в случае язык C это совершенно не так.

Если Croco отвечая на вопрос имел ввиду не это, то я солидарен с cawa:

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

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

Ну скажем так, если вы пишете на C то вы обязаны прочитать эту литературу (ну или c99 или что вы используете или собираетесь)

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

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

Если вам нужна «безопасность кода» (то есть чтобы компилятор прощал безалаберность кодера) и сборка мусора, то пишите на Java или C#. Или на вижуал васике. Или на любом другом языке высокого (очень высокого) уровня. Можно даже интерпретируемом.

Ага, вам безалаберный программист говна понапишет на любом языке. Пример тому программисты на php.

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

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

Я использую ключи -ansi

Ну в вашем случае вы обязаны знать ANSI. Об этом я и сказал. Или ANSI разработали Вы и в литературе не нуждаетесь?

P.S. Людей использующих только комментарии /* */ считаю мягко сказать странными...

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

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

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

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

Правильно! А я бы вообще учил студентов Фортрану II. Всё остальное, включая C, C++ и Pascal - высеры горстки безмозглых мразей, превративших низкоуровневые языки в ненужных бастардов. Только перфокарты и Фортран II.

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

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

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

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

Если вам нужна «безопасность кода» (то есть чтобы компилятор прощал безалаберность кодера) и сборка мусора, то пишите на Java или C#.

Для безопасности достаточно весь код покрыть «контрактами», доказываемыми через SMT-солверы в логике первого порядка, используя Frama-C например

вся его ценность (была) заключена в том, что это исходно был язык НИЗКОГО уровня, но с возможностью создания сколь угодно высокоуровневых абстракций.

Без eval() возможностей создания сколь угодно высокоуровневых абстракций нет

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

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

Ну я это всегда понимал просто как абстракцией, так сказать от всего рутинного и того, что не нужно для достижения цели. К, примеру, программу maxima можно использовать для подсчета интегралов даже не особо понимая что это такое, если целью, к примеру, является дать ответ преподавателю.

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

http://www.lib.ru/ANEKDOTY/non_pas.txt

Правильно! А я бы вообще учил студентов Фортрану II. Всё остальное, включая C, C++ и Pascal - высеры горстки безмозглых мразей, превративших низкоуровневые языки в ненужных бастардов. Только перфокарты и Фортран II.

- >

Если вы не можете выполнить эти работы на Фортране, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не стоит делать вообще.



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

->

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

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

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

Вы из секты Croco? И/Или Вы врач? Откуда вам знать обратимо калечится мозг или нет, что именно там калечится? Появляется желание парковаться поперек тротуара?

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

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

«Программист (алгоритмик)» и «математик» — это два разних типа мышления. Примерно, как физик и лирик.

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

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

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

«Программист (алгоритмик)» и «математик» — это два разних типа мышления. Примерно, как физик и лирик.

Чушь.

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

мифическую сложность C++.

С++ - это оверинжиниринг как он есть.
Ёж, уж и Симула в одном флаконе от бармена Страуструпа

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

А вот и доведение до абсурда )))

«Печаль» в том, что это пересказ введения автора книги.

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

но написал физику на 5. Может в МГУ так-же берут?

В МГУ берут на основании результатов экзаменов по физике, математике, информатике, русскому языку и внутреннему экзамену по математике. Фактически, основной упор именно на математику делается - полагаю, это совсем не гарантирует способностей к программированию. Тем более, мне же как-то удалось туда попасть, значит, и дураков берут.

suiseiseki_desu
()

Вдруг огромная темная тень покрыла поросенка сверху, как будто вмиг настала ночь, когда поросятам совсем не рекомендуется шляться где попало и лучше всего сидеть дома и смотреть по телевизору передачу «Спокойной ночи, хрюшки».  — Какой самый лучший язык на свете? - спросили у него откуда-то сверху жутким громовым басом.  — НЕ СВИНОЙ! Го-го-го-го-говяжий, - заявил по- росенок, от страха у которого намокла вся одежда, осо- бенно пониже пухлого живота.  — Глупая свинья, - сказали сверху. - Я спраши- ваю, какой лучший язык программирования?  — Ас-ас-ас-ас-ас-ассемблер, - сказал Пятачок, дрожа так, что прогнившие внутренности желудя трепыха- лись и издавали зловоние.  — Это понятно, - сказал страшный голос. - Я про структурные спрашиваю... НУ? Говори быстро, а то съем...  — Па-па-па-па-па..., - от страха поросенок не мог выговорить не слова. Он вспомнил (из объяснения Пу- ха), что лучший язык на свете - конечно же, Паскаль.  — Понятно, - подытожили сверху. - Умный поросе- нок. Проваливай. Ух, я вас всех!

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

и дураков берут

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

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

Собственно в Википедии написано что и ту и другую, в 1999 году первая версия и степень манистра, в 2000 году — доклад Брно, в 2002 году — кандидатская и, очевидно, очередная версия. Что не отменяет того, что Википедия — забор, и сноски для проверки там не даром ставят.

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

В Линуксе истинный ассемблер это gas, который использует синтаксис AT&T.

-msyntax=intel, неуч

А вообще асм надо на RISC изучать, а не на допотопной архитектуре, обросшей костылями

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

А вообще асм надо на RISC изучать, а не на допотопной архитектуре, обросшей костылями

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

Собственно уточню свою мысль: какая нафиг разница какая архитектура?

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

какая нафиг разница какая архитектура?

Разница такая, что в x86 намного больше инструкций, режимов адресации и особенностей работы со стэком, которых нет в современных архитектурах

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

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

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

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

вы обязаны знать ANSI

Я ничего никому не обязан. Используя инструмент, желательно знать, как он устроен; для этого есть, например, книга Кернигана и Ритчи, на которой пишут «ANSI C», что не соответствует действительности: ANSI предполагает использование const, авторы языка с этим так и не смирились. Я, впрочем, const использую. С другой стороны, ANSI разрешает сделать вот так:

int f(int x) { /* ... */ } int (*p)(int); /* ... */ p = f; p(13);

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

p = &f; (*p)(13);

не поверите, я тоже всегда делаю ровно так, если пишу на plain C. Объяснить, почему так, или не надо? Когда я пишу на C++, я и функции вызываю без разыменования, и строчные комментарии использую, и всё прочее — но это другой язык.

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

Существует различие, или и то и другое одинаково ненужно?

Гыгыгыгыгы. Ключевых различий я тут вижу два. Различие «A»: первое эти идиоты во главе с врагом человечества Степановым протащили в стандарт языка, безнадёжно угробив тем самым этот язык, тогда как второе никто ни в какой стандарт протащить не пытался. Как следствие, второе используется только там, где оно нужно (и только в рамках Gnome Lib), первое же чуть менее чем все «программисты на це с крестами» считают едва ли не частью языка и считают своим долгом использовать везде и всегда, и, больше того, делать другие библиотеки зависимыми от этой.

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

Несмотря на всё вышесказанное, таки да, и то, и другое не нужно, потому что это _контейнеры_. Первое — это закрытые (!) классы; в документации на второе говорится, что GHashTable — это opaque data structure. Так вот, средство, которое предназначено для хранения данных в программе, не имеет права быть закрытым ни в каком виде, то есть оно должно быть прозрачным и документированным с точностью до внутреннего устройства — чтобы, например, при отладке можно было заглянуть внутрь. То есть это не тот случай, когда детали реализации могут быть скрытыми.

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

Для безопасности достаточно весь код покрыть «контрактами»

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

Да угомонитесь уже, ничего никогда ни у кого не получится с доказательным программированием. Почему? Да потому что спецификация, _действительно_ фиксирующая свойства программы на формальном уровне — это и есть сама программа. Всё остальное — это попытки пересказать «Войну и мир» одной фразой.

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