Как стать автором
Обновить

Комментарии 83

Вообще хорошая статья, но где найти одну-две хорошие книги в месяц? Я вот навскидку не смогу вспомнить больше 10-15.
Мне кажется что из книг надо читать только совсем основополагающие вещи, не зависящие от языка программирования. Например — труды по алгоритмике или управлению проектами. А ЯП и конкретные технологии меняются слишком часто и лучше пользоваться Интернетом.
Время от времени, проскакивают интересные книги в ответах на Тостере. Плюс к этому, при покупке, Озон мне часто предлагает что-то интересное. Ну и часто захаживаю в книжные, посмотреть что есть нового.
Выучить английский. Brave new world awaiting you.
<grammar-nazi>is awaiting же!</grammar-nazi>
Всё норм: это не sentence, это utterance. Для выразительности.
Ушёл читать про то, надо ли использовать for вместе с awaiting и про разницу с waiting, и позорно опозорился. Посыпаю голову пеплом жертв печей граммарнаци.
НЛО прилетело и опубликовало эту надпись здесь
Вы сказали фразу с другим смыслом
НЛО прилетело и опубликовало эту надпись здесь
спасибо! Теперь я знаю, что показывать людям, что бы они поняли, что жизнь коротка.
Gödel, Escher, Bach by Douglas Hofstadter?
Alice in Wonderland by Lewis Carol??
The Alchemist by Paulo Coelho???

Ну, их я, допустим, читал (хотя последнюю в переводе)
А это что и к чему?
Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig
НЛО прилетело и опубликовало эту надпись здесь
Эта страничка у меня уже была открыта…

when the Narrator and his friends came into Miles City, Montana he notices that the «engine idle is loping a little,» a possible indication that the fuel/air mixture is too rich. The next day he is thinking of this as he is going through his ritual to adjust the valves on his cycle's engine. During the adjustment, he notes that both spark plugs are black, confirming a rich mixture. He recognizes that the feel-good-higher-altitude-mountain-air is causing the engine to run rich. New jets are purchased, and installed, and with the valves adjusted, the engine runs well again.


И что?
Это очень годный типично американский роуд-стори, только ну очень сдобренный рассуждениями о «жизни, вселенной и вообще». И нет, ответ там не 42.
Это понятно. Но при чём здесь программисты? И странно, что в списке нет ни «Гамлета», ни «Пигмалиона».
Зато есть Алхимик за авторством Пауло Коэльо. Жаль вопрос уже закрыт. Я думаю после алхимика в списке очень органично смотрелся бы один из шедевров Дарьи Донцовой. Каждый программист должен прочитать!

А вот про мотоциклы — Роберт Мартин советовал. Он авторитет.
Ну хз, вполне себе годные книги. Ну а то что к программингу прямого отношения не имеют — то это как с головоломками. Мозги в тонусе держать. Ибо этот инструмент важнейший для программиста.
А б в тот список еще накидал «7 кругов ада», «Собачье сердце», «Мастер и маргарита».
На полном серьезе.
Ну а про мотоциклы уже в который раз вижу эту книгу в различного рода топах «маст рид» — видимо там не все так просто, придется прочитать.
Так ведь есть и «смежные» категории и фундаментальные книжки, помимо посвященных определенной технологии\ЯП.
Один из вариантов — идти на EAP у издательств, и смотреть книги, которые в процессе написания.

Например, я люблю скалу и кложу, у меня на данный момент 9 книг в MEAP от Manning — и про reactive programming, и новые издания уже имеющихся книг — и с каждым апдейтом (новой главой) я могу выделить вечер-другой, чтоб прочитать и попробовать, что там написано.

С другой стороны, есть книги, которые в принципе нужно читать не сильно связанные с программированием, например, тот же Concrete Math Грэма/Кнута/Паташника. Опять же — сесть и прочитать полностью — слишком долго, читать по главе и делать упражнения очень помогает в качестве зарядки для мозга.
С другой стороны, есть книги, которые в принципе нужно читать не сильно связанные с программированием,

