Ответ
Мой путь в программировании начался со школьного курса Pascal, но настоящая глубина пришла с изучением C и C++.
Начальный этап (университет):
- Базовый C: По книгам Кернигана и Ритчи «Язык программирования C» и «Современный C++» Страуструпа. Много времени уделял пониманию указателей, управления памятью и препроцессора.
- Алгоритмы и структуры данных: Реализовывал свои версии контейнеров на C++:
// Учебная реализация вектора template<typename T> class SimpleVector { T* data = nullptr; size_t sz = 0; size_t cap = 0; void reallocate(size_t new_cap) { T* new_data = static_cast<T*>(::operator new(new_cap * sizeof(T))); for (size_t i = 0; i < sz; ++i) { new (new_data + i) T(std::move(data[i])); // Placement new data[i].~T(); } ::operator delete(data); data = new_data; cap = new_cap; } public: void push_back(const T& value) { if (sz >= cap) reallocate(cap ? cap * 2 : 1); new (data + sz) T(value); // Конструирование на месте ++sz; } ~SimpleVector() { for (size_t i = 0; i < sz; ++i) data[i].~T(); ::operator delete(data); } };
Углубление и специализация:
- Современный C++: Изучал новые стандарты (C++11/14/17/20) через онлайн-курсы, конференции (CppCon, Meeting C++) и эксперименты. Например, разбирался с move-семантикой, perfect forwarding и концептами.
- Системное программирование: Писал небольшие утилиты под Linux, работал с системными вызовами, сетевыми сокетами (BSD API), изучал устройство компилятора (GCC/Clang) и линкера.
- Индустриальная практика: Работа над коммерческими проектами научила меня использовать инструменты (gdb, Valgrind, sanitizers), писать поддерживаемый код и работать с legacy codebase.
Сейчас я продолжаю углублять знания, следя за развитием стандарта C++, изучая смежные области (компиляторостроение, высокопроизводительные вычисления) и внося вклад в open-source проекты на C++.
Ответ 18+ 🔞
А, ну слушай, вот как оно было, ебать мои старые костыли. Началось всё, как у всех, со школьного Паскаля. Но это так, мартышлюшка, детский сад. Настоящий пиздец, в хорошем смысле, начался, когда в универе в руки попались C и C++.
Этап первый, студенческий:
- Базовый C: Сидел, блядь, над книжками Кернигана с Ритчи и Страуструпа, пока глаза не вытекали. Указатели, управление памятью, препроцессор — вот эта вся жесть. Поначалу нихуя не понимал, честно. Голова квадратная была, но прорвался.
- Алгоритмы и структуры: Ну тут вообще, ёперный театр. Заставляли свои контейнеры писать на плюсах. Сидишь, вот такой хуй в пальто, и думаешь, как бы эту хрень с памятью не проебать. Вот типа такого кода наваяешь, и волнение ебать, запустится или нет:
// Учебная реализация вектора
template<typename T>
class SimpleVector {
T* data = nullptr;
size_t sz = 0;
size_t cap = 0;
void reallocate(size_t new_cap) {
T* new_data = static_cast<T*>(::operator new(new_cap * sizeof(T)));
for (size_t i = 0; i < sz; ++i) {
new (new_data + i) T(std::move(data[i])); // Placement new
data[i].~T();
}
::operator delete(data);
data = new_data;
cap = new_cap;
}
public:
void push_back(const T& value) {
if (sz >= cap) reallocate(cap ? cap * 2 : 1);
new (data + sz) T(value); // Конструирование на месте
++sz;
}
~SimpleVector() {
for (size_t i = 0; i < sz; ++i) data[i].~T();
::operator delete(data);
}
};
И смотришь на этот placement new и явный вызов деструктора, и думаешь — ну пидарас шерстяной, кто это вообще придумал? Но зато потом понимаешь, как всё под капотом работает, и уже не так страшно.
Этап второй, погружение:
- Современный C++: Тут понеслось. C++11, 14, 17, 20... Move-семантика, perfect forwarding, концепты. Читаешь про
std::move, а в голове сначала: «чё за хуйня?». Потом вроде сходится, пишешь, а оно не компилируется — и снова ёклмн. Но когда разобрался — красота же, чувак. - Системное программирование: Под Линуксом начал ковырять. Системные вызовы, сокеты, компиляторы GCC/Clang. Тут уже не просто код, а прям с железом общаешься. Ощущение, будто из кабины трактора пересел в кабину истребителя. Мощно, но и ответственности — овердохуища.
- Работа: Ну а потом попал на реальный проект. Вот тут-то и началось. Наследие какое-нибудь, код, который писал какой-то хитрая жопа лет десять назад. Отладчик
gdb,Valgrind— лучшие друзья. Учишься не просто писать, а писать так, чтобы через полгода самому не захотелось глаза себе вилкой выколоть.
Сейчас, бля, вроде уже не ламер, но и не гуру. Стандарт развивается, open-source проекты есть, куда можно заглянуть. В общем, путь такой: сначала нихуя не понял, потом вроде что-то понял, а потом осознал, что нихуя не понял, но уже на другом уровне. Как-то так.