Обновить
1087.77

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

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

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

С днем программиста!

Время на прочтение1 мин
Охват и читатели54K
Уважаемые пользователи Хабрасообщества, по скольку во Владивостоке уже наступил следующий день, спешу вас поздравить с этим замечательным 256 днем года!

image

Так вышло, что в этом году день программиста выпал именно на пятницу 13-е, а это значит что под конец рабочего дня можно смело собирать своих друзей и начинать праздновать!

Грозный жрец машинных кодов,
До заоблачных высот
Он достанет, и по ходу
В цифру всё переведет.
В этом деле он неистов,
Даже сдерживать пора…
В общем, так: с Днем программиста!
Enter! То есть, тьфу, ура!


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

С днем программиста!

Время на прочтение1 мин
Охват и читатели63K
В самую восточную часть России уже пришел новый день, а это значит, что там уже наступил замечательный праздник: День Программиста! И сегодня праздник вдвойне, потому что сегодня только 12, а уже день программиста: сейчас ведь у нас високосный год.
Места сбора в различных городах ищем и обсуждаем под катом
По такому случаю всем предлагаю провести сегодня вечер за кружечкой хорошего:

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

Как написать FizzBuzz на собеседовании

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

Здравствуй, Хабр.


Недавно я проходил собеседование в одну солидную айтишную контору. Когда мы разобрались с формальностями, начался технический этап, на котором мне поручили написать fizzbuzz. По не вполне понятным мне причинам обсуждение решения этой задачи растянулось на довольно большой срок, после которого время на интервью уже вышло. Мы расстались на хорошей ноте, и мне пообещали перезвонить. Пока я жду оффер, я решил поделиться своим опытом прохождения интервью с широкой публикой, равно как и своим решением, ибо они показались мне заслуживающим внимания.

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

В разработке — каждый сам за себя. Но иногда это приводит в тупик

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


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

У меня была неделя — целая бесконечность, которой мне не хватило. Снова и снова я перебирал в голове варианты использования того, что должен сделать, но картинка идеального модуля не клеилась. Всегда находился кейс, который хорошо показывал: такой дизайн — говно. Я думал, играл на гитаре, пробовал писать, тупил в монитор, гуглил, играл с детьми, снова думал — голова всегда была занята дурацким модулем.

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

В понедельник утром я отправил пулл реквест. Его приняли с восторгом. Но способ, на который я пошел… вот уж никогда не думал, что отважусь на такое.
Читать дальше →

Детальный анализ Хабрахабра с помощью языка Wolfram Language (Mathematica)

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

Скачать пост в виде документа Mathematica, который содержит весь код использованный в статье, вместе с дополнительными файлами, можно здесь.

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

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

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

Ввиду того, что база данных, построенная в посте, формировалась за некоторое время до публикации, а именно 26 апреля 2015 г., посты, опубликованные на Хабрахабре после этой даты (а также, возможно, новые хабы) в данном посте не рассматривались.
Читать дальше →

Python на Хабре

Время на прочтение7 мин
Охват и читатели457K
Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…
Читать дальше →

Когда быть хорошим плохо

Время на прочтение4 мин
Охват и читатели65K
Я хотел бы начать с истории:

Учитель керамического дела объявил в день открытия, что разобьет класс на две группы. «Те, кто сидят слева» — сказал он: «будут оцениваться только по количеству проделанной работы, те, кто справа — только по её качеству». Его методика была проста, в последний день он принесет весы и взвесит работу группы «количество»: 50 фунтов горшков это «5», сорок фунтов горшков это «4» и так далее. Те, кто оцениваются по «качеству», однако, должны сделать один, пусть и совершенный, горшок, чтобы получить «5». Время сдачи пришло, и обнаружился любопытный факт: работы лучшего качества были сделаны в группе, оцениваемой по количеству. Похоже, в то время, как группа «количество» упорно штамповала свои работы и училась на своих ошибках, группа «качество» теоретизировали об идеале и, в конце концов, только и могла показать свои старания и грандиозные теории об идеале, а также кучу бесполезной глины.

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

Терминал — ваш лучший друг: 5 утилит командной строки, которые заменят вам GUI

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели36K

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

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

Читать далее

Люди не понимают ООП

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели129K

«ООП для меня означает лишь обмен сообщениями, локальные ограничения и защиту, сокрытие состояния процесса и крайне позднее привязывание», — Алан Кэй (человек, придумавший термин «объектно-ориентированное программирование»)1

Похоже, многим не нравится объектно-ориентированное программирование. Первое, что приходит в голову, когда слышишь эту трёхбуквенную аббревиатуру — это пример с автомобилем, наследование, геттеры, сеттеры и ObjectFactoryFactorySingleton.

Мне это всегда казалось довольно странным. Мне не только нравится ООП, я ещё и считаю, что часто это лучший/наиболее очевидный способ моделирования задачи. И ниже я расскажу, почему.
Читать дальше →

Как мы себя обманываем, только бы продолжать пользоваться Golang

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

За два года с тех пор, как я опубликовал статью I want off Mr Golang's Wild Ride, она вновь и вновь всплывала на Reddit, Lobste.rs, на HackerNews и в других местах.

Всякий раз дискуссия выходит к одним и тем же ответам:

Go!

Почему дизайн Go плох для умных программистов

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

На протяжении последних месяцев я использую Go для имплементаций Proof of Concept (прим.пер.: код для проверки работоспособности идеи) в свободное время, отчасти для изучения самого языка программирования. Программы сами по себе очень просты и не являются целью написания статьи, но сам опыт использования Go заслуживает того, чтобы сказать о нем пару слов. Go обещает быть (прим.пер.: статья написана в 2015) массовым языком для серьезного масштабируемого кода. Язык создан в Google, в котором активно им пользуются. Подведя черту, я искренне считаю, что дизайн языка Go плох для умных программистов.

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

Про мнимые и реальные оптимизации в 10 раз, целительный SSE, и все такое

Время на прочтение6 мин
Охват и читатели38K
По мотивам одного вчерашнего поста про оптимизацию условных переходов при расчете x=sign(a,b)*min(abs(a), abs(b)) якобы в 10 раз. Краткая сводка:

  • оптимизация налицо, но размер мнимый: не в 10 раз, а 2.5 раза;
  • бенчмарки надо делать правильно: не надо мерить CPU stalls, RAM bandwidth итп вместо исследуемой функции;
  • бенчмарки надо делать правильно: иначе могут дико дрожать;
  • выставлять только приоритет прикольно, но на коротких бенчмарках зря: +0.5% скорости, -15% дрожания;
  • нужно мерить исследуемую функцию и только ее, только так получаешь корректные данные;
  • нужно греть проц, нужно считать минимум из N прогонов/секунд, только так побеждаешь дрожание;
  • нужно пользовать SSE, с ним получилось 8.6 раз, причем код… читается.

В общем, опять пачка классических методологических ошибок при бенчмарке. Кому интересно, как такие ошибки НЕ делать, подробности, детальный разбор полетов, оптимизация в еще несколько раз и, главное, исходники под катом.
Читать дальше →

Как поднять свой уровень в искусстве программирования. План из шести шагов

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

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

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

Земля круглая, вода мокрая, JPEG шакалит, небо голубое… Или нет?

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

Вы можете сказать, что один факт выбивается из этого ряда в заголовке, потому что он не так очевиден, как остальные. Еще лет 10-15 назад я бы никогда не подумал, что тут могут быть возражения, а сейчас уже и не удивляюсь, что приходится объяснять простые истины: дело в том, что планеты обладают очень большой массой, поэтому гравитация стремится придать им форму шара. Вот и все! Хотел бы на этом закончить статью и поблагодарить за внимание.

Читать далее

[ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только

Время на прочтение9 мин
Охват и читатели87K
Многие студенты, впервые сталкиваясь с описанием какой-нибудь хитроумной штуки, вроде алгоритма Кнута – Морриса – Пратта или красно-чёрных деревьев, тут же задаются вопросами: «К чему такие сложности? И это, кроме авторов учебников, кому-нибудь нужно?». Лучший способ доказать пользу алгоритмов – это примеры из жизни. Причём, в идеале – конкретные примеры применения широко известных алгоритмов в современных, повсеместно используемых, программных продуктах.



Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
Читать дальше →

Грабли, на которые не стоит наступать

Время на прочтение5 мин
Охват и читатели80K
От переводчика: Это перевод статьи авторства Джоэля Спольски (Joel Spolsky). Через 2 года эта статья уже сможет получить автомобильные права в США, а еще через два — и не только там. Да, ей 14 лет (а точнее 14 лет и 11 дней), но актуальности она не потеряла ни грамма. Я регулярно вижу, как программисты (да и я сам, временами) порываются наступить на эти грабли. Тот факт, что я не нашел ее перевода на Хабре, вполне может свидетельствовать о том, что я плохо искал. Об ошибках перевода прошу сообщать в ЛС

UPD: Оказывается перевод статей Джоэля, в т. ч и этой, есть еще в бумажном издании «Джоэл о программировании»

Наконец выходит первая публичная бета-версия Netscape 6.0. Версии 5.0 не существует. Предыдущий мажорный релиз — версия 4.0 — был выпущен почти три года назад. Три года — это невероятно большой срок в мире интернета. Все это время в Netscape сидели и беспомощно наблюдали за тем, как уменьшается их доля рынка.

Это немного подло с моей стороны критиковать их за столь долгое ожидание между релизами. Они ведь не специально это сделали, правда?
Читать дальше →

Ещё семь фич HTML5, о которых вы могли не знать

Время на прочтение3 мин
Охват и читатели89K
Доброго времени суток!

Все мы достаточно наслышаны об HTML5 и его возможностях. Например, элементы audio и video, которые у всех на слуху. Но несмотря на это, существует парочка тегов, о которых знают далеко не все, и о которых не знал я до недавнего времени. Итак, вот чем я хочу с вами поделиться.
Читать дальше →

Пишем свой загрузчик операционной системы Linux

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели16K


Меня давно интересовал вопрос, насколько сложно написать собственный загрузчик операционной системы. Я не говорю о простой программе, выводящей «Hello, World!», а о полноценном загрузчике, который передаёт управление от встроенного программного обеспечения компьютера ядру операционной системы. Современные загрузчики представляют собой сложные программы, способные загружать множество операционных систем различными способами, учитывая массу нюансов, связанных с программным и аппаратным обеспечением. Читая их исходный код, легко утонуть в деталях и потерять понимание сути и реализации.


Я решил начать изучение с максимально простого подхода, постепенно усложняя задачи, экспериментируя и получая новые знания. Если мне удалось вас заинтересовать, добро пожаловать под кат.

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

Картинка, которая одновременно является кодом на Javascript

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

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

Прежде чем вы продолжите чтение, крайне рекомендую изучить эту песочницу кода с результатами моих экспериментов:

https://codesandbox.io/s/executable-gif-8yq0j?file=/index.html

Если вы хотите посмотреть изображение и изучить его самостоятельно, то скачать его можно отсюда:

https://executable-gif.glitch.me/image.gif
Читать дальше →

Как я не занял первое место в конкурсе для JavaScript-разработчиков от Telegram

Время на прочтение8 мин
Охват и читатели51K
Активные пользователи Телеграма, особенно те, кто подписан на Павла Дурова, наверняка что-то слышали о том, что Телеграм проводил в этих ваших интернетах конкурс для iOS, Android и JavaScript разработчиков, а также для дизайнеров. Несмотря на то, что это было довольно эпичное событие с раздачей солидных призов (один из участников получил 50к долларов за первое место, написав самое быстрое и лёгкое приложение для Android), о нём как-то слабо писали, во всяком случае в Рунете. Своим дебютным постом попробую исправить ситуацию.

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

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