Это я и имел в виду под «совсем основополагающие вещи».
Проблема в том, что достаточно почитать Роберта Мартина или Банду четырёх, как тут же возникает желание переписать нафиг весь свой код. Нужно понимать, что идеального кода нет. Я придерживаюсь правила: “Код должен работать без багов, быть тестируемым и читаемым”.

Проблема в том, что ровно этими же аргументами пользуются всякие говнякеры. «Фича работает, а я лучше пива пойду попью».
А перечитав Уоррена сразу лезешь в ассемблерный листинг и оптимизируешь деление на константу, подсчёт количества нулей и т.д.
Надо сказать что между «фича работает» и «тестируется и читается» довольно существенная разница.
Согласен, но читабельность дело относительное («я могу прочесть, что я написал, а тебе чо, больше всех надо? лучше пива попить с друзьями»), а тесты пишут не все.
Если нет сомнений в том, что код работает правильно, читается средним программистом и на 100% покрыт тестами — можно идти пить пиво. Проблема ленивых программистов часто сводится к невыполнению одного из этих условий.
В такой формулировке согласен.
Правило «компьютер всегда прав» не следует воспринимать как абсолют. Он иногда-таки неправ, и это следует иметь в виду. Мне довелось, например, столкнуться со случаем, когда VS2005 в определённых обстоятельствах выдавала this, отличающийся на 4 байта от того, что следует. Эффекты были довольно-таки… интересные. А ситуации в духе «с -O2 работает, с -O3 нет» встречаются сплошь и рядом.
Да, это так. На stackoverflow есть отличное обсуждение Strangest language feature, но это все скорее исключения, подтверждающие правило.
«Компьютер всегда прав» — это странное обобщение. «Всегда» — это понятие из абстрактной математики, а мы имеем дело с реальным миром. Надо знать хотя бы приблизительно какова вероятность ошибки в разных ситуациях. Можно ли доверять данным прочитанным из сети? Можно ли доверять данным прочитанным с жесткого диска или с флешки/дискеты/ленты/перфокарты? Если да — то откуда тогда берутся битые архивы? И зачем в протоколах реализуют контрольные суммы и коррекцию ошибок?

Ошибки проявляются часто. Очень часто. Если вы с ними не сталкивались — вам крупно повезло. Ошибки операционных систем иногда даже впоследствии не исправляют, а документируют как фичи. Ошибки в железе тоже встречаются. Неужели уже забыли как Интел все свои пентиум-процессоры проданные менял забесплатно?

Если программа работает в «стерильной среде» — это одно. А если на борту межпланетного зонда, где фиг знает какая температура, давление, радиация и перегрузки — это другое. Когда я читаю, что в каком-то межпланетном зонде автотесты выявили проблему в отдельной ячейке памяти, но перепрошивкой программы удалось исключить эту ячейку из использования — вот это высший пилотаж! По сути дела — написать программу с новой ошибкой, которая нейтрализует существующую ошибку.
Безусловно, в конкретных задачах (как ваш пример про межпланетный зонд) есть своя специфика. Например кто-нибудь из того-же Вконтакта мог сказать «Читаемость — фигня, главное оптимизация под Highload». Я не пытался написать гайд по программированию, тем более для людей запускающих шатлы, и пару раз написал в статье, что эти правила подходят лично мне.
В xcode целый день убил не мог понять в чем дело. Ниче не помогало… Оказалось мак как-то старый код закешировал, а все что я нового писал не воспринимал. После перезагрузки компьютера все мои изменения пропали и все заработало как надо. Перезагрузка просто xcode не помогала, только ребут.
На последнюю версию xcode очень многие плюются
В VS 2013 всё время нарываюсь на то, что иногда она путается во взаимосвязях проектов и не компилирует последние изменения — вместо Build надо нажимать Rebuild All. Если не удаётся вовремя об этом вспомнить, то можно несколько часов потратить на поиск несуществующей ошибки. Хорошо, что дебаггер может предупредить, что «код не тот» — но отладка чаще идёт по log-файлам, а не в дебаггере.
Код уже не тот. Хорошо звучит.
В IDE от JetBrains есть волшебное Files > Invalidate Caches / Restart..., в xcode нет ничего подобного?
Все так. Кроме того, современные прикладные программисты во многом зависят от стороннего и возможно некачественного кода всякого рода фреймворков, оберток, библиотек и утилит. И если от проверенного временем кода стандартной библиотеки и стабильных версий популярных прикладных библиотек в большинстве случаев действительно не стоит ждать подвоха, то менее известные утилиты постоянно несут в себе скрытую угрозу. Особенно их самые новые и самые старые версии.
Если код работает не верно — значит код написан не верно

