А давайте обсуждать Джоэла? :)

whirlwind

TDD infected, paranoid
А давайте обсуждать Джоэла? :)

Человек несомненно заслуживающий всяческого уважения, но уж больно эмоциональный. Настроение он безусловно поднять может в равной мере как и посочувствовать нелегкой программерской доле, но ориентироваться на него как на программиста я бы не стал. Не знаю уж чья это заслуга его или переводчиков, но нередко у него встречаются такие технические ляпы... Менеджерам - да, но не программистам.
 

magic

lancer
Лучше обсуждать Оруэла :)

Осталось только время найти.
 

whirlwind

TDD infected, paranoid
ненадёжный, метод пересылки данных под названием IP
...
Отправляя через IP кучу сообщений, не удивляйтесь, если половина из них потеряется, а из остальных часть окажется совсем не тем, что посылалось
 

AnToXa

prodigy-одаренный ребенок
давайте обсудим. допустим я считаю ляпом его брюзжание на тему того, что типа дураки в комитете стандартизации C++ не сделали тип string _в_языке_, глупости говорит, ну и ладно :)
 

Фанат

oncle terrible
Команда форума
whirlwind
а разве не так?
я вот, щас пинговал только что один сайтик. 4 пакета, два из них потерялось...
 

whirlwind

TDD infected, paranoid
За всю практику приходилось использовать raw-сокеты только один раз - для снифа пакетов. Видимо он подразумевал UDP, да только UDP того же уровня что и TCP и на UDP не так уж много сервисов висит. По крайней мере на UDP никто не вешает сервисы, для которых потеря данных критична. По этому
Отправляя через IP кучу сообщений, не удивляйтесь...
выглядит примерно как: глядя на то как крутится колесо, не удивляйтесь что контейнер с вашим барахлом не дойдет до вас вовремя или вообще не дойдет.

-~{}~ 08.11.06 17:37:

>щас пинговал только что один сайтик

это icmp
 

Alexandre

PHPПенсионер
А давайте обсуждать Джоэла? :)
А почему нам не пообсуждать "Макконела" ?

а я подчерпнул там (у Джоэла) ряд идей... мне книга понравилась. Кстати он более - менее видит стратегию разработки ПО в целом.

Кстати, будет полезна для новичков, как готовиться к собеседованию, как выбрать фирму по тесту "Джоэла". Из всех фирм, в которых мне удавалось работать, мы максимум набирали три-четыре балла (ну может быть пять с натягом) ...


Чего меня прикололо в Джоэле, так это как писать спецификации. Интерестный подход, мне лично этот стиль понравился.
 

whirlwind

TDD infected, paranoid
Alexandre на 100% согласен. Книга из разряда маст хев. Если вам что то не нравится на текущей работе, возможно из книги поймете почему так и что можно сделать. Да, и стиль изложения исключительно распологающий.
 

Alexandre

PHPПенсионер
из http://www.phpclub.ru/talk/showthread.php?postid=666037#post666037
По моему наоборот. Необходимость знать вытекает исключительно из "дырявых" абстракций.
ну так оно и есть... например ASP.NET - программировать просто, а чтоб хорошо программировать - надо знать много и очень
много... Одна библиотека System насчитывает 3 000 классов. Хотя за счет хорошей структурироемости - можно все найти...
 

whirlwind

TDD infected, paranoid
Кстати, возвращаясь к "дырявым" абстракциям. Почему-то там ничего не сказано о смысле абстракций. Основная фишка в том, что если даже абстракция и дырявая, то реализация может быть починена. При этом программы которые этой абстракцией пользуются переписывать не нужно именно по той причине, что они пользуются абстракцией и следовательно не привязаны к ее реализации.
 

Alexandre

PHPПенсионер
Байты... Байты... кажется я эту статью я впервые прочитал в интернете (мне тогда имя Джоэла ничего не говорило)
и часто на нее Фанат дает ссылку...

я тут недавно спорил с руководителем, что нельзя сыпать в директорию тысячи картинок...- это замедляет чтение. После серии некоторых экспериментов, решили директорию бить на папки по 1000 шт.

-~{}~ 08.11.06 18:28:

Почему-то там ничего не сказано о смысле абстракций
О смысле абстрацкий хорошо сказано у Буча http://www.books.ru/shop/books/56332

Эх... почему я в пхп ушел? несозрел еще для Си
 

AnToXa

prodigy-одаренный ребенок
whirlwind
в теории нет различий между практикой и теорией, на практике - они есть. (c) кто-то

дело в том, что абстракция базируется на каких-то предпосылках и абстрагирует нечто, так вот без этого нечто абстракция не имеет смысла, tcp не имеет смысла без ip, ну вообще. так что реализацию "починить" невозможно, да и не нужно. абстракции бывают leaky, не потому что это плохие абстракции, а потому что это абстракции того самого пресловутого "нечто" без которого они не имеют смысла.
но в общем-то да, абстракция сферического коня в вакууме может быть перенесена и использовать любого сферического коня, но вот если он не в вакууме, то привет, welcome to leaky abstraction world :) такова природа вещей короче.

-~{}~ 08.11.06 19:04:

те же проблемы, кстати, у новомодной, местами overhyped темы создания специализированых DSL и решения задач на них, а именно edge cases, когда то что ты хочешь сделать вроде вписывается в 'domain', но не покрывается доступным тебе DSL-ем.
об этой и других проблемах пишет например Страуструп: http://public.research.att.com/~bs/SELLrationale.pdf
 

whirlwind

TDD infected, paranoid
Будем считать "дырявые" вольной интерптерацией переводчика. Я бы согласился с формулировкой "закон кривых абстракций" или "закон дырявых реализаций". А leaky это в общем то как и не "дырявые".

tcp не имеет смысла без ip, ну вообще. так что реализацию "починить" невозможно, да и не нужно
может не совсем удачный пример, но все же: реализация TCP/IP в винде и в юниксе. В первом случае вообще по моему не знают что такое спуфинг, а во втором это дело отрабатывается. Вот вам и пожалуйста: абстракция одна, а реализация дырявая.
 

AnToXa

prodigy-одаренный ребенок
в винде реализация tcp стека взята из bsd изначально, это если что :)

не знаю кто там чего не знает, насколько я понимаю, ситуацию умного спуфинга отловить в общем случае нереально, и какие различия здесь между виндой и линуксом ты если расскажешь - будет интересно почитать.

но в общем-то утверждение было не о том, что реализацию сменить нельзя вообще, можно, но только в деталях, не имеет смысла делать tcp "для протокола" сильно отличного от ip, потому что абстракция всегда абстрагирует конкретное нечто, в данном случае ненадежность и неупорядоченность ip датаграмм.

мне, кстати, очень нравится интерпретация "дырявые", имхо точно отражает суть :)
 

Solid

Drosera anglica
Не читал Джоэла. По этому прошу тех, кто читал "Совершенный код" МакКонелла, не могли бы вы сравнить его труд с Джоеловским ...о программировании?
Много ли можно почерпнуть в результате прочтения?
 

ys

отодвинутый новичок
whirlwind
>щас пинговал только что один сайтик

> это icmp

Гы :) Да, это совсем не IP.
В свое время я как-то делал реализацию тунеля IP over ICMP, так, для развития.
 

whirlwind

TDD infected, paranoid
>в винде реализация tcp стека взята из bsd изначально, это если что

Слышал я подобные слухи как и то, что винда в общем-то родственник полуоси, да и вообще зачатки перекроенного POSIX-а наблюдаются, а сама оконность у них слизана не то с мака, не то еще откуда. Ничуть не сомневаюсь что Билли в свое время активно позанимался, как бы это выразиться помягче, плагиатом. Но вот на практике попрагромировав и там и там скажу однозначно - разница коллосальная, и то что там откуда-то взято далеко не факт что оно соответствует оригиналу.

Теперь далее по поводу абстракций.

потому что абстракция всегда абстрагирует конкретное нечто, в данном случае ненадежность и неупорядоченность ip датаграмм.
Как-то искаженно и действительно "абстрактно" выглядит твое утверждение. Абстракция - это выход на определенный уровень детализации. Замечу, меньший уровень детализации, а не больший, как можно вывести из твоих слов. И на каждом уровне абстракции имеют смысл определенные характеристики. Обратное то же верно - конкретные характеристики имеют смысл только на определенном уровне абстракции.

Например, колесо является элементом средств передвижения. Но это не означает, что все средства передвижения оборудованы колесами. Характеристики, касаемые колес, такие как радиус, ширина, и т.п. имеют смысл, только когда мы говорим о конкретных средствах передвижения, таких как телега, велосипед, автомобиль и т.п - то есть уровень абстракции "колесные средства передвижения".

Но когда речь идет о транспортном средстве как о способе доставки чего-либо, обсуждать колеса просто не имеет смысла. Обсуждая средства передвижения пассажиров нас интересуют грубо говоря комфорт и скорость передвижения. Для грузов - объем груза и так же скорость. Это может быть следующим уровнем абстракции после колесных ТС. А есть ли собственно колеса или нет - это пятое дело прямого отношения к уровню ТС не имеющее. Скорее всего имеет значение такая характеристика как стоимость перевозки или обслуживания, но вот колеса вовсе нас не интересуют. Может это ракета или дельтаплан у которых нет колес.

Так вот возвращаясь к TCP совершенно верно замечено, что протокол более высокого уровня это абстракция. Но это абстракция более выского уровня и меньшего уровня детализации. Используя TCP не важно знать ни про пакеты ни про их потерю - абстракция подразумевает что на уровне протокола эти характеристики не существенны или не имеют значения. Абстракция подразумевает что пакеты не теряются. Примем это как должное и избавимся от головной боли по этому поводу. Но если пакеты все-же теряются - это не имеет никакого отношения к абстракции, это явно глюки реализации.


А по поводу мышки, которая кабель перегрызла, так на это есть древняя программерская отмазка: проблема аппаратная, программным путем не решается. Какое отношение к реализации протокола имеет мышка - никакого. Иначе нас кругом окружают дырявые абстракции в виде проколотых шин, незакрытых кранов и прочего. И что теперь - абстракция в виде канализации нам не нужна? :)

Абстракции бывают кривыми. Это наглядно не видно на жизненных примерах, например когда для транспортного средства не учитывается характеристика типа скорости (не реально), и труднее заметно в коде, когда из одних классов торчат непонятно каким боком оносящиеся отростки более мелких (с большей степенью детализации) абстракций, либо в классы, необоснованно объединяющие разные уровни абстракции и из-за этого превращающиеся в помойку и прочее подобное.

Очень важно программисту правильно видеть нужный уровень, для того что бы выделять элементы программы более удачно, а вот об этом у Джоэла ничего. По этому-то я собственно и сказал, что особо ориентироваться на него не стоит. Его статьи не учат программировать, он на более высоком уровне абстракции (с меньшей степенью детализации ;) и в основном рассказывает о проектах в целом, как организовать работу, как продать и т.п.

-~{}~ 08.11.06 21:29:

ys И к чему сказано? Еще начни мне доказывать что это не ICMP.
 
Сверху