Обновить
512K+

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

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

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

Стековые языки программирования

Время на прочтение6 мин
Охват и читатели19K
concatenative
Функциональное программирование снова в моде. В зависимости от того, предпочитаете ли вы классику или хардкор, страдаете от навязанных промышленных стандартов или вы просто хипстер, вашим любимым предпочтением может быть Scala, Haskell, F# или даже старый добрый Lisp. Такие сочетания слов, как функция высшего порядка, отсутствие побочных эффектов, и даже монады, ласкают слух всех «неокрепших юных умов», будь-то ребят из JetBrains или студента, впервые увидевшего SICP.

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

Почему я выбираю D

Время на прочтение19 мин
Охват и читатели14K

Вместо введения


Добрый день, Хабралюди.
Хотел бы поделиться со всеми моим скромным опытом выбора языка программирования для своих проектов. Сразу хочу подчеркнуть – я выбирал язык исходя из собственных нужд, и, вполне вероятно, что ваш выбор в аналогичных условиях может быть другим. Все же я искренне надеюсь, что эта статья будет полезной, так как в ней достаточно подробно и аргументировано проводится сравнение D с C++ и C#, а так же упоминаются свыше десяти различных языков, принадлежащих к различным классам и реализующих различные парадигмы. Сам D разрабатывается как высокоуровневый язык для системного и прикладного программирования.
Читать дальше →

Еще раз про Bridge (в картинках)

Время на прочтение1 мин
Охват и читатели4.6K
Еще раз, если позволит сообщество, обращусь к теме паттерна Мост (Bridge), ибо последние статьи, на мой взгляд, объясняют его не так просто, как нужно.

Основная идея: «Используем Мост там, где нужно менять не только имплементацию, но и абстракцию».

Одна картинка стоит 1000 слов…

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

Почему мы создали Джулию, новый ЯП для технических вычислений

Время на прочтение3 мин
Охват и читатели10K
Если вкратце, потому что мы жадные.

Мы продвинутые пользователи Matlab. Некоторые из нас хакеры Lisp. Некоторые питонисты, другие рубисты, есть ещё Perl-хакеры. Среди нас есть такие, кто использовал Mathematica раньше, чем у него начали расти волосы на лице. Есть и такие, у кого до сих пор не выросли. Мы построили больше графиков на R, чем способен любой здравомыслящий человек. C — это язык, который мы бы взяли на необитаемый остров.

Мы любим все эти языки; они прекрасны и могучи. Для той работы, которую мы делаем — научные вычисления, машинное обучение, дата-майнинг, крупномасштабная линейная алгебра, распределённые и параллельные вычисления — каждый идеально подходит в определённом аспекте, но ужасен в других. Каждый из них — это компромисс.

Мы жадные: мы хотим больше.
Читать дальше →

О протоколах передачи данных

Время на прочтение6 мин
Охват и читатели92K
В этой статье я хочу поделиться личным, не претендующим на академичность, опытом в работе с различными закрытыми протоколами передачи данными (в основном на прикладном-сеансовом уровнях).

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

Какими свойствами и особенностями обладает хороший, годный грамотный, качественный протокол?
Читать дальше →

А зачем мне ТЗ? Я и так знаю!

Время на прочтение5 мин
Охват и читатели28K
Проблема _непрочтения_ ТЗ встает практически каждый раз, когда "написатели" ТЗ и разработчики — люди из разных контор.

Этот пост — о Техническом Задании на разработку интерфейсов [для пользователей].

Разработчики – такие же люди, как и все. Читать талмуд об интерфейсе, написанный канцелярским языком – наверняка не очень приятное времяпровождение. Специалисты по интерфейсам разрабатывают ТЗ и передают их Заказчикам. И просят прочитать техническое задание (или спецификацию) – о том, как разрабатывать и изменять спроектированный интерфейс.

Что включает в себя техническое задание для разработки спроектированного интерфейса?


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

Наиболее часто встречающаяся структура предложений в русском языке по версии библиотеки Флибуста

Время на прочтение6 мин
Охват и читатели4.2K
Я программист php, но захотел расширить горизонты, узнать что ни будь новое. Поэтому решил поучить другие языки и технологии. Выбор пал пока на perl, python и mysql.

Был взят замечательный пакет pymorphy , библиотека Флибуста (только .fb2), sedna для хранения fb2, mysql percona 5.1 для хранения статистики и маленький напильник. Была создана примитивная myisam табличка куда записывалась сколько встречалось предложение, и описание частей речи этого предложения.
Читать дальше →

UTF-8: Кодирование и декодирование

Время на прочтение3 мин
Охват и читатели226K

Причиной разобраться в том, как же работает UTF-8 и что такое Юникод заставил тот факт, что VBScript не имеет встроенных функций работы с UTF-8. А так как ничего рабочего не нашел, то пришлось писть/дописывать самому. Опыт на мой взгляд полезный в любом случае. Для лучшего понимания начну с теории.


