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

Программирование принципы и практика использования c бьерн страуструп книга

программирование принципы и практика использования c бьерн страуструп книга. d3vURUx4UlHCgZY xVBMyyo6k. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-d3vURUx4UlHCgZY xVBMyyo6k. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка d3vURUx4UlHCgZY xVBMyyo6k.

программирование принципы и практика использования c бьерн страуструп книга. d3vURUx4UlHCgZY xVBMyyo6k. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-d3vURUx4UlHCgZY xVBMyyo6k. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка d3vURUx4UlHCgZY xVBMyyo6k.

Программирование ITmozg: запись закреплена

Бьерне Страуструп «Программирование. Принципы и практика использования C++» (2011, PDF, DJVU)

Книга «Программирование. Принципы и практика использования C++» ее автором позиционируется в качестве пособия для тех, кто хочет начать создавать реальные программы. В ее основе заложена идея о том, что читатели в конечном итоге начнут писать оригинальные программы в качестве профессиональных разработчиков ПО или же в качестве программистов, которые осуществляют свою деятельность в других областях науки и техники.

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

Основная целевая аудитория – те, кто ранее не сталкивался с программированием, однако хочет детально познакомиться с данной сферой. Книга широко применяется в качестве учебного пособия в различных технических ВУЗах для подготовки программистов. Также издание будет полезно и опытным специалистам, которые смогут найти для себя много новой и полезной информации, что позволит им несколько увеличить свой профессиональный уровень.

Источник

Программирование принципы и практика использования c бьерн страуструп книга

программирование принципы и практика использования c бьерн страуструп книга. programmirovanie printsipyi i praktika s ispolzovaniem cpp 2 e izdanie. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-programmirovanie printsipyi i praktika s ispolzovaniem cpp 2 e izdanie. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка programmirovanie printsipyi i praktika s ispolzovaniem cpp 2 e izdanie.

Автор: Бьерн Страуструп
Год: 2015
ISBN: 978-5-8459- 1 949-6
Издательство: Вильямс
Страниц: 1328
Язык: Русский
Формат: PDF
Размер: 72 Mb

Описание: Эта книга не является учебником по языку C++, это учебник по программированию. Несмотря на то что ее автор — автор языка С++, книга не посвящена этому языку программирования; он играет в книге сугубо иллюстративную роль. Автор задумал данную книгу как вводный курс по программированию. Поскольку теория без практики совершенно бессмысленна, такой учебник должен изобиловать примерами программных решений, и неудивительно, что автор языка C++ использовал в книге свое детище.
В книге в первую очередь описан широкий круг понятий и приемов программирования, необходимых для того, чтобы стать профессиональным программистом, и в гораздо меньшей степени — возможности языка программирования C++.
В первую очередь, книга адресована начинающим программистам и студентам компьютерных специальностей, которые найдут в ней много новой информации, и смогут узнать точку зрения создателя языка С++ на современные методы программирования.
Если вы решили стать программистом, и уже знакомы с азами C++ — эта книга для вас, в первую очередь потому, что программирование — это не только, и не столько знание инструмента (языка программирования C++), сколько понимание самого процесса. Автор недаром не ограничился своим первоклассным (но ни в коей мере не являющимся учебником для программистов без большого практического опыта) трудом Язык программирования C++.
Проводя грубую аналогию — виртуозное владение топором никого не делало настоящим плотником. Бьярне Страуструп в очередной раз приходит на помощь программистам — создав уникальный язык программирования, он не ограничивается им и рассказывает о том, как правильно им воспользоваться, даже не зная все его тонкости и возможности.
Основные темы книги:

Для начинающих программистов и всех, кто хочет научиться программировать. Книга предназначена в основном для людей, никогда ранее не программировавших, и опробована на более чем тысяче студентов университета. Однако и опытные программисты, и студенты, уже изучившие основы программирования, найдут в книге много полезной информации, которая позволит им перейти на еще более высокий уровень мастерства.
Широкий охват тем. Первая половина книги охватывает широкий спектр основных понятий, методов проектирования и программирования, свойств языка С++ и его библиотек. Это позволит читателям писать программы, выполняющие ввод и вывод данных, вычисления и построение простых графических изображений. Во второй половине рассматриваются более специализированные темы (такие как обработка текста, тестирование и язык C). В книге содержится много справочного материала. Исходные тексты программ и иные материалы читатели могут найти на веб-сайте автора.

Источник

Программирование принципы и практика использования c бьерн страуструп книга

программирование принципы и практика использования c бьерн страуструп книга. eXOlnCDo80zDDRdjkateAq2vcekRoAT0M7jOBmTVaJzv NbdDktIV HQ0Rr7O69oRncWuMJT. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-eXOlnCDo80zDDRdjkateAq2vcekRoAT0M7jOBmTVaJzv NbdDktIV HQ0Rr7O69oRncWuMJT. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка eXOlnCDo80zDDRdjkateAq2vcekRoAT0M7jOBmTVaJzv NbdDktIV HQ0Rr7O69oRncWuMJT.

программирование принципы и практика использования c бьерн страуструп книга. eXOlnCDo80zDDRdjkateAq2vcekRoAT0M7jOBmTVaJzv NbdDktIV HQ0Rr7O69oRncWuMJT. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-eXOlnCDo80zDDRdjkateAq2vcekRoAT0M7jOBmTVaJzv NbdDktIV HQ0Rr7O69oRncWuMJT. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка eXOlnCDo80zDDRdjkateAq2vcekRoAT0M7jOBmTVaJzv NbdDktIV HQ0Rr7O69oRncWuMJT.

Physics.Math.Code запись закреплена

