LINUX.ORG.RU

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

 , ,


24

11

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

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

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

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

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

★★★

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

Croco, резюмирую свою позицию, настоящий программист

Ну да, и что? Мой читатель пока ещё не настоящий программист. Рано или поздно он всему научится, разумеется; к тому времени, когда он станет «настоящим программистом» (а это будет к концу всей книги, а не её первого тома), он, я надеюсь, будет не хуже нас с вами понимать, как обстоят дела с отладкой и ошибками. А «то, что я написал в разделе „отладка“ — написано, чтобы объяснить обучаемому, о чём идёт речь, и не вполне понятно, чем вы тут возмущаетесь.

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

Очень спорно — даже у нас в ИТМО (где, в общем-то, всё довольно плохо) при КРАЙНЕ лояльном к должникам деканате те, кто совсем не может в программирование, не дожили до второго курса. Впрочем, их и было от силы несколько человек на потоке. Чего уж говорить об СПбАУ и прочих универах, где уровень преподавания как минимум не хуже, а деканат строже.

Всё время убеждаюсь, что высшее образование в России - это не система образования, а система отбора. Крестьян же много. Никто особо не пытается студентов чему-то учить, делать процесс более эффективным. Основная задача преподавателя в русском вузе - создавать студентам рандомные сложности, типа как монстр в игре, чтобы выживали только самые приспособленные. Глядишь, каждый год и найдётся несколько самородков, чтобы можно было говорить, что и мы могём. А российские вузы меряются не качеством образования, а количеством отчислений и количеством ненужной херни в учебном плане. А когда речь идёт о повышении качества образования - это понимают как «напихать в программу ещё больше ненужной херни и дать ещё больше однотипных задач». Недавно беседовал с одним физтехом: «Да у нас одних только учебных часов в 2.5 раза больше, чем в MIT, пока они там учат свой детский calculus - мы уже учим криволинейные интегралы. Сам прорешал за ночь 100 интегралов из демидовича на спор». Водовка, картофанчик, российское образование, 2016 год.

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

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

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

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

Как считаете?

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

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

Что касается C++ как первого языка программирования — так уж получилось, что решать на «C с iostreams и STL» олимпиадные задачки я начал раньше, чем в школе стали проходить Паскаль. И ничего, живой — хоть указатели понял и не сразу, но не помню, чтобы из-за этого было сильно трудно жить. Из тяжёлых последствий разве что, возможно, синдром утёнка, но это со временем проходит :)

В общем, в 9 классе совсем не понимал, зачем нас учат Паскалю, но сейчас пришёл ко мнению, что это действительно довольно уместно. Но первый курс университета — это, ИМХО, перебор.

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

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

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

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

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

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

Но первый курс университета — это, ИМХО, перебор.

Здесь определяющим является не то, где и когда, а то, каковы возможности обучаемого. Если он ВООБЩЕ раньше не программировал — то есть нигде и никогда — то совершенно пофигу, первый ли это курс университета или последний год детского сада.

Подавляющее большинство абитуриентов программировать не умеют, это просто реальность. Вот вы умели, я умел, а они не умеют.

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

Подавляющее большинство абитуриентов программировать не умеют, это просто реальность. Вот вы умели, я умел, а они не умеют.

А как так вообще получилось? Программирование перестало быть интересным?

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

А «то, что я написал в разделе „отладка“ — написано, чтобы объяснить обучаемому, о чём идёт речь, и не вполне понятно, чем вы тут возмущаетесь.

Ну я бы процитировал, но запрещаете, так что своими словами. 1. Долгий кропотливый процесс не требуется, если грамотно пойдойти к вопросу. 2. Базовые приницы: Ошибка есть только в тех местах, где нет покрытия вашими тестами. Ошибка всегда кажется глупой, именно по этому делают тесты. Если ошибка выявляется очень редко, видимо у вас слишком мало ассертов. Компилятор тоже бывает не прав.

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

«Я написал программу» надо менять не на «Я на писал неправильную программу» а на «Я написал программу без теста».

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

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

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

Ну и далее по тексту... Если это реально может возыметь какой-то толк, я могу потратить на это своё время....

ASM ★★
()

Полазил по его сайту. Это тот самый Столяров, который писал фантастику в начале 1990х, и которого очень любили критики?

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

обучаемому следует давать уже готовые тесты