Компьютер в вашем случае был прав, в отличие от неверно написанного кода VS2005 :)
Нет уж, позвольте-позвольте.
С точки зрения программиста — всё, что лежит «уровнем ниже» его кода — это как раз «компьютер»
Это и железо, и операционная система, и фреймворк, и компилятор, и библиотека, и байткод-машина.
Для программиста уже неважно где там в потрохах ошибка.
Ну вот пример из сравнительно недавнего моего прошлого: на определенных телефонах LG (еще java/midp) жава-машина работает так, что неправильно выполняется функция String.intern ( )
Ну вот неправильно и всё тут. Дает какие-то абстрактные результаты.
Всё. Алес. Сушите вёсла. Эту функцию нельзя реализовать с помощью других правильно работающих функций.
Можно лишь переделать логику программы, чтобы эту функцию не использовать.
Программист был неправ, что использовал функцию String.intern() на телефонах LG.
А я оказался неправ, использовав неподдерживаемую функцию «irony».
Или, например, вспомнить frontend и разработку на js. В одном браузере работает, в другом нет, а в третьем вроде все правильно, но все-таки немного по другому. И это очень часто. Не говоря уже о бесконечном количестве js-библиотек, которые появляются, как грибы после дождя, которыми уже пользуются тысячи программистов, но у которых под 300-500 issues на github.
Поэтому умение быстро найти в багтрекире то, с чем сам столкнулся, для программиста необходимо. И не нужно этого бояться. Это нормальный рабочий процесс.
Насчет «Просто начните» — очень дельный совет, бывает, что все отвлекает, мелочи всякие, чаты, но как только начнешь, то сидишь до ночи (что нарушает правило отдыха =\ ) крайне увлеченным)
НЛО прилетело и опубликовало эту надпись здесь
> Если код работает не верно — значит код написан не верно.
Не работает в случае с программированием микроконтроллеров. Можно долго отлаживать софт, когда криво работает железо. Но это больше придирка, статья хорошая.
Да, в errata можно много интересного прочитать…
Да и такая же беда с языками, браузерами и шимами/полифиллами (реализациями спек), API, ОС…
Мозг как-то сам собой переключается на разработку особо изощренных методов пыток для автора кода.

Уж это тооочно) Зато когда наоборот, когда мой код читают другие программисты, думаешь, что они восхищаются и говорят «Ах, да этот программист гений, ге-ний!».
А они тебя — шлёп мордой в говнокод.

