Дело в том, что под этим понятием можно понимать ряд разных вещей. Они похожи между собой идеей.
1) Подключение заголовочного файла.
#include <stdio.h>
#include "myfile.h"
В заголовочных файлах чаще всего хранятся прототипы различных функций и некоторые константы. Это нужно, чтобы компилятор знал описание функций, которые вы используете, если они описаны не вами.
2) Подключение lib-файла.
Обычно делается в настройках проекта или коммандой #pragma comment(lib, "mylib.lib")
Таким образом мы можем использовать код, хранящийся, например в dll, без ручной загрузки.
3) Загрузка dll.
Делается через вызов функции LoadLibrary и последующими GetProcAddress - это ручная загрузка функций из библиотеки.
Все это предназначено для того, чтобы вы могли использовать сторонний код (будь то стандартные средства языка или код написанный просто другими программистами).
возможность получить обучение в любой точке мира
охват узкой предметной области
возможность совмещения учебы с работой
проявление самоорганизации
невысокая стоимость (или вообще бесплатно )
шанс освоить новые технологии
свой темп работы