sab123: (Default)
SB ([personal profile] sab123) wrote2018-06-14 04:52 pm

индийская школа программирования

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

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

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

И вот кто или учился не там, или у кого получается найти образцы за пределами этой школы и учиться на них, у того получается стать нормальным инженером. А у кого не получается, тот даже при большом врожденном таланте остается ненормальным инженером.
spamsink: (Default)

[personal profile] spamsink 2018-06-15 12:16 am (UTC)(link)
О да. Не далее как сегодня: в коде было нечто вроде
bool foo = cond1() || cond2();


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

if (!foo) {
    foo = cond3();
}


Вот так и живём.

Какая разница

[personal profile] malobukov 2018-06-15 12:50 am (UTC)(link)
Оба варианта компилируются в идентичный ассемблерный код:
~/tmp$ cat point.cpp
int cond1();
int cond2();
int cond3();
int foo() {
  bool foo = cond1() || cond2() || cond3();
  return foo;
}
~/tmp$ cat counterpoint.cpp
int cond1();
int cond2();
int cond3();
int foo() {
  bool foo = cond1() || cond2();
  if (!foo) {
  	foo = cond3();
  }
  return foo;
}
~/tmp$ g++ -O3 -S point.cpp
~/tmp$ g++ -O3 -S counterpoint.cpp
~/tmp$ diff point.s counterpoint.s
1c1
< 	.file	"point.cpp"
---
> 	.file	"counterpoint.cpp"
spamsink: (Default)

Re: Какая разница

[personal profile] spamsink 2018-06-15 01:03 am (UTC)(link)
Я знаю. Но мозги человеческие зачем мучить?

Это как раз понятно

[personal profile] malobukov 2018-06-15 01:34 am (UTC)(link)
Оптимизирует затраты своих мозговых усили. Так ему не надо совсем думать об уже написанном коде, только о своём, который он добавляет.

А что потом читать будет сложнее - так это ж не ему, а кому-то другому читать.
dennisgorelik: 2020-06-13 in my home office (Default)

Хуяк-хуяк - и в продакшн

[personal profile] dennisgorelik 2018-06-15 04:42 pm (UTC)(link)
То есть в индийской программистской культуре - делается упор на быстрое создание прототипов и игнорируется long term maintainability of the system.

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

Re: Какая разница

[personal profile] rezky 2018-06-15 02:17 am (UTC)(link)
Я немного попридираюсь и напомню, что перегруженный || не всегда bool и никогда не short-circuit.

[personal profile] malobukov 2018-06-15 02:26 am (UTC)(link)
Предположение про язык программирования было моё. Вполне возможно, что в оригинале был какой-нибудь C99, где нет перегрузки операторов.
dennisgorelik: 2020-06-13 in my home office (Default)

Re: Какая разница

[personal profile] dennisgorelik 2018-06-15 04:46 pm (UTC)(link)
Длинная цепочка || вычислений - вряд ли будет перегружена, пока эти сравнения однородны и записаны в виде списка.
Для дальнейшего улучшения читабельности, я рекомендую отформатировать так:
bool foo =
	cond1()
	|| cond2()
.....
	|| condN();
Edited 2018-06-15 16:47 (UTC)

Тем не менее

[personal profile] malobukov 2018-06-15 12:57 am (UTC)(link)
GSLV летает, собственное ядерное оружие есть, выпускники IIT на равных с зарубежными коллегами из лучших вузов, Вишванатан Ананд продолжает в шахматы уже много лет как, в списке авторов Photoshop каждое второе имя индейское и так далее.

Ну а что не все на этом уровне, так везде не все.

Задачу в студию!

[personal profile] provokatorz 2018-06-15 03:18 am (UTC)(link)
Давай лучше задачку в студию, а то так и помрем без знания, на чем в гуглях валят. ))

Троллинга ради

[personal profile] provokatorz 2018-06-15 03:29 am (UTC)(link)
понятно. Я уж подумал, что она для мозгов, а она для измерения "тыкскыть". :)
vit_r: default (Default)

[personal profile] vit_r 2018-06-15 06:29 am (UTC)(link)
Достаточно посмотреть на пантеон их божеств... :-)