petropavel: (Default)
[personal profile] petropavel
Наткнулся недавно на пост товарища Giles Bowkett (http://gilesbowkett.blogspot.com/)

Как я понял, это был ответ на некий флешмоб, в котором предлагалось написать на тему "чему я научился из языка X, что улучшило мои способности программиста на языке Y"

Пост (http://gilesbowkett.blogspot.com/2007/10/what-i-learned-from-x-that-made-me.html) показался мне интересным, кому лень читать по-английски, я перевёл на русский, прошу под кат :-)
Про ошибки и неточности пишите, поправлю :-)

Что я почерпнул из области X, что улучшило меня, как программиста, в области Y



Поднимаю брошенную Raganwald-ом (
http://weblog.raganwald.com/2007/10/three-blog-posts-id-love-to-read-and.html
) перчатку.

X = Актёрские классы; Y = любой язык программирования.



Доверяйтесь своим инстинктам. Разыгрывайте идею, которая первой придёт вам в голову – просто чтобы посмотреть, что получится.


X = Ди-джейство в клубах; Y = Выступление на конференциях


Выступайте!Отжигайте! Самое стращное, что может случиться – что кто-то заткнёт вас за пояс, если отожжёт круче вас. Но, сделав это, он научит вас чему-то действительно лучшему. То есть, в любом случае вы в выигрыше.

X = Common Lisp; Y = Java


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

Разделяйте на составные части всё, что можно. Используйте простые имена

X = бум дот-комов,; Y = Rails


Если вы сначала вручную писали CGI-скрипты, потом изучили перловый модуль CGI.pm, то вы в состоянии пользоваться фреймворком, который автоматизирует вещи, которые вы делали вручную. Теперь вы, как программист, на голову выше людей, которые проосто умеют использовать тот же фреймворк. Лучший способ использования фреймворка – это на практике знать, что он делает на каждом этапе своей работы.

X = разбивание булыжников бульдозером; Y = JavaScript


Мои родители строят такой вот ( http://www.earthship.net/ ) хипповый дом в стиле хай-тек, который сам по себе отчасти миниатюрная экосистема. Я помогал им расчищать площадку от щебенки и дробить большие валуны из песчаника до состояния щебня, чтобы тоже убрать их с площадки. Однажды получилось так, что я был там один довольно долгое время, с бульдозером. Чтобы снять с бульдозера ковш и навесить вместо него копер, нужны как минимум два человека, так что предполагалось, что я только уберу уже накрошенный щебень, и не буду пока дробить новые булыжники.


(Это родительский бульдозер. Стареющий хиппи в кабине - это мой папа.)

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

В девяти случаях из десяти, когда вы хотите что-то сделать на JavaScript, вам в действительности не нужны библиотеки вроде Prototype или Scriptaculous. Использование внешних библиотек – это классно, если вы облегчаете этим себе работу, но это вовсе не так классно, если вы этим стараетесь лишь перехитрить собственное незнание предмета. Реализовывать интересные возможности на чистом JavaScript и DOM – это не только возможно, но ещё и приносит гораздо больше удовольствия.

X = Древние греки; Y = любой новый для меня язык


Никакой синтаксис, используемый серьёзными языками программирования, никогда не приблизится по степени заковыристости к попыткам переводить Софокла или Платона. Я никогда не встречал и, уверен, никогда не встречу ЯП с синтаксисом, который бы меня испугал. Даже включая в расчёт языки, разработанные специально, чтобы на них было трудно программировать. Не бывает таких языков. Если вы в состоянии «разботанить» древних греков, вам по плечу любой язык программирования. Это вдвойне верно, если вы реально можете читать Гомера.

И, опять же, неважно, насколько это тяжело. Это становится просто, если вы делаете это достаточно часто.

X = Python; Y = Perl


Улучшайте читабельность!

X = выпуск ди-джейских записей, которые никто не покупает: Y = проекты open source


Вся фишка в том, когда тебя, наконец, заметят и купят :)

X = Perl; Y = Ruby


Динамически порождаемые структуры данных рулят.

Никогда не пишите код, если можете убедить ваш ЯП сделать это за вас :)

X = игра с конструктором Lego; Y = любой язык


Идиомы – это средства выражения, а не правила.

(Это касается ещё и паттернов разработки. Паттерны по сути своей – тоже идиомы, но так понятней)

X = игра в «оборотня»; Y = любая ситуация в группе


(Werewolf – насколько я понял, игра, аналогичная нашей «мафии»)
Давайте человеку ровно столько доверия, сколько он заработал. Ни больше, ни меньше. Аналогично, ожидайте от других людей доверия ровно в той степени, что заслужили.

Будьте добры и открыты к людям, но имейте очень ясную голову, как только вы начинаете замечать известные тревожные сигналы и признаки.
Всякий раз, когда я оказывался в некоторых компаниях «подставлен» в политическом смысле, или лажался при игре в «оборотня», соответствующие сигналы и признаки были видны заблаговременно.

X = TDD; Y = ситуации, в которых невозможно использовать методики TDD


Тестируйте, как будто вы – робот. Скрупулезно делайте одно и то же, снова и снова.

X = ЛСД; Y = метапрограммирование в Ruby


Кажется, что некоторые вещи делают тебя умнее и круче. Иногда – действительно делают!

X = трава; Y = метапрограммирование в Ruby


Кажется, что некоторые вещи делают твоё сознание глубже. На самом деле, они делают тебя глупым.

X = астрология; Y = отладка старых унаследованных систем.


То, что нечто работает предсказуемым образом, ещё не значит, что оно имеет хоть какой-то смысл.

X = рисование карандашом; Y = Haskell


Если вы делаете лишь то, что вам легко даётся, вы совершенно точно работаете вхолостую. Любой человек, достаточно сообразительный, чтобы хорошо программировать, достаточно умён ещё и для того, чтобы делать вещи странные и необычные, лежащие за пределами его «комфортной зоны». Возьмите нечто, что кажется странным, вложите в это время, силы и мозги, и результат с лихвой окупит усилия.

X = вождение; Y = корпоративная политика


В какой-то момент своей жизни, изучая гипноз, я наткнулся на «язык тела», и понял, что «язык тела» отлично выражается при вождении автомобиля. Я начал уделять этому внимание, и пришёл к абсолютно твёрдому убеждению, что всё, что люди делают за рулём, это «подсознательное социальное поведение». Люди не «любят быстрой езды» просто потому, что спешат – они «гоняют» потому, что хотят, чтобы окружающие их замечали.

В то же время, многие и многие решения в корпорациях не имеют никакой связи с собственно предметом, которого касаются. Это практически полностью «социальное поведение». Мы принимаем план Боба, потому что Боб успешно показал своё превосходство над Фредом. Если нам повезёт, то Боб может оказаться столь же хорош в составлении планов, сколь в демонстрации превосходства, но если нам не повезло, и план Боба плохой – всё равно нам придётся его исполнять. Иногда целые корпорации вылетали из бизнеса только потому, что у одного идиота были самые блестящие волосы.

Как только я пришёл к выводу, что вождение автомобиля это социальное поведение, я определённо стал другим водителем. Я стал реже обгонять других, и гораздо чаще позволять людям вклиниваться в мой ряд, если им надо. Лучше мой социальный статус получит удар, чем я сам получу удар тонной несущейся стали (да, и вам нужно ещё помнить, что многие из этих людей – идиоты).

Подобным же образом, как только вы понимаете, что большинство процессов принятия решений в корпорации касаются только установления социального превосходства, вам остаётся принять этот факт и жить в соответствии с ним. Множество блестящих «ботаников» сходят с ума, пытаясь убедить корпорации или группы не вестись на идиотские решения, не понимая, что, возможно, лучший путь убедить корпорацию – это не доказывать свою точку зрения с пеной у рта, а, например, помыть наконец волосы. (С другой стороны, можно найти в корпорации опытного «политика», сойтись с ним, и пусть он занимается этими вещами)

X = моя бывшая девушка; Y = irb, Unix shell и MacOS X


Когда-то, во времена дот-комов, моя девушка критиковала меня за то, что я получаю кучу денег, а живу точно так же, как жил, получая вчетверо меньше. Критика была очень мягкой, но меткой: «Ты просто не знаешь, как жить богато» У неё были очень богатые друзья в колледже, так что она знала :). В целом она подразумевала, что у меня были возможности обустроить себе существенно комфортабельную жизнь, но я ею не воспользовался.

«Жить богато» в компьютерном мире – это значит «владеть» своей операционной системой. Не используйте команды Unix – пишите их! Когда я запускаю irb или bash, я не использую и так, как все остальные, я использую специальный диалект командной строки, который я сам построил вокруг своих собственных типичных задач и приёмов работы. Мой процессор bash следует грамматическим соглашениям, например, если в конце команды стоит знак вопроса, он воспринимает это как вопрос. Подобным же образом, у меня есть Unix-команды, которые я запускаю из графического интерфейса OS X GUI (Evan Light показал мне, как добавить ещё множество команд).

Пока вы не владеете своим компьютером – это на самом деле ещё не ваш компьютер. Программист, чей компьютер работает так же, как множество чужих компьютеров, не знает, что такое «жить богато» (и определённо должен научиться!)

X = Java; Y = Ruby


Obie Fernandez написал, как припечатал (http://www.jroller.com/obie/entry/top_10_reasons_why_java) – «Java воняет, как задница мускусной крысы Чучундры». Однако, я могу так говорить, потому что люди платят мне деньги, чтобы я писал на Java. Я думаю, это сильное конкурентное преимущество. Многие «рубисты» имеют предрассудки против Java, я имею в виду, они выносят суждения, основанные на незнании предмета. Такие «рубисты» не должны критиковать Java, пока они её не выучили, и им следует её выучить. Критиковать то, чего ты не понимаешь – это полная ерунда.

Множество приятных бесплатных вещей, которые вы получаете вместе со «скриптовыми языками», сглаживают сложности реализации, о которых вам не хочется задумываться. Нельзя сказать, что обычно приятнее или полезнее было бы работать с этими сложностями вручную, но если вы совсем о них не в курсе, то в долгосрочной перспективе вы проигрываете.
На самом деле, весьма полезно знать, в чём разница между string и string buffer. Похожим образом, необходимость помнить все идиотские ошибки в реализации числовых методов Java ( http://www.javapuzzlers.com/ ) имеет хороший побочный эффект – вы продумываете то, что делает ваша программа, на большую «глубину». Это как горящее кольцо для тигра в цирке – само по себе большой головняк, но полезно прыгать через него время от времени.

Я пришёл в Java из Perl-а, и из Java потом ушёл в Ruby. Я вернулся в язык более высокого уровня, мне намного удобнее жить в этом новом окружении, но где-то в моей голове всегда плавают разные низкоуровневые нюансы того, что я делаю. Это по-настоящему ценно. Самый очевидный пример – это оператор #find в Rails, он практически всегда порождает расточительное дублирование соединений и операторов SQL. Это приводит к необоснованному замедлению вашего сайта, но если иметь это в виду заранее, то можно избежать подобного замедления. Работа на высоком уровне абстракции, подкреплённая знанием деталей более низких уровней, всегда намного эффективнее просто работы на высоком уровне, без понимания того, что лежит ниже.

Date: 2009-03-18 02:35 pm (UTC)
From: [identity profile] earthshine25.livejournal.com
интересно :)
моё мнение, что всё в нашем мире взаимосвязано, главное найти для себя эти связи

Date: 2009-03-18 10:48 pm (UTC)
From: [identity profile] koshadka.livejournal.com
В среде 1С-франчайзи есть такой замечательный человек Михаил Юрьевич Эльтерман. Он очень любит прослеживать параллели между произведениями искусства и 1С. У него куча эссе на эти темы, вот например, "Камасутра как бизнес-пособие", http://msk.treko.ru/show_article_1451. Еще он рассматривал влияние на искусство продаж 1С - Сократа, Булгакова, Лермонтова, Шекспира...
Вот это я понимаю, человек вынес уроки из всяких гениальных Х на повседневный Y.

Profile

petropavel: (Default)
petropavel

September 2018

S M T W T F S
       1
2345678
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 29th, 2026 11:41 pm
Powered by Dreamwidth Studios