Программист или сисадмин?

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

1 лайк

А еще часто бывает ПО, которое получает данные из многих уже существующих систем ПО - а потом его анализирует и выводит в удобном виде.

1 лайк

а можно пример? Undefined Behavior мы получаем если делаем что-то не то, типа удаления указателя больше одного раза, все эти ситуации описаны хорошо известны (стандарт же есть).

1 лайк

И давно вы уехали из Украины?

1 лайк

Что вы! Как можно идти в тестеры, не понимая как пишется код? А чтобы понять код, нужно все то, что… читай выше. Короче, следуя логике, тестер должен знать все то, что девелопер и еще чуть-чуть :-Р

1 лайк

Можете предсказать результат?

a[i] = i++;
i = ++i;
++i = 2;
i = ++i +1;
std::printf("%d %d", i,++i);

Примеров Undefined Behavior С++ множество. Это еще самые простые.

2 лайка

Partner, кто же спорит, в С++ есть тысяча способов выстрелить себе в ногу
Изначально вопрос стоял как “Как можно спроектировать хорошее ПО, не понимая, как работают компиляторы и интерпретаторы???”
Так вот, для избежания UB нужно знать стандарт, а не детали реализации конкретного компилятора. Зная детали реализиции, можно предсказать результат в ряде случаев UB, но практической ценности от такого знания нет - UB-код надо не изучать, а выбрасывать.

1 лайк

“Удаление указателя” (кстати, что это такое?) больше одного раза вызовет exception. Это как раз очень defined behavior.

1 лайк

Вот именно. Я понимаю, что это все анахронизм, но самые предсказуемые программы были написаны на Ассемблере. Потому что там было однозначно - что написал, так и работает. С тем же Си уже было похуже, так как реализация тех или иных алгоритмов зависела от компилятора, от библиотек и т.д. Те же “языки высокого уровня” (хотя тот “высокий уровень” по идее является “низкоуровневым программированием” в глазах современных программистов) давали быстрый, но непредсказуемый результат. А сейчас, извините, это не программирование (я не говорю про те же драйверы или ядро для Линукса). Это “перетягивание блоков из одного окошка в другое” и программированием то назвать сложно. Лего. Детские игрушки. Не спорю - делать быстро. Но что там происходит внутри… Сколько программистов знают SQL запросы для своих целей? Да каждый может написать простую выборку для своей программы. Но сколько программистов могут оптимизировать базу данных, чтобы запрос к базе из миллиона записей приходил не в течение нескольких минут, а в течение нескольких секунд? Кто из программистов может сказать администратору базы данных, как лучше нормализовать базу конкретно под его приложение? Единицы. Потому что есть всякие “волшебные кнопочки” типа “сделать красиво”. Причем эти кнопочки тоже созданы по принципу “а… напишем лишь бы было…”. И это только один пример. Естественно, есть любопытные и неленивые люди, которые изучают не только то, что нужно им для работы, но и то, что окружает их обязанности. Но опять же, таких - меньшинство.

1 лайк

главное на собеседовании так не скажите ))
в коде delete p; delete p; после первого делита указатель становится ведущим в никуда, а удаление невалидного указателя - UB, с последствиями от ничего до битой памяти и сегфолта

1 лайк

Не всегда. Например, сейчас я делаю Windows Service с кучей COM objects внутри. Не драйвера, но и окошек там тоже нет.

Думаю, я бы смог.

1 лайк

delete p - это не удаление указателя.

1 лайк

Сколько вам лет (когда и с чего вы начали изучать программирование)? Я начинал больше двадцати лет назад, как раз с низкоуровневого программирования. И уверен, что вы тоже где-то из тех дебрей. Отсюда и “смог бы”. А что изучают современные программисты? Школьники делают программки во всяких “билдерах” (не знаю, как они сейчас называются). Практически все делается простым drag-and-drop функций, параметров, визардов. Понятно, что это мое “стариковское брюзжание”. Но пытаться вытянуть плохую программу за счет увеличения вычислительных ресурсов - путь в никуда.

1 лайк

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

Все же не стоит делать поспешных выводов глядя со стороны. Таскание блоков - это наверно про разработку UI? Это отдельная специализация, не менее сложная, чем разработка драйверов.

Это умеет делать любой разработчик баз данных. Отдельная специализация, неплохо оплачиваемая.

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

1 лайк

Мы практически ровесники. Начинал я с ассемблера Радио 86-РК :slight_smile:

1 лайк

Пальцем в небо.
Что будет в случае delete p определяется фунцией распределения памяти в RunTime.
Стандартом это никак не регулируется. Это implementation details. Причем это детали не языка, не компилятора, а детали конкретного RunTime.

Я могу легко переопределить оператор delete и делать внутри что мне заблагорасудится. Например выделять память вместо освобождения. Или корректно обрабатывать невалидные указатели.

2 лайка

Вы меня заставили залезть в стандарт, но это дало лишний повод порадоваться тому, что память пока не подводит ))

3.7.4.2 Deallocation functions [basic.stc.dynamic.deallocation] абзац 4:
If the argument given to a deallocation function in the standard library is a pointer that is not the null pointer
value (4.10), the deallocation function shall deallocate the storage referenced by the pointer, rendering invalid
all pointers referring to any part of the deallocated storage. The effect of using an invalid pointer value
(including passing it to a deallocation function) is undefined.

с этим согласен

1 лайк

Пальцем в небо. В смысле я.

1 лайк

Возможно будет в тему: What skills do I need to get hired

1 лайк

MikeS, судя по вашим высказываниям, вы слишком далеки от современного программирования для конструктивного обсуждения. По поводу перетаскивания блоков вы очень серьёзно заблуждаетесь.

1 лайк