У нас на ВМК это как раз многие пробуют, благо у нас аж сам автор Ejudge работает :-) — естественно, попытки применить ejudge в учебном процессе имеются. Пока что я позитивных результатов от этого не наблюдаю, наоборот — некоторые преподаватели (не все, конечно, но...) вместо того, чтобы проверять студента, проверяют программу (ибо с проверкой программы ejudge справится, один раз тесты написал и можешь гулять смело). Итог тупой до невозможности: есть пара десятков старшекурсников, которые зарабатывают себе на бутерброд с икрой, решая задачки младшекурсникам для отправки на тестирование. Кабы такого младшекурсника хотя бы спросить, как работает «его» программа, он бы тут же поплыл, да только его не спрашивают.

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

Видимо, просто почему-то не хотят поступать в МГУ. В нашем университете на наше направление поступить по ЕГЭ можно только при 300-eps баллах за три экзамена, а сдать информатику на сотку или около того, совсем ничего не умея, довольно трудно. В любом случае, поступают сотнями по олимпиадам и, как мне кажется, что-то да умеют.

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

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

Кстати очень хорошая и крайне грамотная мысль. Спасибо.

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

Ну я бы процитировал, но запрещаете, так что своими словами

Когда это я цитировать запрещал?

1. Долгий кропотливый

Ну допустим изложили вы мне мой текст, и что? Что с ним не так?

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

Это тот самый Столяров

Обратите внимание на блок под заголовком «пояснение» внизу правой колонки на главной странице.

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

один раз тесты написал и можешь гулять смело

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

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

Ну допустим изложили вы мне мой текст, и что? Что с ним не так?

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

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

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

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

Мне, как вы понимаете, «реакция студентов» уже давно известна.

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

Указатели учатся на примере ассемблера для x86. Я когда в школе еще был, и начинал изучать программирование, почитал учебники по асму для 8086, и как-то в голове утряслось тогда много. В частности внятный ответ на «зачем нужны указатели, когда и без них можно»

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

А вот онлайн-приёмка типа ejudge имхо плохая идея. У нас в универе (Карлов университет в Праге) тоже используется подобная система, но результат не всем нравится. Во-первых, онлайн-тестирование не подталкивает студента к идее, что тесты - круто, и их можно писать самому. Скорее оно воспринимается, как вредный монстр в игре, которого надо пройти с наименьшими потерями. Во-вторых, как вы заметили, живого обсуждения с преподавателем оно не заменяет. По-моему, правильный вариант - набор тестов в виде исходного кода + сдача живому преподавателю. Тесты здесь служат не чтобы говорить студенту: «Отказ! Ты дурак! задание не принято!» — а как помощник при написании кода. Тесты на стороне студента, короче.

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

почувствуйте разницу.

Да вот именно, что не почувствовал. В моём тексте всё это есть, даже testing first.

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

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

К сожалению я не обладаю даром доносить свою мысль другим. Если бы обладал Вы бы уже доводили свою книгу до ума. Собственно как вывод, ничего у меня из этого не выйдет.

Да и даже если я убежусь что прав, что это изменит? Вы мне всё равно не поверите.

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

Указатели учатся на примере ассемблера для x86.

Миф, не учатся они на этом примере. Точнее, есть отдельные ученики, которые могут и так. Но ЭТИ — вообще могут как угодно. То есть если человек способен в голове связать хитросплетения ассемблера с указателями и, например, списками — то этого человека вообще пофигу как учить, его можно вообще не учить, он сам научится.

Но этих людей крайне мало.

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

Да вот именно, что не почувствовал. В моём тексте всё это есть, даже testing first.

Я только что привёл Вам в пример первые две страницы из раздела «отладка», не поленитесь перечитать то что написали вы, и как это предложил исправить я.

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

Тебе наверно уже это говорили, но пробел нужно ставить после знака препинания, а не до.

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

Скорее оно воспринимается, как вредный монстр в игре, которого надо пройти с наименьшими потерями.

:-) Улыбнуло, надо запомнить. Очень правильное сравнение.

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

Понимаете, тут человеческий фактор срабатывает. Препод — он же тоже живой человек, а не робот. Вот студент заявляет, что у него программа все тесты прошла и всё хорошо. Препод видит, что сие соответствует действительности. Далее возможны два варианта развития событий: 1) «ack», все довольны, все свободны, можно идти гулять и 2) «nak», студент с пеной у рта доказывает, что он сам это писал (хотя ни в зуб ногой в «своей» программе, но правила этой игры именно таковы), препод его посылает лесом, сначала вежливо, потом не очень, тратится время, тратятся нервы, etc. Естественно, преподу первый вариант нравится больше на сугубо подсознательном уровне. А тут ещё и вон на экране надпись «все тесты пройдены», то есть как бы основание для «ack» есть, служебные обязанности исполнены.

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

