Здравствуйте, AndreiF, Вы писали:
FDS>>Не так. Настоящий программист должен быть написан на Лиспе с использованием концепции ленивых вычислений
AF>Чтобы непредсказуемо пожирал ресурсы и изъяснялся на маловразумительном диалекте? Нет, не надо нам такого программиста
А кто "вас" спрашивать-то собирается?!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FDSC, Вы писали:
FDS>Зато есть другой вопрос. Предположим, что тебе нужно доказать начальству, что ты предложил правильную концепцию написания некоторой системы. Ты быстренько, по концепции "тонны кода", не думая ни о чём пишешь прототип (думая будет дольше).
Хех. Была такая ситуация на текущем проекте. Захотел заказчик мегафичу. Как ты говоришь на коленке налабал прототип. прототип заказчику понравился даже очень. Но.
FDS>Он работает, ты получаешь людей, время на разработку архитектуры и т.п.
Описанного тобой не было.
А было Re: Что не так с юнит-тестами
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FDSC, Вы писали:
FDS>>Влад, извини, не понял. Что получается само собой? Шифрование исходного кода при использовании метапрограммирования? WH>При использовании метапрограммирования на шаблонах С++.
"При использовании метапрограммирования на шаблонах С++" получается что? Шифрование исходного кода?
Здравствуйте, Геннадий Васильев, Вы писали:
AF>>Чтобы непредсказуемо пожирал ресурсы и изъяснялся на маловразумительном диалекте? Нет, не надо нам такого программиста
ГВ>А кто "вас" спрашивать-то собирается?!
Дело в том, что "Настоящий программист" — это герой мифический.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Alxndr, Вы писали:
A>Есть еще такое понятие как "экономическая целесообразность". Если тебе к завтрашнему дню нужна утилита, то, возможно, более оптимальным является "нахачить по-быстренькому" без архитектурных изысков и метапрограммирования, а возможно даже (о ужас) и с копипастом.
Дык это ты говоришь о примтивных задачках. В них кода по определиню много быть не может. А если у тебя таким же образом будет сделана сложная система, то вариантов будет тлоько два 1) вы ее вообще не сдадите, 2) вы ее кое как сдадите с огромным опозданием, а потом будуте креститься перед внесением каждой строчки кода.
Так вот. Для сложных задач решение "взыть числом" конечно тоже работает. Но вот с точки зрения той самой "экономическая целесообразность" оно ни в какие ворота не лезет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Дело в том, что "Настоящий программист" — это герой мифический.
А где ссылка на википедию?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, VladD2, Вы писали:
VD>>Дело в том, что "Настоящий программист" — это герой мифический.
ГВ>А где ссылка на википедию?
Здравствуйте, FDSC, Вы писали:
FDS>Смотрите, пока не удалили
Ну, с Днём космонавтики!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Alxndr, Вы писали:
A>Это, наверное, смешно, но срать в энциклопедии только потому, что ты это можешь сделать —
Да брось. Это просто шикарно!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
A>>Это, наверное, смешно, но срать в энциклопедии только потому, что ты это можешь сделать —
ГВ>Да брось. Это просто шикарно!
Здравствуйте, Alxndr, Вы писали:
A>>>Это, наверное, смешно, но срать в энциклопедии только потому, что ты это можешь сделать — ГВ>>Да брось. Это просто шикарно! A>Если хочешь дискредитировать идею — то да.
Ты про которую?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, eao197, Вы писали:
E>Стеб здесь состоит вот в чем: даже если человек имеет большие познания и солидный опыт программирования на C++, сложный шаблонный код просто-напросто превращает программу в криптотекст, в котором даже сам автор не всегда способен разобраться. Если же знаний/опыта недостаточно, то разультат окажется еще более суровым -- полученный криптотекст вообще никто не будет способен понимать.
Может, это не совсем метапрограммирование, к тому же это не С++, а только С, но не могу удержаться, чтобы ее сюда не запостить. (С) не знаю чьи.
/*
* Вот программа, занявшая первое место ("Best of Show") в этом году. Она
* вызывается с необязательным числовым параметром (по умолчанию 2) и играет
* в шахматы. Параметр определяет глубину просмотра (при глубине большей,
* чем 3, она будет думать очень долго). Ходы задаются двумя восьмеричными
* числами (откуда куда - см. доску в начале игры, например, "e2-e4" нужно
* будет вводить как "64 44"), в приглашении к приему указывается количество
* просмотренных ходов и оценка позиций - своей и противника, т.е. Вас).
*
* Правила игры несколько упрощены - пешки превращаются только в ферзей, нет
* взятия на проходе и длинной рокировки (мне и короткую сделать не удалось),
* а также контроля правил повторения позиций и 50 ходов.
*/
#include <stdio.h>
#include <stdlib.h>
#define m(x)(x<0?-1:!!x)
#define g tj()-J
#define a(x)(x<0?-x:x)
#define h(x)((x)<=K?x:N-(x))
#define f 9999
#define A return
#define H printf(
#define R double
#define U int
#define V for
#define b else
#define u while
#define B if
U v,w,Y= -1,W,J,p,F,o=f,M,N,K,X,YY,_,P[f],s(); typedef U(*L)(); L q[f]; tj(){
U S=m(v)+(m(w)<<K); B(!S)A J; V(v=W+S; v!=J&&!q[v]; v+=S); A v; } k(){ _=K; A
v?a(v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/ 2))||q[J];
} z(){ _=5; A v*w||g; } e(){ _= -2;
A(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0); } R VR(){ int PZ=0x7fff;
A(R)(rand()&PZ)/(R)PZ; } l(){ _=K+1; A(v*w&&a(v)-a(w))||g; } R UC(){ R i=0,d;
u((i+=d=VR())<1.0); A d; } c(){ _= -11; A a(v)-a(w)||g; } I(ur,n,x){ W=ur;
J=n; B(P[W]!=Y||P[J]==Y)A J+1; v=(J&N)-(W&N); w=(J>>K)-(W>>K); A
q[W]()||(x&&QL(W,J,s)); } TT(W){ v=w=0; A q[W]()+K; } s(){ U j= -1,i; Y= -Y;
V(i=0; i<M; ++i){ B(j<0&&P[i]== -Y&&TT(i)&&_== -2) { j=i; i= -1; } b
B(j>=0&&!I(i,j,0))A Y= -Y; } A!(Y= -Y); } bb(){ _=1; A a(v*w)-2; } uv(){
V(v=0; v<f; ++v){ B(h(v>>K)==0){ U S=h(v&N);
q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e))); } b B(h(v>>K)==1)q[v]=k; b q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ U G=Y,i; J=0; V(i=0; i<M; ++i){
i%8||H"\n%4o ",i); B((Y=P[i]=m(P[i]))&& TT(i))H"%c ",_+93+Y*16); b H"- "); }
H"\n "); do H"%2d",i++&N); u(i&N); Y=G; H"\n"); } O(W,J){
B((q[J]=q[W])==k&&h(J>>K)==0)q[J]=l; B(q[W]==e)B(J-W==2)O(J+1,J-1); b
B(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { U
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; A YX; } C(){ U i,j,BZ=0; V(i=0; i<M; ++i){ L Z=q[i]; B(Z){ U
r=h(i>>K)+h(i&N),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):
(Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?f-r-r:36+r+r)))); Y=P[i]; V(j=0; j<M;
++j)B(!I(i,j,0))S+=(P[j]?5:1); BZ+=G==Y?S:-S; Y=G; } }
B(!(++X&M-1))write(1,".",1); A BZ; } PX(){ U i,Q=0,XP=0,JZ=M*M,E= -f,t,S=o;
B(!F--)A++F+C(); V(i=0; i<JZ; ++i)B(!I(i>>K+K,i&M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i&M-1,PX); Y= -Y; B(t>E){ ++XP; Q=i; E=t; B(E>=S) A++F,E; } }
B(!XP)E=s()?-f+1:0; p=Q; A++F,E; } RZ(){ U i,j,T=0; V(; ; ){ y(); o=f; do{
H"\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
u(scanf("%o%o",&i,&j)!=2||I(i,j,1)); O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(K<<1); j=p&(M-1); B(I(i,j,1)){ H"Rats!\n"); A; } O(i,j); Y= -Y;
B(T>M*M)H"\nHar har.\n"); } } main(ac,av)char**av; { long time(),j=time(&j);
R i=0; srand((U)j); V(M=0; M<=f; ++M)i+=UC(); M=i/100; B(M&3)++M; B(M&1)--M;
V(N=1; N*N<M; ++N); K= --N/2; F=ac>1?atoi(av[1]):2; uv(); RZ(); }
P.S. Если кому-то захочется ее откомпилировать в VS — дайте файлу расширение .c
Здравствуйте, Геннадий Васильев, Вы писали:
A>>>>Это, наверное, смешно, но срать в энциклопедии только потому, что ты это можешь сделать — ГВ>>>Да брось. Это просто шикарно! A>>Если хочешь дискредитировать идею — то да.
ГВ>Ты про которую?
Из разговора же ясно — срать в ...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
WolfHound,
T>>Ох, согласна полностью...Это все лень — мерзавка.. WH>Лень это главное свойство хорошего программиста. Вобще хороший и трудолюбивый программист вещи взаимосключающие. WH>Ибо трудолюбивый будет сидеть и долбить код тоннами, а ленивый подумает как сделать тоже самое но без тонны кода.
Было дело, подобную мысль высказывал и небезызвестный Larry Wall. Естественно, данная мысль — это слишком чёрно-белый взгляд на мир, следовательно неточен:
You fail to understand the difference between passive laziness and active laziness. Passive laziness is what most people have. It's active laziness that is the virtue. It's the desire to go out and /make sure/ that you can be lazy in the future by spending just a little time writing a script now. It's thinking about time economically and acting on it.
/Daniel Gee
Indeed. See Robert A. Heinlein's short story (well, actually just a short section of his novel "Time Enough For Love: The Lives of Lazarus Long") entitled "The Tale of the Man Who Was Too Lazy To Fail". It's about a man who hated work so much that he worked very, *very* hard so he wouldn't have to do any (and succeeded).
/Rob Warnock