What is a project specification?
A project specification, or spec, lists requirements for what a program needs to do. It indicates the problems that need solving and how users will interact with the program. It should specify what kinds of inputs your program will deal with, along with the outputs the program needs to generate.
Why are specifications important?
A clear specification is important in project of every size so you have a solid idea of what to aim toward and whether your project is successful. Without a clear spec, you'll waste time and risk your project's failure.
Who writes project specifications?
When learning to program, each exercise you attempt is a mini spec. Well-specified problems are easier to solve than poorly specified exercises. A good programmar looks for a spec when collaborating on an existing project and develops a complete spec before committing to a new project.