Программирование. Принципы и практика с использованием C++ (2е издание) [2016, PDF/DJVU, RU]
═════════════════════
Автор: Stroustrup B. / Страуструп Б.
Издательство: Вильямс
Количество страниц: 1328
═════════════════════
Описание:
═════════════════════
Эта книга не является учебником по языку C++, это учебник по программированию. Несмотря на то что ее автор — автор языка С++, книга не посвящена этому языку программирования; он играет в книге сугубо иллюстративную роль. Автор задумал данную книгу как вводный курс по программированию. Поскольку теория без практики совершенно бессмысленна, такой учебник должен изобиловать примерами программных решений, и неудивительно, что автор языка C++ использовал в книге свое детище.
В книге в первую очередь описан широкий круг понятий и приемов программирования, необходимых для того, чтобы стать профессиональным программистом, и в гораздо меньшей степени — возможности языка программирования C++.

В первую очередь, книга адресована начинающим программистам и студентам компьютерных специальностей, которые найдут в ней много новой информации, и смогут узнать точку зрения создателя языка С++ на современные методы программирования.
Если вы решили стать программистом, и уже знакомы с азами C++ — эта книга для вас, в первую очередь потому, что программирование — это не только, и не столько знание инструмента (языка программирования C++), сколько понимание самого процесса. Автор недаром не ограничился своим первоклассным (но ни в коей мере не являющимся учебником для программистов без большого практического опыта) трудом Язык программирования C++.
Проводя грубую аналогию — виртуозное владение топором никого не делало настоящим плотником. Бьярне Страуструп в очередной раз приходит на помощь программистам — создав уникальный язык программирования, он не ограничивается им и рассказывает о том, как правильно им воспользоваться, даже не зная все его тонкости и возможности.
═════════════════════
Основные темы книги:
═════════════════════
Подготовка к созданию реальных программ. Автор книги предполагает, что читатели в конце концов начнут писать нетривиальные программы либо в качестве профессиональных разработчиков программного обеспечения, либо в качестве программистов, работающих в других областях науки и техники.
Упор на основные концепции и методы. Основные концепции и методы программирования в книге излагаются глубже, чем это принято в традиционных вводных курсах. Этот подход дает основательный фундамент для разработки полезных, правильных, понятных и эффективных программ.
Программирование на современном языке С++ (C++11 и C++14). Книга представляет собой введение в программирование, включая объектно-ориентированное и обобщенное программирование. Одновременно она представляет собой введение в язык С++, один из широко применяющихся языков программирования в современном мире. В книге описаны современные методы программирования на С++, включая стандартную библиотеку и возможности C++11 и C++14, позволяющие упростить программирование.

Для начинающих программистов и всех, кто хочет научиться программировать. Книга предназначена в основном для людей, никогда ранее не программировавших, и опробована на более чем тысяче студентов университета. Однако и опытные программисты, и студенты, уже изучившие основы программирования, найдут в книге много полезной информации, которая позволит им перейти на еще более высокий уровень мастерства.
Широкий охват тем. Первая половина книги охватывает широкий спектр основных понятий, методов проектирования и программирования, свойств языка С++ и его библиотек. Это позволит читателям писать программы, выполняющие ввод и вывод данных, вычисления и построение простых графических изображений. Во второй половине рассматриваются более специализированные темы (такие как обработка текста, тестирование и язык C). В книге содержится много справочного материала. Исходные тексты программ и иные материалы читатели могут найти на веб-сайте автора.

Источник

программирование принципы и практика использования c бьерн страуструп книга. 5f454bqapw. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-5f454bqapw. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка 5f454bqapw.

Книга «Программирование. Принципы и практика использования C++» ее автором позиционируется в качестве пособия для тех, кто хочет начать создавать реальные программы. В ее основе заложена идея о том, что читатели в конечном итоге начнут писать оригинальные программы в качестве профессиональных разработчиков ПО или же в качестве программистов, которые осуществляют свою деятельность в других областях науки и техники.

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

Также данное издание представляет собой курс, посвященный основам программирования, в том числе рассматривается обобщенное и объектно-ориентированное программирование. Книга будет особенно полезно тем, кто заинтересован в изучении языка программирования С++ (считается одним из самых популярных языков программирования), так как материал по данному вопросу изложен доступно и объясняет различные особенности его применения. Читатель сможет составить полное представление о современных методах программирования на языке С++, при этом он познакомится со стандартной библиотекой, которая позволяет значительно упростить процесс программирования.

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

Основная целевая аудитория – те, кто ранее не сталкивался с программированием, однако хочет детально познакомиться с данной сферой. Книга широко применяется в качестве учебного пособия в различных технических ВУЗах для подготовки программистов. Также издание будет полезно и опытным специалистам, которые смогут найти для себя много новой и полезной информации, что позволит им несколько увеличить свой профессиональный уровень.

Год издания: 2011
Издательство: Вильямс
Формат: DJVU
Страниц: 1248

программирование принципы и практика использования c бьерн страуструп книга. books. программирование принципы и практика использования c бьерн страуструп книга фото. программирование принципы и практика использования c бьерн страуструп книга-books. картинка программирование принципы и практика использования c бьерн страуструп книга. картинка books.Скачать книгу

Источник

Руководство инструктора к книге «Программирование: Принципы и практика с использованием C++»

Привет, Хабр! Представляю вашему вниманию перевод статьи «Instructor’s Guide for Programming» автора Бьярне Страуструпа (дата последнего посещения: 20.12.2017).

От переводчика

Бьярн Страуструп известен как разработчик языка программирования C++. Книги его авторства лежат на столах многих маститых разработчиков.