Очень в этом плане отрезвляет практика code-review. Кстати некоторые программисты с каким-то садистским удовольствием проводят review чужого кода, неоднократно замечал.
А некоторые с садомазохистким, если этот код в «твоем» проекте и намекает с первых строк на огромный потенциал баготворства(
Все это работает в любой сфере деятельности, особенно если заменить слово компьютер на начальник/заказчик/клиент/мама (ненужное зачеркните).
НЛО прилетело и опубликовало эту надпись здесь
> Если код работает не верно — значит код написан не верно. Точка. Виноваты только вы.
Годится только для элементарных программ из одного оператора, да и то может не повезти (в GCC 4.5.? была ошибка, когда он при некотором стечении обстоятельств пытался подсунуть 64битный регистр в 32битный код).
За последние 4 года я наступил примерно на 5 багов в GCC, примерно на 10 в Intel C++ и на два в MS VC++. Разве что мне везло, и только один баг в VC++2010 я не нашел в интернете, но обходной путь для него оказался элементарным, а MS старые баги все равно не исправляет.

По остальным пунктам по существу согласен.
НЛО прилетело и опубликовало эту надпись здесь
Если у вас программа c -O2 падает, а с -O0 работает, то почти наверняка у вас там проблема с неинициализированными указателями. Иногда смотришь в такой код и не понимаешь, почему он вообще работал.
Ещё одна ситуация, когда программа падает буквально на ровном месте и совершенно не там, где кроется настоящая ошибка — выход за пределы массива/списка.
Допустим, у нас в списке всего 10 элементов, но как-то так получилось, что мы пытаемся обработать 150-й элемент. И он даже «обрабатывается», и всё работает дальше… чтобы потом упасть где-то в совершенно произвольном месте. Причём перестановка местами кусков кода или изменение флагов компилятора приводит к тому, что программа уже начинает падать в другом месте или даже начинает работать без падений.
Бывает смотришь на задачу, и не знаешь как к ней подступиться. С какой стороны начать? И вообще, что-то лень сегодня. «Посижу 10 минут во Вконтактике, потом начну. Ну, после кофе. Ну вот, старый код надо порефакторить, и потом начну. А это что-за таск с низким приоритетом? Выполню его и точно начну…».

У меня как-то получается наоборот.
Начать? Легко. Открыл VS, нашёл нужное место, создал нужный метод… Что теперь создать, массив, список или словарь? В каком порядке начать писать обработку? Нужна такая функция — она уже есть где-то в Solution или нет, если нет — в каком проекте её лучше написать? Ладно, пока отложим. Вон и список задач есть — что-то с низким приоритетом, что-то со свежими вопросами пользователей… Нет, ну их к чёрту, ещё отвлекут от основной задачи. Лучше новости почитаю… А, тут ещё и комментарии к ним? Вкусно… Что, куда три часа делись? Опять с собаками гулять. Но ничего, вот вернусь — точно всё напишу.
«Если код работает не верно — значит код написан не верно»
Тут привели много исключений из этого правила, все они имеют право на жизнь, но на практике в подавляющем большинстве случаев правило верное. Особенно оно проявляется на простых, банальных участках кода, где он набирается машинально, а мозг в это время строит воздушные замки где-то в другом месте.
Вот, буквально час назад сидел тупил: объявил две переменных-указателя (нужна была одна), инициализировал одну, использовал другую. При чём тупил в код в полной уверенности, «да что, блин, тут такого?»

И такие ситуации, опечатки, невнимательность, очень часты. Так что взял за правило искать косяки в своём коде и вокруг него, а не грешить на фреймворки и компиляторы. Хотя ошибки в последних тоже попадались.
Компиляторы тоже люди пишут.
Название статьи в стиле «Этого программиста звали Альберт Эйнштейн».
Если код работает не верно — значит код написан не верно

И еще — если вы уже 2 часа не можете найти, почему свеженаписанный код не работает, хотя проверили все уже 3 раза, то ошибка в том самом месте, где все настолько просто, что ошибиться никак нельзя.
НЛО прилетело и опубликовало эту надпись здесь
Я как-то раскопал реальный баг в фреймворке Windows Phone и мой солюшн по обходу до сих пор получает плюсики на stackoverflow.
хочется просто сказать «спасибо»
Согласна со всеми пунктами.
Успокойся и все получится

Не раз такое было! Битый час сидишь и думаешь почему оно не работает. Пошел прогулялся/поспал/поиграл/любая другая деятельность. Пришёл посмотрел и за 5 минут всё исправил.

Самое сложное — начать

Иногда это бывает чревато, я не раз попадался на том что вот просто так взял и начал, а потом понял что уже 4 утра и скоро зазвенит будильник! =)

