|
|
|
Магический квадрат
Типичный потому, что а) решение тривиальное, б) взрослые люди не могут решить, в) в условии задачи две ошибки.
Чтобы два раза не ходить и продолжить тему олимпиад, расскажу, как я не занял абсолютно ничего на олимпиаде по информатике.
Одной из задач было построение магического квадрата со стороной равной 4.
Программа в результате своей работы должна была вывести на экран этот самый магический квадрат.
Тут и началась мучительная борьба с собой. Дело в том, что для построения магических квадратов есть несколько «некомпьютерных» алгоритмов, особенно для построения частного случая. А от нас как раз требовалось вывести им один квадрат, то есть частного случая было бы достаточно.
Этих алгоритмов, я, естественно, не знал.
Есть и «компьютерные» алгоритмы, типа таких, (там есть пример кода на басике) в стиле «куча вложенных циклов с однотипными проверками».
Кончилось тем, что я за полчаса попытался сам придумать алгоритм построения частного случая, потом понял, что даже если у меня это получится, то это будет смотреться, как voodoo magic.
Я осознал, что от меня ожидали именно кучи вложенных циклов.
Но я не стал их писать, потому что это было очень скучно.
Как я не стал хакером
И буквально через неделю была
Ну и остальные задачи в таком же духе.
Закончил первым. Подходит учитель и, натурально, пугается. Оказывается, «задача» выполнялась проще: паскаль тупо позволяет делать цикл от «A» до «Z». А таблицу символов, коды и прочее они не проходили. Но меня это мало ебало, я знал только Басик.
Ну и вторую историю я уже рассказывал — в девятом классе перешел я в другую школу и другой класс. На первом же уроке залупился на учительницу информатики. Со словами «раз ты такой самый умный, поедешь в этом году на городскую олимпиаду» она меня сначала выгнала из класса, а потом, натурально, отправила на олимпиаду.
Как вы поняли, знал я, разумеется, только БАСИК (и ассемблер, что самое смешное) компьютера ZX Spectrum, так как у меня всё еще был Spectrum. Паскаль не прижился по причине отсутствия практики, так как PC мне упорно не покупали.
Так что на олимпиаду я пришел с выданной мне дискетой qbasic-а. Который, разумеется, видел впервые. Но Басик он и в африке Басик. Мурыжа кнопку F1 (ура встроенному хелпу), я сделал все задания, нашел баг в условии одного из них, докопался по этому поводу до контролеров и отправился домой.
Вечером мне позвонила охуевшая учительница информатики и поздравила с первым местом.
А в Универ я пошел учиться все равно на журналиста.
ООП, PHP (и идиоты, куда же без них)
вообще, изучая продукты жизнедеятельности php программистов, возникает ощущение, что это какие-то марсиане. про разделение данных и представления никто не слышал, что такое классы и как ими пользоваться никто не знает и т.д.
Применять везде и всегда ООП — это бред. Нужно применять тот инструмент, который удобнее. Писать на ООП, например, блог — это убивать глистов напалмом. Бирман про это написал достаточно доходчиво.
«Разделение данных и представления» — еще один бред настоящего программиста™. Php изначально был создан для… вставки кусков кода в html. То есть — хахаха — смешивания данных и представления. Не потому, что язык дефективный, а потому что часто это «смешивание» — оптимальный путь.
Когда настоящий программист™ садиться писать на Php, выходит вот такое гавно, тормозное и глючное. Потому что настоящий программист настолько ограничен «правильной парадигмой», что программировать по-другому уже не может.
На сайте php написано:
PHP is an HTML-embedded scripting language. The goal of the language is to allow web developers to write dynamically generated pages quickly.
И давайте его так и использовать.
Смотри также:
Обещанный пост про PHP
Объектная парадигма провалилась
Horde
Сроки
«Сегодня» завтра.
«Завтра» напомнить завтра, что уже сегодня (см. «сегодня»).
«В течение недели» в следующую среду.
«В течение недели, но до выходных, пожалуйста» в понедельник.
«Через две недели» месяц.*
«Месяц» неопределенная, очень большая величина времени.
«Три месяца» три неопределенные, очень большие величины времени.
«К осени» когда выпадет снег. Снег выпадает каждый год, поэтому «к осени» является наиболее благоприятным сроком, пропустить который практически невозможно.
«Через год» не используется, ибо есть «к осени».
* Популярно заблуждение, что две недели это 14 дней. Это не так. Две недели это 14 дней + «в течение недели» (ибо вторая неделя еще не кончилась) + завтра («один день погоды не сделает»). В особых случаях отсчет «двух недель» начинается со следующего понедельника, так выигрывается еще несколько дней.
Если повезет, то в результате выходит месяц срока и опоздание всего на один день («завтра»).
Объектная парадигма провалилась
Рассматривая Horde, нельзя не согласиться с этим утверждением.
Смотри также:
Обещанный пост про PHP
ООП, PHP (и идиоты, куда же без них)
Horde
SquirrelMail-2.
Вот такое в программировании не прощается вне зависимости от языка.
Цитата из комментария:
A lot of this code is similar to the code in addrbook_search_html.html -- If you change one, change the other one too!
Гениальные идеи
Оказывается, что идея хорошая и более того хакир Болк уже эту идею пару раз использовал.
Сразу возникают противоречивые чувства:
1. Досада. Почему про такие вещи нельзя прочитать почти нигде? Нет, я серьезно: куда ни глянь всюду обсуждения уровня «как передеть переменную выше. например, то где она должна определится на 20 строке, а то где она включается в код на 30 строке, как ее можно передать выше?». На самом деле понятно, почему: 90% людей идиоты. Всегда и везде. Оставшиеся 10% заняты тем, что молча работают. Если они начнут
2. Радость. Как хорошо быть умным, придумывать умные вещи и узнавать, что они работают.
Вот, такие дела.
В конце не будет никакой морали.
Анаграммы
Т.е. вводишь, например, «мреипрна», а он тебе выдает «например».
Пишите свои варианты решения в комментарии.
Написано как обычно хорошо и убедительно, но опять одна банальщина.
Цитата: Через три года у фирмы было то, что можно назвать персональным компьютером, сеть Ethernet, перекрывающиеся окна и мышь. И рядом несколько очень хорошо написанных статей по программированию: раз А я думал, что я один такой.
Как написано в качестве эпиграфа здесь. Я на самом деле не программист. Я, конечно, умею программировать, но… не люблю это делать. Я просто люблю решать проблемы (ну и создавать заодно). Я скорее разработчик или дизайнер (дизайнер это не «оформитель», а, опять таки, «разработчик»). Я умею писать такие ТЗ, что самому читать приятно. Дело в том, что я умею программировать, поэтому мои ТЗ основаны не только на «а вот хочу того и того», а еще и на знании «почему хоть то-то и то-то правильно, а то-то и то-то нет, и как это все в конце концов реализовать». Лирическое отступление: На прошлом месте работы начальник как-то сказал что-то вроде (за точность не ручаюсь, но по духу примерно так) «Вот ты написал два ТЗ, а кому оно нужно? Наш программист сам знает, что нужно». Потом, увидив Spesta, он сказал (дословно): «Блин, классная статистика. Гораздо лучше Киселевской ты ему ее показывал?». (Диме Кисилеву привет!). При этом я, с присущей мне скромностью, не считаю, что оно лучше запрограммировано. Оно лучше придумано. Именно для этого и нужно ТЗ не смотря на то, что программист знает, «что нужно», главное это «как нужно», потому что конечному пользователю все равно общаться с уровнем «как нужно», а «что нужно» его не интересует. То есть пользователю совершенно не важно, что «нужно собирать такую-то статистику». Ему важно, как потом работать с этой статистикой. Ну, это мы уже залезли, опять же, в интерфейс… Я тут пару дней думал на тему «Идеальная CMS». Здесь, опять же, проходит грань между программистом и разработчиком. Я придумал пару архитектурных решений и свежих идей, которые «программист» не придумал бы только потому, что программисту не доводилось так плотно общаться с контентом, как мне. Основная проблема в том, что я знаю, как ее сделать, но делать не хочу: очень уж лениво так много программировать. Есть, конечно, хороший принцип «If you want something to be done do it yourself», но…
В ходе дискусии звучали предложения сделать интерфейс, позволяющий писать драйверы для пищания азбукой Морзе на PC-спикере и саунд-бластере и декодировать эту азбуку Морзе на соседней машине с микрофоном.
Работа в телефонных гигантах неторопливая, но S. бездельничать не любил, и решил заняться оптимизацией. В одном из Больших Шкафов обнаружилась база данных, а в ней таблица с парами чисел: 1-3, 2-6, 3-9, … , 1000000-3000000. Hичтоже сумняшеся, S. таблицу стер, а обращения к ней заменил строчкой B=Ax3. Шкаф, радостно заурчав, продолжал функционировать. Отсутствие таблицы начальство заметило (и то по чистой случайности) через неделю. Состоялся знаменательный диалог: Где таблица? В конце концов, проявив завидную корпоративную мудрость, начальник оставил S. в покое. А по AB&C долго ходили легенды о сумасшедшем бородатом русском, который ПРИДУМАЛ ФОРМУЛУ. Update. Вот что пишут. Это старая байка. На самом деле, большие шкафы не умели умножать. То есть умели, но программно и очень долго. Поэтому была таблица. А «сумасшедший» русский придумал вот что: Со временем байка сохранилась, а смысл потерялся, т. к. владельцу «Пентиума», трудно себе представить, что большой шкаф не умел аппаратно умножать.
«Как это не удивительно, но есть люди, которые называют меня так: „программист“ или так: „господин программист“. И это не смотря на то, что программированию я уделяю не больше времени, чем, скажем, сну, игре на гитаре или чтению книг. Никто меня не называет сновидцем, гитаристом или библиофилом. Должность, которая я занимаю, мало того, что не относится напрямую к программированию, её название даже не содержит букву „п“. Да, по образованию я математик системный программист. Но у меня есть диплом по профессии „монтаж и наладка автоматизированных систем“. Да, я хорошо программирую, но я многое делаю хорошо руки, спасибо папе, выпрямлены ещё в детстве, есть голова начинённая мозгом и генератор идей по любому поводу. Похоже, что компьютер, несмотря на все усилия, до сих пор является для многих во многом мистической машиной, а программы кажутся исполненными сакральным смыслом». Foo, bar и FUBAR
Диалог с пользователем
Craftsmanship
Making software is not a manufacturing process. In the 1980s everyone was running around terrified that Japanese software companies were setting up «software factories» that could churn out high quality code on an assembly line. It didnt make any sense then and it doesnt make sense now. Shoving a lot of programmers into a room and lining them up in neat rows did not really help get the bug counts down.
![]()
Программирование
В 1970 г. фирма «Xerox» создала научный центр «Palo Alto Research Center» (PARC) в Пало Альто, Калифорния, где под одной крышей собрала лучшие умы в области информационных технологий того времени и поставила перед ними задачу создания технологий будущего, не заботясь о практической применимости и выполнимости проектов.
и два
Производительное кодирование
Но что просто выводит меня из себя, так это то, что ещё на первой моей работе я понял производительное кодирование отнимает у меня, как разработчика, в среднем по
![]()
Стили программирования на PHP
Я не программист
I actually hate programming,
but I love solving problems.
Rasmus Lerdorf![]()
Морзе
Словарь ненормативной лексики программиста
One-letter aliases
I read somewhere that having lots of two letter commands makes things too cryptic.
Yeah, that's why I have one-letter aliases.
Летмишоую
Таблица не нужна.
Как это не нужна?
Hу, не нужна. Летмишоую. Вот: B=Ax3
Что это?
Вместо таблицы.
А где таблица?
Я ее стер. Hе нужна.
Как стер???
Летмишоую. Вот, работает. B=Ax3
Hу, работает. А где таблица-то?
…
A=(B сдвиг влево)+B, что эквивалентно умножению на 3Программист