Особенно стоит отметить учебник по основам программирования «Программирование: Принципы и практика с использованием C++». Бьярн написал его для студентов Техасского университета агрокультуры и машиностроения, в котором он долгое время преподавал курс для студентов. В дополнение к самому учебнику, на сайте www.stroustrup.com можно найти Руководство инструктора. Изложенный в нем опыт преподавания курса основ программирования может быть полезен не только для курса по C++. В руководстве можно найти ответы на типичные вопросы преподавателей: Как подавать материал? Как бороться с расслоением группы по навыкам? Насколько глубоко нужно погружаться в тему?

Мне не удалось найти русской версии Руководства инструктора к книге «Программирование: Принципы и практика с использованием C++», поэтому я решил перевести его и опубликовать.

Резюме

Этот текст — просто сборник наблюдений и выводов. Они могут быть полезны, если вы ведете курс по книге «Программирование: Принципы и практика с использованием C++».

Предположения

Я предполагаю, что вы профессор, лектор, инструктор, ассистент преподавателя. Может быть ваша должность называется иначе. Главное — вы занимаетесь или планируете заниматься преподаванием курса по книге «Программирование: Принципы и практика с использованием C++». Я предполагаю, что вы прочитали (хотя бы) предисловие книги и Главу 0 «Обращение к читателям». Если это не так, прошу вас уделить этому некоторое время перед чтением этого материала.

Я предполагаю, что ваши студенты до сих пор не программировали, имеют отдаленное представление о программировании или использовали язык, который отличается от C++. В основном я решаю проблемы первых двух групп.

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

Мы будем рады обратной связи и описанию вашего преподавательского опыта.

Замечание: Этот текст всего лишь заметки и ничего более. Никто не занимался техническим редактированием этого текста. Не ожидайте завершеннности материала. Напротив, он будет дорабатываться на основании дальнейшего опыта и по мере его выражения в этих записях. Я планирую обновлять эти заметки (они доступны на сайте поддержки).
Прим. перев: Последнее обновление было 10/7/2011.

Введение

В народе ходят стойкие убеждения, которые мешают научиться писать хорошие программы:

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

У нас есть одна успешная практика. Каждые три или четыре лекции мы уделяем несколько минут на описание интересных прикладных задач, решаемых с помощью программирования. В Главе 1 вы можете получить представление, что мы считаем интересным. Студенты лучше воспринимают сухую теорию, если им указать на область ее применения. Важно, чтобы эти комментарии были краткими и не превратились в нравоучения. Если вы сами не чувствуете, что какая-то задача увлекательна, не пытайтесь убедить в этом студентов. Они раскусят ваш ложный энтузиазм в первый же миг. Во время рассказа мы опираемся на наш личный опыт, на то что мы видели в командировке, слышали в новостях или читали в журнале. Обязательно приведите примеры: пару фотографий или даже реальные устройства, например iPod, мобильник, часы.

Обратите внимание, что у студентов могут быть различные интересы. Некоторых студентов могут заинтересовать новейшие разработки в видеоиграх. Однако такие факты могут создать негативное представление о программировании у более серьезных студентов, которые еще не решили, нужно ли им вообще изучать программирование, компьютерные науки и информационные технологии. Вторую группу, в разных пропорциях, могут заинтересовать примеры из биологии и биомедицины. (Прим. перев: Учебник был разработан в Техасском университете агрокультуры и машиностроения, скорее всего это местная специфика) Очень важно рассказать обо всем разнообразии задач, иначе студенты отключатся и сохранят обывательский, лишенный воображения взгляд на программирование. При любой возможности, старайтесь связать код с примером из реального мира: «Гугл использует техники как в STL» — хороший пример для частей по STL, графический интерфейс iPod подходит для главы о GUI, а пример с самолетом — к главам про работу с железом и корректность программ.

Необходимо донести идею о том, что написание и запуск маленьких программ это часть «чтения главы». Мы обнаружили, что для многих новичков материал в первых главах выглядит слишком простым, чтобы воспринимать его серьезно, а некоторые фрагменты — слишком абстрактными, чтобы тратить на них время. Студенты часто приходят с небольшим опытом в программировании и поэтому считают, что они знают все. По крайней мере все, что им вообще могут рассказать в первый месяц. Из за этого они могут даже пропускать первые лекции. Другие до сих пор не сталкивались с программированием, но считают, что могут изучить его с помощью книг. В школе у них сложилась иллюзия, что они сами могут отличить важное от несущественного. Некоторые из сильных студентов недооценивают время и усилия, которые им нужно потратить. Школьный материал давался им без особых усилий. В реальности это не так. Чем раньше они это поймут, тем лучше.

Чтобы преуспеть в изучении курса, студенту в первую очередь нужно «тратить время» на выполнение заданий. Это важнее, чем предыдущий опыт программирования, оценки в школе или интеллектуальные способности (насколько мы можем судить). Для минимального знакомства с материалом достаточно выполнить задания. Однако для полного освоения курса необходимо присутствовать на лекциях и выполнять упражнения в конце глав. (Прим. перев. В конце каждой главы книги есть и задания, и упражнения) Мы выделяем время в «лаборатории» и ассистентов преподавателя для помощи с упражнениями. Одна из полезных практик — разделение студентов на маленькие группы. При этом желательно составлять группы из людей с разнообразным опытом программирования. В каждой главе приложите все усилия, чтобы каждый студент:

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

Считается, что мы пишем для «элитных студентов топовых вузов». Это очень лестный отзыв для первокурсников TAMU, но реальность как всегда не такая. У нас не самый строгий отбор, да и студенты не настолько мотивированы осваивать курс, как нам бы хотелось. Если быть честными, то первые несколько сотен студентов были инженерами-электриками и компьютерными инженерами, которые не видели своего будущего в разработке софта (сам курс просто был обязательный). Мы начали учить первокурсников специальности компьютерных наук намного позже, когда наши результаты вышли на уровень этих специалистов.

