После прочтения вопроса о книгах, которые должен прочитать каждый программист , мне интересно, следует ли считать следующее устаревшим:
- Полный код : 1-е издание в 1993 году; 2-е издание в мае 2004 г.
- Введение в алгоритмы (Cormen, Leiserson, Rivest, Stein) : 1-е издание в 1990 г .; 2-е издание в сентябре 2001 года; 3-е издание в 2009 году
- Прагматичный программист : октябрь 1999
- Структура и интерпретация компьютерных программ : 1-е издание в 1984 году; 2-е издание в сентябре 1996 года
- Язык программирования C : 1-е издание в 1978 году; 2-е издание в апреле 1988 года
Все эти книги кажутся очень старыми. Разве нет разницы между современными компьютерами и тем, что было актуально, когда были написаны эти книги?
Например, мой 61-летний учитель очень хорошо объясняет вещи, но забывает принять во внимание все, что было сделано между тем, когда он начал преподавать 25 лет назад и сейчас.
Разве это не так для этих книг? Разве не существует более современных книг, которые учат принципам и технологиям, которые ближе к современной практике? Или вы считаете их полезными и актуальными даже сегодня?
books
software-obsolescence
Olivier Pons
источник
источник
Ответы:
Эти книги о принципах развития. Эти принципы по своей природе не зависят от языка, а для некоторых даже не зависят от парадигмы (ООП, функциональное программирование, императивные языки).
Они объясняют теорию и хорошие пути развития, потому что, в конце концов, программное обеспечение всегда сводится к получению данных, их обработке, а затем выводу обратно. Facebook, Twitter, 3D, пакетный учет, управление железнодорожным движением, запуск ракет и т. Д.
Книги о языке, например
"How to learn XXXXX in YY days"
, где XXXXX - это язык, а YY - это число, которое со временем (а иногда даже очень быстро) устареет, потому что по своей природе они о вещах, которые либо развиваются, либо заменяются и становятся устареть.Code Complete , от удивительного Стива Макконнелла, возможно, книга, которая заставила меня понять это. И Прагматичный Программист полностью изменил мое видение разработки программного обеспечения. Читая такие книги, вы понимаете, что 95% проблем, с которыми вы сталкиваетесь каждый день, уже решены, и что 95% из нас все еще изобретают велосипед.
Так называемое «облако» - это не будущее разработки программного обеспечения, это способ использования разработанного программного обеспечения.
Не попадайтесь в ловушку модных словечек с обманом и чушью, сосредоточьтесь на том, как вы можете улучшить свои навыки мастера программного обеспечения.
Сосредоточьтесь на изучении того, что другие блестящие духи изобрели и изучили перед нами, потому что это единственный способ стать опытным разработчиком.
источник
"Learn Javascript in 15 seconds"
и только половина миллиарда"Learn PHP on 17 secsonds"
Психология, компьютерное программирование (1971 г.). В миллион раз больше программистов, чем в 1970 г., психология того, как они создают программы и какие ошибки они совершают и как их избежать, важна как никогда.
Программные инструменты (1976). Поскольку Интернет представляет собой набор фреймворков, утилит, сценариев и плагинов, идеи программных инструментов никогда не были столь актуальны.
РЕДАКТИРОВАТЬ: Для решения общего вопроса - актуальны ли старые книги по программированию?
Общие принципы разработки программного обеспечения не сильно изменились, появились новые технологии OO, TDD и т. Д. Но, как правило, пользователи и проблемы не изменились - и думать о том, как разделить проблему, теперь так же, как и она. всегда был.
Эти старые книги были в основном написаны экспертами в этой области. Многие современные книги по программированию нацелены на то, чтобы спешить на пороге 2000 страниц за последним модным словом, пока оно еще актуально.
Книги о языках и технологиях, которые больше не используются, вероятно, не актуальны - в списке нет руководства по сборке Vax. Но «С» по-прежнему очень часто используется, а «Язык программирования С» - это не только лучшая книга по «С», но и образец того, как написать краткое руководство и ссылку на ваш язык.
Есть ли новые алгоритмы? Да. Но все старые алгоритмы по-прежнему актуальны, и большинство новых находятся в непонятных областях, которые вы вряд ли встретите. Никто не придумал лучшего сорта или БПФ в последнее время. Хотя другие люди пытались объяснить их лучше, нет никаких причин, по которым книги «Алгоритмы» этого года лучше, чем CLRS.
пс. Ваш крутой новый iWhatsit работает на BSD, разработанном в 1977 году. Теперь вы, ребята, сходите с моей лужайки!
источник
ИМХО, неудивительно, что очень хорошие книги остаются популярными на протяжении десятилетий - это показывает, насколько они хороши. Но я думаю, что могу сказать вам кое-что по каждому из перечисленных вами кандидатов:
На самом деле первое издание «Code complete» было выпущено в 1993 году, так что это действительно «классика». Речь идет о базовом стиле кодирования с использованием примеров, которые применимы практически ко всем языкам программирования семейства C, которые в настоящее время содержат самые популярные языки (C / C ++ / Java / C # / Objective-C / D / ...). Так что да, эта книга актуальна.
Ну, на самом деле я не читал эту книгу (мой учебник по алгоритмам был из «Седжвика»), но изучение алгоритмов и построение алгоритмов действительно не зависит от языка. Конечно, это умение недооценивается в последние годы, так как в настоящее время вы найдете много базовых алгоритмов в стандартных библиотеках, но ИМХО каждый профессиональный программист должен иметь некоторые базовые знания в этой области.
Это очень хорошая книга о программировании как мастерстве. Не зависит от языка и очень, очень современно, поскольку программирование выполняется программистами как ручное задание с использованием текстовых редакторов, IDE, контроля версий и т. Д.
Это мой личный фаворит, хотя (или, возможно, потому что) книга использует Scheme, чтобы научить вас различать различные парадигмы программирования. Я не знаю ни одной другой книги, в которой так много внимания уделяется созданию абстракций. А построение абстракций - это ключевая способность, которая делает разницу между посредственным программистом и лучшим программистом - который не изменился за последние десятилетия, так что на самом деле эта книга вечна. Кроме того, функциональные языки и языковые элементы в последнее время стали более популярными, поэтому ИМХО идеи, представленные в этой книге, получили ренессанс.
Что ж, эта книга может быть не такой вечной, как остальные четыре. Но так как C - это что-то вроде «матери» всех тех популярных языков, которые я перечислил выше, было бы неплохо прочитать эту книгу - я не думаю, что есть некоторые современные книги на «C», которые действительно лучше. И если вам нужно заниматься программированием обслуживания кода C ++, написанного кем-то, кто знает C лучше, чем C ++, то эта книга обязательна.
Наконец, вы просили книги, в которых больше учитывается «текущая реальность», не будучи слишком специфичными для технологии. Так что же такое «текущая реальность» и что изменилось в «нетехнологической» части? Вот некоторые моменты последнего десятилетия, не говоря уже о том, что этот список полон или имеет правильные приоритеты.
(Я не перечисляю здесь ничего о веб-разработке или разработке приложений, потому что я думаю, что эта технология специфична).
Существуют хорошие книги по темам 1 и 2, особенно «Чистый код» , выпущенный в 2008 году, и «Эффективная работа с унаследованным кодом» из 2004 года. Возможно, это некоторые из «новых» книг, которые вы ищете?
источник
Из тех, что вы упомянули «Код завершен», «Прагматичный программист» и «SICP» были в моем списке рекомендованных к прочтению для всех новых разработчиков, которые начинают здесь в моей компании и хотят подняться на более высокий уровень.
Они не устаревают в долгосрочной перспективе, потому что фундаментальная наука в области компьютерных наук не изменилась.
источник
Я не читал все эти книги, но у меня есть собственный Code Complete и Pragmatic Programmer. Эти книги далеко не устарели. У них может быть пара абзацев, которые немного ржавые, но большая часть контента по-прежнему актуальна сегодня.
Прогресс в области компьютерных наук и программирования является эволюционным процессом. Новые абстракции вводятся поверх старых, но эти новые вещи не обязательно делают старое устаревшим.
Аналогия ... Если вы учитесь на травматолога или хирурга, который специализируется на трансплантации сердца, вам все равно нужно знать, как работает человеческое тело, клеточная химия, системы органов, как открыть грудную клетку и как быстро остановить кровотечение, если это произойдет, и т. д. Только потому, что они изобрели эндоскопическое оборудование и менее инвазивные методы, это не означает, что вы соскочили с крючка для изучения основ. Это только означает, что вы должны узнать больше.
источник
«Облако» не является фактором. «Облако» на самом деле намного старше, чем большинство перечисленных вами книг. большинство из этих книг посвящены основным принципам, они редко меняются на частые. Фреймворки и библиотеки постоянно меняются, но то, как вы должны структурировать свой код, мало что меняет. Точно так же указатель все еще является указателем, он не начинает делать разные вещи только потому, что. Единственная книга, относящаяся к конкретному языку, которую вы перечислили, касается C, и в этом случае эта старая книга гораздо полезнее, чем что-либо новое, потому что она, вероятно, была написана ближе к периоду времени, когда был разработан любой код C, с которым вы будете работать.
источник
Список, который вы цитировали, нет, они не устарели. Книга устарела только тогда, когда предмет изменился настолько, что они бесполезны. Природа программирования и язык Си оба мало изменились с момента публикации
источник
Одна из вещей, которую вам нужно осознать, - это то, что существуют основополагающие принципы, которые по существу не зависят от времени, и реализации, которые имеют тенденцию приходить и уходить.
Основополагающие принципы - это, по сути, вся скучная теория, на которую компьютерные науки тратят много времени, и она продолжает действовать, даже если мир вокруг нее меняется. Это в отличие от таких вещей , как «Как использовать Win32s под Windows 3.11» , который является очень старым и устаревшим.
Чтобы поставить вещи в перспективе - каноническому тексту по геометрии две тысячи лет. Большинству преподавателей математики до уровня колледжа не менее 300 лет. Единственная причина, по которой книги CS не старше, это то, что поле все еще новое.
источник
Некоторые книги вне времени, потому что они обсуждают идеи, которые так важны для практики разработки программного обеспечения, что они всегда будут применяться.
Возьмем, к примеру, « Мифический человеко-месяц» , когда я читал эту книгу, я постоянно забывал, что она была написана в 1975 году. Когда он встречает случайные упоминания о IBM System 360, он всегда раздражает меня, потому что это единственный контент, который датируется книга. Все остальное применимо здесь и сейчас. Я до сих пор храню свой экземпляр « Шаблонов архитектуры корпоративных приложений» Мартина Фаулера, которому сейчас 9 лет, но он снова вне времени и применим к той работе, которую я делаю сегодня.
Моя любимая книга на данный момент - это Java-моделирование цвета с помощью UML Питера Коада (1999), хотя я являюсь разработчиком на C # и отказываюсь от UML, потому что методы и концепции делают меня лучшим программистом.
Нам было бы полезно поучиться у разработчиков первого поколения, потому что они пошли на шаг, по которому мы идем прямо сейчас, и их с трудом заработанная мудрость может помочь нам быстро начать то, что мы делаем / изучаем сегодня.
источник
Основные принципы программного обеспечения не изменились за последние 20 лет. Стек, дерево и связанный список по-прежнему работают так же, как и тогда. «XOR» по-прежнему означает то же самое. Байт по-прежнему имеет 8 бит.
Вы всерьез предполагаете, что «мультиплатформенная разработка» - это новая идея? Как вы думаете, почему С был изобретен?
«Облако» - модное маркетинговое слово. Раньше это означало что-то особенное, но это было унижено из-за чрезмерного использования. В настоящее время, когда у вас есть что-то, что связывается с удаленным сервером по сети, маркетологи наклеивают на него ярлык «облако». Так что на самом деле нет смысла говорить об этом, потому что это бессмысленное слово.
Я не знаю вашего 61-летнего профессора, поэтому я не могу поручиться за него. Вы, с другой стороны, явно не так умны, как вы думаете. Послушайте профессора, возможно, вы чему-нибудь научитесь.
«Ты не можешь быть старым, если не будешь дураком. Множество молодых мудрецов, они мертвы как ублюдки». - Ричард Прайор
источник
Вот еще несколько очень старых и устаревших книг:
Искусство компьютерного программирования, вып. 1-3 Д. Кнута. Они были опубликованы между 1968 и 1981 годами! Мы больше не используем вакуумные трубки, люди! Все в этих книгах хромое. Где обсуждение Python и Ruby?
Компьютеры и неразрешимость: руководство по теории NP-полноты М. Р. Гэри и Д. С. Джонсона, 1979. Супер хромая! Все эти проблемы уже решены, наверное.
Если за последние три года книга не была написана с акцентом на Python, читать ее не стоит.
источник
Эти книги не устарели, эти книги - классика.
Цитирую Капланский , « провести некоторое время каждый день узнавать что - то новое , что не пересекается с проблемой , на которой вы сейчас работаете (помните , что дизъюнктность может быть временным), и читать мастеров . »
источник
Я знаю, что вы имеете в виду, когда у нас есть достижения (на ум приходит LINQ), которые меняют читаемость и использование кода, но просто потому, что эти книги старые, не означает, что они не предлагают отличных уроков для читателя.
Хотя языки программирования, которые они используют, возможно, утратили популярность, теория языков программирования до сих пор звучит правдоподобно. В большинстве из этих книг очень хорошо освещены основы, а основы не сильно изменились.
источник
Индустрия информатики еще очень молода. Книги, написанные 30 лет назад, я считаю ценными и необходимыми для полного понимания. Абстрактные понятия иногда перевариваются.
источник
Некоторые второстепенные детали устарели во всех этих книгах, но 99% все еще велики.
Алгоритмы книг будут стареть медленно. Алгоритмы математические, и математика быстро не меняется. Конечно, еще есть исследования новых алгоритмов, которые превосходят в определенных обстоятельствах (например, алгоритм Фюрера (2007) Schonhage-Strassen для умножения длинных чисел на 40000+), но для введения вам необходимо изучить основы (разделяй и властвуй) / Динамическое программирование / Линейное программирование / и т. Д.), Чтобы вы могли научиться разумно думать об алгоритмах.
Изучение стандарта C от K & R по-прежнему является лучшим источником; хотя я не уверен, доверю ли я их разделам о том, как настроить вашу среду.
SICP - это замечательная книга, которая обучает основам современного CS через обучение языку lisp, который является замечательным языком. Тем не менее, в наши дни, пожалуй, не самый полезный язык; хотя другие будут утверждать, что lisp является их секретным оружием, и что изучение языков, таких как java или python, сначала делает очень плохих программистов, которым никогда не нужно учиться реализовывать сортировку или связанные списки, массивы или нотацию big-O, и в итоге они делают очень неэффективные вещи.
Некоторые из Code Complete или Pragmatic Programmer менее актуальны, особенно если вы программируете на более новых языках (например, python / ruby / C ++ 11), поскольку они часто сосредоточены на том, как что-то делать в C, или предлагают рекомендуемые решения с использованием лучших доступные в то время инструменты (например, CVS / RCS для контроля версий, а не современный инструмент, такой как git / bzr / hg / svn). Но все же хорошо думать о том, как контроль версий является обязательным, и как он должен быть беспроблемным и самодокументируемым, а также рассуждать о том, почему он абсолютно необходим.
Или рекомендации PP относительно IDE для базового редактора Unix + инструментов Unix - не говоря уже о том, что вы не должны учиться использовать find / awk / locate / grep / sed, но хорошая IDE часто может сэкономить много времени. Например, emacs может делать подсветку синтаксиса или простое завершение кода; но, скажем, хорошая IDE скажет давать подсказки с объявлениями функций, когда вы их вводите, или анализировать код и отмечать неиспользуемые переменные, облегчать свертывание разделов кода и т. д.
источник
Да, да и да.
Это не делает эти книги устаревшими. «Современные вычисления» - это невероятно широкий термин. Тем не менее, он включает в себя программирование на C, поэтому «Язык программирования C» все еще является актуальной книгой. Он включает в себя алгоритмы, поэтому «Введение в алгоритмы» все еще является актуальной книгой. Так далее и тому подобное.
Большинство приложений в App Store (в качестве примера используется самая популярная мобильная платформа) написаны на Objective C, языке начала 80-х, который является надмножеством C. Поэтому, опять же, C по-прежнему актуален.
Это наш подарок.
Но что это значит?
В школе слишком много языков, API-интерфейсов, платформ, платформ, инструментов, стратегий сотрудничества и т. Д., Чтобы подготовить вас к конкретной работе. Школа может только заложить основу, давая вам базовую рабочую модель работы машины, об алгоритмах, структурах данных, построении кода, стратегиях декомпозиции, некоторых инструментах и т. Д.
«Настоящий разработчик» - это не тот, кто знает все, а тот, кто обладает способностью к такой работе, у кого есть фундамент в теории и на практике, и кто знает, как учиться , потому что ваше образование никогда не заканчивается.
источник
Итак, я собираюсь предложить ответ, который является гораздо более теоретическим. Я согласен со всеми вами, ребята, которые ответили на вполне очевидные, на мой взгляд, эти книги - основа того, что мы, программисты, делаем, и все эти новые фреймворки построены на одной и той же старой линии столбов.
Вот мои два цента - не совсем мои, я узнал об этом от святого Аквинского и от Аристотеля до него.
Механика компьютера не изменилась со времен фон Неймана. Точно так же детали, которые вам нужно выучить, чтобы стать великим программистом, будут такими же, пока модель фон Неймана не устареет. Сборка, это язык компьютеров ... учите его, никаких оправданий.
C является родным языком для Windows и Unix. Узнайте это или найдите новую сделку. Если вы один из тех парней, которые пошли прямо на JAVA или C #, вы можете быть хорошим программистом, но вы были бы намного лучшим программистом, если бы вы изучали C-- period.
Алгоритмы и структуры данных являются основой компьютерных программ, изучают их.
Все остальное - абстракция этих самых основных дисциплин. Абстракции прекрасны при правильном использовании - серьезно, я использую C # для 75% всех моих проектов. Тем не менее, они делают вас глупыми, если вы не нашли время, чтобы понять, как они работают и как функционировать без них. Вы потратите бесконечное время на создание программного обеспечения, которое бы подходило к квадратному отверстию, известному пословицам, когда есть гораздо лучшие подходы и будут ошибки, которых можно было бы избежать. Разработка программного обеспечения - это ремесло, которое нужно освоить, и в конце концов инструменты редко меняются. Вот почему эти книги так важны.
Все эти программисты только на JAVA и C #, бьюсь об заклад, большинство из них даже никогда не видели эпизод Star Trek!
источник
Я услышал высказывание наставника:
«Хороший совет приходит с причиной, почему вы знаете, когда он больше не хороший совет». Таким образом, в терминах книги, книга, которая объясняет, почему делать X над Y, сообщит вам, когда этот совет больше не действителен. Книга "всегда делай это, просто делай это", как некоторые из ускоренных курсов на языке X, не так хороша.
Я видел книгу под названием «Изучай Unix за 24 часа», ну, книга толщиной около 8 см, я сомневаюсь, что многие люди даже могли прочитать каждую страницу за 24 часа :)
Помните, что то, что сегодня в моде, может быть осмеяно завтра. Все следующее когда-то считалось мейнстримом (модно вчера), но теперь нет:
И есть несколько вещей, которые когда-то были полностью анафемой, но теперь принимаются:
Знайте, почему, и вы будете знать, когда старые предположения были заменены новой реальностью, и то же самое следует совету.
источник