Все потоки
Поиск
Написать публикацию
Обновить
1013.18

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

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

Сначала показывать
Порог рейтинга

Ветераны IT с высоким ЧСВ

Есть определенная группа т.н «тру прогеров», которых неистово бомбит от того, что все идут в IT. Их главные тейки: 

  • Вы идете за баблом, а мы пришли по зову сердца

  • Невозможно стать программистом, если до этого имел другую специализацию и не особо интересовался компьютерами

Дальше в зависимости от степени ЧСВ, они запрещают идти в IT в 30+, 40+ и т.д. Ну и советуют разные специализации от дворника до кассира. 

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

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

А бомбит у таких людей скорее от комплексов. Они чувствовали свою элитарность, получали ЗП сильно выше средней. А потом оказалось, что не так уж сложно зайти в эту сферу при должной мотивации в любом возрасте и с любым бэкграундом.

***

Подписывайтесь на мой телеграм-канал Вайтишная

Теги:
Всего голосов 35: ↑10 и ↓25-15
Комментарии9

Привет, Хабр! Держите задачу от наставника курса «Разработчик на С++» Саввы Лебедева. Предлагайте варианты решения в комментариях.

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

Идеально выполнить за линейную сложность по времени и константную сложность по памяти. Заодно попробуйте решить эту задачу менее оптимальным способом по памяти, например с использованием множества или словаря.

Пример 1:

Ввод: nums = [2,2,1]
Вывод: 1

Пример 2:

Ввод: nums = [4,1,2,1,2]
Вывод: 4

Пример 3:

Ввод: nums = [1]
Вывод: 1 

Ограничения:

  •  1 <= nums.size() <= 3 * 10^4

  •  -3 * 10^4 <= nums[i] <= 3 * 10^4

  • Каждый элемент в массиве повторяется дважды, кроме одного: он будет единожды.

int FindSingleNumber(vector<int>& nums) {
	...
}

Теги:
Всего голосов 7: ↑6 и ↓1+10
Комментарии17

Всем привет!

И "последняя серия" про convention over configuration.
Я уже говорил, чем данный принцип полезен разработчику. Но можно посмотреть чуть шире.

1) с настройками приложения работают люди, не относящиеся к команде - тестировщики, DevOps-инженеры (да, они не должны этим заниматься, но ...), сопровождение ПРОМ. И у них будут похожие проблемы:
а) слишком много настроек
б) не понятно, что важно
в) не понятно, у всех одинаковые настройки (скопированные из каркаса) или у кого-то есть особенности, требующие внимания. По-хорошему, все должно быть описано в документации к релизу, но случается всякое)

2) для разработчика библиотеки или сервиса вывалить на пользователей сотню настроек, давая им возможность настроить "под себя" - самый простой, но не самый правильный вариант. Даже если ко всем настройкам есть подробная документация, но как я уже написал выше - случается всякое) Правильный подход - подумать, как этим сервисом будут пользоваться. Это на самом деле проблема. Не для всех, open sourse библиотека, которую неудобно использовать, скорее всего не пройдет "естественный отбор". А вот в "кровавом enterprise" проблема проявляется во всей красе. Не всегда пользователи могут отказаться от использования какой-то части платформы. Так вот, чтобы понять оптимальные настройки по умолчанию - надо поставить себя на место пользователя. Или собрать обратную связь, или пользоваться своим продуктом. Т.е. convention over configuration способствует движению в правильном направлении

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Еще не решили, чем займетесь в эти выходные? Тогда приходите на стенд Cloud.ru на ИТ-пикнике в Москве!

Мы подготовили игры на проверку hard skills, творческие задания, облачные коктейли и даже зону для самых маленьких, чтобы вы могли хорошо провести время всей семьей.

Что еще будет на стенде:

  • Cloud-Man — наша версия легендарной игры Pac-Man, где вы сможете примерить роль облачного провайдера и перенести все on-premise решения клиентов в облако.

  • Кодинг на скорость — получиться ли выкатить фичу в прод всего за 60 секунд? Проверьте себя!

  • Физическая викторина — сможете разменять одновременно мозг и тело. 

Самые активные участники получат крутой мерч и наборы LEGO 🎁.

А помимо интересных развлечений на стенде можно будет пообщаться с нашими сотрудниками и побольше узнать про Cloud.ru и продукты. Не упустите шанс лично познакомиться с разработчиками Cloud.ru Evolution!

👉 Зарегистрироваться

Будем рады встрече на ИТ-пикнике!

Интересное в блоге:

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Всем привет!

Снова попробую сам с собой поспорить ... санитары, ау ... так ли хорош принцип convention over configuration.

  1. Первое возражение я уже упомянул в предыдущем посте. А как же полный контроль над настройками проекта? Мало ли что там в значениях по умолчанию.
    Ответ: при текущей модульности и сложности ПО - это видимость контроля. Невозможно вынести все настройки в один файл. А даже если и возможно - как потом с этим работать?
    С другой стороны достаточный набор модульных и регрессионных тестов плюс нагрузочное тестирование дает некую уверенность, что все настроено верно. А тесты нужны в любом случае.

  2. Если система прячет от нас настройки - она менее гибка, и в нестандартном use case ее придется настраивать "через одно место". И это в самом деле важный момент. convention over configuration не означает, что разработчик компонента спрятал все настройки в "черный ящик". Это неправильный convention over configuration. Правильный - разработчик продумал некие настройки по умолчанию, удовлетворяющие основные use cases, но оставил возможность подтюнить при необходимости.
    Это может быть application.yaml в Spring Boot, код на Kotlin или Groovy DSL в Gradle или даже написание плагина в Maven. Последний кейс может показаться антипримером - настроить что-то под себя достаточно сложно. Но как раз за это многие и любят Maven - сделать из скрипта сборки "большой ком грязи" на Maven гораздо сложнее, чем в том же Gradle. Так что кажется, что и такой вариант допустим.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

Всем привет!

Я часто вижу в проектах лишние настройки. Они попадают в проект следующими путями:

  1. скопировали из каркаса\работающего сервиса не задумываясь - нужны ли эти настройки. Да, принцип "работает - не трогай" встречается и у разработчиков)

  2. решили явно прописать какие-то настройки, для надежности

Я считаю, что так делать не надо. Почему?

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

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

  3. среди скопированных настроек могут быть не нужные в данный момент. Код легко меняется, ТЗ - тоже, поэтому добавлять что-то "на вырост" не стоит

  4. настройки со временем могут превратится в некий аналог "большого кома грязи", который будут боятся трогать. Как разработчики, так и сопровождение. Чтобы этого не допускать - настройки нужно чистить. Чтобы меньше было чистить - не нужно добавлять лишнее

А вообще есть такой хороший принцип - convention over configuration. Тоже моя любимая тема) Принцип говорит о том, что должны быть настройки по умолчанию, устраивающие большинство потребителей. Эти настройки потребитель не задает явно, они уже заданы.

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

Веб-пентест для специалистов с опытом: бесплатный тест для оценки знаний

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

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

→ Пройти бесплатное тестирование

На курсе «Специалист по информационной безопасности: веб-пентест» обучение проходит на примере реальных кейсов: вы будете тестировать веб-приложения на уязвимости и учиться их защищать.

Вы научитесь:

  • Не только ломать веб-приложения, но и защищать их от атак;

  • Анализировать уязвимости и тестировать приложения на проникновение;

  • Пользоваться Docker, Kubernetes, DevSecOps и развёртыванием в облаке;

  • Проектировать безопасную архитектуру веб-приложений;

  • Использовать методики и инструменты для идентификации уязвимостей;

  • Внедрять двухфакторную аутентификацию;

  • Находить уязвимости OWASP Top 10 и другие;

  • Применять инструменты и методики DevSecOps.

Программа рассчитана на 6 месяцев, в среднем учёбе нужно уделять 20 часов в неделю. Но вы можете заниматься в своём темпе и брать перерывы в учёбе.

Ближайший старт — 15 августа и 12 сентября

→ Узнать подробнее и начать учиться бесплатно

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

Заглядывайте на стенд Рег.ру на ИТ-пикнике

17 августа в Москве в музее-заповеднике “Коломенское” пройдет ИТ-пикник, где соберутся IT-специалисты вместе со своими семьями. Там будем и мы. Приходите знакомиться!

Чем можно заняться на нашем стенде

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

→ Замедлиться в уголке ЦОД-медитации, где можно будет насладиться расслабляющей атмосферой под звуки серверов дата-центра. А рядом вас будет ждать фотозона и бассейн с шариками и фламинго.

→ Проверить удачу и покрутить IT-барабан. Самые азартные смогут испытать свое везение, проверить собственные знания и получить крутые подарки. 

Что еще будет на ИТ-пикнике

→ Лекции. Эксперты расскажут о продуктовой разработке, архитектуре и качестве, кибербезопасности и менеджменту в ИТ. Параллельно будет идти научпоп-лекторий.

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

→ Музыка. Главный хедлайнер ИТ-пикника — Леонид Агутин! Выступление будет на главной сцене фестиваля.

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

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

Заметки в Телеграме - легко! Знакомьтесь, SUDAKIDAI ✍️

Часто находите интересные статьи в Телеграм-каналах, которые хочется сохранить на потом? Или просто нужно быстро записать идею, не выходя из мессенджера?

SUDAKIDAI - ваш личный помощник по сбору и хранению заметок прямо в Телеграме!

Как работает SUDAKIDAI:

  1. Пересылаете пост в бота @SUDAKIDAI_bot.

  2. ИИ-мотор на базе YandexGPT бота анализирует текст, выделяет ключевые моменты, определяет категорию и подбирает релевантные тэги.

  3. Ваша заметка готова! Она доступна в мини-приложении бота с удобным облаком тэгов для быстрого поиска нужной информации.

Преимущества SUDAKIDAI:

  • Простой интерфейс: интуитивно понятный и удобный для использования.

  • Автоматическая обработка: ИИ делает всю "черную работу" по структурированию информации.

  • Быстрый поиск: с помощью облака тэгов вы мгновенно найдете нужную заметку.

  • Бесплатный: SUDAKIDAI доступен для всех пользователей Телеграм.

Не теряйте ценную информацию!

Пробуйте SUDAKIDAI уже сегодня!

Ссылка на бота @SUDAKIDAI_bot

P.S. Делитесь своим опытом использования SUDAKIDAI в комментариях!

UPD. Добавил сохранение заметок из внешних ресурсов по ссылке, улучшил логику формирования категории и хэш-тэгов.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии7

Как создать веб-приложение на базе VK Mini Apps 📱

Написали пошаговую инструкцию, в которой:

  • показываем, как создать интерфейс на основе готовых адаптивных VKUI‑компонентов;

  • затрагиваем все основные библиотеки социальной сети;

  • устанавливаем сертификаты и подключаем проксирующий сервер;

  • разворачиваем в облаке и загружаем на платформу VK;

  • добавляем приложение в каталог, чтобы его легко находили пользователи.

Особые навыки администрирования не понадобятся. Берем небольшие вычислительные мощности (1 CPU с 512 МБ RAM) и простой Docker-файл.

Начать изучение →

Теги:
Всего голосов 7: ↑7 и ↓0+9
Комментарии0

Математическая задача про кофейню

Привет, Хабровчане! Делимся интересной задачей. Попробуете решить? Пишите варианты ответов в комментариях.

Условия: Аня выбирает напиток в кофейне. В меню:

  • 7 видов кофе,

  • 2 вида горячего шоколада,

  • 5 видов чая.

Кофе и горячий шоколад готовят на обычном, соевом или овсяном молоке. Кофе может быть и без молока (а горячий шоколад всегда с молоком). Ещё в кофейне есть 8 сиропов, по желанию можно 1 или 2 разных добавить в кофе.

Вопросы:

  1. Аня берёт каждый день разные варианты напитков. Сможет ли она за три года перепробовать все возможные?

  2. Бариста сказал, что теперь любой из напитков можно сделать горячим или холодным. Сколько времени теперь понадобится Ане, чтобы попробовать все варианты?

Решение задачи опубликуем в комментариях :)

Больше подобных задач в бесплатном тренажере «Основы математики для цифровых профессий».

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии14

