Обновить
1083.98

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Computer Language Benchmarks Game — хватит самодурства

Время на прочтение1 мин
Количество просмотров6.2K
Появился сервис лет 10 назад назывался «Computer Language Shootout». Сейчас он называется The Computer Language Benchmarks Game. Сервис давал хоть какую-то возможность бегло оценить производительность реализаций языков программирования. Тема, конечно, пикантна. Время идёт, интерес к теме не падает. Есть одно «но». Cервис и раньше-то был весьма специфичен, но теперь дело совсем худо.
Читать дальше →

Концепция баррикады

Время на прочтение3 мин
Количество просмотров2K

Каждый программист когда-то давно, в начале своего Пути писал что-то типа вот этого:
double div( double a, double b )
{
	return a / b;
}


И был в полной уверенности, что эта функция делает именно то, что нужно — делит а на b. Но рано или поздно рядом оказывался друг или преподаватель, который объяснял, что эта функция делает еще одну важную в жизни любой программы вещь: валит её с исключением деления на ноль, если b равно нулю. После этого к будущему программисту приходило понимание необходимости проверки входных данных. Кто-то на этом решал вопрос исчерпанным, а кто-то приходил к мысли, что это только половина Дао.
Читать дальше →

Духи-покровители программиста

Время на прочтение3 мин
Количество просмотров4.7K
За душу программиста сражаются три могущественных духа-покровителя: Художник, Трудяга и Прагматик.

Если вы слышите внутри себя голос: «Ты не можешь рисовать», рисуйте во что бы то ни стало, пока голос не стихнет.
— Винсент ван Гог


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

Читать дальше →

Exception-ы и мифы о них

Время на прочтение5 мин
Количество просмотров17K
Уже не первый раз сталкиваюсь с негибким отношением к поднятию исключений. Именно к поднятию, потому что к перехвату у большинства мнение совпадает: перехватывай только тогда, когда на самом деле можешь обработать. Поднятие же воспринимается, как нечто исключительное, из ряда вон. Когда видят throw, начинают рассказывать кучу историй о том как...
Читать дальше →

Ваша программа — дворецкий

Время на прочтение4 мин
Количество просмотров3.9K
В этом посте я расскажу об одной интересной точке зрения на программное обеспечение, которую будет полезно узнать любому программисту. Суть в восприятии разрабатываемой Вами программы как дворецкого.

Когда я говорю «дворецкий», я подразумеваю слугу, официанта или любой другой обслуживающий персонал. Т.е. персону, работа которой состоит в помощи, обслуживании, выполнении за Вас грязной работы и умении пропасть с глаз долой за мгновение до того, как Вам бы этого захотелось.
Читать дальше →

Получение Y-комбинатора в 7 простых шагов

Время на прочтение3 мин
Количество просмотров7.1K
Y-комбинатор это метод реализации механизма рекурсии в языке программирования который не поддерживает его изначально (на самом деле, он используется больше для осуществления программирования мозгов). Однако требуется, чтобы язык поддерживал анонимные функции.
Читать дальше →

Обработка ошибок в Go: Defer, Panic и Recover

Время на прочтение5 мин
Количество просмотров72K
В языке Go используются обычные способы управления потоком выполнения: if, for, switch, goto. Есть ещё оператор go, чтобы запустить код в отдельной го-процедуре. А сейчас я бы хотел обсудить менее обычные способы: defer, panic и recover.

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

Например, посмотрим на функцию, которая открывает два файла и копирует содержимое из одного файла в другой:
Читать дальше →

Пора завязывать

Время на прочтение4 мин
Количество просмотров2.8K
EXPANDTAB!!!Может быть, стоило написать в «Я негодую». Не знаю. Пока писал, расколотил чашку с чаем и таким образом достиг хладнокровия.

Я про вот что: раз и два.

Есть же множество прекрасных тем для холиваров: Windows или Linux, IE или FF, Canon и Nikon, Intel и AMD, «на Украине» или «в Украине». Чужой или Хищник, наконец!

Так нет же, зацепились на ровном месте: пробелы и табуляции.

Почему на ровном месте?

Пора завязывать использовать пробелы вместо табуляции в коде

Время на прочтение3 мин
Количество просмотров94K

Этот топик — ответ на топик "Пора завязывать использовать символы табуляции в коде".
Я хотел было ответить к комментариях, но в силу объема и желания независимости от исходного топика решил создать новый топик.

Итак, под катом — почему табы лучше пробелов, самые значительные заблуждения касательно табов и как ими правильно пользоваться.

Читать дальше →

Apache Hadoop (Доклад Владимира Климонтовича на ADD-2010)

Время на прочтение17 мин
Количество просмотров8.9K
Представляем вашему вниманию доклад Владимира Климонтовича, сделанный им на конференции Application Developer Days, в котором он поделился своим опытом обработки ОЧЕНЬ БОЛЬШИХ объемов данных, и использование для этого NOSQL-подходов, в частности Apache Hadoop.



Ниже представлены текстовая версия доклада + видео + аудио и слайды презентации. Спасибо belonesox за работу над подготовкой материалов доклада.

Читать дальше →

delete, new[] в C++ и городские легенды об их сочетании

Время на прочтение5 мин
Количество просмотров74K
Если в коде на C++ был создан массив объектов с помощью «new[]», удалять этот массив нужно с помощью «delete[]» и ни в коем случае не с помощью «delete» (без скобок). Разумный вопрос: а не то что?

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

В соответствии со Стандартом C++, в этой ситуации поведение не определено. Все предположения – не более чем популярные городские легенды. Разберем подробно, почему.
Читать дальше →

