![]() |
|
IT и Связь Обсуждение "айтишных" вопросов и средств связи |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#91 | ||||||||||
My name is Exaybachay
|
![]() Цитата:
![]() да, можно хоть всю биологическую таксономию построить, но зачем? ![]() Цитата:
а насчет "короче" я обязательно проверю. если удастся - сегодня. Цитата:
![]() Вот Ludwig хороший пример привел: человек сначала делал неуниверсальные бухгалтерские системы, маялся с конфигурацией под конкретного заказчика. Маялся-маялся и понял какого рода универсальность ему нужна. И сделал. И заработало. А если бы он принялся за это в процессе разработки системы под первого заказчика, то к тому моменту, когда он на самом деле бы понял, какая универсальность ему нужна, он бы имел дело с гораздо более сложной проблемой + собственным психологическим барьером, кстати. Цитата:
А насчет "кто позволил?", то опять же оргвыводы бессмысленны (хотя отметить явление не грех, на то код ревью и делаются). Во-первых все делают ошибки. Во-вторых если оно почти не сказывается на результирующей системе - то какая разница? Гнобить людей из пустого перфекционизма не нужно имхо. Люди сделали в свое время что-то, что отвечало требованиям и, что характерно, продолжает им отвечать - прекрасно. Сейчас Людвигу еще отвечу ![]() KaraNagai добавил 20.06.2007 в 06:19 Людвигу: хехехе прекрасно! Ты думаешь я случайно предложил именно класс сделать, а не функцию? ![]() ![]() А теперь гляди: пишем вызывающий это дело код такого плана: в одном куске этого кода ты спрашиваешь коэффициенты, а в другом куске (скажем в вызываемой из первого куска функции) ты печатаешь коэффициенты, дискрименант, корни (сколько есть или сообщение "корней нет"). А теперь учти еще, что если ты делал функцию там или класс, значит собираешься пользоваться ей скорее всего больше чем в одном месте. Так что умножь размер вышеописанного вызывающего кода скажем на 5. Цитата:
Цитата:
Цитата:
Цитата:
![]() Джава, если ее правильно изучать - язык накладывающий определенную дисциплину, ставящий разработчика в рамки. И это правильно. С++ тоже в своем роде замечательный язык. И не грех его разработчикам будущим изучать. Но это не значит, что не изучавший его - не разработчик. Цитата:
![]() Цитата:
__________________
митьки никого не хотят победить Последний раз редактировалось KaraNagai, 20.06.2007 в 05:19. Причина: Добавлено сообщение |
||||||||||
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#92 | |||||||
Редкий собеседник
|
![]()
Персон неудачное название класса... за исключением, что и среди людей бывают "свиньи", и продавец торгуем именно ими.
![]() Цитата:
Цитата:
Цитата:
Цитата:
Свобода она есть всегда, код ревью обязателен к выполнению - аксиома. тогда и депендабл программер не нужен, делай правильный спек и код ревью, организуй рабочее место, в чем проблема то? Цитата:
![]() Цитата:
![]() Цитата:
Меня по-крайней мере этому научили уже не первом курсе универа, да и в школе на уроках ЭВМ молодая красивая учительница не раз заставляла переписывать программу... ![]() Это не правило, а исключение, когда отсутствует тех. спек и/или у обучаемого не хватает тех. знаний.
__________________
Steve Jobs:"It's better to be a pirate than to join the Navy." -- Odyssey: Pepsi to Apple |
|||||||
![]() |
![]() |
![]() |
#93 | ||||||||
My name is Exaybachay
|
![]() Цитата:
Цитата:
Цитата:
Цитата:
Так вот, определенный уровень предсказания будущих требований - это гуд и правильно. Но толкьо если оно в меру. Цитата:
Цитата:
Цитата:
1. Один из основных резонов выделять куски кода в отдельные сущности состоит в том, что одинаковая функциональность требуется в нескольких местах. 2. Следовательно каждый байтик кода нашей сущности стоит в несколько раз "дешевле" каждого байтика ее вызова. 3. То есть если мы можем перенести часть сложности или вербозности вызова внутрь сущности - это надо непременно сделать (unless против этого есть какие-то другие аргументы, например порядка производительности или потребления памяти). Цитата:
__________________
митьки никого не хотят победить |
||||||||
![]() |
![]() |
![]() |
#94 |
Заслуженный Участник
|
![]()
Kara:
Насчет дороговизны посредственного программирования я уже привел пример с Cisco NetFlow Collector-ом. Кстати уже и Adobe не отстает: Acrobat Reader превратился в такого монстра, что страшно его ставить. Бинарник такого объема мог бы управлять всеми спутниками на орбите одновременно. И не мудрено, что он такой багги - слетает, виснет, итд. и в кажой новой версии все хуже и хуже. А что в нем принципиально нового по сравнению со старой доброй версией 5? Ни-че-го. Ах да, он написан наверное на Си++, но не суть. Несложно прикинуть сколько народу работает над этим Акробатом, сколько народу тестирует, исправляет ошибки, итд. Акробат стал страшно дорого обходиться Адобу по одной лишь причине: посредственное программирование. При этом существуют некоммерческие аналоги Акробата, сделанные одним человеком в свободное от работы время. Но чтобы мы не топтались на месте в этой дискуссии, вот пример, точнее задачка для всех, кто еще не заснул в этом треде ![]() Есть такой Windows Registry, и у него есть API. Задача была, надо понимать, создать иерархическую штуку, в которой можно хранить некие параметры. К каждому параметру есть путь по дереву. Поскольку параметры могут быть очень маленькие, то хранить их в отдельных файлах как-то не хочется - были бы большие накладные расходы. Так родился этот шедевр - Windows Registry, API которого состоит наверное из 50 функций, и каждая берет по 10-15 аргументов. Ну хорошо, я преувеличиваю, но что-то около того, загляните в доки ![]() Сегодня как раз думал как можно было бы сделать похожую штуку в духе юниксоидного минимализма. Есть идеи? ![]() (А про универсальный суперджавакласс для решения квадратных уравнений - это к студентам, Kara ![]() |
![]() |
![]() |
![]() |
#95 | ||
My name is Exaybachay
|
![]()
Насчет акробата... формат растет, Ludwig. И я почти уверен, что сам по себе ридер мало обходится. Обходится Акробат, Дистиллер и связанные с ним продукты. Там наверняка очень много общего кода.
А насчет аналогов - ну давай выкладывай линк на аналог. А я для них документов в индизайне погенерю и проверю. Сравним размер, сравним совместимость с форматами и так далее и тому подобное. Цитата:
Кстати, буде API для работы с реджистри изначально ОО, с ним бы было удобнее работать. Кстати, ты про линукс вот говоришь, а API какого-нибудь VFS под линуксом - эт те тоже не фунт изюма, особенно структуры. Знаешь как просто стучаться к иерархическим структурам - сделай компактный API для файловой системы для начала ![]() Цитата:
![]() ![]() Я тебе дал тривиальный пример чтобы ты показал мне преимущества С++ в локаничности и одновременно продемонстировал что по-твоему значит компактность. Ты отказался. Низачотъ те стало быть. Людвиг, вот слушай, расскажи че ты по работе делаешь. Мне интересно откуда у тебя эта лебединая песнь перфекциониста родилась? Вот Юра (TYA) он хоть мне и противоречит, но вроде как в тему все вещает, а ты...
__________________
митьки никого не хотят победить |
||
![]() |
![]() |
![]() |
#96 | ||||||
Редкий собеседник
|
![]() Цитата:
С одной стороны предоставляется исполняемый код, а с другой стороны Ява байткод, и с чем его пользователь будет есть? Короче, я работал в одной компании, все было путем пока генеральный менеджер не ушел, а на его место пришел и привел с собой команду полных бездарностей... после этого из 20 человек инженеров, там осталось работать 3 и то только потому, что менеджемент "встрепенулся" и больше не принимает решения без согласования с инженерами. Я не припомню другого такого случая за всю мою историю работы в разных компаниях, и, я считаю, что такой подход не является для профессионального программиста типичным. Компания поменяла вид бизнеса, и сейчас занимается продажей того, что было сделано 5-8 лет назад, то что было сделано за последние пару-тройку лет мало кого интересует - качество не то, клиенты потихоньку уходят. И никто меня не убедит, что нельзя уточнить требования и невозможно согласовать всю функциональность с клиентом до того как написана детальная тех. спецификация. Запрограмировать это уже как правило дело техники. Каждую, и не с менеджером, а с коллегой перед тем как код публикуется. Цитата:
Понимаю, сначала были задачи... потом появилась идея, кот. основывалась на полученном опыте. Ничего ногового. Цитата:
Цитата:
Цитата:
![]() Цитата:
Кстати, что кому-то "не по зубам" - я полностью согласен, и появился целый лагерь Ява программистов (и уменьшился лагерь С++ программистов), а "более высокая стоимость проекта" - не согласен..., за исключением если руки не оттуда растут (на то разные процессы разработки программ и придуманы - что бы сократить расходы и как можно меньше было риска, связанного с человеческим фактором). Дотком народ видать расслабил.
__________________
Steve Jobs:"It's better to be a pirate than to join the Navy." -- Odyssey: Pepsi to Apple |
||||||
![]() |
![]() |
![]() |
#97 | |||||||
My name is Exaybachay
|
![]() Цитата:
![]() Цитата:
Цитата:
![]() Скажи мне прямо смотря в глаза, что всю твою трудовую карьеру так и было ![]() Цитата:
Цитата:
Цитата:
Цитата:
Человеку в кухню софтовой конторы нормально въехать обычно надо 3-6 месяцев имхо. А средний срок работы человека на одной позиции в айти (статистика по штатам, правда) - 9-10 месяцев.
__________________
митьки никого не хотят победить |
|||||||
![]() |
![]() |
![]() |
#98 |
Заслуженный Участник
|
![]()
Kara:
Пример с квадратным уравнением насколько прост, что не покажет различия между С++ и Джавой, но зато покажет различия в подходах. Ты хочешь вычислять в два этапа - дискриминант, а потом корни? Прекрасно. Извеснтый drawback ОО состоит в том, что каждый метод должен проверять состояние объекта, прежде чем делать свое дело. Например, метод вычисления корней должен проверить был ли уже вычислен дискриминант, и если нет, то в духе Джавы надо выкинуть исключение (и тем самым заставить пользователя обработать его). С двумя же функциями все просто: вторая принимает в качестве параметра дискриминант. Не только сами функции будут проще, но и пользовательский код тоже - подозреваю, что он запишется в одну строку. В языках же с лямбда-функциями можно сделать еще красивее, но от этого джависты тут вообще заснут наверное ![]() И не поленись, распиши свой суперкласс, и сравним с функциональным вариантом. Теперь о Regisrty. Во-первых я посчитал, там 32 функции, только 2 или 3 - легаси, а остальное так или иначе может пригодиться. Не зря они там, не зря. Но не дожидаясь от тебя конструктивного ответа (которого и так не дождался бы ![]() Представь себе, что в системе есть некий UNIX Registry. Ты открываешь его документацию, и падаешь со стула: вместо сотен страниц там всего один абзац примерно такого содержания: "UNIX Registry - это специальная файловая система, которая маунтируется под /var/reg и которая оптимизирована для работы с очень маленькими файлами. Приложения могут хранить в UR свои конфигурационные параметры, причем для простоты в одном файле может храниться один параметр, например число или строка. Каждое приложение создет свое поддерево конфиг. параметров под /var/reg/vendor/application/...". Вот и всё. Секюрити и права доступа - как с файлами в UNIX. Удаленный доступ - NFS. Плюс бэкап можно делать легко с помощью tar (в Windows небось надо будет писать спец утилиту для бэкапа поддеревьев, верно?). Плюс в UNIX Registry работают все стандартные утилиты юниксовского юзерленда и сам sh. И наконец, для доступа к UR не нужен никакой спец API. Можешь использовать stdio и dirent, которым уже почти 40 лет от роду ![]() Это всё - вместо десятков функций с десятками параметров каждая и плюс сотнями страниц документации. В Windows все сделано в этом духе, к сожалению. Почти все API перенятые из OS/2 (привет, IBM!) и также разработанные позже самим Майкрософтом раздуты аналогичным образом. Не важно чем я сейчас занят, но одно могу сказать: сильно сожелею, что вернулся в мир Windows. После UNIX - это настоящий pain in the ass. Мне показывают программу в 6000 (шесть тысяч) строк на Си++, которая делает то, что под UNIX сделал бы небольшой скрипт в 10 строк. О количестве ошибок я не говорю - оно сравнимо с количеством строк кода. Это все очень печально на самом деле, может поэтому я сейчас все так эмоционально воспринимаю ![]() Ludwig добавил 20.06.2007 в 19:08 Хотелось что-нибудь процитировать из авторитетов, но вот эта статья почти вся - отличная цитата о Джаве: http://www.paulgraham.com/javacover.html Последний раз редактировалось Ludwig, 20.06.2007 в 18:08. Причина: Добавлено сообщение |
![]() |
![]() |
Благодарность от: | Inferno (20.06.2007) |
![]() |
#99 | |
Редкий собеседник
|
![]()
Не рекомендую. А вот исполняемый код сгенерить и сравнить можно, если ты еше хочешь опровергнуть мои сомнения.
Цитата:
О стоимости проекта, я могу сказать, что время занимаемое на проверку ничтожно мало по сравнению со временем занимаемое на вылавливание ошибок тобой же (когда тебе же не у кого спросить, чего ты там мог намудрить), а уж тем более твоим коллегой (когда ты болен, или в отпуске, или исправляешь ошибки в другом месте) без код ревью. У меня складывается такое впечатление, что код ревью у тебя вызывает некий испуг, неужели все так плохо? ![]() Глядишь тогда никто в тихомолку не будет лепить заплаты, прячась от начальства. Проше надо быть и люди к тебе потянутся. ![]() Индийцы от нас сначала долго бегали с сырцами, а когда "к стенке прижали" - поняли, что ничего страшного в этом нет и даже очень полезно - проше и дешевле исправлять грубые ошибки на этапе разработки, чем на стадии тест.лаборатории когда порой уже и не помнишь чего там нарисовано, или еше хуже - оно везде такое красивое. Текучка в 9-10 месяцев, может говорить лишь о том, что основная масса - контрактники, нанимаемые только на один-два проекта. Про перманент позиции сильно сомневаюсь.
__________________
Steve Jobs:"It's better to be a pirate than to join the Navy." -- Odyssey: Pepsi to Apple |
|
![]() |
![]() |
![]() |
#100 |
Заслуженный Участник
|
![]()
Спасибо за статью,Людвиг!Хоть я сам и не программист,но было интересно почитать.А ты сама на Яве программируешь?
__________________
I believe there are two things in this world: Sky staring at me,and the moral law within. (Kant) |
![]() |
![]() |
![]() |
#101 | |
Заслуженный Участник
|
![]() Цитата:
![]() Нет. Честно говоря меня тоже всегда отталкивали вещи, за которыми стоят монстрозные компании. Хороший шанс был у C#, ведь такого парня наняли - Андерса Хейльберга (Turbo Pascal, Delphi), а в итоге оказалось, что чудес не бывает - Майкрософт есть Майкрософт. В итоге: if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.Ignore Case)) ... (это из MSDN. Знаю, что можно записать чуть короче, но суть не меняется, и потом это MSDN, который читают начинающие программисты) |
|
![]() |
![]() |
![]() |
#102 | |
Заслуженный Участник
|
![]() Цитата:
это действительно можно записать короче, и тогда все нормально выглядит. using System.Text.RegularExpressions; .... Regex.IsMatch(s, sPattern, RegexOptions.IgnoreCase)) а продвинутые программисты, надо полагать, все наизусть помнят и MSDN не читают? |
|
![]() |
![]() |
![]() |
#103 |
Заслуженный Участник
|
![]() |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#105 | |||||||||
My name is Exaybachay
|
![]() Цитата:
![]() И таки да, он стоит денег. Вдумчивое ревью 100% написанного кода требует столько же время, сколько его написание. Кстати, у тебя коллега репорт пишет в ходе своего ревью? Что-то мне подсказывает, что у тебя там не процедура код ревью, а просто твой код доступен коллеге и он на него поглядывает. Без всяких обязательств. Цитата:
Цитата:
Цитата:
Цитата:
KaraNagai добавил 21.06.2007 в 08:47 Цитата:
Ок. Ну покажи мне плиз пример достаточный для сравнения размера исходного кода. Цитата:
Цитата:
В реальности именно проверку (if) нужно делать только в том случае, если различные состояния в некоторой точки ожидаемы как нормальное поведение системы, да и то не всегда. Если это не так (а иногда и в том случае если это так тоже), то эксепшны - наш друг и брат. Там же где состояния тебе будут только мешаться нужно писать стейтлесс код. Насчет реджистри - fair enough. Можно так. Правда API в результате будет не меньше, а больше. И реализация потребуется бОльшего размера. Но зато API будет знаком каждому. Такие вещи как считать DWORD значение из ключа будут делаться большим кодом. Будут также всякие излишества, совершенно ненужные типа позиционирования внутри значений и форматного вывода... И так далее и тому подобное. Короче, решение как решение. Сковывает тебя текущей концепцией файловой системы. В принципе жить можно с таким решением. Как и с текущим. Цитата:
__________________
митьки никого не хотят победить Последний раз редактировалось KaraNagai, 21.06.2007 в 07:47. Причина: Добавлено сообщение |
|||||||||
![]() |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщ. |
Ирландеи не хотят учиться на IT. | Benjamin | Общие темы | 88 | 26.06.2007 14:13 |
Поехать в Ирландию учиться | igorr | Образование | 4 | 29.03.2007 22:13 |
нашли где учиться... | AVK | Само приползло | 6 | 13.03.2007 00:27 |
где учиться.. | mary | Образование | 33 | 12.11.2005 09:47 |
Где учиться на бухгалтера и др. вопросы | Anonymous | Образование | 8 | 07.08.2003 19:52 |