пятница, 24 марта 2023 г.

[prog.thoughts] ИИ выставит всех программистов на мороз?

Прошу прощения, я чутка запоздал со своими пятью копейками на тему того, что ИИ вот-вот придет и всех программистов поувольняют. Это все потому, что отношусь к этой перспективе несколько пофигистически (или с изрядной долей фатализма, если выражаться политкорректно).

Во-первых, ну поувольняют, так поувольняют. Придется учиться чему-нить другому.

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

А первым языком программирования был Бейсик на БК1001, где номера строк нужно было вручную расставлять, если мне склероз не изменяет. Потом был Turbo Pascal 3.0 на Robotron 1715, где компьютер выступал лишь в качестве печатной машинки. Никакого тебе выделения синтаксиса, никакой контекстной помощи, никакого пошагового отладчика.

Переход после всего этого на IBM PC с редактором Foton с подсветкой синтаксиса -- это же был как скачок в другой мир. А после Foton-а был MultiEdit, в котором уже были макросы и можно было сделать так, что ты набираешь "if", а редактор сам для тебя вставляет полный оператор if в нужное место. А еще были первые IDE от Borland-а, в которых можно было подвести курсор к имени функции, нажать F1 и получить справку по этой функции. Тут же! Не листая бумажные книжки-справочники.

И Turbo Debugger с пошаговой отладкой и возможностью слежения за значением какой-то переменной (т.к. программа сама прерывается и выпадает в отладчик когда переменная меняется).

А потом пришло следующее поколение IDE, с автокомплитом... А следом и с автоматическими рефакторингами и генерацией всякого разного по шаблону...

Собственно, к чему все эти стариковские воспоминания о более зеленой траве?

Да к тому, что обыденные для современного программиста инструменты для нас в начале 1990-х бы воспринимались такой же фантастикой, как ChatGPT или Co-pilot воспринимаются сейчас. И ничего, программистов меньше не стало ;)

Как по мне, так суть программирования -- это a) понять что нужно делать, b) понять как делать и c) выдать максимально подробные инструкции компьютеру (есть еще и пункт "d", но в контексте разговора хватит и первых трех).

И, на мой взгляд, то, что мы сейчас имеем под видом ИИ, есть ни что иное, как другой способ выполнения пункта c). Т.е. вместо пробивания дырочек на перфокартах мы сперва пришли к терминалам с экранами и клавиатурами, затем к IDE, затем придем к "интеллектуальным помощникам", которые сами будут писать буковки кода вместо нас.

Но даже если этот самый ИИ сможет справиться с пунками a) и b), то потребность в программистах все равно останется. Ведь кому-то нужно нести ответственность. Так ведь?

Не сделаешь же крайним ИИ если что-то пошло не так. А вот Васю Пупкина сделаешь. Поэтому Вася Пупкин программистом и останется.

Ну а то, что программистов при таком подходе нужно будет меньше, ну так что? Может нас сейчас и так слишком много :)))


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

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

вторник, 21 марта 2023 г.

[prog.c++] Небольшой довесок к теме обеспечения strong exception safety

Не так давно поднял тему обеспечения strong exception safety. Теперь хочу эту тему продолжить маленьким примером.

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

Очевидная реализация вышеописанного может выглядеть вот так:

class device_info_manager_t
{
   std::map<compound_device_id_t, device_description_t> m_devices;
   ...
public:
   ...
   [[nodiscard]]
   std::string
   add_device(
      const placement_t & place_id,
      const name_t & name,
      const device_description_t & info);
};

[[nodiscard]]
std::string
device_info_manager_t::add_device(
   const placement_t & place_id,
   const name_t & name,
   const device_description_t & info)
{
   auto [ins_it, was_inserted] = m_devices.emplace(
         compound_device_id_t{place_id, name},
         info);
   if(!was_inserted)
      throw std::runtime_error{"device already added"};

   return it->first.to_string(); // (1)
}

К сожалению, эта реализация метода add_device обеспечивает лишь базовую гарантию, а не строгую.