Я-бы начал с исторических предпосылок. Город строится как 1 большая главная улица. На ней есть Вокзал. Ратуша. Аптека. Банк. Далее от центральной улицы - переулки. Всё рандомное. Рандомной длины. Далее строятся дома. Деревья вдоль дорог.
Когда я начинал учить информатику - мы программировали калькулятор МК-60. И представте себе в нем была такая возможность. 4 регистра стека и 100 ячеек памяти. Я умею его программировать. Но какая польза от этих знаний сегодня?
Допустим вы будете знать все алгоритмы на бумажке. Но у вас не будет навыка их реализовать. Или реализуете неправильно. Тогда какой толк от вас как от специалиста? Или не учтете физических лимитов (память и процессор ограничены) а ваши алгоритм потребует целую планету земля мегафлопов? Будете теоретиком? Так теоретики идут в чистые математики и доказывают Пуанкаре? Вы можете хотя-бы понять о чем Пуанкаре? Нет. Тогда идите в программисты.
Я не UI-щик. Поэтому не знаю какими библиотеками вы делаете в своём PHP рендеринг растровой графики. Но даю идею. Она - работает. Вот какая для вас будет цена решения - я не знаю.
Поэтому давайте с самого начала. Моя версия такова. На Линукс (если ты не программист) можно
поставить больше софта. По ассортименту. И по лицензиям.
Если вы MacOS разработчик и умеете лихо кросс-компилировать проекты с гитхаба и ставить их на свой Mac - то это офигенский плюс. Но к сожалению статистика все равно не в вашу пользу. Пользователей Мак - больше чем программистов. На этом и основан мой тезис. Вообще типичный (80%) пользователь Мака - это творческий человек. И сравнительно обеспеченный. Тоесть его не будет парить что-то бесплатное. Он скорее купит лицензию чтоб не иметь проблем.
У меня до сих пор так и не взлетел китайский графический планшет Xp-Pen по причине отсутствия дров на Ubuntu. Формально дрова были в исходниках от 2015 года где-то опубликованы. Но мне их не удалось скомпилировать и установить. Вернее сказать я потратил пару дней на это дело времени и забил. Моё время стоит дороже чтоб я изучал всю подногодную драйверо-строения и их стеки ошибок.
Да много еще чего было. Профессиональная 4х канальная звуковуха ESY Maya с микшером для музыкантов. И еще большое количество кастомного железа не хотело дружить с Ubuntu.
По сути здесь цена вопроса - насколько сильно ты не хочешь платить за лицензии. И насколько много ты согласен потратить времени на анализ проблем в Linux после установки очередного обновления Ubuntu/Fedora топовых версий.
Красноглазики обычно выбирают Линукс. Это их выбор. Люди побогаче и которые не хотят вообще знать что такое роутинг например просто покупают себе качественое тестирование и техподдержку от мака.
Это когда преподавателю нечего придумывать - он придумывает невообразимые по своей жестокости и безсмысленности ТЗ и даёт их "смеху ради". Причем риски того что студент глубоко закопается - очень велики. По сути это лотерейный билет. Как повезет - так и сдаст практику. Здесь главная проблема - неверно поставленная цель. Нельзя заставлять студента собирать ядро. Инженеры техподдержки RHEL учатся и сертифицируются только для того чтобы 1-проперти поменять в свойствах ядра. А тут - пришел студент и собрал УНИКАЛЬНУЮ ни на что не похожую версию ядра которой другой в МИРЕ не существует и еще огреб на ней УНИКАЛЬНОЕ и неизвестное количество ошибок которые никто никогда не пофиксит потому что оно никому реально не надо. Вот такие вот мысли у меня.
Поскольку автор не обозначил языка программирования - то дальше обсуждать нечего. С точки зрения алгоритмов здесь нет темы для обсуждения. А вот если-бы мы говорили про С++ тогда можно говорить о
- функциях malloc/re-alloc/free
- массивах. (зубчатых массивах)
- многомерных масссивах
- хеш-табличках (как я выше писал)
- и других структурах данных вплоть до графов. Фантазия - тут безгранична. Все они будут отличаться расходом памяти и ценой операции. По расширению матрицы в сторону.
Тоесть структуры данных интересно обсуждать только в контексте конкретного ЯП.