Если вы преподаете в большой группе, далеко не все будут справляться. В этом случае вам нужно принять тяжелое решение: замедлиться для помощи слабым студентам или держать темп и потерять их. Всеми фибрами души вы бы будете стремиться притормозить и помочь. Помогайте. Всеми доступными способами. Но ни в коем случае не замедляйтесь. Это будет нечестно для умных, подготовленных и упорно работающих студентов — от отсутствия сложных задач они заскучают, и вы их потеряете. Раз вы в любом случае кого-нибудь потеряете, пускай это будут не ваши будущие звезды, а те, кто никогда не станет хорошим разработчиком или ученым. Компьютерные науки и разработка программ и так уступают студентов более интересным областям науки. Пожалуйста, не усугубляйте эту проблему.

Мы убеждены, что студенты оправдают наши ожидания и наш курс, кажется подтверждает это. Опросы показывают, что слушатели курса занимаются на 25% больше часов и отзываются о нем на 25% лучше, чем о типичной дисциплине для первокурсников. Так совпало, что это был наибольшая оценка удовлетворенности в инженерном колледже). Этот курс не сложнее, чем средняя биология, физика или математика для первого курса для типичных выпускников американских школ. Обычно в устоявшихся академических областях знаний, вроде биологии, подготовка в школе лучше, чем к компьютерным наукам.

Некоторые предполагают, что курс был успешен «потому что его вел Бьярн Страуструп». Это тоже очень лестно, но тоже не правда. Первокурсникам не свойственно благоговение перед чьей то репутацией, к тому же многие поначалу (к моему сожалению) намного более заинтересованы в оценках, чем в изучении серьезных технических деталей. Так или иначе, последние 4 семестра курс вели Пит Питерсен, Уолтер Доэрти и Ронни Вард; они очень опытные преподаватели старших курсов; Я занимаюсь только случайными «гостевыми лекциями».

Первоначально курс вели с двумя лекциями в неделю плюс занятия в в лабораториях под руководством ассистентов преподавателей. Этого не хватало и нам пришлось срезать углы. Позже, курс был расширен до трех лекций в неделю плюс лабораторные и стало лучше. Только тогда мы смогли посвятить время разбору примеров и добавить больше примеров из книги. Скорее всего, сильным студентам это было не нужно (эта информация есть в книге), но это помогло большинству студентов. В книге все еще есть много информации, которую хотелось бы представить на лекциях. Мы отводим каждому слайду по 2 минуты. Если у вас такая же скорость, вы обнаружите, что некоторые слайды придется пропустить, чтобы уложиться в лекцию на 50 или 60 минут. Мы тоже так делаем.

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

Далее вы найдете обзоры к каждой главе. Они могут быть полезны преподавателям, но я решил не помещать их в книгу. Контрольные вопросы оказались полезнее для студентов, чем обзоры, в которых находятся все ответы (и которые нравятся по неправильной причине).

Мы всегда успеваем пройти от главы 1 до главы 22 за 15-недельный семестр. Это оставляет нам несколько дней на сессию и время для необходимого группового проекта в последние (примерно) три недели (одновременно с заключительными лекциями). Главы 22-27 на самом деле не обязательно должны идти в этом порядке. Вы можете читать их при необходимости. Они могут быть весьма полезны для поддержки более амбициозных проектов.

Обратите внимание, это значит что мы используем 1264-страничную книгу для курса, который описан на 812 страницах. (прим. перев. в переводе 1329 страниц всего и 827 на основные главы). Все остальное это дополнительный метарил: специальные темы для заинтересованных студентов, справочные материалы и т.п.

Практическое замечание: Слайды немного перегружены информацией потому что некоторые студенты (слишком) опираются на информацию в них и могут упустить материал в книге, которого нет на слайдах. Кроме того, это помогает инструктору, у которого было недостаточно времени на подготовку (весьма распространенный феномен). Код написан шрифтом 20пт. Этого достаточно для большинства в аудитории на 200 человек. В редких исключительных случаях, я использую шрифт 18пт. Мне не очень нравятся украшательства на слайдах, поэтому там нет мудреных переходов или занимательной анимации. Если темный фон вас смущает, поменяйте дизайн на черно-белый. Наш коллектив в TAMU так и не пришел к единому мнению на этот счет. Если у вас есть больше фотографий для иллюстраций или они лучшего качества, прошу вас прислать их мне. Студентам нравятся красивые фотографии если они связаны с темой занятия.

Перед каждой главой ознакомьтесь с информациях об ошибках (www.stroustrup.com/Programming/errata.html). Опечатки, особенно во фрагментах кода, могут очень помешать в обучении.

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

Благодарности

Благодарю Лоуренса «Пита» Питерсена, Уолтера Доэрти и Ронни Варда за конструктивные комментарии слайдов и этого руководства.

Глава 0: Обращение к читателям

Очевидно, что «Глава 0» пронумерована странно. «0 is odd» одновременно значит «0 — нечетный» и «0 — странный». Это намеренная нелепость. Ее прочтут только некоторые студенты, а большинство пропустят. Немногие из тех, кто никогда не программировал раньше смогут понять ее. Ее основная цель — дать вам, профессору, лектору, ассистенту преподавателя и т.п, общее представление о моих целях и методах.

Так почему же «Глава 0»? Поскольку нумерация в C++ — как шкала на рулетке — начинается с 0, а не с 1. Чтобы дать людям зацепку: «Тут происходит что-то необычное». Чтобы обозначить, что эта глава отличается от серии других глав с лекциями и домашним заданием. В некоторой степени она передает «мета-информацию».

