Create new content type on hook_install
One of the best ways to keep this information in code is to use features. Feaures can put into code:


Content types
CCK fields
Permissions
Roles


The list goes on.

One nice feature about features is the drush integration

drush features will give you a list of all features on the site, and their status
drush features revert all will revert all features back to what is in code (really handy for running after deployments)

Help this helps