Как стать автором
Обновить
29
0.1
SB AWE64 Gold Audio Adapter @AWE64

Пользователь

Отправить сообщение

«Чистый» код, ужасная производительность

Время на прочтение16 мин
Количество просмотров66K
Один из самых часто повторяемых советов программистам, особенно начинающим — это рекомендация писать «чистый» код. Она сопровождается длинным списком правил, сообщающих, что нужно делать, чтобы код был «чистым».

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать дальше →
Всего голосов 192: ↑156 и ↓36+149
Комментарии372

Полезные советы по (не) изучению английского

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

Я учу английский язык уже 19 лет. Как и миллионы других людей, я делаю это крайне неэффективно. Моя история изучения английского типична для среднестатистического программиста. В школе английскому не уделялось практически никакого внимания. В вузе начал изучать язык более осознанно, так как были понятны перспективы владения этим языком при трудоустройстве, и это придавало мотивации. В дальнейшем, когда стал работать, появилось больше свободного времени и ресурсов, что позволило достичь приемлемого уровня знания языка. И только сейчас, оглядываясь назад, я понимаю, где совершил ошибки, а что сделал правильно.

Самое главное, что мне стоило бы знать - для каждого уровня языка должна быть своя стратегия. То, что эффективно на одном уровне, абсолютно не подойдет на другом. Обычно уровни знания языка делят на basic (A1, A2), independent (B1, B2), proficient (C1, C2). Эти ступени, как несгораемая сумма: если один раз достичь определенного крепкого уровня, то вниз точно не спустишься, даже через продолжительное время. Их можно представить, как три горки, каждая из которых более крутая, при этом после каждой из них есть прямой участок. Желательно эти горки пройти с максимальным ускорением, потому что, если остановиться, обязательно скатишься обратно и придется разгоняться заново.

Читать далее
Всего голосов 23: ↑19 и ↓4+20
Комментарии12

Генерация лабиринтов: алгоритм Эллера

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

Привет, Хабр!

Сегодня я хотел бы рассказать о генерации идеального лабиринта - алгоритмом Эллера. Статья подойдёт всем любителям алгоритмов.

Читать далее
Всего голосов 51: ↑51 и ↓0+51
Комментарии10

Необычная Java: StackTrace Extends Throwable

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

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

Есть вещи, которые вы можете делать в Java, но вы их редко видите. В основном потому, что в них нет смысла. Однако в Java есть несколько необычных вещей, которые могут оказаться на удивление полезными.

Chronicle Software обычно использует ряд различных шаблонов в своих низкоуровневых библиотеках, с которыми большинство разработчиков вообще не сталкивается.

Один из них — это класс, который расширяет Throwable, но не является ошибкой или исключением.

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии1

Java: есть ли жизнь на десктопе?

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

Привет! Я Виктор Барсуков, Java-разработчик в Lamoda. В этой статье хочу рассказать о своем опыте разработки десктопного Java-приложения в рамках пет-проджекта. Что из этого получилось и что можно было бы сделать иначе.

Читать далее
Всего голосов 39: ↑37 и ↓2+41
Комментарии48

Управление памятью в Swift

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

Об управление памятью в iOS ходят много слухов, поэтому я собрал все самые интересные в интернете и попробовал их структурировать в один большой

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии11

Автоматические блокировки приложений в Google Play

Время на прочтение2 мин
Количество просмотров27K
"Как так? За что? Не может быть. Это какая-то ошибка! Сейчас напишу в техподдержку — и все решится, — заблокированное по ошибке приложение обязательно восстановят".

Такие мысли появляются в голове разработчика, которому приходит уведомление о блокировке приложения в Google Play. По крайней мере, так я считал по наивности.
Всего голосов 84: ↑74 и ↓10+64
Комментарии119

Диод. Светодиод. Стабилитрон

Время на прочтение13 мин
Количество просмотров153K
Не влезай. Убьет! (с)

Постараюсь объяснить работу с диодами, светодиодами, а также стабилитронами на пальцах. Опытные электронщики могут пропустить статью, поскольку ничего нового для себя не обнаружат. Не буду вдаваться в теорию электронно-дырочной проводимости pn-перехода. Я считаю, что такой подход обучения только запутает начинающих. Это голая теория, почти не имеющая отношения к практике. Впрочем, интересующимся теорией предлагаю эту статью. Всем желающим добро пожаловать под кат.
Читать дальше →
Всего голосов 55: ↑53 и ↓2+51
Комментарии104

Простое объяснение принципов SOLID

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


Принципы SOLID — это стандарт программирования, который все разработчики должны хорошо понимать, чтобы избегать создания плохой архитектуры. Этот стандарт широко используется в ООП. Если применять его правильно, он делает код более расширяемым, логичным и читабельным. Когда разработчик создаёт приложение, руководствуясь плохой архитектурой, код получается негибким, даже небольшие изменения в нём могут привести к багам. Поэтому нужно следовать принципам SOLID.