Мы не рекомендуем студентам читать Главу 0, однако многие будут. Мы не предлагаем проводить лекций по материалу Главы 0. В то же время она содержит идеи, которые нужно по мере необходимости использовать во всех лекциях и обсуждениях. Она отвечает на вопросы «Почему мы делаем так?» и «Действительно ли нам нужно делать так?» задолго до того, как студенты зададут их во время курса. Иногда вам будет достаточно ответить «Теперь ты готов прочитать Главу 0».

Тем не менее я прошу вас прочитать Главу 0 и отнестись к ней со всей серьезностью. На начальном этапе постоянные попытки улучшить курс путем добавления материала могут привести к разрушительным последствиям. До Главы 12 студенты находятся на грани перегрузки. Они двигаются вперед только если их постоянно мотивировать. После каждой главы они способны сделать немного больше, чем раньше, даже если они этого не понимают. Пожалуйста, не пытайтесь расширить курс, принуждая студентов на этом этапе понять абсолютно все. Ваша задача в том, чтобы подготовить у них такую базу навыков, к которой они самостоятельно смогут добавлять новые знания и при этом осмысленно применять их.

Если вы ассистент преподавателя, то прежде чем пытаться что-либо объяснять студентам, пожалуйста, прочитайте книгу целиком. Материал отличается от C++ ваших отцов. Кроме того, откройте лекции или, хотя бы, прочитайте текст слайдов. Трудно помогать студентам, если вы не знаете какими фактами они располагают. Информация на слайдах к главе это наилучшая шпаргалка по самой главе.

Глава 1 и 2

Чтобы приступить к программированию, студенту нужно:

Цель главы 1 в том, чтобы передать чувство волнения, стремления к благородной цели и профессионализма. Она совсем не о том, как создавать кровавые и жестокие видеоигры.

Если вы хотите спасти мир (не как политик, а как технический специалист), то вам придется использовать компьютер. Идеи, инструменты и техники, которые преподаются и изучаются здесь, двигают человечество вперед. Мы в целом не против видеоигр; мы против распространенного заблуждения, что видеоигры это главное применение компьютеров. При каждом удобном случае, невзначай упоминайте, что большинство видеоигр написаны на C++ с помощью техник, которые можно освоить на этом курсе.

Многие студенты с трудом представляют себе компьютер, который выглядит иначе, чем ПК с клавиатурой и экраном. Весьма полезно рассказать им о том, что из себя представляет большая половина компьютеров, для чего они используются и какие люди с ними работают. Совсем не повредит напомнить студентам, что в отрасли (США, Европе и других странах) не хватает хороших строителей информационных систем. А это значит, что у них перспективная карьера и хорошая зарплата. Сами студенты об этом пока могут не задумываться, в отличие от их друзей не-программистов и родителей. Многие люди (популярные журналисты, советники по карьере и родители) помнят кризис доткомов в 2000 году и могут думать, что вся техническая работа была передана на аутсорс за границу. Что это не американские бизнесмены нуждаются в квалифицированных технических кадрах. Я могу возразить им, что большинство выпускников американских колледжей по электротехнической и компьютерной специальности получают наибольшую среднюю зарплату. Больше, чем специалисты в чистой науке, бизнесе и т.п.

Обратите внимание на разнообразие платформ на фотографиях. Многие студенты имеют весьма смутное представление о том, что такое компьютер. Профессиональный разработчик ПО за свою карьеру может встретить самые различные платформы: от компьютеров на кончике ногтя до монстров, заполняющих целые залы или распределенных на нескольких континентах.

Глава 2 посвящена знакомству с инструментарием. В ней студенты узнают, что нужно сделать чтобы запустить простейшую программу «Hello, world!». Она весьма незамысловата. Если вы сами не объясните ее излишне запутанно (не надо!), то типичная реакция студентов «А в чем проблема то?». Пока что никаких проблем нет, да и не будет, если студенты освоят свои инструменты и выработают привычку читать текст заданий и выполнять упражнения.

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

Лекция №1 раскрывает содержание обеих этих глав и дает студентам обзор курса, чтобы они имели представление к чему они в итоге придут (в дополнение к вводному разговору о важности ПО). Особое внимание направлено на структуру кода и фундаментальное стремление к корректности и профессионализму.

Разъяснения к фотографиям на слайдах как правило повторяются и в самой книге.
Изображенные самолеты это Боинг 787 (на C++ в них написаны системы, которые не отвечают за полет) и F35 (единый ударный истребитель) во время полета (над Форт-Уорт в Техасе). Ветряные установки конечно же запрограммированы на C++. А тот грузовик используется в сейсмической разведке нефтяных залежей. Множество ПК управляют обсерваторией Кек, которая расположена на пике горы Мауна-Кеа, на острове Гавайи.

Раз мы имеем дело с новичками, то простой запуск «Hello, world!» связан с множеством практических проблем: У многих студентов нет учетных записей на сервере колледжа, у некоторых нет компиляторов C++ и они не знают где его взять, некоторые ассистенты преподавателя только что вернулись из отпуска или из летней интернатуры. Пожалуйста сделайте все, чтобы решить административные и логистические проблемы перед первой лекцией. Если это возможно, проведите встречу с ассистентами преподавателя за неделю до начала, чтобы определиться, как минимизировать проблемы и как решать их, если они все же возникнут (если у вас 150 студентов, у вас будут непредвиденные проблемы). Будьте доступны или (еще лучше) обеспечьте доступность ассистентов между первой и второй лекцией, чтобы у всех успешно запускалась программа «Hello, world!» до начала лекции №2. Если этого не сделать, некоторые студенты неделями будут отставать от основной группы или даже бросят занятия.

Добейтесь, чтобы все ассистенты на самом деле прочитали каждую главу прежде чем они начнут помогать студентам. Привлекать ассистентов со знанием C++ по традиционному курсу или даже со знанием java — плохая идея.

