Так себе программист
98 subscribers
185 photos
7 videos
1 file
183 links
Меня зовут Александр Троценко. Разработчик, преподаватель, к.т.н. Пишу о программировании и профессии.

10 лет в разработке desktop на C/С++

Контент: https://taplink.cc/atrotsenko
Download Telegram
#include <iostream>

class Base
{
public:
virtual void print( double x )
{
std::cout << "Base: " << x;
}
};

class Derived : public Base
{
public:
void print( float x ) override
{
std::cout << "Derived: " << x;
}
};

int main()
{
Derived a;
a.print(10);
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
14%
Base: 10
46%
Derived: 10
11%
Base: 10Derived: 10
29%
Никакой. Ошибка компиляции
Практика ООП на C++: Абстракции, классы, наследование

Записал ребятам видео на проектный семинар в университете. Рассматриваем объектно-ориентированное программирование на C++ на примере создания классов и их наследовании, работаем с абстракциями и интерфейсами.

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

Об этом же когда-то говорил физиолог Павлов:

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


📱 YouTube | 📱 ВКонтакте
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
#include <iostream>

int main(int argc, char* argv[])
{
std::cout << int(argv[argc]) << std::endl;
return 0;
}
Хэширование или шифрование

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

При этом хэширование - это однонаправленная функция. То есть то, что было захэшировано, обратно "расхэшировать" уже нельзя.

Шифрование же - функция двунаправленная. Зашифрованный текст мы можем расшифровать.

#Словарь
🔥2😁1
#include <iostream>

int foo()
{
return 1;
}

double foo()
{
return 2.0;
}

int main()
{
std::cout << foo() << " " << foo() << std::endl;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
9%
1 2.0
6%
2.0 1
21%
По-разному. Неопределенное поведение
64%
Никакой. Ошибка сборки
Делай проще, говорили они.

Согласен, конечно. Но делать проще как-то ... сложновато 😐

📍 Career Advice: Simplifiers Go Far, Complexifiers Get Stuck
😁2
Соискатели

В канун Нового года предлагаю поговорить о действительно важных вещах 🤨

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

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

Что же тогда совместно ищут соискатели, и, главное, совместно с кем? Диссертации то, по сути, авторские.

Наверное, все ищут научную истину. Только аспиранты делают это в стенах университета, а соискатели - дома за компом. Но тогда и аспиранты тоже должны называться соискателями 🤨!
Но не называются.

Короче, вопрос открыт 🤷‍♂️

---

А пока вы раздумываете над "соискателями", принимайте поздравление с наступающим Новым годом!
🧦🎁🌲
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉9🔥3
#include <iostream>

struct A
{
int a1;
int a2;
void afoo() {}
};

struct B
{
int b1;
int b2;
};

int main()
{
std::cout << (sizeof(A) == sizeof(B)) << std::endl;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
59%
0
34%
1
7%
4
0%
8
CMake. Подключение внешних библиотек

По просьбе трудящихся учащихся записал видео-инструкцию по подключению внешних библиотек в проектах на CMake.

Рассмотрены 2 способа подключения:

1. С использованием функции find_package(). Способ самый простой и лаконичный.

2. Прямое подключение заголовочных файлов и библиотек с использованием функций target_include_directories(), target_link_directories().

Второй способ подойдет, если библиотека поставляется без конфигурационных файлов вида *Config.cmake. В остальных случаях лучше использовать первый способ.

В качестве примера подключается библиотека Qt.

В следующий раз рассмотрим организацию проекта на CMake с созданием и подключением собственных библиотек.

📱 YouTube | 📱 ВКонтакте
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Исключение или код ошибки

В C++ и некоторых других языках программирования обработка ошибок может быть организована как с помощью механизма исключений, так и путем возврата кода ошибки.

И главная проблема - решить, какой из этих способов использовать в своем проекте. А мнений тут не одно и не два 🤭

Я обычно использую и то, и другое, руководствуясь следующим:

🔜 Исключение - для исключительной ситуации, когда ошибка не позволяет продолжить работу программы.

Далее:

🔜 На исключениях не должна строиться логика программы. Тогда лучше использовать статус-коды, которые могут определять как ошибки, так и известные неошибочные состояния.

🔜 Если код ошибки приходится "поднимать" по стеку высоко наверх, то вместо него лучше использовать исключение.

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

🔜 Исключения C++ не ABI-совместимые и это надо учитывать. Если отдельные компоненты программы собраны разными компиляторами, то исключение, брошенное из одного компонента, не может быть обработано другим компонентом. Тут - только коды ошибок.

И последнее:

🔜 Если на проекте определена стратегия обработки ошибок, то надо просто ей следовать.

А что используете вы?
👍 - исключения,
🔥 - коды ошибок,
🤓 - it depends
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2🤓1
int main()
{
char const* buf = "hello";
++buf; // 1
buf[0] = 'u'; // 2
return 0;
}
Выше дан код на C++. В каком месте будет ошибка компиляции?
Anonymous Quiz
31%
1
31%
2
9%
Ошибок нет
28%
Оба места с ошибкой
Павлов об уме

Прошлым летом я посетил дом Ивана Петровича Павлова в Рязани (на фото). Да, того самого Павлова, который на собаках что-то там исследовал.

По своему обыкновению я приобрел местной литературки со сборником лекций Ивана Петровича. Лекции, конечно, производят впечатление. Особенно зацепили выводы о нашем уме. Именно нашем, не собак. Потому что собаки собаками, а все таки они у Павлова были инструментом познания человека.
Уже 18 лет, как я занимаюсь изучением высшей нервной деятельности на одном близком и родном для нас животном, на нашем друге - собаке. И можно себе представить, что то, что в нас сложно, у собаки проще, легче выступает и оценивается.


Говоря об уме, Павлов выделял несколько его особенностей. Хороших и не очень. Все я здесь приводить не буду, а остановлюсь на сосредоточенности и преимуществах молодого ума.

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


Ничего не напоминает? Совещание, митинг, статус, дейлик, ретро - как хотите назовите 😵‍💫
Согласитесь, что хотя бы раз, но вы ловили себя на мысли: "что мы здесь вообще делаем..."

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


Не знаю как у вас, а у меня с сосредоточенностью ума все в порядке. Я легко могу неожиданно сосредоточиться на какой-нибудь ерунде, совершенно забыв, что вообще должен был сделать 😅

Особняком Павлов выделяет молодой ум.
Молодой ум - ум деятельный. Едва ли можно сомневаться, что в молодости человек читает больше, чем какой-либо записной ученый, весь погруженный в книги. А восторг, когда одолеваешь какую-нибудь трудную задачу. А отчаяние, когда сила новых фактов, идей разрушает твоих старых богов.

Молодой ум - ум философский. ... Молодой ум восприимчивый, свободный, без предрассудков.


Поэтому:
Основной целью молодости - должно приучить себя думать. Думать - это упорно исследовать предмет, иметь его в виду и ныне и завтра, писать и говорить о нем, подходить к нему и с одной и с другой стороны, короче испытать и радость и горе серьезного умственного напряжения, умственного труда.


Думай головой, пока молодой 😉
Я бы сюда добавил еще один аргумент: свободное время. Чем мы моложе, тем его больше. Надо этим пользоваться.

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

#КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓5❤2
Red Team или Blue Team

Оба термина относятся к информационной безопасности.

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

Blue Team - это команда защиты информационной системы, призванная обнаруживать и предотвращать кибератаки.

#Словарь
👍3🤓2
#include <iostream>

int main()
{
int a = 1, b = 3, c = 6, d = 8;
d += c = b += a;
std::cout << d << std::endl;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
20%
4
7%
8
70%
12
3%
15
Сопротивление новому

Вычитал в мемуарах полярного летчика Водопьянова М.В. сразу два примера сопротивления прогрессу.

1️⃣ - извозчики в Москве, которые недолюбливали водителей машин и искали возможность их подколоть на поломках техники. Машины тогда только появлялись и сновали по улицам вперемежку с гужевым транспортом.
Если же у автомобиля посередине улицы глох мотор или случалась какая-нибудь другая неприятность, шофёр подвергался издёвкам со стороны почтенных, бородатых извозчиков. Эти представители умирающего средства передвижения были очень рады, когда приключалась беда с передовым транспортом.
Если приходилось подливать воду в закипевший радиатор грузовика, они «сочувственно» подсказывали:
– Овса, овса теперь маленько подсыпь, она и пойдёт!… Без овса далеко не уедешь. Уж мы-то знаем…
И тут они поднимали хохот на всю улицу.
Теперь, когда я еду по блестящим магистралям столицы, мне кажется, что это совсем другой город, а тот, по которому я ездил более сорока лет назад, существует только в моих воспоминаниях.


2️⃣ пример - когда те же извозчики, но уже на востоке, не обрадовались появлению авиации. Водопьянов тогда перегонял самолет для работы на маршруте Хабаровск-Сахалин:
А вот в большом селе Мариинском, где была тоже предусмотрена посадка, нас встретили очень недружелюбно. Никто не позвал даже в дом погреться, выпить чаю. В чём дело? Оказывается, в селе жило много богатеев, которые хорошо зарабатывали на извозном промысле. Они держали по многу лошадей и кучеров и за большие деньги брались перевозить людей через Татарский пролив. Кулаки не без причин смотрели на лётчиков как на опасных конкурентов. Самолёт приходил на смену лошадям, напряжённым в розвальни. Встретились в селе на берегу Амура прошлое с будущим.


🔽🔽🔽

Как же мне всё это напоминает сегодняшнее сопротивление со стороны части разработчиков развивающимся чат-ботам ИИ. Чего стоит только битва на Хабре между авторами, поющими оды ИИ как вундервафле, и теми, кто смеется: "Все это пустая ерунда!"

Истина, наверное, где-то между. А если так, то игнорировать инструменты ИИ будет нерационально.

Поэтому можно и лошадку пока оставить, но и мотор завести 😉

📍 Водопьянов М.В. "Полярный летчик"

#КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2