На их освоение потребуется какое-то время, но если вы будете писать код в соответствии с этими принципами, то его качество повысится, а вы освоите создание хорошей архитектуры ПО.

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

Я буду объяснять SOLID самым простым способом, так что новичкам легче будет разобраться. Будем рассматривать принципы один за другим.
Читать дальше →
Всего голосов 46: ↑38 и ↓8+30
Комментарии201

Ограниченность преобразования Фурье или почему стоит доверять своему слуху

Время на прочтение6 мин
Количество просмотров16K
Последние несколько десятков лет задача распознавания аккордов музыкальной композиции ставилась довольно часто. Казалось бы, этот не столь оригинальный сервис был и остается довольно распространенным среди приложений, работающих со звуком (Ableton, Guitar Pro), однако универсального, срабатывающего всегда алгоритма не существует до сих пор. В этой статье я постараюсь раскрыть одну из множества причин неидеальной работы подобных сервисов на примере алгоритмов, использующих в своей основе преобразование Фурье.

Большинство аудиоформатов хранит информацию в виде зависимости амплитуды от времени (например, .wav) или в виде коэффициентов частотного преобразования (.mp3, .aac, .ogg), однако современные сложные алгоритмы цифровой обработки сигналов работают с частотной составляющей звуков. Приходится иметь дело с двойным переходом, из амплитудной области в частотную, затем обратно. На данный момент осуществление такого переход без потерь в качестве является достаточно распространенной проблемой с множеством неоднозначных решений.
Читать дальше →
Всего голосов 18: ↑13 и ↓5+8
Комментарии12

Как писать тестируемый код

Время на прочтение17 мин
Количество просмотров88K
image


Если вы программист (или чего хуже архитектор), то можете ли вы ответить на такой простой вопрос: как писать НЕ тестируемый код? Призадумались? Если с трудом можете назвать хотя бы 3 способа добиться не тестируемого кода, то статья для вас.

Многие скажут: а зачем мне знать, как писать не тестируемый код, плохому хочешь меня научить? Отвечаю: если знать типичные паттерны не тестируемого кода, то, если они есть, можно легко увидеть их в своем проекте. А, как известно, признание проблемы — уже половина пути к лечению. Также в статье дается ответ, как собственно осуществляется такое лечение. Прошу под кат.
Читать дальше →
Всего голосов 72: ↑63 и ↓9+54
Комментарии77

Как работает реляционная БД

Время на прочтение51 мин
Количество просмотров546K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Всего голосов 232: ↑229 и ↓3+226
Комментарии134

Логируем контекст исключений

Время на прочтение5 мин
Количество просмотров15K
В преддверии Дня программиста и по следам Дня тестировщика хочу рассказать о том как упростить жизнь и тем и другим в их общем деле — разработке и отладке ПО.
А именно — расскажу о том как сделать исключения С++ более информативными, а логирование ошибок — более компактным.
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии17

Пишем Лабиринт на XNA 4.0 C#

Время на прочтение6 мин
Количество просмотров14K
image
Сегодня я поделюсь своей наработкой игры «Maze». В этой игре реализован алгоритм DFS. На днях мне поручили сделать курсовую работу по Алгоритмам, а именно по DFS в лабиринтах. Отказываться было нельзя. Пришел домой, выпил чашечку крепкого кофе и начал творить.
Читать дальше →
Всего голосов 15: ↑9 и ↓6+3
Комментарии11

О том, почему телескоп «Хаббл» может создавать относительно детализированные снимки далеких галактик, но не может «разглядеть» Плутон

Время на прочтение7 мин
Количество просмотров92K
image
(Предположительный вид Плутона)

Задумывались ли вы когда-нибудь, почему космический телескоп Хаббл создает невероятно детализированные снимки галактик, находящихся от нас в миллионах световых лет, но не может сделать достаточно детализированный снимок Плутона и других планет в нашей солнечной системе?

Читать дальше →
Всего голосов 67: ↑62 и ↓5+57
Комментарии41

Martin Fowler — GUI Architectures. Часть 1

Время на прочтение9 мин
Количество просмотров26K
Перевод материала Мартина Фаулера. В статье обсуждается общий подход к архитектуре UI и приводятся подробные описания таких шаблонов проектирования, как MVC, MVP, Presentation Model, Forms and Controls, Humble View, Passive View. Статья неплохо прочищает мозг. Для того, чтобы не упустить ни единого нюанса, решил заняться переводом.

