Одна из главных проблем в разработке программного обеспечения – борьба с возрастающей сложностью системы. Решением этой проблемы занимаются с времен появления первых программ. Результатами являются языки, всё более упрощающие взаимодействие с машиной, парадигмы программирования вроде ООП, паттерны. В этой статье будут рассмотрены принципы программирования, позволяющие уменьшить сложность и облегчить сопровождение системы.
Dmitry @Hikonomuro
Аналитик/Системный администратор
Что не так с циклами for?
6 мин
7.4KПеревод
Возможное появление замыканий в Java стало горячей темой для обсуждений. Готовится предложение по добавлению замыканий в грядущую версию языка, однако же предлагаемый синтаксис вкупе с усложнением языка подвергаются критике со стороны многих Java программистов.
Сегодня Эллиотт Расти Харольд (Elliotte Rusty Harold) опубликовал свои сомнения по поводу возможных изменений. Один из главных заданных им вопросов: “Почему вы ненавидите цикл for”(«Why Hate the for Loop?»)?
Сегодня Эллиотт Расти Харольд (Elliotte Rusty Harold) опубликовал свои сомнения по поводу возможных изменений. Один из главных заданных им вопросов: “Почему вы ненавидите цикл for”(«Why Hate the for Loop?»)?
+57
Советы себе в прошлом
4 мин
23KУ меня очень мало опыта (суммарно программистом я проработал 16 месяцев), тем не менее, я хотел бы дать несколько советов себе-в-прошлом, ну, или иными словами всем тем, кто сейчас учится в университете и планирует стать разработчиком ПО. Ни в коей мере не претендую на мудрость или опытность. Немного подумав, я понял, что все эти советы как никогда актуальны для меня и сегодня тоже. Первую заметку я опубликовал в своем блоге в прошлом году, а сейчас публикую здесь список, расширенный советами читателей блога.
Все советы автономны и их порядок не имеет значения.
Все советы автономны и их порядок не имеет значения.
+167
Азы социально-сетевого анализа (Social Network Analysis 101)
4 мин
19KПеревод
От переводчика. Автор этой публикации — Майкл Ву (Michael Wu), ведущий аналитик компании Lithium, специализирующийся в изучении социальных взаимодействий и онлайн-сообществ.
Чтобы понять, что такое «социально-сетевой анализ» (Social Network Analysis, SNA), нужно понимать, что такое «социальная сеть» и что такое «социальный граф». Говоря просто, социально-сетевой анализ — это способ изучения социальных сетей, а социальная сеть — это набор сущностей, между которыми есть определенные отношения. Социальные сети существуют с тех пор, как люди начали бродить по земле. По правде говоря, подобные структуры есть не только у людей, но и у социальных животных (например, у волков, львов, дельфинов, мышей и даже муравьев).
Безусловно, прежде всего нас интересуют такие сущности как люди, и такие отношения между ними как дружба (как на Facebook), совместная работа (как на LinkedIn), родство, общение и некоторые другие социальные взаимодействия. А в контексте SNA мы можем под социальным графом понимать просто визуализацию всего этого (я не собираюсь нагонять скуку формальным определением графа). В таком социальном графе каждая точка (или узел, или вершина) изображает человека, а ребро между двумя точками (людьми) изображает отношения между ними. А так как между людьми существует множество самых разных отношений, точно также существует множество разных социальных графов, изображающих эти отношения. Я покажу это на конкретном примере.
Чтобы понять, что такое «социально-сетевой анализ» (Social Network Analysis, SNA), нужно понимать, что такое «социальная сеть» и что такое «социальный граф». Говоря просто, социально-сетевой анализ — это способ изучения социальных сетей, а социальная сеть — это набор сущностей, между которыми есть определенные отношения. Социальные сети существуют с тех пор, как люди начали бродить по земле. По правде говоря, подобные структуры есть не только у людей, но и у социальных животных (например, у волков, львов, дельфинов, мышей и даже муравьев).
Безусловно, прежде всего нас интересуют такие сущности как люди, и такие отношения между ними как дружба (как на Facebook), совместная работа (как на LinkedIn), родство, общение и некоторые другие социальные взаимодействия. А в контексте SNA мы можем под социальным графом понимать просто визуализацию всего этого (я не собираюсь нагонять скуку формальным определением графа). В таком социальном графе каждая точка (или узел, или вершина) изображает человека, а ребро между двумя точками (людьми) изображает отношения между ними. А так как между людьми существует множество самых разных отношений, точно также существует множество разных социальных графов, изображающих эти отношения. Я покажу это на конкретном примере.
+26
Шпаргалки для тех, кто делает первые шаги
1 мин
31KНа картинке фрагмент отличной шпаргалки, где собраны основные электронные компоненты — их внешний вид и обозначения на принципиальных схемах.
Шпаргалка по электронным компонентам (PDF, 168Kb)
Шпаргалка по контроллерам AVR (ч.1) (PDF, 61Kb)
Шпаргалка по контроллерам AVR (ч.2) (PDF, 61Kb)
PS: Там же, на сайте, имеется любопытный блог с описанием эффектных электронных поделок. Культура исполнения на высоте, приведены ссылки на open source прошивки.
+125
Единый взгляд на сообщества и социальные сети
5 мин
3KПеревод
От переводчика. Автор этой публикации — Майкл Ву (Michael Wu), ведущий аналитик компании Lithium, специализирующийся в изучении социальных взаимодействий и онлайн-сообществ.
Чуть ранее я рассуждал о различии между сообществами и социальными сетями, а также о тех особых ролях, которые они играют в построении, развитии и поддержании взаимоотношений между людьми. В этих публикациях мы проанализировали структуру сообществ и социальных сетей по-отдельности. В реальности, однако, они сосуществуют и пересекаются друг с другом. В каждый данный момент времени мы являемся частью многих сообществ и одновременно соединены через социальную сеть как с людьми из этих сообществ, так и с людьми, находящимися за их пределами.
Сегодня я попробую дать единый взгляд на сообщества и социальные сети, чтобы мы смогли понять, как эти две социальные структуры сочетаются друг с другом. Данная публикация немного более абстрактная и теоретическая, по сравнению с предыдущими, но я верю, что она даст новую перспективу и будет полезной для практической работы с социальными медиа.
Чуть ранее я рассуждал о различии между сообществами и социальными сетями, а также о тех особых ролях, которые они играют в построении, развитии и поддержании взаимоотношений между людьми. В этих публикациях мы проанализировали структуру сообществ и социальных сетей по-отдельности. В реальности, однако, они сосуществуют и пересекаются друг с другом. В каждый данный момент времени мы являемся частью многих сообществ и одновременно соединены через социальную сеть как с людьми из этих сообществ, так и с людьми, находящимися за их пределами.
Сегодня я попробую дать единый взгляд на сообщества и социальные сети, чтобы мы смогли понять, как эти две социальные структуры сочетаются друг с другом. Данная публикация немного более абстрактная и теоретическая, по сравнению с предыдущими, но я верю, что она даст новую перспективу и будет полезной для практической работы с социальными медиа.
+10
«Я научу вас любить и страдать», или Шпаргалка по обучению в IT
4 мин
3.9KВыпустившись восемь лет назад из питерского Бонча (он же — Университет телекоммуникаций), я никак не подозревал, что сам займусь преподаванием. Тем не менее, моя мятущаяся, и совсем, пожалуй, не технарская душа, привела меня на должность преподавателя в довольно крупной — питерской же — конторе, занимающейся разработкой самого разнообразного софта для операторов сотовой связи. Мой более чем пятилетний трудовой путь в ней заканчивается, и по горячим следам я решил дать несколько простых советов, которые, смею надеяться, облегчат жизнь тем, кому по служебной или иной необходимости нужно будет передать свои драгоценные знания. Они содержат в себе несколько базовых вещей, связанных с обучением, которые мне сейчас кажутся очевидными, но на заре преподавательской деятельности были в новинку. Перейдём, собственно, к советам.
+39
Немного истории: кто такой Anonymous
3 мин
3.4KПеревод
В субботу во многих странах прошли протесты против ACTA — торгового соглашения против контрафакта.
Этот документ вызвал волну возмущения Интернет-сообщества, а также представителей движения Anonymous из-за опасений, что он ограничит свободу пользователей сети и будет способствовать усилению цензуры.
Как и ожидалось, некоторые из протестующих надели уже традиционные маски «анонимов», заимствованные у главного героя комиксов писателя Алана Мура «V значит вендетта» — таинственного революционера, который при поддержке народа пытается уничтожить тоталитарный режим в стране.
Накануне субботних протестов Би-Би-Си попросила автора комиксов рассказать о том, как его книга стала вдохновением для многих протестующих во всем мире.
Этот документ вызвал волну возмущения Интернет-сообщества, а также представителей движения Anonymous из-за опасений, что он ограничит свободу пользователей сети и будет способствовать усилению цензуры.
Как и ожидалось, некоторые из протестующих надели уже традиционные маски «анонимов», заимствованные у главного героя комиксов писателя Алана Мура «V значит вендетта» — таинственного революционера, который при поддержке народа пытается уничтожить тоталитарный режим в стране.
Накануне субботних протестов Би-Би-Си попросила автора комиксов рассказать о том, как его книга стала вдохновением для многих протестующих во всем мире.
+37
«Программист» — это сверхобобщение
3 мин
8.1KПеревод
В этом коде могут быть ошибки; я только доказал, что он правилен, а не проверял его.
Дональд Кнут
Сегодня я наткнулся на пост, в котором утверждалось, что использовать функцию C++ STL make_heap нельзя, потому что почти никто не умеет использовать ее правильно. Сначала я возмутился смехотворностью этой идеи — любой человек, имеющий хотя бы начальное представление об алгоритмах, должен знать, как правильно использовать make_heap. Но потом я задумался о том, сколько программистов не знают, что такое куча, более того, им это даже не нужно… А потом я понял, что все эти люди в равной степени зовутся программистами.
Когда я был маленьким, мне давали множество плохих советов о правильных техниках программирования. За прошедшие годы я осознал, что большинство советов не были плохими сами по себе, но давались в отрыве от контекста. Расцвет стартапов, наблюдающийся в настоящее время, заставил многих хакеров осознать, что «эффективность не имеет значения» — совет, таящий в себе множество ловушек и нюансов контекста, особенно когда речь идет о сложных архитектурах, которые могут взаимодействовать неожиданным образом. Эффект испорченного телефона, возникающий из-за недостатка контекста в таких высказываниях, сам по себе представляет проблему, но на самом деле он — лишь симптом проблемы более глубокой.
Термин «программист» покрывает колоссальный спектр способностей и умений. По вертикальной оси, программист может едва уметь писать на vbscript — или разрабатывать компиляторы для Intel или научный софт для авиакомпаний. По горизонтальной оси, он может быть экспертом в базах данных, улучшать производительность GPU, писать библиотеки параллельных вычислений, физические движки или драйвера для принтеров, заниматься обработкой изображений, генерацией 3D моделей или исследованиями в области искусственного интеллекта, использовать coffeescript, HTML5 и AJAX для разработки веб-приложений или nginx и PHP для разработки LAMP-стека, на котором веб-приложения работают… И это все — программисты.
Дональд Кнут
Сегодня я наткнулся на пост, в котором утверждалось, что использовать функцию C++ STL make_heap нельзя, потому что почти никто не умеет использовать ее правильно. Сначала я возмутился смехотворностью этой идеи — любой человек, имеющий хотя бы начальное представление об алгоритмах, должен знать, как правильно использовать make_heap. Но потом я задумался о том, сколько программистов не знают, что такое куча, более того, им это даже не нужно… А потом я понял, что все эти люди в равной степени зовутся программистами.
Когда я был маленьким, мне давали множество плохих советов о правильных техниках программирования. За прошедшие годы я осознал, что большинство советов не были плохими сами по себе, но давались в отрыве от контекста. Расцвет стартапов, наблюдающийся в настоящее время, заставил многих хакеров осознать, что «эффективность не имеет значения» — совет, таящий в себе множество ловушек и нюансов контекста, особенно когда речь идет о сложных архитектурах, которые могут взаимодействовать неожиданным образом. Эффект испорченного телефона, возникающий из-за недостатка контекста в таких высказываниях, сам по себе представляет проблему, но на самом деле он — лишь симптом проблемы более глубокой.
Термин «программист» покрывает колоссальный спектр способностей и умений. По вертикальной оси, программист может едва уметь писать на vbscript — или разрабатывать компиляторы для Intel или научный софт для авиакомпаний. По горизонтальной оси, он может быть экспертом в базах данных, улучшать производительность GPU, писать библиотеки параллельных вычислений, физические движки или драйвера для принтеров, заниматься обработкой изображений, генерацией 3D моделей или исследованиями в области искусственного интеллекта, использовать coffeescript, HTML5 и AJAX для разработки веб-приложений или nginx и PHP для разработки LAMP-стека, на котором веб-приложения работают… И это все — программисты.
+78
Сообщество или социальная сеть?
5 мин
12KПеревод
От переводчика. Данный текст является вступительным текстом к минисерии из 4 публикаций, посвященных социальным сетям и сообществам, их сходствам и различиям, а также их взаимосвязи друг с другом.
Я хочу поделиться с вами своим недавними исследованиями, посвященными взаимосвязи между социальными сетями и сообществами.
С 2008 года социальные медиа становятся широко используемым и модным понятием в корпоративном мире. Вопрос в том, что такое социальные медиа? Одни, похоже, отождествляют это понятие с сайтами, называющимися социальными сетями, вроде Facebook. Другие думают, что социальные медиа — это блоги, микроблоги (вроде Twitter), Flickr, Youtube или любые другие аналогичные вебдванольные сервисы, основанные на коллективном обмене информацией между пользователями. Указывают на разные типы социальных медиа, начиная с сервисов социального взаимодействия (вроде Wikipedia, Delicious или Digg), и заканчивая онлайн-сообществами (вроде тех сообществ, которые мы создаем вокруг брендов или же таких как Yahoo! Answer).
Все эти определения в некоторой степени верны, если мы классифицируем социальные медиа по их функциональным признакам. С другой стороны, писатель и блоггер Брайан Солис (Brian Solis) предложил иную классификацию социальных медиа, основанную на способах общения между людьми. Он назвал свою классифиацию «Призмой общения» (conversation prism). Однако, если мы хотим понимать социальные медиа с точки зрения выстраивания связей между людьми в рамках социальной антропологии, мы обнаружим, что существует всего два основных типа социальных медиа:
- Сообщество или социальная сеть?
- Как люди образуют связи
- От слабых связей к сильным
- Поддержание сильных связей
Я хочу поделиться с вами своим недавними исследованиями, посвященными взаимосвязи между социальными сетями и сообществами.
С 2008 года социальные медиа становятся широко используемым и модным понятием в корпоративном мире. Вопрос в том, что такое социальные медиа? Одни, похоже, отождествляют это понятие с сайтами, называющимися социальными сетями, вроде Facebook. Другие думают, что социальные медиа — это блоги, микроблоги (вроде Twitter), Flickr, Youtube или любые другие аналогичные вебдванольные сервисы, основанные на коллективном обмене информацией между пользователями. Указывают на разные типы социальных медиа, начиная с сервисов социального взаимодействия (вроде Wikipedia, Delicious или Digg), и заканчивая онлайн-сообществами (вроде тех сообществ, которые мы создаем вокруг брендов или же таких как Yahoo! Answer).
Все эти определения в некоторой степени верны, если мы классифицируем социальные медиа по их функциональным признакам. С другой стороны, писатель и блоггер Брайан Солис (Brian Solis) предложил иную классификацию социальных медиа, основанную на способах общения между людьми. Он назвал свою классифиацию «Призмой общения» (conversation prism). Однако, если мы хотим понимать социальные медиа с точки зрения выстраивания связей между людьми в рамках социальной антропологии, мы обнаружим, что существует всего два основных типа социальных медиа:
- Социальные сети
- Онлайн сообщества
+47
Анонимность vs деанонимизация
4 мин
3.7KВ последнее время читаю много рассуждений о том, как правильно скрываться в интернете. Кто-то пишет про техническую сторону, кто-то — про методологическую. Сам я по натуре параноик, но стараюсь не терять здравого смысла. В результате обдумывания прочитанных ранее рассуждений и здравого смысла получилось
+22
Анонимизация и деанонимизация в сети Интернет
8 мин
41KТопик адресован в первую очередь не айтишникам, но их жёнам, девушкам, тёщам, родителям, а также дедушкам и бабушкам, которые, вкусив прелести Интернета, скорее всего не задумываются, насколько глубоко Всемирная сеть встроена в общество, и что, помимо всего полезного, Интернет несёт объективные риски для их собственной безопасности.
В тексте обозначены аспекты пользования Интернетом, касающиеся как процесса регистрации пользователя в различных местах коммуникации в сети (блогах, форумах, социальных сетях, отзывах о товарах в магазинах), так и стилей речи в таких местах. Показано какие риски может иметь продолжение внесетевых стилей общения (разговорного-бытового, официально-делового, публицистического) в область общения в сети.
В тексте обозначены аспекты пользования Интернетом, касающиеся как процесса регистрации пользователя в различных местах коммуникации в сети (блогах, форумах, социальных сетях, отзывах о товарах в магазинах), так и стилей речи в таких местах. Показано какие риски может иметь продолжение внесетевых стилей общения (разговорного-бытового, официально-делового, публицистического) в область общения в сети.
+20
Изучение иностранных языков: живые учителя или интернет?
4 мин
74K— Феденька, ты очень интеллигентный мальчик, ты мне очень нравишься, но Я БУДУ СТАВИТЬ ДВА В ГОДУ!!! — визжала моя школьная учительница по французскому и делала примерно такое лицо.
Моя школьная учительница по английскому языку делала другое лицо:
+182
Перевод выделенного текста с любого языка на русский
2 мин
62KХочу поделиться с вами своим лайфхаком.
В первую очередь он предназначен для людей, которым лень лезть в словарь всякий раз, когда они встречают незнакомое иностранное слово в тексте.
Я хочу рассказать, как получить перевод выделенного текста в виде оповещения рабочего стола.
В первую очередь он предназначен для людей, которым лень лезть в словарь всякий раз, когда они встречают незнакомое иностранное слово в тексте.
Я хочу рассказать, как получить перевод выделенного текста в виде оповещения рабочего стола.
+110
Не зная брода, не лезь в воду. Часть первая
3 мин
4KЗахотелось написать несколько небольших заметок о том, как программисты на Си/Си++ играют с огнем, не подозревая об этом. Первая заметка будет про попытки явно вызвать конструктор.
+90
Интересные решения для электронной подписи в браузере
4 мин
31KВ одном из комментов к этому топику, отечественный потребитель ЭЦП написал:
Конкретная такая мечта. И сейчас имеются все предпосылки для ее исполнения.
В топике я немного остановлюсь на решениях Крипто-Про, которые позволяют сделать квалифицированную ЭЦП в браузере действительно удобной.
А так же опишу одно оригинальное решение от фирмы Криптоком (www.cryptocom.ru), которое позволяет подписывать документы через интернет квалифицированной ЭЦП с помощью практически любого компьютера/браузера без предварительной настройки и без прав сисадмина (для варианта «срочно нужно провести сделку из интернет-кафе турецкого отеля»).
У меня есть мечта… В самом деле — у меня есть мечта, что когда-нибудь в будущем я смогу обойтись без связки «windows + IE» для клиент-банков и прочего софта, который использует крипто-про. СБИС++, например. Блин, я надеюсь, что это когда-нибудь будет.
Конкретная такая мечта. И сейчас имеются все предпосылки для ее исполнения.
В топике я немного остановлюсь на решениях Крипто-Про, которые позволяют сделать квалифицированную ЭЦП в браузере действительно удобной.
А так же опишу одно оригинальное решение от фирмы Криптоком (www.cryptocom.ru), которое позволяет подписывать документы через интернет квалифицированной ЭЦП с помощью практически любого компьютера/браузера без предварительной настройки и без прав сисадмина (для варианта «срочно нужно провести сделку из интернет-кафе турецкого отеля»).
+20
Проблемы инкапсуляции
3 мин
3.2KНедавно мне попалась на глаза интересная статья о проблемах в концепции инкапсуляции — почитайте, если есть время.
Для тех, у кого времени нет, я быстренько перескажу суть: инкапсуляция не выполняет одной из своих основных задач (дать «черный ящик» с описанными входами и выходами) по целому ряду причин:
Всё это презренная реальность, которую теоретики программирования игнорируют. И как же с этим жить?
Для тех, у кого времени нет, я быстренько перескажу суть: инкапсуляция не выполняет одной из своих основных задач (дать «черный ящик» с описанными входами и выходами) по целому ряду причин:
- Программисты не доверяют чужим «черным ящикам».
- В чужих «чёрных ящиках» случаются ошибки, которые приходится фиксить, влезая в их внутренности (и ломая этим всю затею).
- Входы и выходы не всегда описаны понятно. Иногда бывает проще создать свой велосипед, чем разбираться в том, как поехать на чужом.
Всё это презренная реальность, которую теоретики программирования игнорируют. И как же с этим жить?
+17
Я не знаю Си
4 мин
51KЦель этой статьи — заставить всех, особенно программистов на Си, сказать «я не знаю Си».
Хочется показать, что тёмные углы в Си значительно ближе, чем кажется и даже тривиальные строки кода несут в себе undefined behavior.
Хочется показать, что тёмные углы в Си значительно ближе, чем кажется и даже тривиальные строки кода несут в себе undefined behavior.
+251
Демотивация по полной программе или почему я жду конца света?
6 мин
17KНизкий поклон Хабранароду!
Много мы все начитались и даже дочитались статьей о том, как улучшить работоспособность, эффективность и другую, простите — фигню.
Пост НЕ для тех у кого все хорошо, по крайней мере, кажется что все хорошо, е.г. праведным – не читать.
Пост можно было бы назвать еще и «реальные рекомендации по «возьми себя в руки, наконец» ».
Не верьте тем, кто пишет об эффективности, «самое время начать учиться играть на гитаре», «найдите в себе энергию делать то, другое...», это все «фигня», через пару дней все опять будет как прежде. Постарайтесь найти решение сами.
«Пункты» приведены случайным порядком, и хватит введения, просто прочтите пост, попытайтесь найти что-то себе полезное (вы обязательно найдете).
Предисловие
Много мы все начитались и даже дочитались статьей о том, как улучшить работоспособность, эффективность и другую, простите — фигню.
Пост НЕ для тех у кого все хорошо, по крайней мере, кажется что все хорошо, е.г. праведным – не читать.
Пост можно было бы назвать еще и «реальные рекомендации по «возьми себя в руки, наконец» ».
Не верьте тем, кто пишет об эффективности, «самое время начать учиться играть на гитаре», «найдите в себе энергию делать то, другое...», это все «фигня», через пару дней все опять будет как прежде. Постарайтесь найти решение сами.
«Пункты» приведены случайным порядком, и хватит введения, просто прочтите пост, попытайтесь найти что-то себе полезное (вы обязательно найдете).
+224
Кто кого учит: преподаватель студента или студент преподавателя?
11 мин
17KВступление
Нет, мой пост не про Никиту Михалкова, как некоторые могли бы подумать, гляда на скриншоты. Мне хотелось бы поведать хабрасообществу о методах преподавания IT-дисциплин на примере нескольких ВУЗов одного из крупных городов в России с позиции человека, который раньше занимался тем, что писал на заказ студентам этих ВУЗов курсовые и дипломные работы и тесно работал не только с учащимися и с преподавательским составом, но и с работодателями. Параллельно это не мешало мне учиться на всё той же специальности, связанной с IT и увидеть всю «систему» своими глазами изнутри. Я читаю хабр уже около четырех лет и заметил, что на нём пишут много статей на тему образования, но тот ВУЗ, где я учился отличается тем, что получил несколько грантов в области нанотехнологий и кластерных вычислений, поэтому я с удовольствием расскажу о всей подноготной таких популярных в телевизоре тем.
В завершение статьи я также хотел бы вывести некоторые тезисы на тему образования в IT, которые будут несколько различаться с общепринятыми, чтобы дать вам пищу для обсуждений в комментариях, если конечно это будет вам интересно…
+104
Информация
- В рейтинге
- Не участвует
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
System Administration, Security Engineer
Middle
Project management
Customer support
Jira