Ближайшие события

Заметки о кросс–компиляции приложений под DD-WRT

Время на прочтение8 мин
Количество просмотров19K
Недавно у меня перестал работать вайфай-рутер и после некоторых раздумий я заказал Asus RT-N16. Хотелось наконец–то познакомиться с альтернативными прошивками. Характеристики этого рутера уже описывались на Хабре. Итак, DD-WRT установлена (v2.24), самба заведена, в первый юсб порт воткнута системная флешка, а во второй — внешний жесткий диск. А дальше я заинтересовался: а смогу ли я запустить свои программы на этом рутере? Я не нашел в сети руководства по сборке программ под рутер и надеюсь этой статьей восполнить пробел. Приведу пошаговое руководство с описанием небольших проблем, встреченных на пути.

В качестве подопытной программы мне хотелось запустить Easysync, о которой я недавно писал. Повторюсь, что это открытая программа для синхронизации файлов в стиле дропбокса. Программа написана с использованием Qt 4, а в качестве движка синхронизации используется Unison. Так что, эта статья описывает как откомпилировать Qt, Unison, Easysync для архитектуры MIPS и рассказывает о запуске Easysync на вашем домашнем рутере.
Поехали!

10 лет RSDN

Время на прочтение1 мин
Количество просмотров1.8K
Сегодня отмечает свой первый юбилей один из самых посещаемых и авторитетных ресурсов для русскоязычных программистов: RSDN.ru.
10 апреля 2001 года, на просторах рунета появился сайт, призванный объединить русскоговорящих программистов в одно большое сообщество: русскую сеть разработчиков программного обеспечения (или «RSDN» по-забугорному). Спустя пять дней, на форумах этого сайта появилось первое официально зафиксированное сообщение, так и оставшееся без ответа.
Читать дальше →

Потоки или события

Время на прочтение3 мин
Количество просмотров14K
Существует два способа обрабатывать параллельные запросы к серверу. Потоковые (threaded, синхронные) серверы используют множество одновременно выполняющихся потоков, каждый из которых обрабатывает один запрос. В это время событийные (evented, асинхронные) серверы выполняют единственной цикл событий, который обрабатывает все запросы.

Чтобы выбрать один из двух подходов, нужно определить профиль нагрузки на сервер.
Читать дальше →

Языки программирования: первая шутка

Время на прочтение4 мин
Количество просмотров15K
В языках программирования есть свои шутники и свои шутки. Собственно, большинство эзотерических языков программирования задумывались именно как шутки (конечно, если не как вызов общественности, как F*ckf*ck, или как упражнение для ума, как Brainfuck). Но есть один язык, который по праву заслужил почетное звание Первой Шутки. В далеком 1972 году, когда все существующие языки программирования были исключительно целесообразны и убийственно серьезны, ранним утром 26 мая пара шутников раздвинула границы сущего и придумала принципиально новый язык. Они окрестили его «Compiler Language With No Pronounceable Acronym», что по очевидным причинам сократилось до INTERCAL.

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

Прежде всего, справочное руководство. Позднейшие эзотерические языки концентрируют свою необычность в самой сути языка, их руководства ограничиваются сухими фактологическими описаниями команд и особенностей. The INTERCAL Programming Language Reference Manual — уникальное описание языка программирования, с эпиграфами из «Алисы в Стране Чудес» и ехидными комментариями, сказанными совершенно серьезным тоном. Кроме того, специально для этого языка авторы разработали систему эвфемизмов для использующихся служебных символов: ' — искра, " — кроличьи ушки, . — пятно, : — двойное пятно, , — хвост, ; — гибрид (хотя логичнее было бы «пятнистый хвост»), $ — большие деньги, ~ — загогулина и т.д. (полный список прилагается к руководству). Комбинирование кроличьих ушек с пятном для получения кролика запрещено!

Читать дальше →

Злые программисты

Время на прочтение1 мин
Количество просмотров968


Австралийский разработчик корпоративных бизнес-приложений Atlassian в честь 1 апреля решил сменить сферу деятельности и выпустить игру Angry Nerds. Она сделана по мотивам известного шедевра Angry Birds, но вместо птичек здесь программисты борются со зловредными багами.
Читать дальше →

Предотвращение рекурсии и ленивые вычисления в Java

Время на прочтение5 мин
Количество просмотров5.4K
Не так давно, я написал небольшой класс для автоматического кэширования и обновления произвольных значений. Пользоваться им было очень легко — стоило лишь создать анонимный класс с перегруженным методом update, а потом, когда нужно, вызывать функции для пометки значения устаревшим и для получения самого значения:
Читать дальше →

Где спряталась логика?

Время на прочтение4 мин
Количество просмотров4.4K

Вопрос


Очень часто при обсуждении программ употребляется термин «логика» или «бизнес-логика».
Например:
  • (о юнит-тестах) не обязательно добиваться стопроцентного покрытия кода тестами, достаточно тестировать лишь логику.
  • (о веб-приложениях) контроллер не должен содержать никакой бизнес-логики, а должен только вызывать методы других классов
  • В слое VIEW (то есть в JSP-файлах) не должно быть бизнес-логики


Так вот, кто скажет мне, что такое «логика»? Надо ли понимать под этим любой IF в коде? Но разве бывает код без IF'ов? Или (бизнес-)«логика» означает любую информацию, которая исходит от клиента? Но разве можем мы на деньги клиента делать что-то, чего он не заказывал? Не можем. Стало быть, весь наш код — это целиком «бизнес-логика» от клиента. Вот поэтому я никогда не мог понять, что же такое эта чёртова логика.

Ответ:

Вклад авторов