трънки и блогинки

Номериране на версиите

Написано на: 27.01.2012 · 16 коментара

Има много начини за номериране на версиите на програмите. Общото е, че едно число се увеличава, но разликата между новата и старата версия рядко носи числов смисъл, а по-скоро маркира етапа в развитието на продукта.

По този повод професор Edsger Dijkstra твърди, че 1.0 трябва да е финалната версия, от която програмата не трябва да може да става по-добра. Заради подобни твърдения той е упрекван от мнозина в академичен утопизъм. Аз бих бил убеден от доводите на напатилите практици, ако не беше гениалния твърдоглавец  D.J. Bernstein, чийто основни продукти qmail и djbdns са няколко минорни версии над 1.0, само заради още по-гениалната упоритост на хора като Георги Гунински да му натрият носа. Друг академичен гигант Donald Knuth прегръща безкрайната незавършеност на софтуера и избира конвенцията да добавя още една цифра от числата pi или е, за да означава новата версия на програмните пакети ТеX и Metafont.

На този фон се замислих как аз бих изразил етапа на развитие на програмка или документ. В традиционната Unix философия едно нещо трябва да върши само едно нещо, но пък да го върши добре. Воден от подобни мисли, стигнах до следните философски изисквания за промяната на номера:

  1. Версията никога не трябва да достига 1.0, а само да клони към него. Съвършенството не е достижимо, може само да се стремим към него. Аз не съм Дийкстра или djb, за да си въобразявам, че мога да направя нещо перфектно.
  2. Нарастването на номера трябва да отразява подхода от общото към конкретното и разбирането, че последващите малки по обем подобрения и оптимизации отнемат равно усилие с първоначалното създаване на общата груба функционалност на първия работещ прототип. Казано по друг начин – усилието да стигнеш от версия 0.5 до версия 0.6 е равно, примерно, на усилието да стигнеш от 0.95 до 0.96. Нямам отговор каква е тази функция и какви стойности трябва да е достигнала след определен брой итерации.
  3. Версията трябва да не преминава 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… как Ви звучи?