Вообще говоря, приседал долго, хотел сделать все сразу и быстро. Пальцем в небо. Иногда меня разбивал радикулит подступали майлстоуны по проекту и я откладывал перевод в долгий ящик. Или еще что-нибудь мешало. Короче, я все сразу не осилил и, чтоб добру не пропадать, решил выкладывать перевод по параграфам. Сейчас перевел половину, половина же осталась.

Я не профессиональный переводчик и мог что-то неправильно понять (и даже кое-где сделал пометки в скобках), но вы в любом случае обладаете возможностью прочитать статью в оригинале. Надеюсь, что перевод такой интересной статьи поможет кому-то улучшить свои навыки и расширит кругозор.
Прочитать про архитектуру UI!
Всего голосов 44: ↑42 и ↓2+40
Комментарии12

2D-платформер от Qt 5.2 до Qt 5.4

Время на прочтение6 мин
Количество просмотров21K
image Привет, Хабр. Эта статья должна была быть написана еще зимой, но по объективным причинам пишу ее сейчас.

Решил я как-то год назад заняться ГеймДевом. Поздновато, конечно, но история не об этом. Сразу решил, что надо писать для мобильных устройств. Направление перспективное и для меня оказалось очень интересным.

Поскольку я программлю на С++, значит, надо подобрать кроссплатформенную среду разработки. Выбор пал на Qt. Сейчас точно не скажу, почему именно она, но выбор был сделан, да и история не об этом.

Достал книгу на русском, Внимательно прочитал половину, сделал детскую игру «Быки и Коровы». Здесь не о чем говорить, это был тестовый проект.

Почитал еще, обнаружил, что у Qt очень хорошая документация на родном сайте и в ней легко найти описание необходимых объектов. И это не может радовать.

Теперь стал вопрос о том, чтобы сделать проект немного посерьёзней. Везде советуют начинающим браться сначала за что-то простое, так сказать попробовать, научиться на своих ошибках и т.д. Я уже начал подготавливаться, чтобы написать старую и всем знакомую Lines, но вот тут стала необходимость для одного проекта написать что-нибудь на Android. И так родилась идея написать платформер. И вот, собственно говоря, история как раз об этом.
Читать дальше →
Всего голосов 30: ↑22 и ↓8+14
Комментарии14

Паттерны проектирования на платформе .NET

Время на прочтение3 мин
Количество просмотров48K
Привет Хаброжители!
У нас вышла новинка — «Паттерны проектирования на платформе .NET»

image

Цель данной книги — показать, как изменились паттерны проектирования за это время, как на них повлияло современное увлечение функциональным программированием, и объяснить, каким образом они используются в современных .NET-приложениях. В издании вы найдете подробное описание классических паттернов проектирования с особенностями их реализации на платформе .NET, а также примеры их использования в .NET Framework. Вы также изучите принципы проектирования, известные под аббревиатурой SOLID, и научитесь применять их при разработке собственных приложений.
Книга предназначена для профессиональных программистов, которые хотят изучить особенности классических принципов и паттернов программирования с примерами на языке C# и понять их роль в разработке современных приложений на платформе .NET.
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии28

Изменения в Visual C++

Время на прочтение12 мин
Количество просмотров36K
Когда вы захотите обновить версию Visual C++ компилятора (например, перейти с Visual Studio с 2013 на 2015), будет не лишним узнать, почему вы можете столкнуться с тем, что код, который прежде успешно компилировался и выполнялся, теперь будет вызывать ошибки компиляции и/или ошибки времени выполнения.
Эти проблемы могут быть вызваны многочисленными изменениями компилятора для соответствия стандарту С++, изменениями в сигнатурах функций или изменениями расположения объектов в памяти.
Узнать подробнее
Всего голосов 33: ↑32 и ↓1+31
Комментарии11

АВЛ-деревья

Время на прочтение9 мин
Количество просмотров417K
Если в одном из моих прошлых постов речь шла о довольно современном подходе к построению сбалансированных деревьев поиска, то этот пост посвящен реализации АВЛ-деревьев — наверное, самого первого вида сбалансированных двоичных деревьев поиска, придуманных еще в 1962 году нашими (тогда советскими) учеными Адельсон-Вельским и Ландисом. В сети можно найти много реализаций АВЛ-деревьев (например, тут), но все, что лично я видел, не внушает особенного оптимизма, особенно, если пытаешься разобраться во всем с нуля. Везде утверждается, что АВЛ-деревья проще красно-черных деревьев, но глядя на прилагаемый к этому код, начинаешь сомневаться в данном утверждении. Собственно, желание объяснить на пальцах, как устроены АВЛ-деревья, и послужило мотивацией к написанию данного поста. Изложение иллюстрируется кодом на С++.

Читать дальше →
Всего голосов 69: ↑62 и ↓7+55
Комментарии50
1
23 ...

Информация

В рейтинге
3 995-й
Зарегистрирован
Активность