Вывод тот-же. Из-за того что преподователи ленивые и нихрена не хотят делать, писать тесты для программ программистам не нужно?

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

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

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

Так в ассемблере же без косвенной адресации вообще никак

Совершенно верно, и при этом используются адреса. А на ЯВУ при построении списков нужно совершать абсолютно другие телодвижения, причём при этом будут использоваться тоже адреса. Только использоваться они будут совершенно иначе.

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

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

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

Так с обычными переменными можно работать без всяких указателей. А вот чтобы на ассемблере кто-нибудь не поленился сделать менеджер кучи, написать аналоги malloc/free и начать со списками развлекаться — такого я ещё не видел.

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

В общем, в 9 классе совсем не понимал, зачем нас учат Паскалю, но сейчас пришёл ко мнению, что это действительно довольно уместно. Но первый курс университета — это, ИМХО, перебор.

Первый миллиард уже заработал?

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

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

Но мнение имеете :))

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

А кто мешает слинковаться с libc и вызывать сишные malloc/free?

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

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

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

Абсолютно бредовая аналогия.

А по сути, тут уже всё выясняли, паскальхороший компромисс: простой достаточно высокоуровневый язык предельно близкий семантически к C, который позволяет бкз проблем перейти к последнему. Питон, к примеру — слишком высокоуровневый с этой точки зрения.

А JS, плюс к этому, мало того, что использует необщепринятую объектную модель (оно может чем-то и хорошо) но и использует её достаточно неочевидным для новичка способом.

Тогда уж лучше с Lua начинать. Ну или со Scheme, тогда уж, но SICP уже написана и переведена. Но автор практикует более общепринятый способо обучения студентов программированию.

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

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

.data

hex: .string "0123456789ABCDEF"
pref: .string "0x"
suff: .string "\n"
dig: .byte 0

heaplen: .quad 0
heap:

.text
.globl _start
.type _start, @function

.globl main
.type main, @function


alloc_heap:
        movq %rdi, %r8

        # 16 bytes for length and flags
        # bytes 0...7 = length of block
        # bytes 8...15 = 1 if block is active

        add $16, %rdi
        movq $12, %rax
        # %rdi contains number of bytes to alloc
        syscall

        movq $heap, %rbx
        movq heaplen, %rax
        add  %rax, %rbx

        # begin of allocated block
        movq %rbx, %r10

        # save length of requested block
        movq %r8, (%rbx)

        # mark block as active
        add $8, %rbx
        movq $1, %r9
        movq %r9, (%rbx)

        # mov begining of allocated block to %rax
        movq %r10, %rax
        add  $16, %rax

        # update heaplen
        movq heaplen, %rbx
        add  %rdi, %rbx
        movq %rbx, heaplen
        ret
cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от Croco

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

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

Для микроконтроллеров до сих пор споры идут C/асм, и иногда я и сам писал часть критичного к времени кода на асме

cvs-255 ★★★★★
()

Мужик конечно молодец, но старьё...

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

простейший менеджер аллокации памяти на асме,

Чё-то я половину не понял. Вот эти hex, pref, suff и dig вроде не используются нигде и, видимо, не от этой задачи. А $12-й сисколл — это кто вообще (brk? но brk получает адрес, а не длину) и что за конвенция, когда единственный параметр вызова передаётся через RDI? Вроде и не линукс, и не BSD. Ну и это... того... менеджер кучи всё-таки предполагает операцию, обратную alloc'у, и к тому же на каждый alloc в ядро лазить как бы нехорошо, слишком медленно будет. Судя по апдейту переменной heaplen, у меня ощущение такое, что тут не вся библиотека, а только одна функция, которая вызывается, когда в куче не остаётся места. Те, кто её вызывают (аналоги malloc/free) будут гораздо сложнее.

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

а теперь что-то не видать.

Ну прямо уж не видать, всего-то на один экран вниз скролльнуть :-)

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

Вот эти hex, pref, suff и dig вроде не используются нигде и, видимо, не от этой задачи.

Да, это кусок бОльшего кода, там дальше печатает на экран

насчет сисколлов

http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64

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

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

потому я и написал, что это простейший менеджер

cvs-255 ★★★★★
()

средства на её написание и издание были собраны через краудфандинговую кампанию.

автор - вор. крадёт хлеб у буржуев.

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

$12-й сисколл — это кто вообще (brk? но brk получает адрес, а не длину)

Хм, и правда, странно, что оно вообще работало...

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