[Рекомендация] Отличная книжка по С++
Прочтение этой книжки заставило меня поменять свое отрицательное мнение о С++. Автор без страха и смущения раскрывает самые тонкие детали языка, не жалеет слов, оставаясь при этом лаконичным, не скатывается в занудство и формализм.
начиная с какого-то момента становится практически без разницы на чем писать (есть какие-то предпочтения и странности конкретного языка) и основными сложностями становятся алгоритмы, архитектура и разборки в 3rd-party API
PS "на чем писать" - имеются в виду более-менее высокоуровневые языки общего назначения: C#, Java, C++, D, PHP, JS
Нет, не согласен, разница в сложности огромна! На PHP может читать и писать даже школьник, на Java — студент, на Scalа и Haskell — лицо с высшим образованием, а на С++ — многоопытный программист, который имеет обширные знания в низкоуровневой системной области.
начиная с какого-то момента становится практически без разницы на чем писатьНастоящий программист может писать на FORTRAN-е на любом языке!
архитектураА что это?
Такое ощущение, что только учишься создавать программные системы.
На PHP может читать и писать даже школьник, на Java — студент, на Scalа и Haskell — лицо с высшим образованием, а на С++ — многоопытный программист, который имеет обширные знания в низкоуровневой системной области.в наше время все студенты писали на C++ , эх, развратили джавой современных студентов
в наше время все студенты писали на C++Тоже писал на С++, когда был студентом. Но на своем опыте убедился, что чрезмерная сложность этого языка может вызвать у студента отвращение от программирования вообще. Думаю, во время обучения лучше все-таки идти от простого к сложному, от Java (или Haskell) к С++, чтобы сначала освоить главное — проектирование, рефакторинг, мышление в терминах предметной области, навык выражения решения задачи в терминах ООП или ФП, а затем уже копаться в сложных и многообразных низкоуровневых деталях, которыми занят С++.
На лиспе еще.
начиная с какого-то момента становится практически без разницы на чем писатьможет быть без разницы в том плане, что задачу ты хоть как-то сможешь решить на любом из перечисленных языков. однако уверен, что решение будет черезжопным для данного языка.
универсальные хорошие программисты - это миф.
а на С++ — многоопытный программист, который имеет обширные знания в низкоуровневой системной областиМногоопытный программист, который имеет обширные знания в низкоуровневой системной области, к C++ не притронется даже под угрозой увольнения.
может быть без разницы в том плане, что задачу ты хоть как-то сможешь решить на любом из перечисленных языков. однако уверен, что решение будет черезжопным для данного языка.ну ок
просто по своему опыту:
20% времени уходит на административный аспект (проверить трекер, посмотреть последние изменения в гите, пообщаться по поводу текущих задач команды, раздать задания, проверить выполненные)
40% времени уходит на разработку без кода (проектирование классов, уточнение требований, исследование)
20% времени уходит на написание кода не на основном языке (GLSL, JS, внутренний скриптовый язык)
и остальные 20% времени уходит собственно на написание кода на C++, при этом C++ - основной язык разарботки и доля кода на нем >90%
для себя вижу, что если бы фреймворк на котором все строится работал бы на C#, Java или JS, то мне было бы по большому счету наплевать (тому же C# я бы даже порадовался, т.к. полноценный Entity System Framework на С++ это та еще шаблонная магия)
язык влияет на разработку (у каждого свои особенности и сложности но большая часть разработки вообще практически независима от языка
PS я работаю в геймдеве, поэтому все, что выше - ИМХО
40% времени уходит на разработку без кода (проектирование классов, уточнение требований, исследование)Не по скраму!
Не по скраму!
на хую вертел чьи-то представления о скраме
Фу!
к C++ не притронется даже под угрозой увольнения.... а нахуячит всё по-быстрому на си с полусотней глобальных переменных.
без кода (проектирование классовкак ты это делаешь без кода?
Многоопытный программист, который имеет обширные знания в низкоуровневой системной области, к C++ не притронется даже под угрозой увольнения.Да, С++ страшен.
Например, кто сможет сразу увидеть ошибку в следующем коде?
#include <iostream>
#include <cmath>
using namespace std;
struct point{
double x;
double y;
};
double distance(point a, point b);
inline double sqr(double x){ return x * x; }
int main {
cout << "Координаты первой точки: " << endl;
point a;
cin >> a.x >> a.y;
cout << "Координаты второй точки: " << endl;
point b;
cin >> b.x >> b.y;
cout << "Расстояние: " << distance(a, b) << endl;
return 0;
}
double distance(point a, point b){
return sqrt( sqr(a.x - b.x) + sqr(a.y - b.y) );
}
Думаю, за такие "фокусы" многие не любят С++
using namespace std;
Точно! Кажется, происходит наложение одинаковых имен distance.
как ты это делаешь без кода?с помощью псевдокода и UML
с помощью псевдокода и UMLМакконнелл одобряе!
Думаю, за такие "фокусы" многие не любят С++не за такие. Возьми вон Питон, который все любят (sic! и напиши функцию с тем же именем, что и стандартная. Тут тебе хотя бы на стадии компиляции плюнулись, а там словил бы грабли поинтереснее.
И совершенно неясно, чего ты вообще ожидал от этого кода. Ну да, если нихуя не знать, чем пользуешься (а using namespace std; внедряет конкретную такую кучу символов то как бэ чего ожидать? И неважно, что за язык.
Короче, чувак, тебе бы поучиться сперва, набраться опыта, а потом уже высказывать свои мнения. Какой смысл от того, что ты, окунув мизинец в познание плюсов, делаешь какие-то заключения? Это не продуктивно.
Возьми вон Питон, который все любят (sic! и напиши функцию с тем же именем, что и стандартная.И получи тут же "shadows built-in with the same name" от пайчарма.
Ну и вообще, не знаю, зачем ты это написал. А если не builtin перекрыть, а что-нибудь из доморощенного? Легче будет?
И я не гуру питона, но там все, что в стандартной библиотеке, builtin, или есть просто функции, которые можно импортнуть с каким-нибудь модулем, а потом перекрыть?
btw, читать код плюсовый, где не используется using вообще - это то еще удовольствие, в глазах рябит от std::
Я на этом не настаиваю. Вообще, тут аналогия полная, в питоне тоже можно from smth import * делать, а можно и не делать. Я о том, что надо знать, чем пользуешься. Я в cpp обычно делаю using namespace std;, в h-файлах не делаю.
И совершенно неясно, чего ты вообще ожидал от этого кода.Ожидал более интеллектуального поведения компилятора, ожидал, что имя моей сущности перекроет имя библиотечной сущности (о которой я вообще могу не знать!) в случае совпадения их имен, то есть, например, как это происходит в Java-е:
...
import javax.mail.Session; // или import javax.mail.*;
...
private class Session{...} // моя сущность
private boolean sendMessage(...){
...
Properties props = new Properties;
props.put("mail.smtp.host", host );
props.put("mail.smtp.port", port );
Session session = Session.getInstance( props ); // ОШИБКА! Здесь Session -- мой класс, а не javax.mail.Session
...
}
Ради тренировки пытался подключить OpenCV. Заголовочные файлы библиотеки Eclipse находит и все компилируется, но при запуске программы выдается сообщение: "Ошибка при инициализации приложения".
А в случае подключения Boost в установочном комплекте вообще отсутствуют какие-либо dll, там одни только заголовочные файлы и документация, даже файлов с исходным кодом нет! В общем, беда. При этом гугл выдает ссылки на крайне заумные пространные ответы, которые претендуют на решение этой казалось бы тривиальной задачи.
btw, читать код плюсовый, где не используется using вообще - это то еще удовольствие, в глазах рябит от std::Никто же не мешает пользоваться using std::vector;
А using namespace аналог import * ни то ни другое не приветсвуется.
А в случае подключения Boost в установочном комплекте вообще отсутствуют какие-либо dll, там одни только заголовочные файлы и документация, даже файлов с исходным кодом нет!буст — это только хедеры, там больше ничего и нет.
буст — это только хедеры, там больше ничего и нетСпасибо за уточнение! Так и предполагал.
Но все-таки как можно получить конкретные dll, исходный код и вообще скомпилировать проект, использующий библиотеки boost? Неужели гуглить в поисках бинарника для нужной части boost-а?
Но все-таки как можно получить конкретные dll, исходный код и вообще скомпилировать проект, использующий библиотеки boost? Неужели гуглить в поисках бинарника для нужной части boost-а?все, что есть буст, — это хедеры. Это вся его реализация, ничего больше к нему не нужно и ничего больше нет. Нет никаких «бинарников для нужной части boost-а».
Ну если быть точным, то есть части буста, требующие вполне себе сборки и линковки с ними. Некоторые из них, как по мне, довольно-таки существенные.
я знал, что кто-то напишет. Но это переусложнение судя по вопросу ТС.
Программа компилируется из заголовочных файлов Boost-а очень долго, со списком предупреждений, так что поначалу можно подумать, что ничего не работает и уже не дождаться окончания этого процесса:
#include <boost/math/special_functions/zeta.hpp>
inline double sqr(double x){ return x * x; }
int main {
using namespace boost::math;
const double pi = constants :: pi<double>
double result = zeta(2.0);
std::cout << sqr(pi) / result << std::endl;
return 0;
}
Чтобы это заработало, для пользователей Eclipse CDT + MinGW достаточно добавить в раздел
Свойства проекта / C/C++Build / Settings / С++Compiler / Includes путь к папке, где находится Boost.
Ожидал более интеллектуального поведения компилятора, ожидал, что имя моей сущности перекроет имя библиотечной сущности (о которой я вообще могу не знать!) в случае совпадения их именты уверен, что это более интеллектуальное поведение?
Ожидал более интеллектуального поведения компилятора, ожидал, что имя моей сущности перекроет имя библиотечной сущности (о которой я вообще могу не знать!) в случае совпадения их имен
------------------------------------------------------------
ты уверен, что это более интеллектуальное поведение?
Почему нет? Более привычное поведение для перешедших с Java на С++ — точно.
ты уверен, что это более интеллектуальное поведение?Более православное.
привычноепривычное не равно интеллектуальное же
не, может и более интеллектуальное, я не знаю, только это надо обосновать как-то по-другому, нежели "более привычное для тех, кто перешел с Java"
Более привычное поведение для перешедших с Java на С++ — точно.блять чувак да ч0 за хуйня? более привычное для перешедших с Java? Отправь машину времени в 83й, чтобы там страуструпу рассказали о проблемах Java-хомячков в будущем. Ну хуй с ним с программированием, но простые-то вещи можно же одуплять.
Вы так говорите, потому что душой Вашей и сознанием овладели завистливые бесы.
using std::map;
using std::cout;
и т. д.
Оставить комментарий
nikola1956
Читается легко. За три дня осилил почти половину, около 500 стр. Книга хорошо переведена (что, думаю, является редкостью для компьютерной литературы) и написана очень обстоятельно.
Из всей литературы по языку С++, которую я смог просмотреть в интернете и книжных магазинах, эта книга мне показалась самой продуманной и качественной.