В этой лекции мы также разбираем что является обманом, а что — нет. Многие первокурсники слегка смущены этим. Совместная учеба считается обманом? Запрещается ли давать кому-то списывать решенные задания? Допускается ли использование (программной) библиотеки? Наши ответы: «нет», «да», «только если вы забудете как это делали раньше». Если нужно объяснить этику, это может быть подходящим временем для рассказа.

При перечислении прикладных областей программирования я, как и многие, упускаю из внимания образовательную деятельность. Если цель студента — стать учителем (вплоть до университета), особенно учителем научных дисциплин (опять же, вплоть до университета), или кого-то волнует распространение технических навыков (тренеры, техписы и т.п.), база в разработке ПО может быть не просто полезна, а необходима. Очевидно, что программирование в первую очередь вдохновляет молодых людей воспринимать науку и технологии серьезно: просто подумайте о соревнованиях роботов или визуализации биологических систем.

Кроме того, я время от времени говорю об «отрасли» когда имею в виду «разработку ПО для применения в реальном мире». Стоит учесть, что создание реальных программ может происходить еще и в университетах, исследовательских лабораториях, государственных и некоммерческих организациях.

Где то между первыми тремя лекциями, обратите внимание, что каждый из примеров можно запустить на любой платформе; упомяните ПК на Windows, Apple, Linux и Unix. Весь код из книги можно найти на сайте поддержки. Мы считаем, что переносимость очень важна; большинство студентов либо не согласны с нами, либо не понимают о чем речь. Однако многие из них привязаны к своему нынешнему компьютеру, и курс с поддержкой «переносимости» будет полезен для них всех. Мы позволяем студентам использовать «любую систему с современным компилятором C++», при этом непосредственную поддержку мы обеспечиваем только системе, используемой в университете. Большинство студентов использует Windows, но у нас всегда находилось несколько пользователей Mac и Linux.

Мы используем «самодельный» заголовочный файл std_lib_facilities.h. Это может быть не идеальный подход, однако:

Мы очень заинтересованы в том, чтобы не давать студентам просто «магию». Тем не менее фраза «#include «std_lib_facilities.h» позволяет использовать инструменты (facilities) стандартной библиотеки (и чуть позже мы объясним как)» намного меньше похожа на заклинание, чем «компилятор производит исполняемый код».

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

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

Либо другой вариант, который соответствует местным соглашениям. Вам виднее как оформить это правильно в вашем окружении. Я могу лишь предполагать.

В зависимости от того, где вы получили std_lib_facilities.h, как вы сохранили его, а также от вашего компилятора, вы можете получить предупреждение «newline missing at the end of file». По моему мнению это глупое предупреждение. Добавьте пустую строку в конце файла, чтобы компилятор заткнулся.

Я использую расширение .cpp для файлов с кодом и .h для заголовочных файлов. По этому поводу также существуют различающиеся соглашения. Довольно часто можно встретить расширение .cc для кода; в некоторых местах используют .cxx и .C. А некоторые месье (и их инструменты) предпочитают .hh или .H вместо .h. Расширение файлов это тоже соглашение, а не часть языка.

Из наших студентов 60% уже программировали, а 40% еще не видели ни строчки кода. В первые недели мы двигаемся быстро, чтобы выровнять студентов и побыстрее приступить к материалу, который будет новым для всех. Неизменно находятся студенты, которые раньше программировали и поначалу выпендриваются; это может быть испугать настоящих новичков в программировании. Вам нужно убедить обе группы:

Глава 2 Послесловие

Глава 3 Объекты, типы и значения

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

Критически важно, чтобы студенты выполнили задания и несколько упражнений. Студенты, которые раньше программировали, склонны быть слишком заносчивыми и пропускать некоторые новые факты (по сравнению со школой). Мы намеренно используем конструкцию if до официального знакомства с ней в Главе 4: обратите внимание, что это просто новая запись того, что они знают с детского сада. Примерно так же укажите на то, что арифметические операции знакомы всем со средней школы. Инструменты языка программирования это просто непривычная запись идей, которые студенты уже знают. Регулярно указывать на это — важно. Стоит повторять это студентам каждый раз, когда вы разбираете очередной образцовый пример.

Действительно новое тут это присвоение, инициализация и типы.

Заметьте, что многим (особенно тем кто хорошо знает математику) идея последовательного выполнения команд (компьютером) будет неожиданной. Отведите один или два слайда и проговорите программу линию за линией «как компьютер», чтобы все получили общее представление. Это не займет много времени и позволит избежать проблем в будущем. Можете взять слайды 20-21 («присвоение и инкремент»), а также 27 («еще одно простое вычисление»), особенно если у вас риск закончить раньше времени. В Главе 4 будет повторение.

Зачем грузить студентов проблемами типобезопасности на этом этапе? Цель в том, чтобы начать формировать склад ума, учитывающий как технические ограничения, так и ограничения реального мира: наш язык и наши практики это просто способы выражения решения задачи на аппаратных средствах. Железо реально и может навязывать такие ограничения, от которых мы не сможем полностью абстрагироваться. Это курс программирования (разработки программного обеспечения), а не математики и не философии.

Глава 3 Послесловие

Глава 4 Вычисления

Еще раз обратите внимание студентов, что они уже знают управляющие конструкции (if, while, for, switch) из реальной жизни («если загорелся зеленый, переходи улицу») — мы обучаем только другой, более системной нотации.

Важна отсылка к профессионализму с упором на корректность (это хорошо вписывается в тему лекции).

