Има много начини за номериране на версиите на програмите. Общото е, че едно число се увеличава, но разликата между новата и старата версия рядко носи числов смисъл, а по-скоро маркира етапа в развитието на продукта.
По този повод професор Edsger Dijkstra твърди, че 1.0 трябва да е финалната версия, от която програмата не трябва да може да става по-добра. Заради подобни твърдения той е упрекван от мнозина в академичен утопизъм. Аз бих бил убеден от доводите на напатилите практици, ако не беше гениалния твърдоглавец D.J. Bernstein, чийто основни продукти qmail и djbdns са няколко минорни версии над 1.0, само заради още по-гениалната упоритост на хора като Георги Гунински да му натрият носа. Друг академичен гигант Donald Knuth прегръща безкрайната незавършеност на софтуера и избира конвенцията да добавя още една цифра от числата pi или е, за да означава новата версия на програмните пакети ТеX и Metafont.
На този фон се замислих как аз бих изразил етапа на развитие на програмка или документ. В традиционната Unix философия едно нещо трябва да върши само едно нещо, но пък да го върши добре. Воден от подобни мисли, стигнах до следните философски изисквания за промяната на номера:
- Версията никога не трябва да достига 1.0, а само да клони към него. Съвършенството не е достижимо, може само да се стремим към него. Аз не съм Дийкстра или djb, за да си въобразявам, че мога да направя нещо перфектно.
- Нарастването на номера трябва да отразява подхода от общото към конкретното и разбирането, че последващите малки по обем подобрения и оптимизации отнемат равно усилие с първоначалното създаване на общата груба функционалност на първия работещ прототип. Казано по друг начин – усилието да стигнеш от версия 0.5 до версия 0.6 е равно, примерно, на усилието да стигнеш от 0.95 до 0.96. Нямам отговор каква е тази функция и какви стойности трябва да е достигнала след определен брой итерации.
- Версията трябва да не преминава float point точността на нормален човек. Т.е. трябва да използва разумно малък брой цифри, за да не се затрудни сравнението и възприемането ѝ като нова.
Съзнавам че изискванията са неясни най-вече по отношение на т.2 и затова ще се опитам да дам няколко познати примера. Подобни ситуации са Ахил и костенурката, състезанието на Червената кралица от Алиса или отношението на Парето. Най-лесно ми е да илюстрирам идеята с графиката на функцията 1-1/х, но не мисля, че тя най-добре отразява усещането ми:
Може ли някой, който разбира по-добре математика, да опита да изкаже с функция ситуацията, която се опитвам да опиша?
16 коментара ↓
Хубаво ми е, когато хората коментират. Чета внимателно всеки коментар и отговарям, когато имам какво да кажа.
Илия Горанов на 27.01.2012г. в 12:33ч.
Всичко е относително… като искаш никога да не достигаш до версия 1.0 – наший му отпред едно „0.“ и да спи злото под камък… никога няма да стигнеш до единицата :)
Спас Колев на 27.01.2012г. в 13:24ч.
Точно тези дни обмислях този въпрос във връзка с един над десетгодишен проект, който в момента е във версия 1.12.11 (+1.12.11b, която е пратена само на част от потребителите).
Та, моят извод за конкретния доста специфичен случай е, че хронологията ми е по-важна от някакви вътрешнофункционални параметри, поради което смятам да отрежа едното ниво и от следващата година да мина в стила на Убунту на ..
градинко на 27.01.2012г. в 14:31ч.
А през средните векове пак толкова сериозно са обмисляли колко ангела се събират на върха на игла
Стефан Кънев на 27.01.2012г. в 14:35ч.
Можеш да пробваш с atan(x). Така ми звучи.
пейо на 27.01.2012г. в 14:49ч.
@ Спас Колев
Може да не съм запознат с конвенциятя на Убунту, но ми прилича на доста стандартно номериране на продукт. Или нещо пропускам?
@ Стефан Кънев
Това минава 1.0 доста рано:
http://www.wolframalpha.com/input/?i=plot+atan%28x%29+for+x+from+1+to+200
iffi на 27.01.2012г. в 15:21ч.
Според мен това, което се опитваш да опишеш в т.2 е сума на геометрична серия. (разгледай и статиите за геометрична прогресия и 1/2 + 1/4 + 1/8 + 1/16 + · · ·
Решение на 3та точка (как да не става безкрайно дълъг номера на версията) не не сещам :)
Митко на 27.01.2012г. в 16:13ч.
Ех, Стиефчо – да беше избутал до края това пусто обучение във ФМИ, че да не те лъжат с рестото в Starbucks.
Иначе хубаво си се сетил за arctan де – с кратка поправка, функцията f(x) = (2/pi)*arctan(x) в интервала [0,infinity) има хоризонтална асимптота y = 1.
И въобще, в класът на така наречените сигмоиди, http://en.wikipedia.org/wiki/Sigmoid_function, има доста кандидати за това, което Пейо търси. Например f(x) = x/(1+|x|).
Иван на 27.01.2012г. в 17:15ч.
Не разбирам от математика, но това май ще свърши работа:
y=1-1/(x^(x/200))
пейо на 27.01.2012г. в 18:29ч.
@ iffi
Благодаря, така ми го изрази графически :)
@ Митко
Сигмоидите са наистина нещо което вършат точно това което искам, благодаря!
@ Иван
Виж го изчертано първо. Много е рязко :)
@ Всички
За така дефинирана задача няма решение. Не мога да преценя кривата дали ми е крива достатъчно, а и доста си приличат и така може да продължим до безкрай. Засега любимото ми решение е 1-1/х, най-вече заради простотата си.
Oще няколко по-балансирани решения, заслуга на moshev:
http://www.wolframalpha.com/input/?i=plot+%282%2Fpi%29*arctan%28x%29+for+x+from+1+to+200
http://www.wolframalpha.com/input/?i=plot+1+-+3%2F%28x%2B2%29+for+x+from+1+to+200
http://www.wolframalpha.com/input/?i=plot+1+-+1%2Fsqrt%28x%29+for+x+from+1+to+1000
gligi на 29.01.2012г. в 00:18ч.
Според мен не търсим функция в математическия смисъл (правило, съпоставящо на всеки елемент от едно множество по един елемент от друго), а по-скоро числова, или даже стрингова редица. В този смисъл няма „правилен“ отговор.
Бобсън на 29.01.2012г. в 02:12ч.
0.1
0.1011
0.10111021
0.10111031101211
и т.н…
но за т.2 си требва нещу логаритмичну….
log(10-10/x) както сам си се сетил…
Бобсън на 29.01.2012г. в 02:36ч.
освен това идеята за сума https://en.wikipedia.org/wiki/1/2_%2B_1/4_%2B_1/8_%2B_1/16_%2B_%C2%B7_%C2%B7_%C2%B7
не се различава много отъ идеята за дописване на \Pi, което число се смета и като сума по
http://en.wikipedia.org/wiki/Leibniz_formula_for_pi
и за приравняване може да се ползва \Pi / S_t
където S_t е поредна стъпка въ събирането на сумата…
тъй имашъ
в. \Pi / 4
след нея
\Pi / (4- 4/3)
след нея
\Pi/{4(1- 1/3 + 1/5)}
и т.н…
пъкъ и ще може да се оползотвори бавната сходимость на сумата…
Само дето обаче нема го последоващото порастване къмъ, 1.0, което го нема и в гореписаните точки[1, 3].
Бобсън на 29.01.2012г. в 03:42ч.
поиграхъ си да убедя едно сметачъ да ми ги сметне и получихъ
V_ 0 = 0.785398185
V_ 1 = 1.178097367
V_ 2 = 0.906228721
V_ 3 = 1.085089684
V_ 4 = 0.940686047
V_ 5 = 1.055626392
V_ 6 = 0.956712246
V_ 7 = 1.041272163
V_ 8 = 0.965940714
V_ 9 = 1.032793641
V_10 = 0.971932471
V_11 = 1.027200460
V_12 = 0.976134062
V_13 = 1.023235202
V_14 = 0.979242682
V_15 = 1.020277977
V_16 = 0.981635571
V_17 = 1.017988086
V_18 = 0.983534098
V_19 = 1.016162634
и си проличава, че се лесно вижда една текуща версия дали е по-нова отъ наличната/внедрената… ако съвпада целата часть си личи по дробната дали по-е близо до 1.0, ако пъкъ се разминава целата часть си личи, че е имало развитие…
пейо на 29.01.2012г. в 15:02ч.
@ Бобсън
Не разбрах как предложените от теб решения отговарят на условията? Да, няма правилен отговор, но има такива които са „грешни“
ал_шопов на 30.01.2012г. в 10:18ч.
Попитай жена си.
Точно в такива ситуации жените правят много точни предложения.
Обикновено няма как да им откажеш.
Евгени на 31.01.2012г. в 12:04ч.
Моето предложение е по скоро такова:
http://www.wolframalpha.com/input/?i=plot+1-atan%28x%29*sqr%28pi%2Fx%29+for+x+from+1+to+20000
но съм съгласен относно номерациите на версиите…
един ден ще имаме Windows 666 и Mozilla 666.10… и Ubunto 999.4
или ще почнат да добавят букви.. като Нокия… Windows N666… как Ви звучи?