Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать

Hacker News — это пульс мирового технологического сообщества. Тысячи разработчиков, основателей стартапов, инженеров из крупных компаний ежедневно делятся здесь инсайтами, проектами, новостями и мемами. Но есть проблема: качественный контент тонет в шуме, или интересные тебе темы тонут в неинтересных тебе темах.

Но из-за большого потока постов качественные статьи по нужной теме теряются среди других, и если нужно найти какие-то системные тренды, увидеть, как меняется отношение к Rust, AI или Open Source, а не просто «почитать что-то интересное» — это сделать сложно. Можно, да, скопировать кучу ссылок и отправить в LLM, попросив отсортировать, но это занимает время и не так удобно, если нужно проанализировать большое количество тем.

И тут мне пришла идея — создать программу на Python, которая будет парсить через официальный API Hacker News, строить эмбеддинги постов с комментариями, кластеризовать посты и при помощи LLM суммаризировать этот кластер по ссылкам.

Сказано — сделано. Я смог спарсить 100 000 постов с Hacker News за последние 693 дня, получив более тысячи кластеров, 10 миллиона апвоутов, около 27 тысяч авторов и всего 0.1% выбросов. В этой статье мы разберем, какие тренды были активны в мировом IT-сообществе последние два года.


Итак, однажды, в процессе скроллинга Hacker News в поиске вдохновения и интересных статей, я задумался: у Hacker News есть целых два API (Firebase и Algolia), так почему бы не придумать какой-нибудь проект с использованием API? Но обычный постинг в условный телеграм-канал или просто приложение показался мне скучным. Немного подумав, я пришел к идее: а почему бы не автоматизировать и не проанализировать посты на Hacker News? Это и идеи для статей, и возможность почитать и проанализировать мнения по разным темам, найти интересующие вещи.

Я начал думать, какие технологии пригодятся. Просто кидать LLM ссылки и просить выделить темы — скучно. Я решил пойти путем другим, через создание ETL (Extract-Transform-Load) пайплайна. Сначала мы парсим сами статьи, и если позволяет rate-limit — то и 3–5 комментариев к ним. После мы формируем из них объекты данных, которые в последующем через трансформер all-MiniLM-L6-v2 преобразуем в эмбеддинги. Эти самые эмбеддинги кластеризируются через HDBSCAN, а затем LLM анализирует и создает заголовок и саммари для каждого из кластеров. И в конце — создаем JSON и HTML-файл, графики различные. Для работы с LLM я использовал BotHub API.

Конечно, в процессе разработки я сталкивался с проблемами, например: оптимизация запросов к API, настройка кластеризации с маленьким выбросом (то есть некластеризированными статьями), работа с LLM через API, конфигурация и сам пайплайн. Но итоговый результат того стоил — за несколько минут мы получаем двухлетний срез всех мнений в IT-сообществе.

Сам исходный код программы, которую я разработал для сбора данных, вы можете прочитать в моем репозитории. Перед тем как начать разбор, хочу сказать, что я также сделал онлайн-карту историй, доступную по этой ссылке. Для анализа требуется файл кластеризации: вы можете сгенерировать его сами через мой репозиторий или скачать готовый файл кластеризации hn_clusters.json.

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

Архитектура решения

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

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 1

Начнем с этапа извлечения данных. Тут довольно интересно: Hacker News имеет два официальных API — Firebase Hacker News API и Algolia API. Firebase дает прямой доступ к сырым данным в реальном времени. Отлично подходит для мониторинга новых постов, но для анализа вглубь, увы, неудобен: нужно проходиться по всем ID, делать сотни запросов к /item/, фильтрация и сортировка — на стороне клиента. А вот Algolia удобен и своим поисковым движком, и готовыми индексами. Он позволяет фильтровать, сортировать, ограничивать по дате и скору, и поэтому я выбрал его.

Но у Algolia есть лимиты и ограничения, например не более 1000 постов за раз.

У меня в коде, в части связанной с фильтрацией, есть параметр search_by_date. Если он False, то мы используем API-эндпоинт https://hn.algolia.com/api/v1/search, и он отдает по релевантности. А по умолчанию он равен True, и используется уже API-эндпоинт https://hn.algolia.com/api/v1/search_by_date. Вместо того чтобы запрашивать страницы подряд, я использую параметр created_at_i<{timestamp} и двигаюсь назад во времени. Механика простая: запросили 100 постов с датой меньше текущей, взяли минимальную дату из ответа, подставили ее в следующий запрос. Так можно собрать хоть 100 000 постов — пока не упремся в max_pages или не кончатся данные.

Также есть и фильтрация через QueryParams, который строит словарь для передачи в API.

class QueryParams(BaseModel):
    query: str | None = None
    tags: list[str] | None = None
    numeric_filters: str | None = None
    filters: str | None = None
    hitsPerPage: int = 100
    page: int = 0

    def build_dict(self) -> dict[str, Any]:
        params: dict[str, Any] = {}
        for field in self.model_fields:
            value = getattr(self, field)
            if value is None:
                continue
            if isinstance(value, list):
                value = ",".join(value)
            params[_PARAM_ALIASES.get(field, field)] = value
        return params

Кроме того, есть AlgoliaStoryFilter — это абстрактный класс для удобного создания различных фильтров:

class AlgoliaStoryFilter(ABC):
    @abstractmethod
    def apply(self, stories: list[Story]) -> list[Story]: ...

    def numeric_filters(self) -> list[str]:
        return []

    def query_tags(self) -> list[str]:
        return []


class DateRangeFilter(AlgoliaStoryFilter):
    ...

class MinScoreFilter(AlgoliaStoryFilter):
    ...


class AuthorFilter(AlgoliaStoryFilter):
    ...


class KeywordFilter(AlgoliaStoryFilter):
    ...

А также есть сортировка:

class StorySorter:
    @staticmethod
    def by_score(stories: list[Story], reverse: bool = True) -> list[Story]:
        return sorted(stories, key=lambda s: s.score or 0, reverse=reverse)

    @staticmethod
    def by_date(stories: list[Story], reverse: bool = True) -> list[Story]:
        return sorted(
            stories,
            key=lambda s: s.created_at or datetime.min.replace(tzinfo=timezone.utc),
            reverse=reverse,
        )

    @staticmethod
    def by_alphabetical(stories: list[Story], reverse: bool = False) -> list[Story]:
        return sorted(stories, key=lambda s: s.title or "", reverse=reverse)

После загрузки постов я параллельно подгружаю комментарии — отдельным запросом с tags=comment и filters=story_id={id}. Максимальное число комментариев на пост регулируется через max_comments_per_story, чтобы не перегружать LLM на этапе суммаризации.

Всё это работает уже через наши DTO: Story и Comment:

class Comment(BaseModel):
    id: int
    text: str
    created_at: str
    author: str | None = None
    story_id: int | None = None

    @property
    def clean_text(self) -> str:
        return strip_html(self.text)

    @property
    def length(self) -> int:
        return len(self.clean_text)


class Story(BaseModel):
    id: int
    title: str
    url: str | None
    created_at: datetime | None
    author: str
    score: int
    tags: list[str] = Field(default_factory=list)
    comments: list[Comment] = Field(default_factory=list)
    embedding: list[float] | None = None
    cluster_label: int | None = None
    pos_x: float | None = None
    pos_y: float | None = None

    @property
    def hn_url(self) -> str:
        return f"https://news.ycombinator.com/item?id={self.id}"

    @property
    def embedding_text(self) -> str:
        parts = [self.title] * settings.embedding_title_repeats
        for comment in self.comments[: settings.embedding_max_comments]:
            snippet = comment.clean_text[: settings.embedding_comment_chars]
            if snippet:
                parts.append(snippet)
        return "n".join(parts)[:_MAX_EMBEDDING_TEXT_CHARS]

Комменты предварительно также очищаются от HTML-символов, чтобы не было мусора во время превращения в вектор.

Следующий этап — трансформация, то есть превращение данных в векторы, эмбеддинги.

Текст эмбеддинга формируется просто: заголовок повторяется три раза (самый сильный сигнал, чтобы комментарии не могли увести куда-то в сторону). Далее добавляем комментарии с обрезкой до 350 символов.

Как трансформер я использую all-MiniLM-L6-v2. Модель быстрая и качественная, выдает нормализованные эмбеддинги (normalize_embeddings=True), что критично для кластеризации через косинусное расстояние. Да, можно воспользоваться более качественными решениями или API, но они медленные, а в случае огромной массы историй скорость важна.

Настройки эмбеддингов у меня такие:

EMBEDDING_BATCH_SIZE=32
EMBEDDING_TITLE_REPEATS=2
EMBEDDING_MAX_COMMENTS=5
EMBEDDING_COMMENT_CHARS=256

Следующий этап — кластеризация. Тут выбор был между HDBSCAN и K-means. Я выбрал HDBSCAN, так как у KMeans нужно было знать итоговое количество кластеров, а у нас неизвестно. А также он умеет маркировать шум (noise) — посты, которые не вписались ни в один кластер.

Настройки кластеризации:

CLUSTER_MIN_SIZE=15
CLUSTER_AUTO_MIN_SIZE=false
CLUSTER_MIN_SAMPLES=3
CLUSTER_ASSIGN_OUTLIERS=true
CLUSTER_OUTLIER_THRESHOLD=0.25
UMAP_N_NEIGHBORS=30
UMAP_N_COMPONENTS=15
UMAP_MIN_DIST=0.0
CLUSTER_SELECTION_METHOD=leaf

Перед HDBSCAN я применяю UMAP с параметрами:

UMAP (Uniform Manifold Approximation and Projection) — это алгоритм снижения размерности и визуализации многомерных данных.

umap.UMAP(
    n_components=12,       # редуцируем 384 → 12
    n_neighbors=10,        # локальный контекст
    min_dist=0.1,          # плотность точек
    metric="cosine",       # расстояние для эмбеддингов
)

Редукция до 12 измерений является компромиссом: сохраняет структуру данных, но ускоряет кластеризацию. В коде также сохраняются первые две компоненты (points[:, :2]) для визуализации на карте.

А теперь к обработке выбросов. HDBSCAN обычно оставляет 10–30% точек как шум. Моя задача — минимизировать потери и стараться прийти к тому, чтобы все посты были распределены по кластерам (и чтобы кластеров было достаточно много). В коде реализован алгоритм присвоения выбросов:

# Нормализуем эмбеддинги (L2-норма)
data = embeddings / np.linalg.norm(data, axis=1, keepdims=True)

# Считаем центроиды кластеров (средний вектор)
centroids = [data[labels == cluster_id].mean(axis=0) for cluster_id in cluster_ids]

# Косинусное сходство каждой шумовой точки с центроидами
similarities = data[noise_positions] @ centroids.T

# Присваиваем, если сходство >= 0.45 (cluster_outlier_threshold)
accepted = similarities.max(axis=1) >= 0.45
labels[noise_positions[accepted]] = cluster_ids[best[accepted]]

Порог 0.45 отсекает точки, которые слишком далеки от любого кластера. В результате из 100 000 постов только 0.11% остались некластеризованными. Это говорит о том, что UMAP + HDBSCAN с правильными параметрами (плюс релевантная выборка) отлично разделяет темы.

Суммаризация

Кластеры, безусловно, это очень хорошо. Но мне показалось, просто смотреть сырые данные может быть трудозатратным, а то и вовсе скучным. Поэтому я решил реализовать суммаризацию через API к LLM, через openai-совместимый шлюз.