Не углубляйтесь в детали сверх необходимого. Сопротивляйтесь желанию дать исчерпывающую информацию. Пресекайте свои попытки блеснуть экспертизой. Это может быть трудно, потому что студенты будут стараться блестеть своей собственной экспертизой и задавать «вопросы» о возможностях и техниках, которые еще долго не будут упоминаться в классе (и книге). Пожалуйста, отклоняйте такие вопросы. Иначе вы рискуете вступить в отвлеченную дискуссию и в итоге запутать и запугать студентов, которые раньше не программировали. Помните, что первые 10 глав мы должны работать с двумя разными типами слушателей сразу: кто знаком с программированием и кто — нет. Только потом эти группы будут фактически неразличимы. Мой первый профессор Математики в университете на первой лекции сказал: «вы уже видели все это раньше, но мы сделаем это правильно и пойдем дальше, не зевайте!». Если у вас более однородный класс, чем у нас, вам будет проще. Однако наш метод подходит для обеих групп: не пропускайте факты для «опытных программистов» и не замедляйтесь для «полных новичков».

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

Идея о том, что обучение это «сбор чемоданчика полезных инструментов и навыков» — новая для многих студентов и не всегда оценивается по достоинству. Большинство, как правило, посещяют занятия только для получения хороших оценок. Будет полезно время от времени упоминать аргумент с чемоданчиком.

Здесь мы впервые выходим за рамки класических курсов CS. Студенты, как правило, не видели раньше примеров работы с потоками текста. У нас даже были жалобы: «Я изучал C++ два года и вы учите нас тому, чего я не видел раньше!». Это было сказано с нескромным возмущением. Мой ответ был «добро пожаловать в университет». При правильной подаче, студенты, которые до сих пор не видели ни строчки кода, отлично понимают эти примеры. Они прекрасно подходят для «ручного выполнения». Мы рекомендуем ручное выполнение для того, чтобы понять порядок выполнения команд и изменение переменных. Важно растормошить студентов, которые изучали программирование раньше, от их ступора («Я знаю все это; Мне не надо делать задания; Мне не нужно слушать лекции — Я знаю все, что профи могут рассказать мне в ближайшие пару месяцев!»). Эти студенты могут стать лучшими или худшими. Они добьются успеха, если поймут что это уже не школьное программирование и увлекутся им.

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

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

Глава 4. Послесловие

(прим. перев. Номера разделов не очень совпадают)

Глава 5: Ошибки

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

Пожалуйста не пытайтесь учить студентов «всему об исключениях». Это не возможно. Здесь нам нужен простой образец вывода сообщения об ошибке и выхода из программы.

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

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

Глава 5. Послесловие

Глава 6. Написание программы

В ближайших двух главах мы дадим студентам почувствовать вкус настоящей разработки программ.
Мы подразумеваем под этим один из видов решения проблем, поиска решения и постепенного улучшения.
Большинство студентов удивляются как минимум одному из этих приемов. Немногие студенты освоят их все.
Наша цель в том, чтобы донести до студентов мысль о том, что разработка ПО это периодическая модификация старого кода ради увеличения его полезности, правильности и поддерживаемости. Иногда мы не все понимаем о коде, который требуется улучшить — это нормально и ожидаемо.

Мы настоятельно не рекомендуем поощрять следующие две модели процесса разработки:

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

Читайте диаграммы синтаксического анализа снизу вверх. От считывания данных до правила на верхнем уровне.
(прим.перев. В книге разбирается синтаксический анализатор для калькулятора арифметических выражений)

Некоторые студенты (чаще всего с прошлым опытом программирования) будут игнорировать важность структуры кода, будут настойчиво «бежать впереди паровоза» и писать тонну кода не отвлекаясь на «формальности» или «теорию». Попробуйте убедить их что этот подход не масштабируется. Скорее всего поначалу вам не удастся. Настаивайте на том, чтобы эти студенты скрупулезно тестировали любую неструктурированную программу методами из Главы 6 и 7. Рано или поздно до них дойдет ваша мысль.

Обратите внимание, что у нас проскальзывает понятие пользовательского типа — просто потому что он нам нужен. Идею создания и использования собственных типов стоит повторять раз за разом, иллюстрируя ее множеством конкретных примеров. В следующих главах мы еще вернемся к этой фундаментальной идее. Обратите внимание, что мы упоминаем и используем рекурсию. Пожалуйста, не преувеличивайте ценность рекурсии (или итерации); студенты могут подумать, что в ней есть что-то сложное и пугающее. Мы будем разбирать технические детали подробно в Главе 8, а пока рекурсия это название изящного способа организации кода.

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

Если студент обнаружит проблему раньше времени, просто ответьте «спасибо, вы правы. Мы сейчас доберемся до этого».
Не сбивайтесь и не показывайте сразу итоговое решение.

Обратите внимание на опечатку на странице 202-203. При вводе пользователем 4+5+6+7 в программе появляется ошибка в таком виде, который не поможет нам обнаружить ее причину (ранний выход с сообщением об ошибке трудно увидеть потому что окно моментально закрывается).
Ввод 4+5 6+7 может помочь выявить ошибку и подобрать способ ее устранения. Мы не будем прикручивать Token_stream до тех пор, пока мы не почувствуем необходимость возвращать лексемы обратно в поток. Пока мы не разберем это, создание потока лексем будет выглядеть неуместным усложнением. Сначала опишите проблему так, чтобы создание Token_stream выглядело ее решением. (а потом обратите внимание, что «поток с возможностью возврата символов в него» это очень распространенный подход, применимый к различным задачам обработки исходных данных).

Для некоторых студентов важно показать, что програмирование это серия этапов и что ошибка на раннем этапе это не провал. Добиваться того, чтобы каждое мелкое улучшение программы работало с первой попытки — безуспешно и неэффективно. Главное здесь «обратная связь». Мы используем наши инструменты и техники — т.е. компилятор и отладчик — чтобы получить обратную связь о наших первых попытках. Это помогает быстрее двигаться дальше.

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

