What are the best set of details to give to a programmer to define a project?
this depends on the project, on your understanding of what you want, and on the programmer's understanding of the business domain. User stories, use-cases, and unit-test descriptions are great, but the programmer's understanding of the business domain is a critical foundation for all of these.
Simply put, I know what I want done, but I know nothing about programming
excellent, the first step is to admit that you need help ;-)
and so what is the best way to define my project to a programmer so he/she gives me what I need. i.e project summary, design brief, flow charts?
none of the above - since you are not a programmer, you will not be able to write these technical descriptions accurately. Nor should you!
as others have noted, you should tell the programmer what you, the user, want to be able to do. Not how to do it, but what the software will enable you to do. "What" is requirements, "how" is design.
First and foremost, though, the programmer must understand the business domain that underlies the requiements. Without this grounding he/she is operating in a conceptual vacuum.
Once the programmer has a clue about your business, then talk about the application(s) that you need.
Proceed slowly, write user stories together, draw screens and make paper mockups together, agree on the how-it-should-work details (with respect to the user) together. Explain to the programmer that since this is your first project you really want to be involved at each step in the start-up process but once you both understand and agree on how the application is to be done - including what tests it must pass in order to be accepted - then you will leave him/her alone to code while still being available for questions.
Do not use an inexperienced developer for this first project, since you will be relying on him/her to teach you good practices.
EDIT: and if you have more than one application to be built over time, choose a developer that you like and that you think you could work with over the long term. Build a relationship with him/her based on mutual trust and respect. There are a lot of really good programmers with zero people skills; avoid them, as they will drive you nuts in the long run.