Digital Signal Processing is the process of taking a signal and performing an algorithm on that signal to analyze, modify, or better identify that signal. DSP techniques have been evolving rapidly over the past ten years and new hardware is being continuously developed to take advantage of these techniques. However, to take advantage of the DSP advancements, one must have at least a basic understanding of DSP theory along with an understanding of the hardware architecture designed to support these new advancements. There are several programming techniques that maximize the efficiency of the DSP hardware, as well as a few fundamental concepts used to implement DSP software. This paper will touch on the fundamental concepts of DSP theory, and also provide an overview of the implementation and optimization of DSP software.