Во всех языках для решения задач используют библиотеки. Хочешь работать с сетью - используй 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 вероятно вызывает функции драйвера видеокарты.
Тогда и библиотеки - ещё большая хрень: твои программы - это программы для людей. А библиотеки - это программы для программистов, чтоб писать хрень.
Библиотеки бывают разные. Есть библиотеки, которые делают более удобными другие библиотеки (например, ООП-библиотеки, работающие поверх Windows API). Есть такие, которые реализуют какие-то алгоритмы (например поиск, сортировка, математические функции).
Библиотека kernel32.dll вызывает функции ядра Windows (точнее, она вызывает ntdll.dll, а она уже вызывает ядро). Таким образом, библиотека kernel32.dll реализует часть Windows API. Но она сама не содержит реализацию этих функций, она является интерфейсом для ядра ОС.
Такие библиотеки, как CUDA, пишет производитель "железа". Ты не можешь написать их сам, поскольку устройство "железа" часто не документировано производителем (то же относится к драйверам). Библиотека CUDA вероятно вызывает функции драйвера видеокарты.
Vlad Романенко
Я это к тому, что написание обычных прикладных программ не даёт понимания программирования в целом. Всем известно, что любой язык программирования это лишь инструмент для решения задач, только вот как их решать в целом не понятно.
Ну, указанные тобой библиотеки - это, фактически, обертка для API. Если я тебя правильно понял, ты не понимаешь магии - как подключение библиотеки позволяет тебе делать те или иные вещи. Никакой магии тут нет - все то же самое можно делать и без библиотек, напрямую вызывая функции API. Просто это неудобно и непродуктивно. А ничего принципиально нового - не предусмотренного в API - при помощи библиотек создать не получится.
Пишутся они примерно так:
1. Решаем, что нам надо.
2. Читаем документацию, как это делается на голом API. Или же читаем книжки по статистике, графике - в зависимости от задач, которые надо решить.
3. Охреневаем.
4. Пишем свои методы работы с API (реализуем статистические методы и т. д.), более удобные и подходящие для наших задач.
5. Объединяем написанное в библиотеку.
Впрочем, уже после 3-его этапа большинство ищет готовые.
Пишутся они примерно так:
1. Решаем, что нам надо.
2. Читаем документацию, как это делается на голом API. Или же читаем книжки по статистике, графике - в зависимости от задач, которые надо решить.
3. Охреневаем.
4. Пишем свои методы работы с API (реализуем статистические методы и т. д.), более удобные и подходящие для наших задач.
5. Объединяем написанное в библиотеку.
Впрочем, уже после 3-его этапа большинство ищет готовые.
Vlad Романенко
Я понимаю, что если что-то не предоставляет API, то и пользоваться им невозможно. Проблема как раз в документации. Не понимаю, откуда люди получают знания, чтобы использовать, скажем, недокументированные возможности тех или иных устройств. Постоянно читаю статьи о том, что кто-то нашел уязвимость в прошивке, кто-то переписал драйвер для IoT-устройства и многое в таком духе. Учитывая сложность таких задач и объем необходимых знаний не понимаю, как в одиночку за приемлемое время такие вещи делаются.
Никита Скорохватов
Я — программер от слова ноль. М6е нравился openbox за скорость, комп был очень старым.
кто то пишет интерфейсы, кто то модули для тех, кто пишет интерфейсы, кто то модули, для создающих модули для пишущих интерфейсы. каждый занимается своим делом. хотите писать драйвера или не из своей области? да легко - читайте доки, эксперементируйте. а баги ищутся легко, кто то полез дальше и глубже остальных и нарвался на ошибку.
Никита Скорохватов
Я смотрю, тут больше программеры собрались.
Спасибо за ответ ..
Честно, я ожидал, что наберут те, кого, можно назвать "лиеуксоиды", а на деле у них убунту, и но они будут писать что-то в духе "раз дурак, то сиди дальше на винде".
А так я никакой не прогпаммер и не хакер и подавно.
Спасибо за ответ ..
Честно, я ожидал, что наберут те, кого, можно назвать "лиеуксоиды", а на деле у них убунту, и но они будут писать что-то в духе "раз дурак, то сиди дальше на винде".
А так я никакой не прогпаммер и не хакер и подавно.
Реверс-инжиниринг осваивай. Навыки отладки.
Замечу, что ядро - это в основном далеко не железо, а гораздо выше, поэтому чтобы там баги править, в теории можно даже напряжение от силы тока не отличать.
Но и работу с железом изучай. Может, ремонтом и конструированием заняться? Можно конструированием для ремонта. Инфракрасную паяльную станцию строить.
Мне приходилось работать с одной платой, которая подключается по USB к ПК, так там из-за распиздяйства разработчиков (это такая "небольшая" полупроводниковая компания... в каждом доме по всему миру есть ее продукт, и не один) пришлось разбираться от SDK на Java вплоть до прошивки микроконтроллера этой платы. В итоге сделал.
P. S.
Библиотеке сокетов (обычно это именно часть ядра) обычно тоже далековато до железа. И нет нужды все это раскапывать, если работаешь с нормальной реализацией протокола (в популярной ОС, а не вот такой вот платой, как упомянута выше) и просто хочешь сделать надежный клиент-сервер. Хватит ряда поверхностных экспериментов с разными ошибками, а дальше - только умение держать в голове спагетти, коим и является код клиент-сервера.
Это на всякий случай.
Замечу, что ядро - это в основном далеко не железо, а гораздо выше, поэтому чтобы там баги править, в теории можно даже напряжение от силы тока не отличать.
Но и работу с железом изучай. Может, ремонтом и конструированием заняться? Можно конструированием для ремонта. Инфракрасную паяльную станцию строить.
Мне приходилось работать с одной платой, которая подключается по USB к ПК, так там из-за распиздяйства разработчиков (это такая "небольшая" полупроводниковая компания... в каждом доме по всему миру есть ее продукт, и не один) пришлось разбираться от SDK на Java вплоть до прошивки микроконтроллера этой платы. В итоге сделал.
P. S.
Библиотеке сокетов (обычно это именно часть ядра) обычно тоже далековато до железа. И нет нужды все это раскапывать, если работаешь с нормальной реализацией протокола (в популярной ОС, а не вот такой вот платой, как упомянута выше) и просто хочешь сделать надежный клиент-сервер. Хватит ряда поверхностных экспериментов с разными ошибками, а дальше - только умение держать в голове спагетти, коим и является код клиент-сервера.
Это на всякий случай.
Vlad Романенко
Ну вот есть такая штука как RPC, для подобного взаимодействия. Есть WCF - по сути фреймворк над RPC. На WCF всё легко и просто, много книг и примеров. На голом RPC я уже не напишу клиент-серверное взаимодействие со стримингом файлов, дуплексным каналом и сессиями. Получается, что я не программист, а пользователь библиотеки, ибо ничего не понимаю в устройстве протоколов взаимодействия. А люди, которые эти библиотеки написали, они как раз и являются программистами.
Никита Скорохватов
Теперь у меня всё и так прекрасно и быстро работает. Это я на старом компе изголялся.
А изучать мее нужно друное.
Спасибо за ответ.
А изучать мее нужно друное.
Спасибо за ответ.
Похожие вопросы
- Допустим, я написал программу с использованием сторонней библиотеки, и решил ее выложить, как сделать, чтобы...
- Как пишут DLL-библиотеки?
- VisualC++ 2010. При выборе MFC - статической библиотеки программа не компилируется.
- Нет библиотеки Dev-C++ нет библиотеки mach.h компилятор MinGW где скачать стандартные библиотеки, и как установить?
- Delphi dll библиотеки.
- Алгоритмы стандартной библиотеки шаблонов. Вектора в C++.
- Что нужно знать что бы понимать с++? Там постоянно нужно подключать библиотеки. Мне не понятно откуда компилятор берет
- *.bat файл, проверка наличия нужного языка программирования и необходимых библиотек.
- Как сделать так, чтобы текст писался на первой строке в pascal abc?
- C++ :Разработать пользовательскую библиотеку для работы с односвязным списком (использовать динамическую память).