Легенда инфобеза Мокси Марлинспайк обвинил Agile в торможении инноваций в области программного обеспечения. По его словам, «магия» разработки ПО была утрачена за 20 лет из-за того, что разработчиков запихнули в «чёрные ящики абстракций», и это лишило их свободы, необходимой для инноваций.

«У любого, кто управляет инженерной организацией, будет некая философия управления, которая в некотором роде является нижестоящей или производной и как-то связана с гибкой методологией», — сказал Марлинспайк. Он считает, что гибкие команды в конечном итоге оказываются изолированными.

С ним согласился и генеральный директор Thistle Technologies Виндоус Снайдер.

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

В то время как программная инженерия провела последние несколько десятилетий, пытаясь стать быстрее, гибче и, как следствие, более абстрагированной, исследователи безопасности делали наоборот, сказал Марлинспайк.

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

«Работники кибербезопасности — это те, кто сидели в библиотеке, изучали заклинания, на самом деле понимали, как все это работает… как в мире Гарри Поттера. Единственное, что нужно, чтобы использовать эти знания, — это компьютер. И он даже не обязательно должен быть хорошим», — заключил Марлинспайк.

Теги:
Всего голосов 4: ↑4 и ↓0+7
Комментарии5

Всем привет!

Ну что, началось)
https://www.piter.com/collection/all/product/programmirovanie-na-python-s-pomoschyu-github-copilot-i-chatgpt

Ок, ещё одна книжка про ChatGPT. Смотрим аннотацию: «Используя GitHub Copilot, можно простым языком описать, что должна делать программа, а искусственный интеллект тут же сгенерирует ее. Узнайте, как создавать и улучшать программы на Python с помощью ИИ, даже если прежде вы не написали ни строчки компьютерного кода.».

И ещё: « Глава 4 — первая из двух глав, в которых вы научитесь читать код на языке Python. Действительно, Copilot будет писать код за вас, но вам нужно уметь читать его, чтобы определить, будет ли он делать то, что вы хотите. И не волнуйтесь: Copilot поможет вам читать код!»

И это не ролик, не статья, целая книга... Войти в IT, если с первого раза не получилось) Интересно, на собесах Copylot уже используют?)

Меня только один вопрос мучает: если человек не захотел или не смог освоить язык программирования или фреймворк - как хорошо он сможет спроектировать сервис или алгоритм?

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии4

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

Ежемесячный дайджест: новое за июль☀️

📺 Показали удобный способ, как развернуть Telegram-бота с сервисом Evolution Container Apps на бесплатном вебинаре. А в ближайших планах: 

💼 Разобрали кейс: АТОЛ — компания, которая занимается полным циклом разработки и производства оборудования для транспортной телематики поделилась, как улучшила производительность критически важных приложений 1C после миграции IT-инфраструктуры в Облако VMware от Cloud.ru. Другие кейсы можно посмотреть на нашем сайте.

📝 Поделились опытом и экспертизой:

☁️ Даем еще две недели, чтобы попробовать облако Cloud.ru юрлицам и ИП бесплатно. Успевайте подать заявку до 31 августа 2024 года!

🎧 Спросили у Максима Смирнова — frontend-разработчика из Т-Банка, кто такой frontend-архитектор, чем хорош фреймворк Angular и почему в работе так важна гибкость. Ответы в новом подкасте на YouTube-канале Cloud.ru

До встречи в сентябре!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Полезные ресурсы для начинающих разработчиков

Собрали IT-версию пакета с пакетами — подборку с подборками. Внутри каждой из них вы найдёте бесплатные курсы, телеграм-каналы, YouTube-каналы, книги, тренажёры и статьи. Они помогут изучить основы языков программирования, углубить знания и применить их на практике. 

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

→ Все курсы по программированию

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Только не говорите, что я один этого не знал.

Если ссылку любого репозитория на GitHub, например такую:

https://github.com/Bednyakov/takewords

Дополнить строкой vscode.dev, чтобы получилось:

https://vscode.dev/github/Bednyakov/takewords

Проект откроется в онлайн редакторе Visual Studio Code.

Теги:
Всего голосов 11: ↑10 и ↓1+13
Комментарии3

Всем привет!

В продолжение предыдущего поста попробую сам себе возразить.
Предположим, что наши DevOps инженеры круто настроили pipeline: все атрибуты, которые должен настроить разработчик, параметризованы. Например, с помощью чартов Helm.
Значит ли это, что разработчик может расслабиться и не изучать все эти ваши Deployment, EnvoyFilter, VirtualService ...? Мой ответ - нет. И вот почему.

  1. если рассуждать дальше, то и Docker разработчику не нужен. Пусть его же DevOps-ы настраивают. А я на Tomcat встроенном запущу. Но вспомним в чем суть Docker - единая среда у разработчиков, тестировщиков и ПРОМа. Что позволяет избежать большой части ошибок, возникающих из-за разницы настроек окружения. Не всех, но большого числа

  2. окей, Docker пусть будет. А k8s? Но идея та же. Приложение в облаке ведёт себя по другому, чем в standalone. Его может в любой момент прибить k8s и поднять на другой node. А это ограничивает возможности локального кэширования. В облаке несколько приложений может работать параллельно. Это нужно учитывать, например, при чтении из топика Kafka. Более того число подов может меняться - см. HorizontalPodAutoscaler. Еще момент - по умолчанию у нас ephemeral storage и надеяться на сохранение логов после перезапуска нельзя. А ещё одно из Cloud Native требований - быстрый старт приложения, опять же из-за потенциального перезапуска в любой момент. На этот момент не всегда обращают внимание, хотя варианты улучшения времени запуска есть.

    Надеюсь, я вас убедил. Если нет - жду в комментах

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Почему бы не сделать runtime языка С++ проще и легче? почему бы не сделать его перенос в том числе проще? Когда я задался этим вопросом, я решил, что во чтобы то ни стало, я напишу свой RT, для тех, кто пишет под слабые машины, или тех, кто пишет под bare metal среду. результат вы можете посмотреть на гитхабе: вотъ

Когда я работал, я старался максимально всё упростить, при этом сохранив юзабельность. не знаю как для других, но лично мне было важно сохранить исключения, для меня это удобно. но в С++ они жутко дорогие из-за RTTI (RunTime Type Information), и на bare metal реализуется с большим напрягом. выход прост - использовать статусы вместо типов. но чтобы оставить всем знакомый и удобный синтаксис исключений и позволить функциям возвращать что-то вместо статуса, где это везде лепят, я переделал всё на тупо макросах :>

так же я понял, что сложность моей работы и сложность переносимости этой вещицы усложнится, если прям всё с нуля пилить, поэтому просто воспользовался libc, выпилив libc++. Пришлось сделать обёртки над new и delete, но это не так уж и сложно, просто вызывать malloc/free.

Так же я невероятно сильно намучился в попытках сделать всё используя стандартный синтаксис С++. Потратил несколько часов в попытках разобраться как оторвать исключения от использования rtti, возился в флагах, писать cxa, gxx и unwind с нуля, даже лез в ассемблерный код в попытках вырезать надоеду, но по итогу сдался и просто слепил всё из макросов.

Всем добра <3

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Впечатлился случайно найденным ресурсом и убил час, чтобы(, несмотря на кривое юзабилити,) найти оглавление. Вот оно:

https://opendsa-server.cs.vt.edu/home/books
(Sample OpenDSA eTextbooks)

Это один из (потенциально многих) несвязанных инстансов открытого движка для прохождения курсов по Computer Science и создания новых. Крутая его фишка: визуализация алгоритмов, структур данных и концепций, таких как стили вызовов функций - ещё и с упражнениями для закрепления.

Контента бездна, рекомендую прокликать ссылки.

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Десять ресурсов для практики 

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

LeetCode
HackerRank
GeeksforGeeks
Codewars
Codeforces
CheckiO
Exercism
Coderbyte
CodeChef
Edabit

В бесплатных частях курсов Практикума мы также добавили возможность попрактиковаться (подойдёт совсем начинающим). Присмотритесь, подходит ли вам такой формат:

для фронтенд-разработчиков: напишете простую программу на JavaScript и сделаете страницу интерактивной;
для java-разработчиков: напишете консольное приложение;
для android-разработчиков: найдёте ошибки и запустите приложение «Конвертер валют»

Теги:
Всего голосов 6: ↑6 и ↓0+9
Комментарии3

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