--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
К счастью, язык C++ имеет основополагающий учебник:
Бьйорн Страуструп, "Язык программирования C++", 3-е издание.
Учить надо по нему и только по нему. Хотя, желательно, предварительно
выучить язык C. По учебнику Кернигана и Ритчи. Хотя бы для того,
чтобы понимать, что это разные языки, хотя их компилируют обычно одним и
тем же компилятором (точнее, большая часть существующих систем
разработки C++ включает компилятор C).
--
16 Окт 06 00:56, Victor Wagner -> "Vlad Naberejnev":
VN>> Здравствуйте, всем! Собираюсь самостоятельно изучать С++
VN>> Знания нулевые. Посоветуйте учебник плиз! Удачи, Влад
VW> К счастью, язык C++ имеет основополагающий учебник:
VW> Бьйорн Страуструп, "Язык программирования C++", 3-е издание.
Садист...
Тяжело в учении, легко в бою.
--
>> Собираюсь самостоятельно изучать С++
>> Знания нулевые.
>> Посоветуйте учебник плиз!
>> Удачи, Влад
>>
Джесс Либеpти, Бедли Джонс
Пятое издание
Издательство SAMS в России Вильямс
Освой самостоятельно С++ за 21 день
ISBN 5-8459-0926-0(pус.)
Книжка класс, мне очень понpавилась.
Но скорее всего, ты C++ не научился, у тебя просто создалось ложное
представление о том, что научился.
--
Vlad Naberejnev wrote:
> Здравствуйте, всем!
> Собираюсь самостоятельно изучать С++
> Знания нулевые.
> Посоветуйте учебник плиз!
Изучить основной синтаксис С++ можно по
любому учебнику в течении нескольких
недель. Естественно, что "тонкости"
применения языка так не освоишь, а
некоторые специалисты по
программированию (Буч вот например)
утверждают, что профессионал
отличается от дилетанта знанием
мелких подробностей.
Я с Бучем спорить не буду, но приведу в
ответ мнение создателя С++
(Страуструпа), что те особенности С++,
которых вы не знаете, не могут помешать
вам при программировании. Другими
словами, язык С++ позволяет
программировать с использованием
"подмножеств" что-ли, т.е. не требует
знания всех 100% тонкостей.
Я все это рассказал к тому, чтобы
убедить, что даже изучив 100%
подробностей языка С++ вы не сможете
начать писать на нем программы (как я
понимаю это ваше желание), а особенно
объектно-ориентированные программы.
Поэтому в части
объектно-ориентированности С++
рекомендую книгу: А. Шаллоуэй, Дж.
Тротт; "Шаблоны проектирования. Новый
подход к объектно-ориентированному
анализу и проектированию."; изд. дом
"Вильямс", 2002.
Таким образом, первым делом изучаем
синтаксис языка С++ (сначала все, что
касается С/С++ необъектно, а потом и
объектных возможностей С++) по любой
книге, затем читаем "Шаблоны
проектирования".
PS: чтобы кто не пугался, что "шаблоны
проектирования" вырабатывают, не дай
бог, шаблонное мышление или что все
программирование сводится к
программированию с помощью "template<>"
конструкций С++.
Еще есть бесплатный текст по С++:
http://grizlyk1.narod.ru/my .Ему уже почти 10 лет, но
он может быть полезен для тех, кто
ничего не знает о том, как написать
именно объектную программу. _Обращаю
особое внимание_, что текст по этой
ссылке не может быть использован как
учебник по стандарту С++ и содержит
ошибки с точки зрения компилятора С++.
К сожалению, это касается исключительно учебных проектов. В которых не
используются нестандартные библиотеки. Как только ты начинаешь делать
реальный проект с использованием сторонних библиотек, или лезешь в чужой
проект, тебе требуется знать как минимум все особенности, которыми
пользовались авторы используемого кода.
--
VW> Как только ты начинаешь делать
VW> реальный проект с использованием
VW> сторонних библиотек, или лезешь в
VW> чужой проект, тебе требуется знать
VW> как минимум все особенности,
VW> которыми пользовались авторы
VW> используемого кода.
Вопрошающий написал, что он
начинающий, значит сперва он будет
использовать только стандартные
библиотеки и его главная трудность
будет состоять в том, чтобы из условий
задачи получить набор классов (если
объектная программа), а не как
реализовать эти классы максимально
эффективно на С++.
Ну, а положа лапу на сердце, надо
признать, что язык С/С++ не лучший язык
для написания легко портируемого и
переносимого кода. На нем теоретически
можно написать легко портируемый код,
если создющий исходники задался такой
целью, но автоматически язык не
обязывает делать так.
Это крайне неправильный подход к жизни. Лучше взять готовый полноценный
проект, которым ты пользуешься, и в котором что-то не устраивает, и
попытаться в нем разобраться и модифицировать. Учиться плавать надо всё
же в море, а не в ванне.
MP> Ну, а положа лапу на сердце, надо признать, что язык С/С++
MP> не лучший язык для написания легко портируемого и
Для начала, нет такого языка C/C++.
Есть два разных языка C и C++.
Первый не имеет конкурентов по части переносимости, но крайне неудобен
для писания на нем чего-либо кроме Hello World. Но пишут, куда ж
деваться - если это единственный способ обеспечить переносимость.
Второй обладает очень большими проблемами с переносимостью, причем не
только с платформы на платформу, но и от одного сопровождающего код к
другому. В силу того что поддерживает множество разнообразных парадигм
программирования. Но зато несколько лучше в смысле написания больших
проектов. Правда, у него есть и большие проблемы с reusability кода.
Опять же из-за многообразия парадигм и инструментальных средств, которые
не всегда совместимы между собой в пределах одного проекта.
MP> переносимого кода. На нем теоретически можно написать
MP> легко портируемый код, если создющий исходники задался
MP> такой целью, но автоматически язык не обязывает делать
Не только "задался такой целью", но и "обладает достаточной
квалификацией, чтобы знать какие грабли ждут его на этом пути".
Написать удобочитаемый код на perl проще, чем переносимымй - на C++.
--
MP> Вопрошающий написал, что он
начинающий, значит сперва он
MP> будет использовать только
стандартные библиотеки
VW> Это крайне неправильный подход к
жизни. Лучше взять готовый полноценный
VW> проект, которым ты пользуешься, и в
котором что-то не устраивает, и
VW> попытаться в нем разобраться и
модифицировать.
Таким образом,
1. если кто-то не имеет еще никаких
проектов, а желает научиться
составлять произвольные программы на
С/С++ (научиться из условий задачи
получать набор классов), то можно
сделать как я предлагал;
2. если же у него уже есть какой-то
полноценный проект, то можно начать
его модифицировать. Но по моему, так
нет ничего хуже, чем ковыряться в чужих
исходниках, особенно не
предназначенных для ковыряния.
VW> Для начала, нет такого языка C/C++.
VW> Есть два разных языка C и C++.
Да, конечно, С++ имеет объекты. Также С++
имеет отличия от С даже в необъектных
свойствах, но эти отличия для вас будут
важны только если вы создаете
компилятор, в обычном случае С и
необъектный С++ настолько похожи, что
нет большого смысла их различать. В
любом случае, под С/С++ я предполагал С++
необъектно/объектно.
Ну что за бред? Проектов с открытыми исходниками, в том числе и на C++
в интернете дохрена. Бери любой, которым ты пользуешься, хоть
Mozilla Firefox, и исправляй в нем то, что тебе не нравится.
Программирование - это как литература. Невозможно стать хорошим писателем, не
прочитав энное количество художественной литературы, не посмотрев как
это люди делают. Невозможно стать хорошим программистом, не почитав
исходных текстов крупных проектов, причем не просто крупных проектов, а
проектов имеющих миллионы пользователей.
--
MP> если кто-то ... желает научиться
MP> составлять произвольные программы
MP> на С/С++ (научиться из условий
MP> задачи получать набор классов),
VW> Ну что за бред?
Хочу заметить VW, что если вы будете
столь эмоциональны, но аргументы в
пользу своей позиции не будете
приводить, то мы собщаться не сможем.
VW> Проектов с открытыми исходниками,
VW> в том числе и на C++ ... дохрена.
Я никак не пойму, вы хотите что сказать,
что "научиться из условий задачи
получать набор классов" вещь совсем
ненужная и может быть легко заменена
на "исправляй в готовом проекте,
которым пользуются миллионы, то, что
тебе не нравится"?
VW> Бери любой, которым ты пользуешься,
хоть
VW> Mozilla Firefox, и исправляй в нем
Прекрасно. Вот у меня есть
практическая задача - восстанавливать
информацию из файлов-архивов, у
которых благодаря CD есть несколько
поврежденных секторов. Как по вашему
следует решать эту задачу с помощью
исправлений в Mozilla Firefox?
VW> Программирование - это как
литература.
VW> Невозможно стать хорошим писателем,
VW> не посмотрев как это люди делают.
Вы вероятно писатель, раз так уверенно
рассуждаете как надо писать книги?
VW> Невозможно стать хорошим
программистом,
VW> не почитав исходных текстов крупных
проектов,
Если это не учебный проект, то
начинающий там ничего не увидит, т.к.
чтобы понять что там зачем надо
заранее знать ответ.
Но может быть вы поклонник разделения
программистов на "умных" (программеров)
и на "тупых" (кодеров)? Я встречал в
инете заявления типа "умные парни для
нас написали уже все, нам осталось
только скопировать". Типа, загадочный и
мистический программер легким
движением руки воздвиг из хаоса
систему классов, которую нам потом всю
жизнь изучать, но так и не понять.
(Хочу сконвертировать в Plucker).
Михаил
ЗЫ. По треду ниже писали, что С++ - громоздкий и плохо переносимый язык.
В чем же его преимущества?
МК
Лучше бумажный купить. Не та это книга, чтобы в метро читать.
Читать желательно рядом с компьютером, чтобы иметь возможность тут же
пробовать.
MNK> ЗЫ. По треду ниже писали, что С++ - громоздкий и плохо
MNK> переносимый язык. В чем же его преимущества?
Преимущество этого языка в том, что он позволяет работать на любом
уровне абстракции - от перестановки битиков до таких вещей как STL-ные
контейнеры и алгоритмы, оставаясь в рамках одного языка.
Это же и основной недостаток, приводящий к громоздкости.
Еще одно преимущество, оно же недостаток - принципиальная
компилируемость. Интерпретатора C++ я не встречал. Преимущество здесь -
гарантированное скрытие исходного текста от пользователя (про
эффективность не надо. Эффективность достигается прикладыванием мозгов,
и средней руки программист на C++ напишет более медленную программу,
чем средний программист на интерпретируемом Perl и Python. За счет того
что у второго в распоряжении примитивы языка или стандартные модули,
которые уже решают наиболее времяемкие части задачи, и они написаны
программистами заметно выше среднего).
Оно же и недостаток.
Переносимость вполне достаточная для большинства практических задач. А
если нужно больше, то решать эту задачу придется всё равно посредством
привлечения специалистов, умеющих писать переносимые программы.
А умеющие - и на C++ напишут переносимо.
--
11 Dec 06 , 14:32 Victor Wagner писал к "Michael N. Kuleshov":
VW> Переносимость вполне достаточная для большинства практических задач. А
VW> если нужно больше, то решать эту задачу придется всё равно посредством
VW> привлечения специалистов, умеющих писать переносимые программы.
VW> А умеющие - и на C++ напишут переносимо.
А при первоначальной постановке задачи "нужна переносимость" и "есть
специалисты" на чем лучше писать?
Переносимость - например, wince/arm, win32/x86, linux/x86, linux/mips
. С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Сектка фидомасонов
На том, что лучше знают эти специалисты.
NAS> Переносимость - например, wince/arm, win32/x86,
NAS> linux/x86, linux/mips
В силу наличия в списке wince С++ оказывается весьма неплохим
вариантом. На этой платформе с интерпретируемыми языками плохо,
поэтому традиционный способ "то что критично по скорости, пишем на C,
остальное на Python/Ruby/Scheme/Tcl" может не прокатить. Впрочем, я по
wince не специалист. Может чего вышеупомянутое туда уже портировали.
--
VW> Переносимость вполне достаточная для большинства практических задач. А
VW> если нужно больше, то решать эту задачу придется всё равно посредством
VW> привлечения специалистов, умеющих писать переносимые программы.
VW> А умеющие - и на C++ напишут переносимо.
NAS> А при первоначальной постановке задачи "нужна переносимость" и "есть
NAS> специалисты" на чем лучше писать?
NAS> Переносимость - например, wince/arm, win32/x86, linux/x86, linux/mips
perl :)
--
john, http://john.kak-sam.to
Привет, john !
13 Dec 06 , 11:21 john gladkih писал к Nickita A Startcev:
VW>> Переносимость вполне достаточная для большинства практических
VW>> задач. А если нужно больше, то решать эту задачу придется всё
VW>> равно посредством привлечения специалистов, умеющих писать
VW>> переносимые программы. А умеющие - и на C++ напишут переносимо.
NAS>> А при первоначальной постановке задачи "нужна переносимость" и
NAS>> "есть специалисты" на чем лучше писать?
NAS>> Переносимость - например, wince/arm, win32/x86, linux/x86,
~~~~~~~~~
NAS>> linux/mips
jg> perl :)
Я подчеркнул.
. С уважением, Hикита.
... Hомеpа нодов в нодлисте pасположены похабно.
VW> Переносимость вполне достаточная для большинства практических
VW> задач. А если нужно больше, то решать эту задачу придется всё
VW> равно посредством привлечения специалистов, умеющих писать
VW> переносимые программы. А умеющие - и на C++ напишут переносимо.
NAS> А при первоначальной постановке задачи "нужна переносимость" и
NAS> "есть специалисты" на чем лучше писать?
NAS> Переносимость - например, wince/arm, win32/x86, linux/x86,
NAS> ~~~~~~~~~
NAS> linux/mips
jg> perl :)
NAS> Я подчеркнул.
сомневаюсь что его там нет
--
john, http://john.kak-sam.to
VW> Еще одно преимущество, оно же недостаток - принципиальная
VW> компилируемость. Интерпретатора C++ я не встречал.
http://root.cern.ch/twiki/bin/view/ROOT/CINT
ЕМHИП, он и в дистрибутиве Debian был когда-то, сейчас почему-то нет.
Тимур.