LINUX.ORG.RU

Дэйтел актуален ли?

 ,


4

3

Доброго дня!

Тяжёлая книга. По весу. ;-)

Но вот сейчас пытаюсь читать в оригинале «Modern C», «21st Century C» часто там проскакивает: проблема в том, что все учатся по книгам 80-х.

Стоит ли забросить Дэйтела или Прата?

проблема в том, что все учатся по книгам 80-х

Надеюсь, там написано, что изменилось с 80-х?

Стоит ли забросить Дэйтела или Прата?

И почему это стоит или не стоит делать тоже, надеюсь, написано?

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

Кстати, там, где _действительно_ нужен си, таки пишут на си из 80-х. Не советую тащить его туда, где нужен модерн.

anonymous
()

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

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

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

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

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

gremlin_the_red ★★★★★
()

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

Vovka-Korovka ★★★★★
()

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

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

pon4ik ★★★★★
()

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

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

в пользу общепринятых практик

Что за практики такие? Духовные? Ты о чем вообще? Новые функции с «n» во всех местах? Или C++ style comments? Еще раз: там, где сишку реально юзают, переполнение буфера кулхацкиром в вызове strcpy мало кого волнует.

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

Много их, к примеру объявлять переменную как можно ближе к использованию, не использовать ++ и — в сложных выражениях и многие другие.

andalevor ★★
()

Дэйтел актуален ли?

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

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

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

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

deep-purple ★★★★★
()

Лучше учить modern c++, а в сишке всё равно лучше в формате ANSI C писать, ибо там где она нужна нового компилятора может и не будь, а где он точно есть, там сишка не нужна.

anonymous
()

Дейтел актуален.

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

Кстати, книга «21st Century C», на неё есть уже второе издание (в оригинале).

Moisha_Liberman ★★
()

Последнее 6-е издание Праты по Cи вышло в 2013 году и включает в себя C11. Там даже примеры кода выложены двух вариантах — архив для компиляторов умеющих в новый стандарт и архив для тех, которые нет.

The sixth edition of this book has been updated and expanded to cover the latest developments in C as well as to take a detailed look at the new C11 standard

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

Это вкусовщина, стили, это в каждом проекте свое. Это можно было в 80-х делать и сейчас тоже можно.

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

Ну использовать ++ можно было и в 80х, да, а вот переменные объявлять не в начале блока было нельзя. Ну и есть разница, можно было писать правильно и в книжке написано как писать правильно.

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

люди, пишущие на С сейчас учили его в 80х

И много таких? Всё кого я знаю, как минимум учились по ANSI C (1989), то есть уже в 90-х.

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

не слышали о VLA
C

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

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

Это не моё утверждение, а цитата из первого поста. На самом деле в Modern C я не помню чтобы автор утверждал, что все учились на книгах 80х. Он пишет, что не смотря на широкое распространение С и большое количество проектов на этом языке, хорошее знание языка встречается редка т.к. программист останавливается в развитии на некотором уровне, игнорируя развитие языка. Что, в прочем, не слишком расходится с утверждением ТС, на мой взгляд.

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

В 80-х еще вовсю форкались и юзали IPC на семафорах и шмем — вот тебе и тред сейф, пусть и с другого боку.

deep-purple ★★★★★
()
Ответ на: комментарий от andalevor

И у тебя потом декларации как попало раскиданы по коду что без ide код править не получается. C89 рулит и педалит и его чаще всего форсят в крупных проектах. И не надо разные стили кодинга считать за развитие языка - это все от проекта к проекту разное. Вот понравились товарищу главнюку k&r декларации функций - все сидят пишут как велено никто за «устарело» не топит. Так как вкусовщина.

slapin ★★★★★
()

проблема в том, что все учатся по книгам 80-х

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

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

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

Почему? Скорее наоборот, используется переменная в for а какой у неё тип? Надо прыгать в начало блока. А в С99 можно в части инициализации вставить объявление с инициализацией и кроме ясности типа бонусом получить изоляцию переменной цикла от вмещающего блока.

Вот понравились товарищу главнюку k&r декларации функций

В k&r же декларации были не обязательны и многими не использовались, не? А вообще, если начальник сегодня говорит разбрасывать снег, а вчера говорил собирать, то ничего не поделать – будешь и собирать и разбрасывать, но это не значит, что он принял правильное решение.

И не надо разные стили кодинга считать за развитие языка

Возможностей объявлять переменные не в начале блока в С89 не было и, значит, никаких разных стилей в этом плане не было, а после есть, а значит это развитие. Там уже если кто-то хочет при -std=c99 объявлять в начале блока – кто ж запретит. Но выше я привёл пару доводов за возможность объявления в любом месте. Но вообще есть и другие рекомендации.

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

А ничего, что реально после C89 почти ничего полезного не появилось? Атрибуты gcc частью языка не считаем.

Что там после C89 полезного? VLA? Да за использование VLA яйца отрывать надо! Что реально полезного появилось в С после C89?

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

в C89 можно использовать встроенные блоки:

int foo(void)
{
    ...
    {
        int i;
        for (i = 0; i < COUNT; i++)
            ...
    }
}

И это гораздо легче воспринимается чем разбросанные переменные.

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

в k&r не обязательны. Но тут речь про

void Create (_hwnd, x)
    HWND *_hwnd; /* Window id */
    int x; /* resource reservation count */
{
...
}

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

P.S. Сменил geany на qtcreator, включил «живую» проверку при помощи шланга/tidy. Офигеваю от того, что он ругается на вложенные функции. Странно…

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

Это лишний уровень вложенности, потому что крайне редко тело for состоит из одного оператора:

void foo(void)
{
        {
                int i;
                for (i = 0; i < N; ++i) {
                        ;
                }
        }
}
andalevor ★★
()
Ответ на: комментарий от anonymous

Да за использование VLA яйца отрывать надо!

Почему?

Что там после C89 полезного?

Кроме VLA есть inline, restrict, alignment, generic, thread local, возможность объявлять переменные не в начале блока и много ещё всякого поменьше, но также полезного.

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

Почему?

Потому что есть шанс вызывать переполнение стека! И это, между прочим, в отличие от кучи, никак не проконтролируешь!

дженерики нужны крайне редко, в макросах. Можно и без них обойтись. inline и раньше был, не надо тут! Иначе как бы в микроконтроллерах true inline писали бы?

И вообще, ты пургу несешь: inline, restrict, alignment и generic — исключительно вещи препроцессора, т.е. gcc! Это не фичи самого языка!!!111

Что насчет thread local, я без понятия, что это и зачем оно нужно.

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

про thread local storage это фича рантайма а он как правило в libc и связанных либах. То есть практически и в C89 работает. inline в strict c89 действительно нету, но компиляторы его умеют с начала 80-х. по умолчанию gnu89 его умеет.

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

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

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

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

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

Ну вот читал я недавно свежую книжку (что-то вроде «C modern programming in Linux»), то же самое, что и в книгах 20-летней давности...

Пока что круче книги Стивенса про юниксовые IPC ничего не видел из обучающей литературы по сям. Ну, а чисто синтаксис С, ясен пень, нужно по первоисточнику - K&R — учить.

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

Надо пользоваться фичей, чтобы объявлять ее полезной. Или хотя бы чтобы многие пользовались. Это не тот случай.

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

inline, restrict, alignment и generic — исключительно вещи препроцессора, т.е. gcc! Это не фичи самого языка!!!111

И вообще, ты пургу несешь

Эдик, перезайди на ЛОР трезвый.

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