Catalog views are the recommended interface to persisted system metadata, all user-available catalog metadata is exposed through these views. More importantly, the future compatibility statement for catalog views says they may be 'extended' rather than 'changed' which provides for a little future proofing. All catalog views are in the sys schema and must be referenced with at least two-part naming. Some catalog views build on other catalog views, for example, sys.tables contains the 12 columns from sys.objects plus 12 additional columns, and for this reason if nothing else it's worth being familiar with what views are available – there's no point writing complex queries joining sys.objects to sys.objects numerous times if there's already a view that's done the work for you. The catalog views are defined in the MSSQLServerResource database and are predominantly queries against the system base tables. See the BOL entry Catalog Views for a list of the 16 categories into which the catalog views are grouped.
One point worth making because I've seen this written badly so many times is that object names alone do not uniquely identify an object, so the following code is risky;
SELECT object_id FROM sys.objects WHERE name = N'MyTable'
There could be more than one table with the name MyTable, or other objects with the same name. The above query would be better written as follows;
SELECT object_id FROM sys.objects o
INNER JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE o.name = N'MyTable'AND s.name = N'dbo' and type = 'U'
Or even better, use a metadata function for this;
SELECT object_id(N'dbo.MyTable')