Глава 6 Послесловие

Глава 7: Завершение программы

В этой главе много времени уделяется структуре и внешнему виду кода; То есть, факторам, которые влияют на понимание и поддерживаемость.
Полезная практика — напоминать студентам, что они будут заниматься поддержкой (может быть собственного кода, через несколько месяцев после того, как они его написали). Разработка полезной программы никогда не заканчивается: ее нужно расширять, исправлять, адаптировать к новым платформам и т.д.

Когда мы занимаемся разработкой ПО, мы можем выполнять множество ролей:

Сопровождение, тестирование и т.п. это не «чья то еще проблема».

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

Глава 7 Послесловие

Глава 8. Технические детали: функции и прочее

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

Постоянно поощряйте студентов описывать и использовать небольшие функции в упражнениях. Очень часто наблюдается «крен» в сторону стиля «одной большой функции» или «пачки функций с глобальными переменными». Идея в том, что функция это базовый блок программирования и что проектирование и именование функций это полезные упражнения, которые нужно выполнять (из под палки инструкторов). Эта же проблема проявляется, если студенты считают глобальные переменные «естественными и простыми» и сопротивляются передаче аргументов (аргументируя это тем, что передача аргументов «запутанно и неэффективно»).

Удивительно, что «неэффективность» того, что вы предлагаете — популярное оправдание каши в коде. Это особенно часто встречается среди «тру гиков», которые программировали в школе (зачастую переоценивая собственные силы потому что раньше были лучше учителя) или зависали на форумах с обсуждением. Им очень трудно донести ценность структурированного кода и логической простоты. А с их лозунгами «Запутанный значит продвинутый» и «низкоуровневый значит эффективный/быстрый» трудно бороться. Я наблюдал студентов, которые были помешаны на эффективности, но при этом компилировали со стандартными настройками. Они очень удивлялись, что по-умолчанию стоит «отладка» и программа выполняется в 25 раз медленнее, чем после оптимизации компилятором. Тот факт, что код можно ускорить в 25 раз не переписывая его (не всегда), заставляет их задуматься. Многие даже не понимают что именно значит эффективность и могут потратить несколько часов вручную оптимизируя фрагмент, который ждет ввода данных от пользователя (используя низкоуровневые функции ввода/вывода, а не iostream). Этой группе студентов можно указать, что эффективность бывает разная (напр. эффективность использования времени студента) и что во многих приложениях на первом месте стоит правильность («если тебе не нужен правильный результат, его можно вычислить с любой желаемой скоростью»). Постарайтесь не отвлекаться на споры об эффективности при всех. Это сбивает с толку, смущает, и студенты могут посчитать, что вы не смогли ответить, потому что они не поняли ваш ответ: старайтесь отвечать просто, иначе для многих студентов все будет только хуже.

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

Глава 8: Послесловие

Глава 9. Технические детали: классы и прочее

Это еще одна глава о «технических деталях» (а не о решении проблем). Многие продвинутые студенты считают ее простой. Однако мы рассмотрим множество проблем дизайна путем постепенного улучшения типа Date.

Обратите внимание студентов на понятиях интерфейса и инварианта (9.4.3). Да, мы преподаем проектирование новичкам и немногие поймут его полностью, но уроки будут повторяться и закрепляться в следующих главах, поэтому будьте непреклонны. Примеры помогут добиться успеха.

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

Подчеркните использование небольших простых функций для упрощения кода и улучшения читаемости (путем логичного именования отдельных частей программы). Избегайте простых геттеров и сеттеров — если get() и set() это лучшее, что вы можете придумать, то используйте структуры.

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

Следующие мои заметки будут скудными. Я предполагаю, что к этому моменту, они не будут так нужны вам. Текст главы и лекция «скажут все за себя».

Глава 9. Послесловие

Глава 10. Потоки ввода/вывода.

У многих студентов еще не сформировалась представление о «данных» (что это множество каких-то записей; не просто пачка переменных). Файлы и большие структуры данных в памяти для них — «магия». Все заблуждения на этот счет нужно искоренить. Эта и следующая глава фокусируются на чтении и записи в файлы. Это не трудно (легче, чем работать с пользовательским вводом/выводом, который тоже будет упомянут), но концепция будет незнакома для многих студентов.

Основы, которые должен усвоить студент:

Независимо от того, какой будет ваша будущая специальность, вам придется решать эти три типа задач — плюс немного графики или GUI (главы 12-16). Это не ограничивается обработкой на ПК: Даже простейший гаджет должен прочитать свои настройки и работать с одним или несколькими потоками данных.

Глава 10. Послесловие

Глава 11. Настройка ввода/вывода

Большая часть «настройки» это утомительные детали. Поощряйте подход «давайте посмотрим что мы вообще можем сделать, чтобы знать что искать в книгах/мануалах/онлайн_документации, когда нам это понадобится». Я настаиваю на том, что большая часть сложностей досталась нам в наследство от соглашений, принятых до распространения компьютеров, напр. использование ( ) для обозначения отрицательных чисел/убытков/дебита и использование запятой вместо десятичной точки (мы не будем показывать как, ищите сами, если надо и вы живете, скажем, в Германии). Этот курс/книга не рассказывает о региональных стандартах.

Проявите инициативу и отговорите обрабатывать исходные данные по принципу «прочитаем все сразу, а потом будем разбираться что там находится». Для простых данных это будет излишняя нагрузка на студента. В главе 23, если вы дойдете настолько далеко, можно найти более полный список рецептов обработки текста, включая регулярные выражения. Не стесняйтесь указывать на это: «Если вам придется обрабатывть более сложные текстовые данные, сначала прочитайте Главу 23; это может сохранить вам много времени. На данном этапе, нам не нужны сложные инструменты».

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *