What's the recommended use of try / catch? I currently use it for operations I know can throw an exception (like connecting to a database). But even something as simple as string operation can throw an exception, although it's not expected. So, should the main function enclose everything in the try / catch block? If yes, should I still have smaller enclosures with specialized exception catching?