Physics.Math.Code
154K subscribers
5.22K photos
2.19K videos
5.81K files
4.55K links
VK: vk.com/physics_math
Чат инженеров: @math_code
Учебные фильмы: @maths_lib
Репетитор IT mentor: @mentor_it
YouTube: youtube.com/c/PhysicsMathCode

Обратная связь: @physicist_i
Download Telegram
📚 Подборка книг «Классика Computer Science» (26 книг + CD) [2002-2016]

💾 Скачать книги

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

Серия книг «Классика Computer Science» — это систематизированная библиотека знаний, формирующая инженерное мышление. Изучение этих трудов — это про в собственную архитектурную грамотность и способность решать нетривиальные задачи. Вопрос даже не в том, стоит ли их читать, а в том, в какой последовательности это делать для максимальной эффективности. Рекомендуемая последовательность чтения, если брать 4 базовые книги для разработчика:

📙 1. «Современный компилятор на C» (Аппель) / «Компиляторы: принципы, технологии и инструменты» (Ахо, Ульман, Лам)
Зачем: Понимание процессов компиляции и статического анализа — это основа основ. Даже если вы не пишете компилятор, эти знания незаменимы для работы с препроцессорами, линтерами, транспайлерами и понимания того, как код становится программой.

📙 2. «Компьютерные сети: нисходящий подход» (Куроуз, Росс)
Зачем: Любая современная система — это распределенная система. Глубокое понимание стека протоколов, от HTTP до TCP/IP, — обязательное условие для создания эффективных, надежных и безопасных сетевых приложений.

📙 3. «Современные операционные системы» (Таненбаум)

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

📙 4. «Глубокая классика» (по выбору, в зависимости от специализации):
— Для системных/highload-разработчиков: «Введение в алгоритмы» (Кормен, Лейзерсон, Ривест, Штайн). Алгоритмическая грамотность — это язык, на котором говорят о сложности и эффективности.
— Для разработчиков СУБД и всех, кто работает с данными: «Базы данных. Проектирование, реализация и сопровождение. Теория и практика» (Коннолли, Бегг). Понимание внутреннего устройства СУБД на порядок повышает качество работы с данными.

☕️ Кто захочет задонать на кофе: ВТБ: +79616572047 (СБП)

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

Этот путь требует дисциплины и времени. Результат — не сиюминутный хак, а формирование той самой «кремниевой прочности», которая отличает инженера от кодера.
#cpp #java #cs #алгоритмы #сети #cplusplus #подборка_книг #IT #разработка

💡 Physics.Math.Code // @physics_lib
52👍39🔥223🥰3❤‍🔥2😍2
📚_Подборка_книг_«Классика_Computer_Science»_26_книг_+_CD_2002_2016.zip
1.4 GB
📚 Подборка книг «Классика Computer Science» (26 книг + CD) [2002-2016]

Сборник книг серии "Классика Computer Science" на тему – компьютеры, программирование, операционные системы, базы данных. Серия книг«Классика computer science», предназначенных для базовой подготовки специалистов в области компьютерных наук.

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

📔 Лафоре Р. - Объектно-ориентированное программирование C++. 4-е изд. 2004
📕Архитектура компьютера [2013] Э. Таненбаум, Т. Остин
📗Брауде Э. - Технология разработки программного обеспечения. 2004
📘Вахалия Ю. - UNIX изнутри. 2003
📙Кельтон В., Лоу А. - Имитационное моделирование. Классика CS. 3-е изд. 2004
📓Клейнберг Дж., Тардос Е. - Алгоритмы. Разработка и применение. 2016
📒 Компьютерные сети [2012] Эндрю Таненбаум, Дэвид Уэзеролл
📔 Константайн Л., Локвуд Л. - Разработка программного обеспечения. 2004
📕 Коплиен Дж. - Программирование на С++ 2005
📗 Кренке Д. - Теория и практика построения баз данных. 8-е изд. 2003
📘 Лафоре Р. - Структуры данных и алгоритмы JAVA. 2-е изд. 2012
📙 Марк Руссинович - Внутреннее устройство Windows, 7-е изд 2018
📓 Паттерсон Д., Хеннеси Дж. - Архитектура компьютеров и проектирование компьютерных систем. 4-е изд. 2012
📒 Пратт Т., Зелковиц М. - Языки программирования. Разработка и реализация 2002

#cpp #java #cs #алгоритмы #сети #cplusplus #подборка_книг #IT #разработка

💡 Physics.Math.Code // @physics_lib
1👍90🔥3530🥰4🙈2🤩1
🧩 Задача на C++: "Таинственная конкатенация"

🖥 Что выведет следующая программа? Будьте внимательны!
#include <iostream>
#define MERGE(a, b) a ## b

int main() {
const char* result1 = MERGE("Hello, ", "World!");
const char* result2 = MERGE("Hello, ", "World" "!");

std::cout << result1 << std::endl;
std::cout << result2 << std::endl;
return 0;
}

Варианты:
1. Обе строки выведут "Hello, World!"
2. Ошибка компиляции
3. Первая выведет мусор, вторая — "Hello, World!"
4. Первая вызовет ошибку, вторая скомпилируется
Задумайтесь на минутку, прежде чем запускать код...

🔍 Разбор проблемы
Правильный ответ: 2 (Ошибка компиляции) или, если точнее, ошибка возникнет уже на строке с result1.
🖥 Код с решением и комментариями:
#include <iostream>
#define MERGE(a, b) a ## b

int main() {
// Эта строка НЕ скомпилируется:
// const char* result1 = MERGE("Hello, ", "World!");
// После раскрытия макроса получим: "Hello, ""World!"
// Это два отдельных строковых литерала без оператора конкатенации

// А вот эта строка скомпилируется и выведет "Hello, World!":
const char* result2 = MERGE("Hello, ", "World" "!");
// После раскрытия макроса получим: "Hello, ""World""!"
// А благодаря фазе трансляции, соседние строковые литералы
// сливаются в один: "Hello, World!!"

// Правильный способ через макрос:
const char* result3 = "Hello, " "World!";

std::cout << result2 << std::endl; // Выведет: Hello, World!!
std::cout << result3 << std::endl; // Выведет: Hello, World!
return 0;
}

📚 Малоизвестный факт:
В C++ есть специальная фаза трансляции, где соседние строковые литералы объединяются в один. Например:
const char* s = "Hello, " "World!"; // Эквивалентно "Hello, World!"
Но этот процесс происходит до раскрытия макросов, поэтому MERGE("Hello, ", "World!") не работает как ожидается.

Ключевые моменты:
1. Оператор ## в макросах выполняет сращивание токенов, а не строк
2. Строковые литералы автоматически конкатенируются на фазе трансляции
3. Макросы раскрываются на более поздней фазе, когда уже слишком поздно для "правильной" конкатенации строк

Будьте осторожны с оператором ## при работе со строковыми литералами! Для их конкатенации лучше использовать обычное расположение рядом или constexpr функции в современном C++.

Чем токен отличается от строки?

1. Токен (в контексте препроцессора C++) — это минимальная единица текста программы, которую распознает препроцессор (
int, main, (, ), {, "Hello", 123, +, ; )
Препроцессор работает именно на уровне токенов. Оператор ## сращивает именно токены, а не их значение

2. Строковый литерал — это конкретный тип токена, который представляет строку в кавычках. Пример: "Hello" — это один токен типа "строковый литерал"


Ещё по теме: Задачки по программированию для наших подписчиков [ C/C++ ]

#C #cpp #cplusplus #программирование #задачи

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
39👍15🤷‍♂14🤯6🔥4👾4👏1👻1