Shader
A shader is a piece of software that instead of executing on the CPU, it executes on the GPU.
Shaders provide great control over what is rendered, and can perform operations of vertices, pixels, and some others.
The Source Engine uses HLSL for shaders. There is another language called Cg (Which stands for 'C for Graphics'), which was developed alongside HLSL by NVIDIA.
There are typically 2 classes of shaders that you can think of. Postprocessing and per object shaders. Postprocessing shaders are effects computed on a 2D texture. This 2D texture is typically built at the end of the main render function out of all of the verts in the frame buffer. There are functions in D3D to create a render target (the offline buffer - or the texture you will use) and render to that render target (this functionality is hidden to all of us sdk mod makers in higher level functions, but know it's there). Once you have information in that texture, you can use a shader to do all kinds of effects like motion blur, light bloom, depth of field, shadows, sharpen and on and on. In the source SDK, they provide a good example of this type of shader in sdk_postprocess and give comments at the top of this file (the .cpp one) as to where you should add code into the engine to actually "activate" the effect. Make sure you look at all three files so you understand what's going on (sdk_postprocess.cpp, sdk_postprocess_vs.fxc, and sdk_postprocess_ps.fxc).
Per object shaders are handled a bit differently in this engine, in that you need to specify the shader you want to use in a material file. So if you wanted to have a per pixel lit car, for example, you would need to specify that the car use your specific shader. I'm currently working on material shaders to perform dynamic lighting and dynamic reflections and will update the page as I find out more info.
There are two types of shaders. Pixel shader and Vertex shader.