LINUX.ORG.RU

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

 , ,


4

3

Доброго дня!

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

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

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

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

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

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

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

anonymous ()

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

andalevor ()

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

Vovka-Korovka ★★★★★ ()

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

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

pon4ik ★★★★★ ()

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

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

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

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

anonymous ()

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

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

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 ()
Ответ на: комментарий от slapin

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

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

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

andalevor ()
Ответ на: комментарий от 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)
Ответ на: комментарий от anonymous

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

anonymous ()
Ответ на: комментарий от 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 ()
Ответ на: комментарий от anonymous

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

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

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

anonymous ()