О Юникоде


До появления Юникода широко использовались 8-битные кодировки, главные минусы которых очевидны:

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

Бесплатная электронная книга по шаблонам проектирования на украинском языке

Время на прочтение1 мин
Охват и читатели7.1K
Хабравчане, позвольте вам представить мой небольшой и скромный труд по шаблонам проектирования на украинском языке. Заранее извините, если вы не из Украины.

image

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

Освежите в своей памяти подзабытые дизайн паттерны!

Скачать книгу

В нескольких словах
Книгу я написал с добрыми намерениями. Их у меня было несколько. Я хотел удостовериться, что сам понимаю все классические дизайн паттерны. Ресурсов для этого достаточно много, но я решил реализовать эти паттерны самостоятельно и придумать собственные примеры. Таким образом, начиная С 16 января 2010 я писал блог посты, которие так или иначе вызвали интерес у читателей. Чтобы этот вклад в программирование был более четким, у меня возникло желание выпустить небольшую книгу, которая стала бы коллекцией этих блог постов.

Посетите сайт книги: http://designpatterns.andriybuday.com/

Любые конструктивные замечания возьму во внимание. Если вы считаете эту работу не стоящой внимания, можете об этом упомянуть в комментариях.

Точное вычисление геометрических предикатов

Время на прочтение7 мин
Охват и читатели11K
Доброго вам дня, коллеги. Предлагаю вам прочитать статью о базовом аспекте вычислительной геометрии — точном вычислении предикатов.

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

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

Итак, если вы хотите знать, почему вычислительная геометрия не является «наукой о подборе эпсилонов» и как можно корректно и эффективно реализовать геометрический алгоритм, жмите
Читать дальше →

В чём смысл?

Время на прочтение2 мин
Охват и читатели13K
	SomeFunction()
	{
	    ...
	    if (false)
	    {
	        ...
	    }
	    ...
	}
	

Зачем может быть нужен блок if (false)?

Предположим, что:
  1. Это не ошибка и не забывчивость.
  2. if и false — это именно оператор условия и логическая ложь, а не какие-то хитрости с макросами\строками и т.д.

Пару вариантов ответа под катом. Желающие высказать свои идеи приглашаются мимо отгадки сразу в комментарии.
Читать дальше →

Еще один рейтинг популярности языков программирования

Время на прочтение1 мин
Охват и читатели17K
Я нашел еще один (очень простой) график, отражающий рейтинг языков программирования. Всё элементарно: по горизонтали — количество проектов на Github, по вертикали — количество вопросов на Stackoverflow.



