Debugging is like being the detective in a crime movie where you are also the murderer
In my 30+ year programming career, every single, bizarrely obscure bug that took weeks to chase down has ended up being a one-line fix.
"Dear young person, if you are a geek, the world needs you, and you will never run out of opportunities to apply your talents." (Donald Knuth)
"I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships." (Linus Torvalds)
Marissa Mayer (Google, Yahoo) делится секретом: "The key to sustaining loyalty in employees is making sure they get to do the things that are most important to them outside of work".
Да, были люди в наше время. Не то, что нынешнее племя: богатыри не вы! Архитектура Livejournal: информация из первых рук.
Мне кажется, это целый тренд: продукты, любимые настолько сильно, что их приятно даже ненавидеть. Критика того же Twitter настолько убийственна, что должна была бы стереть его в порошок. Но это не более чем любовная ссора. (Тим О'Рейли)
Краткая, неполная и, возможно, неточная история развития языков программирования: от "Hello World!" на гобелене с помощью перфокарт до языка Scala.
У нас качественный продукт, потому что найдены все баги? Вовсе не так: просто для багов характерно взаимное торможение, не позволяющее им раскачать продукт.
Крысы выручают друзей из беды и делятся с ними шоколадом. Вид запертого сородича вызывает у крысы отрицательные эмоции, от которых можно избавиться, только придя ему на помощь. Порой кажется, что баги не глупее крыс.
Как распознать в себе слабого программиста? Тщательно отобранные симптомы и эффективные оздоровительные препараты.
Буквы разные писать тонким перышком в тетрадь учат в школе: первые самостоятельные шаги в программировании. Школа будущего?
Старый баг борозды не испортит: как случайный пробел в аргументах команды rm может привести к удалению жизненно важных каталогов?
Да, были люди в наше время: Fabrice Bellard написал javascript-эмулятор Linux, работающий в браузере.
The very best testers will drag you, kicking and screaming if necessary, across the bug-bar threshold. Professional testers force you to become a better developer. Sometimes it's painful. But in a good way, like a heavy workout (Jeff Atwood).
There are two ways to write code: write code so simple there are obviously no bugs in it, or write code so complex that there are no obvious bugs in it (C.A.R. Hoare).
К вопросу о личности в истории IT: один в поле не воин? Или все же воин? Когорта блестящих умов, раздвинувших барьеры и проложивших путь.
Скажи мне кто твой друг и я скажу кто ты: Unix is user-friendly. It's just very selective about who its friends are.
I think there is a world market for maybe five computers (Thomas Watson, Chairman of IBM, 1943). Через 34 года: There is no reason for any individuals to have a computer in their home (Ken Olsen, President of DEC, 1977). Какие будут предсказания спустя 34 года (в 2011 году)?
Кто прав? Algorithms are for people who don't know how to buy RAM (Clay Shirky). Buying RAM is for people who don't know how to write Algorithms (Kevin Connolly).
When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong (R. Buckminster Fuller).
Documentation is like sex: when it is good, it is very, very good; and when it is bad, it is better than nothing. (Dick Brandon)
2010 год. Последовательность действий при решении задачи: Google, Coworkers, StackOverflow, RTFM, Think. Что появится еще через 10 лет? Искусственный разум?
Два подхода к проектированию информационной системы: "One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." (Tony Hoare)
Сергей Брин: "We came up with the notion that not all web pages are created equal. People are – but not web pages".
Подопечные крупным планом: настолько привлекательны, что становится неловко за косой взгляд в их сторону.
Шутка, в которой доля шутки: "If people built skyscrapers the way we build software, the first woodpecker would destroy civilization". (Brad Fitzpatrick)
The real complexity in our jobs is that all planning is done under conditions of uncertainty and ignorance. The code isn't the only think that changes. Schedules slip. New milestones are added for new features. Features are cut from the release. During development, everyone - marketers, developers and testers - comes to understand better what the product is really for. (Brian Marick)
Код, одинаково воспринимаемый различными компиляторами и интерпретаторами? Программа-полиглот: обман зрения, ловкость рук и никакого мошенничества.
Тестирование без страха и упрека: градом, осколками льда, "средней" и "крупной" птицей. Чем выше ставки, тем жестче испытания.
In every chain of reasoning, the evidence of the last conclusion can be no greater than that of the weakest link of the chain, whatever may be the strength of the rest. Thomas Reid, 1786.
Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Donald Knuth.
Невозможное возможно, если быть оптимистом и отказаться от стереотипов. Colin Powell, боевой генерал и эффективный политик, рассуждает о лидерстве в реалиях нашего времени.
О текстовых редакторах:vim ~/.emacs. Самый короткий анекдот для фанатов Vim и волна протеста от любителей Emacs.
The trouble with programmers is that you can never tell what a programmer is doing until it’s too late (Seymour Cray).
Комплимент от последователей. Hats off to superstar Larry Wall and Perl, very few people and technologies that have had the level of (positive :-) ) impact these 2 have had on the industry. The world is a better place because that guy was born! (PowerShell Team)
Coding in C++ is like a knife fight. The compiler is your first enemy, and the system you're writing is the second...
Coding in Perl is like dancing Argentine Tango. There is a learning curve of no little steepness, but once you've started using Perl you can hardly stop.
The second rule of Test Club is... you DO NOT talk about Test Club. Third rule of Test Club, a developer yells "stop," goes limp, taps out, the test is over... Fifth rule, many tests at a time. Sixth rule, no micromanagement, no cornflower blue ties. Seventh rule, tests will go on as long as they have to. And the eighth and final rule, if this is your first day at Test Club, you have to test.
If a software system is developed by an organization that has three development teams, the system will most likely have three sub-components or a three tiered architecture. The quality of the interfaces between those components or tiers can be predicted by the quality of communication between the teams.
Модель водопада: семь раз измерил требования и в путь. Гибкая модель (agile): а нет требований. Завтра все изменится. Будет день будет пища.
Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves. (Alan Kay)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. (Martin Golding)
О пользе пессимизма в разработке ПО: "That of course is the advantage of being pessimist; a pessimist gets nothing but pleasant surprises, an optimist nothing but unpleasant." (Рекс Стаут)
Старая любовь не ржавеет? PHP>Ruby>PHP: коней на переправе не меняют.
Орен Эйни: "Когда я общаюсь с потенциальным клиентом, я никогда не говорю ему, что продукт точно будет выпущен к такому-то сроку и на его разработку будет потрачена точно такая-то сумма. Оговаривать точные до дня сроки и точные до доллара затраты нечестно. Потому, что в 80 процентах случаев такие обещания не выполняются."
Programming is like sex: one mistake and you're providing support for a lifetime (Michael Sinz).
Your release is of sufficient quality if your customers are sufficiently happy.
Мастер-наладчик Steve Jobs готов к трудовым подвигам. Вот резюме ценного сотрудника.
Два типа специалистов: одни создают проблемы, другие их решают. Первым нужно помочь, вторым не мешать.
Samuel Beckett о жизни и тестировании: "Ever Tried. Ever failed. No matter. Try again. Fail again. Fail better."
Пользователь не понимает слово "качество". Его интересует только "возможность": проще (один клик), быстрее (вчера), эффективнее (все и сразу).
Не являются ли облачные вычисления еще одним витком спирали? Реинкарнация мейнфреймов в новой обертке? Пора заключать пари: что будет после облачных вычислений. A safe bet: персональные облака для всех желающих.
Bjarne Stroustrup о своем детище: C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.
Теория разбитых окон применима и к разработке ПО. Важно чувствовать грань между допустимыми шероховатостями в проекте и обвальным падением под откос.
"Do you pine for the nice days of minix-1.1, when men were men and wrote their own device drivers?.. This is a program for hackers by a hacker." Все ли готово к совершеннолетию Linux? Быть может, продукт для настоящих мужчин таки завоюет сердца слабаков? Или фи, не место на корабле?
"Regression testing"? What's that? If it compiles, it is good, if it boots up it is perfect. (Linus Torvalds, 1998)
Martin Fowler: "If you can easily change your decisions, this means it's less important to get them right which makes your life much simpler."
Не сотвори себе гуру. Нет тайных знаний, которые знает только он. Нет заветных методик. Есть твои задачи и множество вариантов их решения.
Windows XP и Vista, Perl5 и Perl6, VMware Server 1.0.* и 2.0, AVG 7.5 и 8.5. Прогресс для "избранных" или лучшее враг хорошего? Забота о пользователе или маркетинговый пшик?
Cem Kaner: "A program which perfectly meets a lousy specification is a lousy program." Спецификация: путь к востребованному продукту или жалкая отмазка?
Martin Fowler: "Manual scripted testing should be a human rights violation". Есть две альтернативы: автоматизировать все что можно и/или в каждой сессии ручного тестирования идти нехоженными тропами.
Почерк мастера. Дональд Кнут платил за ошибки, найденные в его программах TeX, Metafont и книгах об искусстве программирования. Вознаграждения удваивались каждый код (с $2.56 до $327.68), но большинство чеков остались непогашенными люди оставляли их себе как сувенир.
Этимология термина "жучок" (bug) намного прозаичнее эпизода с заблудившейся бабочкой, севшей на реле компьютера Mark II Aiken Relay Calculator. В 1848 году Томас Эдисон, описывая механические неисправности, записал: "Сначала работает интуиция и приходит озарение, но затем возникают трудности вещь перестает работать, и тогда проявляют себя "жучки" маленькие поломки и проблемы:" Очевидно, что этот термин уже был жаргонным во времена Эдисона (IBM developerWorks).
Все-таки десятки различных дистрибутивов Linux палка о двух концах. С одной стороны, это свобода выбора, но с другой стороны нет эффекта синергии, когда результаты отдельных энтузиастов многократно улучшаются за счет совместной работы над проектом. Лебедь, рак да щука? Хорошо, что телега (ядро) одна.
Смешанные чувства: заново найти баг, который уже находил три года назад. Оба раза детальные исследования, одни и те же результаты. За это время баг вырос, возмужал, его актуальность повысилась, а он ползает себе потихоньку среди десятков таких же счастливцев. "Как же так? У нас есть такой баг?" "Ага, три года, уже совсем взрослый".
Мелочная обида программиста: сидеть полночи, перелопатить кучу данных в поисках бага, последовательно отсекать разные гипотезы, пока наконец не проясняется, что дело в факторе X, на первый взгляд безобидном, чтобы утром, зайдя в почту, чтобы отправить об этом письмо, наткнуться на только что пришедшее, от product manager'а: "Да, кстати, я тут подумала, а не может быть, что наш баг происходит из-за X?" (C) avva.
Работа хорошего тестировщика не сводится к поиску багов. Скорее, он специальный корреспондент или даже папарацци найти "жареные факты" в приложении и представить их на суд общественности.
За двумя багами погонишься ни одного не поймаешь. Начинаем с самого грозного, второй далеко не убежит.
Интересно, есть ли в архитектуре и строительстве инженеры по качеству? "Туда не ходи, сюда ходи", "Здесь у тебя крышу снесет".
Порой охотник и жертва меняются местами: попытки воспроизвести латентный баг изнуряют так, что иногда хочется прилечь у костра, смотреть в звездное небо и ни о чем не думать.
У "правильного" решения всегда есть один недостаток скрытые риски. Если с "плохим" решением все ясно, то с "хорошим" возможны большие сюрпризы.
Высшая точка в карьере бага признание законной функциональностью продукта (It's THE feature, not a bug). Как багу взойти на пьедестал? Надежно прятаться до тех пор, пока уничтожить его не станет дороже чем оставить.
Парадокс. С одной стороны, информационные технологии развиваются гигантскими темпами. Достаточно вспомнить ЭВМ "ЕС" двадцатилетней давности. С другой стороны, практически ничего не изменилось в методиках обеспечения качества систем. Та же неопределенность, те же риски.
Качество неуловимо. Это критерий, которому можно дать множество формулировок, но невозможно точно измерить. Идеальное качество всегда приветствуется, но никогда не является абсолютной целью. И все же мы к нему стремимся это условия игры по созданию любого программного продукта.
Your customers ... are not buying a product, they are buying your assurances that their expectations for that product will be met. You haven't got anything to sell but 'Quality'. (Source: John Guaspari, "I know when I see it" 1985, p77)
Ведь нам нужна одна победа мы за ценой не постоим. Пиррова победа в разработке ПО выпуск продукта с коротким жизненным циклом. Мелькнул, засветился и канул в Небытие.
У каждого бага своя судьба, своя биография. Баг, получивший "high priority" и "low severity", уничтожается мгновенно. Багу с "low priority" и "high severity" уготована долгая счастливая жизнь.
Недалекий человек считает себя умным, а умный недалеким. Какой тестировщик не считает себя великим программистом? Какой программист не знает, как правильно тестировать? Объективная самооценка еще никому не повредила. У каждого из нас есть время и пространство для роста.
Нильс Бор: "Волновая функция описывает не атомный мир, а наши знания об атомном мире." Найденные баги не характеризуют функциональность продукта, но служат индикацией понимания его работы. Скажи мне твои баги, и я скажу, что ты знаешь о продукте.
Даниил Гранин: "В науке ценен не вопрос, а ответ, его возможность... В искусстве важен не ответ, а вопрос, да такой, чтобы загнать в тупик, чем безвыходнее вопрос, тем он ценнее." Тестирование находится где-то посередине: вопрос-ответ, вопрос-ответ, вопрос-ответ.
Забавно, что профессия тестировщика накладывает печать на его мышление. Трудно доверять системам бронирования билетов ("э, а как там у них с резервным копированием"), электронным платежам ("ничего потом не докажешь") и даже барышне на телефоне, которая записывает тебя к врачу ("Enter нажала?").
Всегда ли поломка системы означает наличие бага? Есть сайт Гарри Поттера. Сайт простой, для общения друзей. Гарри держит сайт на самом дешевом тарифе. Про сайт узнают маглы и, сгорая от нетерпения, рвутся посмотреть. Service unavailable. Еще бы. Гарри и не рассчитывал на такую нагрузку.
Интересно, есть ли будущее у ReactOS? На случай, если Microsoft прикроет Windows XP. Будем ли мы нахваливать Vista после выхода Windows 7, которую считают прорывом? Когда-то прорывом считали Vista...
Чем сильнее прижимают сроки, тем меньше времени остается для вдумчивого, творческого анализа. И тем менее важным это кажется в такие минуты.
Что такое качество программного обеспечения и как его улучшить.
Т1. Мы думали, что это баг, а тут, оказывается, вирус затесался.
Т2. Не баги горшки обжигают?
Подходы к разработке, тестированию и внедрению приложений.
Debugging is like being the detective in a crime movie where you are also the murderer
In my 30+ year programming career, every single, bizarrely obscure bug that took weeks to chase down has ended up being a one-line fix.