I consider myself to be a novice programmer -- a noob is you like. As such I'm still not sure how to get started on a project where I will be doing stuff that I've never done before.

For instance, I would like to write a program that can download videos from YouTube and convert them to a format specified by the user. I've never done anything like this before and I really have no idea where to start. Rather, I have no idea what I should search for.

If I search for "YouTube Downloader" then I get hit with a bunch of useless links to existing YouTube Downloader sites, most of which don't work.

What I want to know is how to get started on a project that I know nothing about. How do I find out what is required for this project? How do I find out what languages are best suited for this? How can I find out if there are any APIs that would be particularly useful? Also, what other questions should I be asking myself when preparing to take on a new project?

  • You may also want to use Wireshark to learn about how the browser communicates with the website, and what data is being transferred between them. – rwong Apr 22 '11 at 5:26
  • Not an answer but, have you tried tubemaster.net ? It's even open source, so you could use it to learn stuff (or not, depending on the quality of the code and your own level). – jv42 Apr 22 '11 at 11:50

You gotta break it down. Think about the different elements that make up what you want to do. Try to think about them in a general rather than specific sense. Think about what might overlap something that you've done before.

e.g., in the case of your YouTube Downloader idea:

  • Download videos from YouTube
    • More general view: download files linked to from a web page. So maybe you need to:
      • take a URL
        • how are you going to present the interface to select a URL?
      • request that page
      • parse the HTML to find a link to an FLV or whatever
      • download that file
  • Convert them to a format specified by the user
    • So you need to convert an FLV (I think?) to various other formats.
      • What formats?
      • how are you going to present the interface to select a format?
      • Can you find a library to do the conversion?
      • Can you find a command-line tool to do the conversion?
      • How do you call a command-line tool from a program written in your language of choice?

Anyway that's just some crap I typed up. But the main thing to think about is to decompose the problem into smaller individual problems, and keep decomposing until you're down to a bite-sized chunk that you can bite into.

|improve this answer|||||
  • 2
    I couldn't agree more. "Agile / XP" programmers use the term "spike" to mean research on an area that they don't understand. Identify the parts of the problem that you think are the hardest and then do spikes by writing small mock up projects that solve those problems; these projects are the deliverables from your spikes. Once you have mock up projects that solve all the problems that you didn't understand you should be able to stitch them together to form the whole. – user23157 Apr 22 '11 at 7:23
  • In this case, it is probably easier to use one of Google's Youtube API's instead of scrapping for a video. developers.google.com/youtube/getting_started – TomJ Mar 31 '12 at 11:13

Not the answer you're looking for? Browse other questions tagged or ask your own question.