горжусь этим кодом. Это была первая моя задача по программированию (обменять значения двух переменных без третьей), с которой я успешно справился. Думаю с неё началось моё увлечение программированием.
MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
если бы мне кто-то показал такой код на это вопрос, мне пришлось бы строчно убежать в другую комнату, чтобы проржаться
Здравствуйте, __kot2, Вы писали:
__>Здравствуйте, ManFeel, Вы писали: MF>>
MF>>a, b = b, a
MF>>
MF>>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю? __>если бы мне кто-то показал такой код на это вопрос, мне пришлось бы строчно убежать в другую комнату, чтобы проржаться
Здравствуйте, ManFeel, Вы писали:
MF>Я, например, горжусь вот этим руби кодом: MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет.
Здравствуйте, ManFeel, Вы писали:
MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать? Я, например, горжусь вот этим руби кодом:
MF>
MF>a, b = b, a
MF>
MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
Здравствуйте, ManFeel, Вы писали:
MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
Видно что вы мыслите образами студента.
То что вы написали может и красивее, но практически в 99% случаев ничем не лучше:
temp = a;
a = b;
b = temp;
Красота должна быть в архитектуре. Насколько ее легко тестировать, расширять, добавлять новый функционал, поддерживать, ввести нового бойца в курс дела... Вот что важно!
А архитектуру в одном форумном сообщении не пояснить.
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, ManFeel, Вы писали:
S>Красота должна быть в архитектуре. Насколько ее легко тестировать, расширять, добавлять новый функционал, поддерживать, ввести нового бойца в курс дела... Вот что важно!
S>А архитектуру в одном форумном сообщении не пояснить.
Здравствуйте, ManFeel, Вы писали:
MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать?
Предлагаю варианты правильных ответов:
— Есть, но я его вам не покажу. Во-первых, а ты не сдохнешь, как наша корова? там дохрена, а во-вторых нефиг.
— Я горжусь почти всем, что пишу, потому что пишу не тяп-ляп. Но если дать написанному настояться и оглянуться на него через какое-то (достаточно большое) время, обычно выясняется, что гордиться там нечем, потому что во-первых, можно было бы и лучше, а во-вторых, какой смысл жить прошлым.
vsb>a := a + b;
vsb>b := a - b;
vsb>a := a - b;
vsb>
a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.
На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.
Здравствуйте, ManFeel, Вы писали:
MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать.
это как бы базовая матчасть. демонстрирует значение руби на уровне faq.
вообразим себе картину. вы ищите работу и демонстрируете этот код, а я вас спрашиваю:
а) может ли этот код бросать исключения?
б) в каком порядке осуществляется обмен и кто это гарантирует (хинт: a,b = nil,a);
в) когда (б) не соблюдается и на выходе получается не [nil, nil], а [nil, a];
г) какие побочные эффекты имеет ваш код (хинт: гуглить write-only переменные);
д) какой оверхид имеет эта операция? (хинт: просиходит ли копирование содержимого переменных);
> Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
в вашем коде я виду четыре ошибки, при этом я не специалист по руби.
что же касается показать код, то я могу маркером на доске (или ручной на листке бумаги) написать код калькулятора с поддержкой скобок, приоритетов и в качестве небольшого бонуса — переменных и комментариев. ну типа: ammo_price_per_round = charge / rounds; charge = price — discount; price = box_price * boxes; discount = (boxes >= 5)?(price*discount_rate):0; discount_rate = (member)?0.15:0.10; rounds = boxes * rounds_per_box; rounds_per_box = 20; boxes = 12; box_price = $8.96;
обратите внимание на произвольный порядок присвоения переменных. они тут присваиваются в конце. это же калькулятор, а не программа. так удобнее. задал формулу для пересчета, а потом внезапно понял, что discount у нас разный в зависимости от членства -- добавил еще формулу в _конец_. ну и знак доллара подразумевает операции с фиксированной точкой. и его достаточно задать однажды, а дальше все операции будут вычисляться по принципу наибольшей точности, т.е. в данном случае с фиксированной точной. т.е. я хочу чтобы 1.23 + 44*2 + 3/4 + $1 + 16*3 было вычислено с использованием фиксированной точки везде. мелочь, а приятно. если АРХИТЕКТУРА парсера правильная, то эту фичу можно добавить и на лету без больших правок.
у меня это влезает на белую доску с маркером (или на блокнотный лист — меньше половины от A4). и оно даже транслируется. "оно" это написанный мной код. и в нем хорошо видна архитектура. причем, это как бы слегка нетривиальный пример. декларативные калькуляторы на каждой помойке не валяются, хотя на самом деле тут декларация реализована вполне имеративным способом — через компиляцию. грубо говоря как на том же руби можно объявлять функцию после ее вызова. руби на это чихать. он сначала парсит код и только если не находит нужной функции — только тогда ругается.
а у вас сколько займет это строк и времени? тот кто вас собеседует не начнет скучать? между прочим, декларативный калькулятор (на самом деле не декларативный, но разница настолько тонка, что незаметная) производит впечатление. кроме того, легким движением руки оно превращается в продвинутый парсер файла конфигурации, где нужна именно декларативность.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, abibok, Вы писали:
A>a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров. A>На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.
Фу, быть таким. Это наверняка сделано школьником (Паскаль) и было удивительно.
И наверняка значение 2147483647 присвоить не получится, потому что школьники учили (учат?) Паскаль на примере 16-битного ТурбоПаскаля.
A>a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.
Никакого overflow мы не получаем — Паскаль содержит целочисленую арифметику, аналогичную C/C++ — не влезающие биты просто отбрасываются. Код будет работать коректно (на 32 бит машине).
A>На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.
xor использовать конечно более правильно, но вс еравно — Не понял юмора ?
E>xor использовать конечно более правильно, но вс еравно — Не понял юмора ?
вообще-то a,b = b,a работает с любыми типами. там может быть и строка, и некий абстрактный объект. или одна переменная строка, а другая число. причем, обмен значениями происходит без оверхида, т.к. значения лежат на месте и никто их не трогает, меняются лишь переменные. точнее, идентификатору a соответствует то, что соответствовало b и наоборот.
вопрос на засыпку: является ли конструкция a,b = b,a эквивалентной (в смысле оверхида) конструкции: tmp = a; a = b; b = tmp; ответ обосновать. тут можно трепаться минут с полчаса, ибо есть о чем поговорить... под оверхидом подразумевается расходы на память (время), которые зависят от содержимого переменных
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
E>>xor использовать конечно более правильно, но вс еравно — Не понял юмора ? М>вообще-то a,b = b,a работает с любыми типами. там может быть и строка, и некий абстрактный объект. или одна переменная строка, а другая число. причем, обмен значениями происходит без оверхида, т.к. значения лежат на месте и никто их не трогает, меняются лишь переменные. точнее, идентификатору a соответствует то, что соответствовало b и наоборот.
Я так понимаю, нить темы потеряна, но я напомню: a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.
Что кассается a,b = b,a то, безусловно, работает с любыми типами. Но не во всех языках, конкретно я знаю про Lua, а теперь еще про этот ваш Руби.
М>вопрос на засыпку: является ли конструкция a,b = b,a эквивалентной (в смысле оверхида) конструкции: tmp = a; a = b; b = tmp; ответ обосновать. тут можно трепаться минут с полчаса, ибо есть о чем поговорить... под оверхидом подразумевается расходы на память (время), которые зависят от содержимого переменных
Для начала, надо определиться о каком языке идет речь, ибо не во всех языках есть этот синтаксический сахар, и подозреваю, реализован он по разному. Конкретно в Lua он реализован поклажей на стек b,a и взятием со стека a,b, т.е. эквивалентен конструкции tmpa = a; tmpb = b; a = tmpb; b = tmpa; и соответсвенно не эквиватентен конструкции: tmp = a; a = b; b = tmp;
W>нигде не указано, что тип signed. W>Может быть подразумевался само собой unsigned (который в абстрактной машине С складывается по модулю).
Это не важно — код будет работать как с signed так и с unsigned.
Здравствуйте, eskimo82, Вы писали:
A>>a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров. E>Никакого overflow мы не получаем — Паскаль содержит целочисленую арифметику, аналогичную C/C++ — не влезающие биты просто отбрасываются. Код будет работать коректно (на 32 бит машине).
А кто сказал, что это Паскаль? Может это Ada или Eiffel.
тебе сороковник скоро, а ты все дрочишь на порядки присвоения переменных... а потом мы удивляемся, почему в среднем по индустрии около 90% написанного кода идет в мусорку... попробуй сменить цель с "написать что-нибудь крутое на тысячу строк" на "написать что-нибудь крутое на тысячу покупателей". Ну т.е. реально разобраться, что народу надо, и реализовать это настолько удобно, чтобы людям было не жалко денег это купить. Как втянешься — приход будет в 1000 раз сильнее, чем от просто закодить. Потом будешь вспоминать молодость и думать "фигасе я наивняк был..."
ARK>А кто сказал, что это Паскаль? Может это Ada или Eiffel.
И много у нас школьников решает "первую задачу по програмированию" на Ada или Eiffel ?
Надо конечно допускать возможность этих вариантов, но наиболее вероятно — это все же Паскаль.
Здравствуйте, bazis1, Вы писали:
B> тебе сороковник скоро, а ты все дрочишь на порядки присвоения переменных...
это вы дрочите, а я разгребаю говна, продираясь сквозь обфускацию, где код выполняется совсем не так, как это ожидается.
B> а потом мы удивляемся, почему в среднем по индустрии около 90% написанного кода идет в мусорку...
в мусорку не пишу
B> попробуй сменить цель с "написать что-нибудь крутое на тысячу строк" B> на "написать что-нибудь крутое на тысячу покупателей". Ну т.е.
написал. и далеко не на тысячу покупателей, среди которых много постоянных. но это не показатель
B> реально разобраться, что народу надо, и реализовать это настолько удобно, B> чтобы людям было не жалко денег это купить. Как втянешься — приход будет
моим покупателям денег не жалко, но деньги это мусор. ни хрена вы в жизни не разбираетесь. самое главное — фидбек от кастомеров и не только фидбэек, но и контрибуция (код, идеи)
B> в 1000 раз сильнее, чем от просто закодить.
в задрачивании над кодом я замечан не был. пишу довольно просто и без выкрутасов.
B> Потом будешь вспоминать молодость и думать "фигасе я наивняк был..."
мы с вами в разных плоскостях. от R&D я сначала переместился к R, а от R к CS и занимаюсь решением нерешенных проблем, потому как если проблема имеет решение, то это не для меня.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
vsb>a := a + b;
vsb>b := a - b;
vsb>a := a - b;
vsb>
vsb>горжусь этим кодом. Это была первая моя задача по программированию (обменять значения двух переменных без третьей), с которой я успешно справился. Думаю с неё началось моё увлечение программированием.
На самом деле, этот код хоть и будет работать правильно (в Паскале или C/C++) — он плохой:
1. Производительность.
Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.
Поэтому следующий код, вероятнее всего, будет работать быстрее (2 чтения-записи памяти, 1 move между регистрами)
register int tmp = a;
a = b;
b = tmp;
2. Защита от ошибок.
Использование арифметических операций тут — зло. Вася пупкин может может вместо интегрального целого подставить вместо a и b плавающую точку или вообще неинтегральный тип с переопределенными operator +/-. Поэтому лучше писать через xor — это может защитить в случае плавающей точки и — переопределяют operator ^ более редко чем +/-.
В остальном — в добавок тоже просадка по производительности.
3. Идеальный вариант по производительности — это вообще использовать платформеные инструкции (если есть), например для x86 — какую нибудь xchg (экономит 1 лишнюю mov, и 1 регистр, коих на x86 тупо мало). Но этот вариант слишком непортируем.
E>Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.
компилятор это в значительной степени распознаватель паттернов.
Распознать паттерн "перестановка переменных" раз плюнуть, далее компилятор свободен компилировать это концептуальное действие сколь угодно оптимально.
От поддержки соответствия между переменными и действиями в абстрактной машине и реальной компилятор как правило освобожден.
Здравствуйте, watchyourinfo, Вы писали:
E>>Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.
W>компилятор это в значительной степени распознаватель паттернов. W>Распознать паттерн "перестановка переменных" раз плюнуть
какой идиот станет реализовывать распознавание этого паттерна в череде арифм. операций? вот код с tmp однозначно превратится в банальное переименование идентифмикаторов и таким образом сам по себюе не породит ассемблерного кода вообще
Здравствуйте, abibok, Вы писали:
A>На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.
не понял юмора. предполагается, что при a = b = 1 этот код не будет работать?
Здравствуйте, LuciferSaratov, Вы писали: LS>не понял юмора. предполагается, что при a = b = 1 этот код не будет работать? LS>
LS>a = a ^ b;
LS>b = a ^ b;
LS>a = a ^ b;
LS>
он не будет работать, когда a и b — ссылки на один и тот же обьект.
вообще, я людям, пишушим подобный код, тоже бы сначала предложил поработать младшим помощником ассенизатора
Здравствуйте, __kot2, Вы писали:
__>он не будет работать, когда a и b — ссылки на один и тот же обьект.
а, ну это понятно.
я по умолчанию пишу на С (как раз за такие неожиданности С++ и не любят).
__>вообще, я людям, пишушим подобный код, тоже бы сначала предложил поработать младшим помощником ассенизатора
MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать?
НЕТ
по-моему, гордиться каким-то кодом могут только жалкие кодировщики
настоящие программисты должны гордиться решенными ими трудовыми задачами
возможно, тем, что иную сложную задачу они решили просто, трудоемкую — быстро
или признанную кем-то нерешаемой — хоть как-то решили
изобретенный новый алгоритм — вот, пожалуй, самый лучший повод для гордости
(я как-то придумал парочку, но увы, они оказались уже не новыми
гордость шароварщиков, опенсорсников, один-на-всю-контору-программистов и просто пет-прожект-мейкеров за свои "родные" программулины я тоже вполне понимаю
но не за их код
vsb>>a := a + b;
vsb>>b := a - b;
vsb>>a := a - b;
vsb>>
vsb>>горжусь этим кодом. Это была первая моя задача по программированию (обменять значения двух переменных без третьей), с которой я успешно справился. Думаю с неё началось моё увлечение программированием. E>На самом деле, этот код хоть и будет работать правильно (в Паскале или C/C++) — он плохой:
E>1. Производительность. E>Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.
E>Поэтому следующий код, вероятнее всего, будет работать быстрее (2 чтения-записи памяти, 1 move между регистрами) E>
E>register int tmp = a;
E>a = b;
E>b = tmp;
E>
E>2. Защита от ошибок. E>Использование арифметических операций тут — зло. Вася пупкин может может вместо интегрального целого подставить вместо a и b плавающую точку или вообще неинтегральный тип с переопределенными operator +/-. Поэтому лучше писать через xor — это может защитить в случае плавающей точки и — переопределяют operator ^ более редко чем +/-. E>В остальном — в добавок тоже просадка по производительности.
E>3. Идеальный вариант по производительности — это вообще использовать платформеные инструкции (если есть), например для x86 — какую нибудь xchg (экономит 1 лишнюю mov, и 1 регистр, коих на x86 тупо мало). Но этот вариант слишком непортируем.
Задача звучала в виде "обменять значения a и b без дополнительных переменных". Паскаль я начал учить за полчаса до этого и не то, что про XOR, про переполнение понятия не имел. С пунктами согласен, но прелесть этого кода (для меня) не в этом.
Здравствуйте, vsb, Вы писали:
vsb>Паскаль я начал учить за полчаса до этого и не то, что про XOR, про переполнение понятия не имел.
Видимо поэтому и нападки: зачем работодателю, спрашивающему на интервью про код, которым ты гордишься, человек, который начал заниматься программированием за полчаса до собеседования?
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, bazis1, Вы писали:
B>> тебе сороковник скоро, а ты все дрочишь на порядки присвоения переменных... М>это вы дрочите, а я разгребаю говна, продираясь сквозь обфускацию, где код выполняется совсем не так, как это ожидается.
хм. возможно тогда не все так плохо. я в R&D встречал ситуации, где люди могут часами напролет дискутировать а-ля что кошерней: mingw или cygwin, в конце проекта получить "кошерное" решение 1 задачи из 100 изначально планируемых, и перескочить на новый проект. пусть типа в продакшне разбираются. продакшн, естественно, этот код даже не открывает.
B>> попробуй сменить цель с "написать что-нибудь крутое на тысячу строк" B>> на "написать что-нибудь крутое на тысячу покупателей". Ну т.е. М>написал. и далеко не на тысячу покупателей, среди которых много постоянных. но это не показатель
хм. вот это уже интересно. можешь описать в паре предложений, как там бизнес-модель работает? исключительно патентный анализ?
B>> реально разобраться, что народу надо, и реализовать это настолько удобно, B>> чтобы людям было не жалко денег это купить. Как втянешься — приход будет М>моим покупателям денег не жалко, но деньги это мусор. ни хрена вы в жизни не разбираетесь. самое главное — фидбек от кастомеров и не только фидбэек, но и контрибуция (код, идеи)
деньги — это один из немногих объективных показателей. фидбек можно дать из вежливости, или из желания проманипулировать. покупка лицензии говорит о полезности софта обычно больше.
B>> в 1000 раз сильнее, чем от просто закодить. М>в задрачивании над кодом я замечан не был. пишу довольно просто и без выкрутасов.
Хм. Возможно я неправильно проинтерпретировать комментарий выше.
B>> Потом будешь вспоминать молодость и думать "фигасе я наивняк был..." М>мы с вами в разных плоскостях. от R&D я сначала переместился к R, а от R к CS и занимаюсь решением нерешенных проблем, потому как если проблема имеет решение, то это не для меня.
я в свое время прошел немного по этой тропинке. из моего опыта получилось, что если проблема не имеет решения, то в 99% случаев она нафиг никому не нужна. в итоге можно сделать сколь угодно крутое решение, но пользоваться им никто не будет, ибо никому не надо.
W>компилятор это в значительной степени распознаватель паттернов. W>Распознать паттерн "перестановка переменных" раз плюнуть, далее компилятор свободен компилировать это концептуальное действие сколь угодно оптимально. W>От поддержки соответствия между переменными и действиями в абстрактной машине и реальной компилятор как правило освобожден.
Открою детям "страшный секрет" — компиляторы бывают разные. Задача "распознавать патерны" не является главной целью компилятора, а поэтому реализуется уже по усмотрению разработчиков компилятора.
W>короче, я давно заметил, что ты типичный румяный русский программист, от которого толку меньше, чем от индуса, а гонору на порядок больше.
Я тоже с тобой не знаком, Том. Но сомневаюсь мифологические герои Толкиена умеют писать код, хоть какой нибудь.
Здравствуйте, ManFeel, Вы писали:
MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать?
гордится кодом? ты пишешь для машины? ну она оценит
тут уже правильно написали, гордится надо решонной задачей, удачным алгоритмом который или а)
не существует(маловероятно) или б)быстрее работает существующего.
когда просят показать код на собеседовании то речь идёт совсем не о заумности или о решонной задаче
а о том посмотреть какого стиля ты придерживаешся, если вообще стиль есть, способен ли работать в коллективе,
понятность кода. именно естъ ли у тебя самоцель написать замудрённый код или ставишь целью а) выполнить эффективно
задачу и б)написать понятный не только тебе код
pik>тут уже правильно написали, гордится надо решонной задачей, удачным алгоритмом который или а) pik>не существует(маловероятно) или б)быстрее работает существующего.
одна из основных проблем -- сложность, большой уровень шума.
Поэтому просто решить гордости мало. Нужно чтобы результат был не излишне сложным, зашумленным
Здравствуйте, LuciferSaratov, Вы писали: LS>а, ну это понятно. LS>я по умолчанию пишу на С (как раз за такие неожиданности С++ и не любят).
логично, да обычно же, swap это отдельная ф-ия, в которую в C будут передаваться указатели, поэтому неожиданностей тут меньше не становится
Здравствуйте, ManFeel, Вы писали:
MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
Таким кодом может гордиться только автор языка. Гордиться тем, что он придумал соответствующий синтаксис, которым удобно пользоваться. Ты то тут причем, чтоб таким гордиться?
А относительно более реального кода, то повод для гордости может появляться тогда, когда ты напишешь библиотеки, с помощью которых сможешь весьма лаконично и понятно писать часто используемые вещи. Я вот, например, горжусь что у меня в коде очень мало переопределения equals и hashCode, там где надо такое делать, это делается автоматом. Горжусь тем, что написал кастомизацию под заказчика под заказчика на DSL, который понятен заказчику и который может править. Горжусь тем, что множество по существу разных продуктов у меня собирается из одних и тех же исходников, и в зависимости от профайлов при компиляции включается тот или иной функционал, через плагинную систему, а не кучей if как многие городят. Горжусь тем, что те, кому достается код после меня, очень быстро в него вникают, а также не рвутся выкинуть все и переписать с нуля. Горжусь тем, что в проектах практически нет копипаста. И если где будет бага, то она будет локализована в одном методе, а не размазана в 100 местах.
Хотя на деле не сказал бы что горжусь. Гордиться плохо, ведет в завышенной самооценке. Просто во многих случаях приятно осознавать, что за проект не стыдно.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, bazis1, Вы писали:
KV>Что дрочить на порядки присвоения переменных, что на количество покупателей... один хрен — онанизм
Ну не знаю, может быть я криво выразился, но мне этот пост напомнил свое research-прошлое. С мозговыворачивающими вещами, а-ля скрестить язык описания железа с шаблонным механизмом а-ля C++, чтобы легко делать вещи, где, скажем, поменяв traits можно пересобрать процессор под слегка другой набор инструкций, не перелопачивая руками весь дизайн, и средства языка сами выкинут, скажем, лишние этапы конвейера...
Момент истины настал, когда год спустя после передачи кодов "в продакшн" я заметил, что забыл включить в пакет один важный файл, без которого там многое теряло смысл, и про него так никто и не спросил. При том, что проект был успешно принят и на бумаге внедрен. Я немного офигел, поспрашивал людей, пособирал статистику и пришел к выводу, что большинство решений нерешенных проблем заканчивают свой путь в мусорке, при этом "решатели" об этом не знают и знать не хотят, ибо им интересно копаться с проблемами, а не конечный результат видеть. А народ более ушлый пилит на этом гранты и бюджеты и ладони тихонько потирает за кулисами...
Ну и как-то после этого желание просто копаться в интересных вещах, игнорируя их роль в бизнес-картине отпало напрочь. А потом пришло понимание, что "копаться" в бизнес-составляющей гораздо интересней. Как-то так.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, ManFeel, Вы писали:
MF>>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю? E>Таким кодом может гордиться только автор языка. Гордиться тем, что он придумал соответствующий синтаксис, которым удобно пользоваться. Ты то тут причем, чтоб таким гордиться?
E>А относительно более реального кода, то повод для гордости может появляться тогда, когда ты напишешь библиотеки, с помощью которых сможешь весьма лаконично и понятно писать часто используемые вещи. Я вот, например, горжусь что у меня в коде очень мало переопределения equals и hashCode, там где надо такое делать, это делается автоматом. Горжусь тем, что написал кастомизацию под заказчика под заказчика на DSL, который понятен заказчику и который может править. Горжусь тем, что множество по существу разных продуктов у меня собирается из одних и тех же исходников, и в зависимости от профайлов при компиляции включается тот или иной функционал, через плагинную систему, а не кучей if как многие городят. Горжусь тем, что те, кому достается код после меня, очень быстро в него вникают, а также не рвутся выкинуть все и переписать с нуля. Горжусь тем, что в проектах практически нет копипаста. И если где будет бага, то она будет локализована в одном методе, а не размазана в 100 местах.
E>Хотя на деле не сказал бы что горжусь. Гордиться плохо, ведет в завышенной самооценке. Просто во многих случаях приятно осознавать, что за проект не стыдно.
Здравствуйте, bazis1, Вы писали:
KV>>Что дрочить на порядки присвоения переменных, что на количество покупателей... один хрен — онанизм B>Ну не знаю, может быть я криво выразился,
Да я вообще-то просто шутил
B>Ну и как-то после этого желание просто копаться в интересных вещах, игнорируя их роль в бизнес-картине отпало напрочь. А потом пришло понимание, что "копаться" в бизнес-составляющей гораздо интересней. Как-то так.
Разумеется, если ковыряться в решении никому не нужной задачи, все закончится весьма грустно, какой бы интересной она не была.