Знай свои инструменты

Полчаса на изучение хоткеев sublimetext с экономило тучу времени.

Не будь перфекционистом

Интересное правило надо попробовать себя убедить останавливаться так же.
Один вопрос: как трудоголику научиться отдыхать?))

Сколько раз ловил себя, лазя по поиску с таким запросом, отлаживающим тот или иной баг в каком-либо проекте)))
Один вопрос: как трудоголику научиться отдыхать?))

Само придёт. Лет через 20. Потом возникнет вопрос, как научиться возвращаться в прежний режим.
Вижу вы знаете ответ на первый вопрос.
И может подскажете ответ на второй? )
Похоже, что никак. Даже вариант «воспитать нового трудоголика в своём коллективе» не работает.
Отдохнете, когда станете старым. В молодости нужно все сделать по максимому.
Здесь с Вами не соглашусь. Уже сейчас, будучи молодым, уже ощущаю как перегорает тело и разум, а это плохо скажется в более старшем возрасте, ибо буду не отдыхать, а по поликлиникам бегать из-за того, что в молодости, как раз, так и не научился отдыхать…
Мозг лучше знает, что ему сейчас важнее. И если есть возможность, лучше ему не мешать. Если он хочет работать — наверное, это правильно.
Но может помочь какое-нибудь гиковское увлечение, требующее физической нагрузки. Хорошим вариантом может быть, например, геокешинг — хорошее сочетание техники, азарта, планирования и путешествий. Мне ещё понравилась инфракрасная фотография — интересно, но, сидя дома, ничего не добьёшься. И мозг хорошо обманывается — он-то думает, что это такая же работа, как и программирование.
От работы нужно отдыхать с помощью смены деятельности. Т.е. ездить куда-то, заниматься спортом (сноуборд, велосипед).
Смена умственного труда физическим… Хм… В этом есть смысл)
Осталось победить "лень"… Но так лень )))))
Проблемы трудоголиков яйца выеденного не стоят по сравнению с проблемами лентяев. Трудоголик любит работать и проблема отдыха у него стоит только в связи с физическим здоровьем.

А теперь представьте себе, как дела обстоят у нормального человека лентяя. Работать ему тяжело, он любит отдыхать и ищет этого отдыха прямо в процессе работы. В результате отдыхать он толком не отдыхает, а работа у него не сделана потому, что он толком и не работает.

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

Мне бы ваши проблемы — говорит лентяй трудоголикам, и смеётся неврным смехом человека у которого нет перспектив, нет надежд и нет денег.
Все-таки бывают и в компиляторе ошибки. Однажды два дня провел обыскивая довольно большой кусок программы и так и не нашел в чем проблема, пока не отключил оптимизацию в компиляторе.
ну судя по описанию обычное UB
Всё правда )). Некоторые этапы сейчас у меня в процесе преодаления. Самый сложный «Читайте книги» — отвлекаюсь постоянно на всякое постороннее…
«Компьютер всегда прав» — не совсем верная формулировка, я чаще ее встречал в виде «компьютер делает только то, что ему сказали сделать». В таком виде можно убрать споры про баги компилятора.
Угу, оставив баги аппаратной части :)
Коротко:«хватит въебывать время, пойди и сделай работу в 5 раз быстрее» — для меня работает идеал но. Плюс планирование каждой задачи.
Не буду врать, у меня на полке скопилась внушительная стопка того, что я купил, но пока не читал
Как знакомо. Я специально купила «Совершенный код», чтобы точно прочитать. И всё не могу её осилить, даже стыдно, ведь некоторые перечитывают её каждый год! «Я ежегодно перечитываю ее на протяжении вот уже девяти лет и все еще узнаю много нового!» (с) Джон Роббинс
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации