LinuxForum.Fans
Тема

Скажите что лучше почитать для начинающих (С, С++)

Автор: T0PT 68 сообщений 51895 просмотров 📌 закреплена
04.12.2010 11:41 · отредактировано #104308

Привет
Скажите что луче почитать для начинающих программеров с/с++ под lin
Спасибо

пишите пожалуйста по-русски.

04.12.2010 11:54 #104311

K&R

04.12.2010 12:51 #104328

drBatty написал:
K&R
oO
а если совсем начинающий.. wink
04.12.2010 13:46 #104351
T0PT написал:
Привет
Скажите что луче почитать для начинающих программеров с/с++ под lin
Спасибо

пишите пожалуйста по-русски.

Рекомендую начать с Lazarus. Аргументы - освоите не один ЯП, научитесь не делать "детских ошибок"(паскаль этому быстро учит), ну, и наконец, первая программа за секунды! Потом на Qt Creator.

04.12.2010 13:50 · отредактировано #104355

со всего что получилось это где-то на этом форуме нашол как вывести на екран hello )
я пытаюсь писать по русски, извинитие

04.12.2010 14:07 #104358
T0PT написал:
со всего что получилось это где-то на этом форуме нашол как вывести на екран hello

это уже немало.
вот посмотрите: http://ru.wikipedia.org/wiki/Язык_программирования_Си_(книга)
прямую ссылку не даю, т.к. сомневаюсь в легальности, но с помощью гугла легко находится русский перевод.

Sidor_Luty написал:
ну, и наконец, первая программа за секунды! Потом на Qt Creator.

смысл изучать паскаль, а потом С? Не проще-ли сразу заняться С?

04.12.2010 14:22 #104361

Присоединяюсь к хору мартовских котов.

Читайте классику: Керниган & Ритчи. Это по Си.
Что касаемо Си++, то я Вам пока бы не советовал его даже смотреть. И вот почему.

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

По Си++ лучше всего, опять же, -- классика: Бьянр Страуструп.

Сейчас книжек полно по языкам программирования. Можно Шильдта прикупить.

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

На состав библиотек в свою очередь влияет среда. А еще более точно -- операционная система. Но есть стандартные библиотеки, например, -- стандартная библиотека ввода-вывода. Она что для ДОС, что для ВыньДОС, что для Линуха -- одна и та же. Ну, конечно, немного разная. Но на 99% это одни и те же функции, один и тот же подход. Библиотеки консольного ввода вывода для ДОС и для Линуха -- разные. Для Венды -- вообще отсутствует!

Т.е. я к чему это все говорю, если Вам нужно прокачать язык, то берите книку-классику. Не ошибетесь -- точно! Если Вас тянет писать Си-шные проги под Линух, то книжка авторов Нейл Мэтью и Ричардс Стоунс "Основы программирования в Linux" (красная такая, толстая) -- самое то!

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

Удачи!

04.12.2010 17:05 #104395

T0PT написал:
[quote=drBatty]K&R
oO
а если совсем начинающий.. wink[/quote]
C++ для чайников.
04.12.2010 17:32 #104402

По С - К&R,

по С++ - тут сложнее, поскольку все переводы безобразны,

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

Наконец приехало

Bjarne Stroustrup
Programming Principles and Practice Using C++.
2009

...и всё пошло на лад.

Так что насчёт "на-русском" - это только себе жизнь усложнять, имхо, естессна :rolleyes:

04.12.2010 18:34 #104415

могу посоветовать Объектно-ориентированное программирование в C++ - Р. Лафоре ... просто и достаточно понятно... от Страуструпа вас я думаю прибьет если вооще не знакомы с с++

[offtop] и пожалуйста не беритесь за Qt пока хоть немного не разберетесь с с++ [/offtop]

05.12.2010 01:40 #104495

drBatty,
Не в курсах, о чем. Я бы вновь родившимся программерам посоветовал (если под линуксом) писать на QML

05.12.2010 11:52 #104564

Уважаемые форумчане, просьба писать по теме, и воздержаться от споров и прочего. Тема у нас что лучше почитать для начинающих (С, С++).

PS: некоторые сообщения не имеющие отношения к теме были удалены. Холивар можно начать в другой теме. Только пожалуйста без перехода на личности.

С уважением, модератор.

05.12.2010 18:08 #104709
odin написал:
могу посоветовать Объектно-ориентированное программирование в C++ - Р. Лафоре ... просто и достаточно понятно... от Страуструпа вас я думаю прибьет если вооще не знакомы с с++

[offtop] и пожалуйста не беритесь за Qt пока хоть немного не разберетесь с с++ [/offtop]

согласен абсолютно! только так и только в такой последовательности

05.12.2010 18:24 #104714

очень хорошую книгу видел
Х. М. Дейтел, П. Дж. Дейтел IV издание 2009
"Как программировать на С"
в данной книге есть введение в C++
советую начать с неё

05.12.2010 18:25 #104716

Господа программеры! Все зависит от задачи. Иногда и питон рулит

05.12.2010 18:29 #104718

Я начинал с книги Кернигана и Пайка

06.12.2010 09:35 #104883

Спасибо всем
Думаю для начала достаточно

07.12.2010 23:17 #105416

Разрешите продолжить тему, чтобы не плодить топики. Я заканчиваю читать книгу Дейтела и Дейтела "Как программировать на С". И, естественно, задумался что читать дальше. Хочу писать программы под Linux для собственных нужд, а со временем может и поучаствовать в разработке более серьёзного ПО. Хотелось бы получить совет на чём сконцентрироваться С или С++, какую литературу почитать в связи с этим.

08.12.2010 00:47 #105432

для собственных нужд вше крыши хватит С.

С++ нужен для больших проектов. Для проектов, над которыми трудится не один человек.

В маленьких проектах, вы используете очень небольшое количество каких-то ваших сущностей (ну, объектов того физического мира, которые вы обрабатываете), поэтому вы не церемонитесь с этими сущностями и ставите им в эквивалент стандартные типы языка С -- целые, числа, числа с плавающей точкой, ну и т.д. Когда сущности очень сильно связаны друг с другом, например, имя и фамилия, то вы можете их объединять в агрегатные модули, которые в языке С называются -- структуры. Ну и далее вы работаете с этими структурами, как неделимыми сущностями. Хотя, если потребуется, вы можете из структур достать составляющие их элементы. В общем, используя С вы в основном опираетесь на те типы данных и используете те операции с данными, которые вам предоставляет язык. Когда вам будет не хватать встроенных в язык типов данных и вы захотите расширить (добавить свои) типы, вы прибегаете к структурам. Когда же вам станет не хватать операций с данными, а с вашими типами данных -- вообще нет встроенных в язык операций (и в самом деле! Ну откуда языку знать, какие операции допустимы с вашими типами данных?), -- вы будете использовать свои функции. Ну допустим, вам нужно из структуры, в которой имеются три поля -- фамилия, имя, отчество, -- сформировать упрощенное представление -- "фио", т.е. фамилия + инициалы, написанные через точку. Понятно, что встроенной в язык такой функциональности нет. Вы будете писать свою функцию.

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

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

Так вот, чем хороши классы. Классы -- это только тип. Это не переменная. Эквивалентом класса можно назвать тип "целого числа". А вот конкретная реализация класса -- это уже переменная. Эквивалент для облегчения понимания -- переменная А типа "целого". Переменная myFIO класса FIO_voobshe. FIO_voobshe -- это только тип. Тип знает как работать со своими данными (это прописывается в методах), но не имеет конкретного значения и не размещается в памяти переменных. Это как int -- да, мы знаем, что есть такой тип. Ну и что? В нашей программе мы не используем ни одной переменной этого типа. Но он существует в природе. И когда нам понадобится, мы создадим переменную этого типа, дадим ей имя и будем как-то использовать. Набор операций встроен в язык. Если потребуется что-то большее, нам придется писать свои функции.

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

Понимаете суть? Так вот, когда ваша программа (точнее -- проект) разрастается на столько, что у вас уже мозгов нехватает чтобы все тонкости держать в голове, вы будете вынуждены уходить вверх, выше на еще один уровень абстракции. Вы изобретает свои типы, наделяете их способностью что-то хранить, наделяете способностью это сто-то как-то обрабатывать. Вы содаете свою так сказать расширенную вселенную со своими тварями. Когда ваши твари станут жизнеспособны, вы можете забыть о их точной (детальной реализации). Вам нужно будет только знать, что в вашей вселенной существуют люди, зайце-кролики и кто-то там еще. Теперь вы на этом уровне абстракции пишите функциональность -- т.е. описываете то, что должна делать ваша прога. Вы сосредотачиваетесь на бизнес-логике не вдаваясь в детали как устроены ваши "кирпичики" (классы).

Вот, а теперь, когда вы немножко увидели разность задач, на которые рассчитаны С и С++, вы можете сделать вывод, что вам интереснее. Самое забавное, что С и С++ очень сильно перекрывают друг друга. На С в принципе можно писать и большие сложные программы, но это уже будет несколько мучительнее, чем если бы вы писали их на С++. И наоборот, на С++ можно стругать и небольшие задачки. Но это уже будет как "из пушки по воробьям".

Я прошу, людей, которые, пишут на С и на С++ не начинать разговор с исключений. Пусть я немного где-то и соврал, но если мы начнем с изучения исключений, то потеряем логику и ничего не поймем. Исключения и и ваши противоречия понадобятся тогда, когда будет понята основная мысль. Но если сразу вывалить свое несогласие, то все опять свалится в всеобщий срач и будет походить на очередное партсобрание ворон на помойке. Если вам есть что возразить, пишите в ЛС.

Спасибо, что прочитали.

08.12.2010 09:53 · отредактировано #105458

Спасибо, zhevak, за подробный, развернутый ответ. Теперь я лучше понял различия си и си++. Что посоветуете почитать по си++, учитывая то что я уже прочел?

Войдите или зарегистрируйтесь, чтобы ответить.