0 1
Реба Създадено на 25.11.2024, видяно: 278 пъти. #128254
малко предистория: цял живот съм бачкал долу горе в сравнителна изолация, в предната фирма бях единствения програмист, в сегашната ора почти само в мои проекти. ясно е че стила ми се отличава доста от "правилния", и като цяло тоя копнеж у програмистите за общ "правилен" стил ми е противен, но така са решили нърдовете какво пък, стига да не ме занимават мене няма проблем. фирмения код с който се е налагало да работя все пак няма фрапиращи неща, но той повечето е много стар. напоследък обаче покрай хобизма се рових в известо количество отворен код, както в примери така и в продукция. изглежда се е наложил общ правоверен стил на писане (поне сред С/С++ опен сорсистите) който е направо ГНУСЕН. отначало мислех че е някакво индивидуално отклонение, но постепенно се натрапва усещането че това е общ стил, който се налага с ревюта и тн, не го ли спазваш комюнитито просто ще те изрита. първото което ми прави впечатление е почти пълната липса на коментари. това предполагам е пряка последица от концепцията за "самодокументиращ се код", опасност за която винаги съм подозирал. това което сериозно ме потриса обаче тенденцията към изобилие от тавтологии, особено около булевите величини. изрази от типа на if(isValid())return true; else return false; (разбира се разпънато на 4 реда) са норма а не изключение. това макар и дебилно е поне технически безопасно, но много често са минали на следващо ниво дебилност if(isValid()==true)return true; else return false; което не е просто дебилно, а технически опасно, виждал съм реални бъгове пряко породени от тоя начин на писане. ако има функция за ротация на картинка няма да видиш просто rotate(90), задължително ще е rotate(IMAGE_ROTATION_90_DEGREES) което разбира се е дефинирано като 90. общото усещане е като за съзнателен сремеж към раздуване на кода, не просто техническо раздуване, а и визуално. това разбира се влошава четимостта, макар че 100% авторите ще се закълнат в айфона си че е точно заради четимост. в много от случаите това раздуване пряко влошава бързодействието, и тука не говорим просто за някаква тъпота или липса на умения, случвало ми се е с козметични промени да ускоря кода в пъти, и съм убеден че авторите са били наясно че може. стуйка, къде си бе, нали ти ми възхваляваше чистия и подреден код и ме подозираше (не без основание) в мърлящина, това ли ви е плода на десетилетните напъни за подреденост и четимост? пак подчертавам, не аз не съм джонката, не акцентирам на бързодействие, в 99.99% от случаите по-добре да заложиш на надеждното отколкото бързото, ама тия if(isValid()==true) са хем ненадеждни хем по-бавни.
акаунт
на
Единия Създадено на 25.11.2024, видяно: 275 пъти. #128255
Не го знам Стойката къде се е покрил, ама Ръбав имаше едно клипче дет некъв Cloud-аджия рекламираше да пишем с функции и да заебем ООП-то, щото така "облака бачка по-бързо".
"Разни хора - разни наркотици" е казал Алеко.
1. Далеч не целия опън сорс е писан от професионалисти, по-голямата част е писана от такива като тебе.
2. Когато критикуваш другите, покажи ти самия на какво си способен.
То за всяко от нещата които си акцентирал може да се напише по цяла тема. За някои неща си прав. За някои не си. За мен едно от най важните умения придобити през годините е било това да чета чужд код без да се дразня, разбира се има си неща които дразнят като вместо "return bool_expression;" някой напише "if(bool_expression == true) return true; else return false;" - това си е мърлящина и не трябва да се толерира. Но за други като дали да има интервал между оператор и отваряща скоба или дали отварящите фигурни скоби да са на същия или сами на следващия ред - та това е субективен стил за който няма смисъл да се тормозим. Важното е кода да е четлив. Важно е да можеш с един прост греп да се ориентираш кое как и защо се ползва т.е. да няма имплицитни имена на променливи и функции защото то в контекста било ясно - да де ама след година контекста не ти е в главата или пък гледаш нечий чужд код т.е. въобще нямаш контекст - затова дори и да ти се струва тъпо и излишно си има смисъл да се пише експлицитно. Но това са неща които се учат по трудния начин след години ходене по мъките.
т.е. не трябва да се приоритизира бързината за писане на код за сметка на леснотата на четене след време а напротив, винаги трябва да се мисли за второто. И в това отношение идва перверзния лаф:
Реба Създадено на 25.11.2024, видяно: 249 пъти. #128260
щяха да варират, натрапва се усещането че това е утвърден победил модел, а не индивидуални прищевки
Реба Създадено на 25.11.2024, видяно: 248 пъти. #128261
това разбира се (в нормалния случай) е така, но аз не говоря за това, аз говоря за явления които са предимно визуално и концептуално грозни, и са утвърдени с идеята че са "четими" (а е точно обратното), а това че понякога бавят е само отделен страничен ефект. тавтологията в ежедневната реч се избягва, и това не е просто така, има си смисъл. натрапва се усещането че в програмирането това далеч не е така, повечето програмисти дори не знаят думата тавтология и какво значи. и не говоря само за стил на програмиране, патерна е повсевместен. например прословитото inline, което после стана на force inline, а някой ден ще стане на really_really_force_inline_no_exception
forceinline... Даже не го бях чувал тва. Аз да си призная не коментирам кода. Мисля че е четим. Освен ако не мажа авх2. Тогава не е четим.
За тавтологията има нюанси. Затова ти дадох примера с експлицит и имплисицит. Тоталната липса на тавтология е имплицит а прекалената и употреба води до експлицит. Истината е някъде по средата. Това, че те дразни е на момента и е субективно. Това, че след време контекста на кода не ти е в главата е факт и тогава малко тавтология не само, че не е излишна ами е и полезна. Пример:
int file_descriptor_a = file_open();
int driver_descriptor_b = driver_open();
file_read(file_descriptor_a);
driver_read(driver_descriptor_b);
file_close(file_descriptor_a);
driver_close(driver_descriptor_b);
срещу:
File a;
Driver b;
a.open();
b.open();
a.read();
b.read();
a.close();
b.close();
Първият код въпреки, че има сумати тавтология е много по лесен за поддръжка във времето спрямо втория. Като го четеше не се налага да се чудиш какъв е типа на променливите, какво отварям или затварям и т.н.
Писането на читав и лесен за поддръжка и четене код не е лесно и отнема доста време. Едно от най трудните неща е избирането на правилните имена на функции и променливи.
Обратно, мърлящината води до код който го четеш ама не го разбираш - ама пък няма тавтология ... ми ...
Реба Създадено на 25.11.2024, видяно: 232 пъти. #128264
кода е четим не когато се разбира какво прави, а защо го прави
Еми те затова са коментарите - когато не е достатъчно ясно защо нещо се прави в кода се слага коментарче, че четящия го след време да не се чуди. Безмислено е да слагаш коментари какво прави кода като то се вижда в самия код.
акаунт
на
Единия Създадено на 25.11.2024, видяно: 217 пъти. #128268
Напълно съгласен съм с тебе Реба тука и втория пример на палавия роб по ми харесва. Ако нещо не се разбира - да се коментира, но кодът не трябва да бъде ЧЕТИМ, а ОПТИМАЛЕН и МАКСИМАЛНО КРАТЪК!
И понеже съм тъпо парче - ще отговоря с няколко цитата на един много по-велик програмист от хората тука. Иначе верно си разбрал Реба, че целта е да се "симулира работа с повече код".
Интересно, че точно тея примери дето даваш ще бъдат спрени от туловете за хубав код в C#. Сякаш ми казваш, че C++ върви в обратната посока. Даже в C# има напъни за скъсяване на кода примерно
bool IsValid()
{
return nestho;
}
Го пишат
bool IsValid() => neshto; //разбира се това е когато тялото на метода е един expression
Още не си стигнал до плетеница интерфейси, има време. И 90% тестван, вкл обработка на грешки.
Гана каза, щото тъй! Чела нейде, че туй било качество.
Повечето отворен код е боклук.
Тавтологията е навсякъде, особено в езици като Java и (донякъде) C++. Не знам дали така ги учат в училище.
Моят стил е смесица от оригиналния стил на писалите Юникс и C (K&R) + стила на Линукс ядрото + стила на Go (който реално е модифициран K&R защото част от хората писали Go са от същия екип на Бел Лабс). Целочислените променливи са i, j, k, n, указателите са p, s, t, и т.н. :) Използвам и goto когато е удобно.
Въпреки, че е дразнещо, аз бих оправдал използването на rotate(IMAGE_ROTATION_90_DEGREES), защото донякъде показва че функцията няма да ротира картинката на произволен ъгъл, а има само няколко предефинирани константи с които работи.
Аз пиша код както бих писал история/приказка. Трябва да е четим, увлекателен и накрая да има "поука". :) Ако има някакви числа в кода, които не са очевидни, значи съм си извадил от носа си и са напълно произволни.
Проблемът с коментарите е, че обикновено не се поддържат с кода и в един момент стават подвеждащи. Ето например, като се забавлявам с кода за 'p'/'a' SME, измислих как да спестя една инструкция, но понеже не бях сигурен дали ще работи, коментарите ги оставих както си бяха и сега са грешни. Ако имам късмет, ще ги прегледам преди да забравя какво правят инструкциите. :)
Новобранците пишат коментари отговарящи на въпроса "какво", старшите пишат коментари отговарящи на въпроса "защо", а истинските майстори пишат коментари отговарящи на въпроса "защо не"
Хари Създадено на 25.11.2024, видяно: 116 пъти. #128283
Путка философ все повече ми напомня по начина на претенциозно писане за един друг супер експерт, който в последствие се оказа продавач в зарзаватчийница.
Бакалджийстването е супер бе, никъв шанс да науча и разбера определени важни неща без тоя опит, да маже некъв тъп код вече секи може, виж за читав бакалин далеч не всеки става, не си запознат с бизнеса но огромна част от кадровия проблем в сектора не са парите а това че масово хората си въобразяват - е кво толко да бачкаш у магазин бе, секи тъпак го може! Да, може го точно както секи тъпак може да е 'програмист' :)
0 1