У нашего сервиса [BotHub](реферальной ссылке](https://bothub.ru/?invitedBy=zx7xIePYIOcWHhTfgg6-O) есть несколько преимуществ: можно оплачивать тарифы с российских банковских карт и иметь доступ практически ко всем нейросетям, включая новейшие, по низким ценам (иногда даже ниже, чем OpenRouter). Пайплайн и чат-бот в онлайн-карте работают через BotHub, и вы можете получить 300 тысяч бесплатных CAPS, перейдя по реферальной ссылке, если захотите сами запустить пайплайн.

Используя модель gpt-5.6 luna, я потратил всего ~0.09$ (1 069 550 токенов) за один полный прогон пайплайна.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 2

После регистрации для получения API-ключа достаточно приобрести CAPS (внутренняя валюта для токенов) и зайти в раздел для разработчиков. Документацию по ней можно найти здесь. Также API поддерживает Batches API.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 3

Получив токен, вы можете обращаться через библиотеку openai, поставив как url https://openai.bothub.chat/v1 и вставив свой токен:

self._client = AsyncOpenAI(
    api_key=key,
    base_url=base_url or settings.ai_base_url,
    timeout=settings.ai_request_timeout,
)

Я взял за основу модель gpt-5.6 luna. Она дешевая и быстрая, а для наших требований больше и не надо.

На вход модели подается сжатое представление кластера:

for story in top_stories[:ai_max_stories_in_prompt]:  # 30 постов по умолчанию
    lines.append(f"- ({story.score} points) {story.title}")
    for comment in story.comments[:ai_max_comments_in_prompt]:  # 3 комментария
        snippet = truncate(comment.clean_text, ai_prompt_comment_chars)  # 338 символов

Чтобы парсить ответы машинно, в system-промпте жестко задан формат:

system = (
    "You are an expert analyst of Hacker News discussions. You receive "
    f"{len(batch)} cluster(s) of related posts with comment snippets. "
    "Answer ONLY with a valid minified JSON array containing exactly one "
    f"object per cluster, in input order, in the format {_JSON_SPEC}. "
    f"Write all fields in {settings.ai_summary_language}. For each "
    "cluster: 'index' repeats its cluster number; 'title' must name the "
    "concrete shared topic (a product, technology, company or event) — "
    "never a vague heading like 'Tech Discussions'; 'description' must "
    "state what unites the posts, the community's dominant opinion, and "
    "any notable disagreement or concern; 'sentiment' is the overall "
    "tone of the discussion: 'positive', 'negative', 'mixed' when "
    "opinions clearly split, or 'neutral' for factual discussions. "
    "No markdown, no extra keys, no text outside the JSON array."
)
return [
    {"role": "system", "content": system},
    {"role": "user", "content": "nn".join(sections)},
]

Тональность (sentiment) вычисляется на основе дискуссии внутри кластера, она может быть positive (хвалят и восторгаются), negative (критикуют), mixed (мнения разделены), neutral (нейтрально).

Через пайплайн в итоге формируется HTML-отчёт и JSON-файл с данными кластеризации (его вы как раз и можете загрузить на моём сайте).

{
  "metadata": {
    "total_stories": 100000,
    "elapsed_seconds": 3249.432794319,
    "clusters_count": 1272,
    "outliers_count": 103,
    "generated_at": "2026-09-05T23:02:31.692155"
  },
  "clusters": [
    {
      "label": 878,
      "size": 575,
      "total_score": 87277,
      "total_comments": 10,
      "avg_score": 151.78608695652173,
      "display_title": "Large Language Model Debate",
      "summary": {
        "title": "Large Language Model Debate",
        "description": "The posts examine how LLMs work, their coding capabilities, practical workflows, risks, and effects on software careers. The community is deeply engaged but divided, with enthusiasm about learning and productivity balanced by concerns about hallucinations, poisoning, limited reasoning, and displacement.",
        "sentiment": "mixed",
        "model": "gpt-5.6-luna"
      },
      "stories": [...]
    }
    ...
  ]
}

Результаты

Пора перейти к самому интересному — какие были получены результаты? Я проанализировал ровно 100 000 последних постов на Hacker News и получил:

  • 1272 кластера

  • 103 неклассифицированных

  • 3400 комментариев

  • 10 412 апвоутов

  • в среднем 104 апвоута на пост

  • 27 223 автора

  • за 694 дня

  • 1 069 550 токенов потрачено

1 069 550 в моем случае стоило всего около 0.09 $ (если быть точными, то 0.09209)! В пересчете на кластер, это всего лишь 0.000072398 $ на кластер!

Давайте разберем графики. Первый — это количество постов в день. Если внимательно приглядеться, можно заметить постепенный рост популярности Hacker News через большее количество постов.

Количество постов в день

Количество постов в день

Чтобы отсортировать малопопулярные статьи, я выставил фильтрацию по score > 10, так что можно увидеть распределение. Естественно, с 10 до 24 апвоутов — самый большой столбец, с 25 до 499 — примерно от 20 до 10 тысяч постов, а 500+ набрали всего лишь около 3 тысяч постов.

Распределение апвоутов

Распределение апвоутов

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

Распределение кластеров по настроению

Распределение кластеров по настроению

А ниже вы можете увидеть саму карту кластеров:

Карта кластеров

Карта кластеров

И как видно по таблице ниже, почти все топ-посты так или иначе связаны с ИИ и LLM.

Посты

Посты

Крупнейшие кластеры видны на графике ниже. Опять же, половина связана с ИИ (6 из крупнейших кластеров). А также виден большой интерес к опенсорсу!

Крупнейшие кластеры

Крупнейшие кластеры

А если посмотреть по скору, то видно, что на первом месте опять LLM и опять 6 кластеров связаны с ИИ. Но остальные уже более технические, связанные с проектами, чаще всего опенсорса.

Самые горячие кластеры

Самые горячие кластеры

Ниже график распределения размеров кластеров. Ось Y — количество кластеров, ось X — количество постов.

Распределение размеров кластеров

Распределение размеров кластеров

Ниже — топ авторов по количеству постов.

Топ авторов по количеству историй

Топ авторов по количеству историй

А ниже — топ источников, опубликованных на Hacker News. Здесь расположился на первом месте с большим отрывом GitHub.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 13

Если рассмотреть дни недели, видно, что в основном статьи на Hacker News выходят в будние дни.

Распределение постов по неделям

Распределение постов по неделям

А если посмотреть распределение по часам, видно, что большинство постов публикуются с 12 до 24 часов, и основной поток — днём.

Распределение по часам

Распределение по часам

А вот ниже можно рассмотреть тональность по месяцам (красная — негативная, зелёная — позитивная, жёлтая — смешанная, серая — нейтральная). Интересно, что позитивная линия и негативная линия идут рука об руку, кроме периода с 02.25 до 04.25. А нейтральная и смешанная всегда примерно на одном уровне.

Тональность по месяцам

Тональность по месяцам

А теперь давайте разберем конкретные тренды и кластеры!

Тренды мирового ИТ за 2 года

В этом блоке я разберу самые интересные крупнейшие кластеры. Вы можете сами изучить все остальные кластеры на моём сайте.

AI Fatigue And Cognitive Costs

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

Практически весь кластер AI Fatigue And Cognitive Costs негативный!

Практически весь кластер AI Fatigue And Cognitive Costs негативный!
AI Fatigue And Cognitive Costs становится популярнее совместно с ростом популярности ИИ

AI Fatigue And Cognitive Costs становится популярнее совместно с ростом популярности ИИ

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

Статистика кластера AI Fatigue And Cognitive Costs

Статистика кластера AI Fatigue And Cognitive Costs

AI Progress and Social Impact

Кластер, похожий на предыдущий, но более сфокусирован на влиянии на социум и развитие. Обсуждаются темпы и пределы развития искусственного интеллекта, а также слежка, нарушения на рабочем месте, атрофия навыков, риски для безопасности, зависимость и негативная реакция общественности. Преобладающий тон — скептический и тревожный, хотя некоторые авторы утверждают, что прогресс реален, формальная проверка и другие области принесут пользу, а оппозиция не должна превращаться в огульную шумиху против искусственного интеллекта. Это показывает самая горячая статья — Don’t fall into the anti-AI hype.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 20

Кстати, если сравнить с предыдущим кластером, можно увидеть следующее:

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 21

Large Language Model Debate

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 22

Крупнейший кластер. Если верить ИИ, делающему суммаризацию этого кластера:

The posts examine how LLMs work, their coding capabilities, practical workflows, risks, and effects on software careers. The community is deeply engaged but divided, with enthusiasm about learning and productivity balanced by concerns about hallucinations, poisoning, limited reasoning, and displacement.

Тональность здесь смешанная, с высокой вовлечённостью и заметным расколом мнений. Главные темы — это принципы работы LLM, программирование с их помощью и их ограничения в виде галлюцинаций (кстати, вы можете почитать в нашем блоге две статьи на тему галлюцинаций нейросети: часть 1 и часть 2). Также в этом кластере есть обсуждения на тему обучения, открытой инфраструктуры и применения LLM в проектах.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 23

Также тут топ-источник — не GitHub, а arXiv.

Show HN Indie Projects

Есть и позитивный кластер в виде постов под тематикой Show HN.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 24

Сообщество в целом поддерживает и обсуждает независимые проекты. Главные темы тут — инди-игры, творческие эксперименты, утилиты, образовательные инструменты и персональные проекты. Дискуссия «Is Show HN dead? No, but it’s drowning», несмотря на критический заголовок, показывает, что есть и критическое видение.

Open Source Licensing And Funding

Так как Open Source — неотъемлемая часть IT-сообщества, эта тема есть и в кластерах. Тут рассказывается о проектах с открытым исходным кодом, лицензиях, бесплатных инструментах для разработчиков, поддержке мейнтейнеров. Настроения в целом позитивны, но опасения по поводу прав на повторную выдачу лицензий, моделей, основанных на источниках, корпоративного поведения, финансирования и устойчивости создают некоторую напряжённость.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 25

Ну и стоит помнить, что Hacker News организован YC — успешным стартап-акселератором. И поэтому лидер выборки — история о релицензировании проекта компанией из YC.

Но есть разрыв между средним и топовыми историями: средний скор — 126, тогда как максимум — 947.

Python Language Evolution

Этот кластер даёт понять, что Python активно живёт и развивается и не планирует сдавать позиции.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 26

Посты здесь сфокусированы на Python 3.14 и 3.15. Поднимаются темы субинтерпретаторов, тайп-чекеров, пакетников, lazy-импортов, freethreading. Энтузиазм за модернизацию идёт рука об руку со спорами о типизации в Python и переусложнении. Также есть дискуссии об экосистеме Python и проектах на нём.

Самая горячая история здесь — это Ty: A fast Python type checker and language server, новый проект от astral-sh, создателей uv.

Среди источников можно достаточно много найти ссылок на дискуссии, форумы, документацию Python и связанными с ним проектами.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 27

Experimental Programming Languages

Неожиданно, но разработка языков программирования интересна многим разработчикам. Да и в последнее время много внимания нетрадиционным языкам, индустрия постепенно меняется.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 28

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

Rust Systems Programming

Также показывает популярность и язык программирования Rust. В этом кластере рассказывается о Rust, инструментах, компиляторах, базах данных, улучшениях безопасности и внедрении в системное программное обеспечение. Преобладает энтузиазм по поводу безопасности и производительности Rust, но остаются разногласия по поводу сложности асинхронности, рисков для экосистемы, совместимости и того, можно ли широко заменить C или C++.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 29

Самый горячий пост тут — Postgres rewritten in Rust, now passing 100% of the Postgres regression tests.

Сам кластер довольно растущий по трендам, хоть и фанатизм пропадать стал. Высокий интерес вызывают критические материалы: «Async Rust never left the MVP state», а также возврат с Rust на C++.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 30

Go Programming Language

Практически сразу за Rust идёт кластер про Go, где рассказывается о его релизах, ошибках компилятора, инструментах, обобщениях, производительности, безопасности, разработке с использованием искусственного интеллекта и практическом использовании экосистемы. Сообщество ценит простоту и продуктивность Go, но периодически критикует языковые ограничения и компромиссы в дизайне.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 31

Lisp Programming Ecosystem

Совершенно неожиданно, но относительно большой кластер связан с Lisp, да ещё и кластер позитивный (а Rust, Go и Python были смешанными). В публикациях отмечаются выразительный дизайн Lisp, гомоиконность, образовательная ценность, интерактивная разработка и постоянная активность в Common Lisp, Scheme, Emacs Lisp и более новых диалектах. Преобладающее мнение однозначно положительное, хотя в некоторых дискуссиях признаётся нишевый статус Lisp, ограничения в инструментарии и неуверенность в более широком внедрении.

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 32

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

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 33

Hacking and Security Research

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

Я проанализировал 100 000 постов с Hacker News и вот что хочу сказать - 34

Заключение

Анализируя два года постов на Hacker News, можно понять основные устойчивые тренды в мире ИТ. AI — главная тема, но дискуссия вокруг него расколота. Сообщество не может прийти к единому мнению: одни видят в AI новый инструмент, другие — угрозу или шум, а третьи против и первых, и вторых. А Open Source переходит в фазу «взросления». Вопросы лицензирования, финансирования и борьбы с нейрослопом заставляют сообщество адаптироваться.

Настроение, кстати, колеблется. Оптимизм сменяется тревогой, особенно в контексте AI и экономической нестабильности. Hacker News для многих публикуется в рабочие дни, что можно было увидеть на графиках.

Этот датасет можно использовать как для анализа, так и для собственных нужд: чтения интересных статей, поиска вдохновения по теме, ресерча HN в поиске интересных постов, идей или проектов.

Исходный код доступен в моём репозитории. А онлайн-карта доступна по этой ссылке.

Автор: DrArgentum

Источник

  • Запись добавлена: 08.09.2026 в 11:00
  • Оставлено в