


Как пишутся библиотеки? Что почитать, чтобы попробовать написать самому что-то?
Во всех языках для решения задач используют библиотеки. Хочешь работать с сетью - используй network.dll и sockets.dll, хочешь воспроизвести аудио - audio.dll, хочешь с базой работать - скачай SDK для неё. Для GPU - используй CUDA.
В итоге я пришел к выводу, что хоть и работаю программистом, пишу код и решаю задачи, но программирование вообще не понимаю. Потому что не понятно, как, не имея заранее нужной библиотеки, написать например на языке Си код, который будет воспроизводить аудио или видео, перемножит массивы с помощью GPU, или просто сделает запрос к базе и отобразит результат.
Нет ни одной книги или курса, где приводится такой пример. Везде изучается какая-либо готовая технология или библиотека. Даже руководство по написанию драйверов начинается с "Скачайте SDK и IDE".
Однако встречаются статьи, где человек, например, перепрошил смартфон с разбитым экраном под свои нужды. Кто-то нашел баг в ядре Linux (как, блин? там же миллионы строк сложного кода?), и пофиксил его. Кто-то рассказывает как просто можно написать сниффер и тому подобное.
А я... А я могу красивый динамический интерфейс написать на WPF с MVVM и запросы на SQL делать и пользователи рады, когда у них данные в Excel выгружаются и прогресс бары для длительных операций показывают сколько еще времени можно попить кофе. Легко и просто могу написать службу для обработки чего-либо на сервере при помощи WCF и т. д.. Хрень это, а не программирование.
> Хрень это, а не программирование
Тогда и библиотеки - ещё большая хрень: твои программы - это программы для людей. А библиотеки - это программы для программистов, чтоб писать хрень.
Библиотеки бывают разные. Есть библиотеки, которые делают более удобными другие библиотеки (например, ООП-библиотеки, работающие поверх Windows API). Есть такие, которые реализуют какие-то алгоритмы (например поиск, сортировка, математические функции).
Библиотека kernel32.dll вызывает функции ядра Windows (точнее, она вызывает ntdll.dll, а она уже вызывает ядро). Таким образом, библиотека kernel32.dll реализует часть Windows API. Но она сама не содержит реализацию этих функций, она является интерфейсом для ядра ОС.
Такие библиотеки, как CUDA, пишет производитель "железа". Ты не можешь написать их сам, поскольку устройство "железа" часто не документировано производителем (то же относится к драйверам). Библиотека CUDA вероятно вызывает функции драйвера видеокарты.
Ну, указанные тобой библиотеки - это, фактически, обертка для API. Если я тебя правильно понял, ты не понимаешь магии - как подключение библиотеки позволяет тебе делать те или иные вещи. Никакой магии тут нет - все то же самое можно делать и без библиотек, напрямую вызывая функции API. Просто это неудобно и непродуктивно. А ничего принципиально нового - не предусмотренного в API - при помощи библиотек создать не получится.
Пишутся они примерно так:
1. Решаем, что нам надо.
2. Читаем документацию, как это делается на голом API. Или же читаем книжки по статистике, графике - в зависимости от задач, которые надо решить.
3. Охреневаем.
4. Пишем свои методы работы с API (реализуем статистические методы и т. д.), более удобные и подходящие для наших задач.
5. Объединяем написанное в библиотеку.
Впрочем, уже после 3-его этапа большинство ищет готовые.
кто то пишет интерфейсы, кто то модули для тех, кто пишет интерфейсы, кто то модули, для создающих модули для пишущих интерфейсы. каждый занимается своим делом. хотите писать драйвера или не из своей области? да легко - читайте доки, эксперементируйте. а баги ищутся легко, кто то полез дальше и глубже остальных и нарвался на ошибку.
Реверс-инжиниринг осваивай. Навыки отладки.
Замечу, что ядро - это в основном далеко не железо, а гораздо выше, поэтому чтобы там баги править, в теории можно даже напряжение от силы тока не отличать.
Но и работу с железом изучай. Может, ремонтом и конструированием заняться? Можно конструированием для ремонта. Инфракрасную паяльную станцию строить.
Мне приходилось работать с одной платой, которая подключается по USB к ПК, так там из-за распиздяйства разработчиков (это такая "небольшая" полупроводниковая компания... в каждом доме по всему миру есть ее продукт, и не один) пришлось разбираться от SDK на Java вплоть до прошивки микроконтроллера этой платы. В итоге сделал.
P. S.
Библиотеке сокетов (обычно это именно часть ядра) обычно тоже далековато до железа. И нет нужды все это раскапывать, если работаешь с нормальной реализацией протокола (в популярной ОС, а не вот такой вот платой, как упомянута выше) и просто хочешь сделать надежный клиент-сервер. Хватит ряда поверхностных экспериментов с разными ошибками, а дальше - только умение держать в голове спагетти, коим и является код клиент-сервера.
Это на всякий случай.