Я позволил себе провести на этом графике две красные диагональные линии, чтобы показать как наглядно отделены друг от друга мейнстрим (C++, C#, Java, PHP, Javascript и т.д.), группа «альтернативного мировозрения» (Scala, Haskell, Erlang, Prolog, Lisp) и откровенный трэш (всё, что ниже). По-моему, проще некуда. Никаких там годовых колебаний в полтора процента, высчитанных по непонятным формулам.
Взято тут.

UPD: сорри за мини-троллинг со словом «трэш» — зато он породил весьма интересную дискуссию в комментариях. Всем высказавшимся — спасибо.

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

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

Время на прочтение1 мин
Охват и читатели52K


Февральский рейтинг языков программирования, публикуемый компанией Tiobe, показал следующее:
  • Самыми популярными языками программирования остаются Java (первое место) и С, причем отрыв последнего от лидера весьма мал. Однако же, лидерство этой пары очевидно.
  • Самым популярным языком программирования серверной части web-приложений остается PHP. Python и Perl отстают от него довольно значительно.
  • JavaScript — топ-язык для клиентского web-программирования.
  • Значительно выросла доля Objective-C (5-е место): вероятно, играет роль популярность продукции Apple.
  • Доля объектно-ориентированных языков составляет около 50%, процедурных — 36%.


Tiobe при составлении рейтинга популярности учитывает число специалистов по языку, число существующих учебных курсов по нему, вендоров, поддерживающих язык, а также количество кода, индексируемого поисковыми системами.
Посмотреть топ-20

Молитва «Си наш»

Время на прочтение1 мин
Охват и читатели8.4K
Наткнулся на сайте испанского сообщества С-программистов на интересную интерпретация молитвы «Отче наш» за авторством некоего Docma. Я позволил себе вольность сделать перевод на великий и могучий.

В статье на Википедии приводятся два варианта молитвы: от Матфея и от Луки. В переводе я использовал элементы обоих для лучшего звучания.

C наш, сущий в памяти!
да компилируется код Твой;
да приидет царствие Софта Твоего;
да будут действительны указатели Твои
и в ОЗУ, как на жестком диске;
массив наш насущный подавай нам на каждый день;
и прости нам варнинги наши,
как и мы избавляемся от ошибок наших;
и не введи нас в бесконечный цикл,
но избавь нас от винды.
Ибо Твое есть Царство и сила и слава во веки.
Энтер.
K&R.16:64:256:1—8


Оригинал на испанском:
C Nuestro que estas en la Memoria,
Compilado sea tu código,
venga a nosotros tu software,
carguense tus punteros.
así en la RAM como en el Disco Duro,
Danos hoy nuestro Array de cada día,
Perdona nuestros Warnings,
así como nosotros también los eliminamos,
no nos dejes caer en Bucles,
y libranos del Windows, Enter.

Источник

Видео: Антон Кекс. Асинхронное программирование с Node.js

Время на прочтение1 мин
Охват и читатели2.3K
Node.js – платформа для построения быстрых масштабируемых server-side приложений на JavaScript. Вопреки распространённому отношению к JavaScript как к “несерьёзному” языку, Node.js позволяет писать вполне серьёзные вещи. Node.js – это разруливамая событиями, не блокирующая I/O модель, что делает её легковесной и эффективной. Идеально подходит для приложений, нагруженных данными.

О Node.js уже писали на хабре, а в этом видео Антон Кекс рассказывает о Node.js, попутно рассказывая про опыт использования в некоторых реальных проектах.

www.devclub.eu/2012/02/03/anton-keks-nodejs

«Программист» — это сверхобобщение

Время на прочтение3 мин
Охват и читатели8.2K
В этом коде могут быть ошибки; я только доказал, что он правилен, а не проверял его.
Дональд Кнут

Сегодня я наткнулся на пост, в котором утверждалось, что использовать функцию C++ STL make_heap нельзя, потому что почти никто не умеет использовать ее правильно. Сначала я возмутился смехотворностью этой идеи — любой человек, имеющий хотя бы начальное представление об алгоритмах, должен знать, как правильно использовать make_heap. Но потом я задумался о том, сколько программистов не знают, что такое куча, более того, им это даже не нужно… А потом я понял, что все эти люди в равной степени зовутся программистами.

Когда я был маленьким, мне давали множество плохих советов о правильных техниках программирования. За прошедшие годы я осознал, что большинство советов не были плохими сами по себе, но давались в отрыве от контекста. Расцвет стартапов, наблюдающийся в настоящее время, заставил многих хакеров осознать, что «эффективность не имеет значения» — совет, таящий в себе множество ловушек и нюансов контекста, особенно когда речь идет о сложных архитектурах, которые могут взаимодействовать неожиданным образом. Эффект испорченного телефона, возникающий из-за недостатка контекста в таких высказываниях, сам по себе представляет проблему, но на самом деле он — лишь симптом проблемы более глубокой.

Термин «программист» покрывает колоссальный спектр способностей и умений. По вертикальной оси, программист может едва уметь писать на vbscript — или разрабатывать компиляторы для Intel или научный софт для авиакомпаний. По горизонтальной оси, он может быть экспертом в базах данных, улучшать производительность GPU, писать библиотеки параллельных вычислений, физические движки или драйвера для принтеров, заниматься обработкой изображений, генерацией 3D моделей или исследованиями в области искусственного интеллекта, использовать coffeescript, HTML5 и AJAX для разработки веб-приложений или nginx и PHP для разработки LAMP-стека, на котором веб-приложения работают… И это все — программисты.
Читать дальше →

Метапрограммирование

Время на прочтение9 мин
Охват и читатели62K
Целью этой статьи есть привлечение внимания широкой ИТ-шной общественности к метапрограммированию и всем его многочисленным формам и техникам. Я постарался собрать классификацию всего, что знаю по этой теме, и показать ее применимость не только в умозрительных задачах, но и в разработке рядовых приложений. Но это скорее план для дальнейшего изучения и, я надеюсь, толчек для более активного обсуждения.

UPD: Более новая статья: Метапрограммирование с примерами на JavaScript. И лекция по статье на Youtube (лекция записана в Киевском политехническом институте 18 апреля 2019 года в рамках курса «100 видео-лекций по программированию»):


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

Где хранить пользовательские настройки

Время на прочтение2 мин
Охват и читатели3.2K
Когда-то, во времена Вседозволенности и Хаоса программы хранили настройки пользователей где-придётся. Многие держали одну копию настроек на всю систему. Со временем все ОС обзавелись нормальными профилями пользователей, начали ограничивать доступ к системным папкам и всех программистов стали с яслей учить хранить настройки пользователя в папке (ветке) его профиля. Казалось бы, на том и сказочке конце. Но нет. Есть случаи, когда этот подход не работает. Я продемонстрирую это на примере ошибки (именно архитектурной ошибки, а не банального бага в следствии опечатки) в одном из приложений Google.
Читать дальше →