The difficult part is the surrounding stuff:
- How to fix problems you weren't expecting.
- How to integrate with other apps without breaking stuff.
- Translating business rules into code.
- How to interact with the business users.
- Where to store the source code.
- Moving code from development to test to production.
- How to fix defects.
- How to log your time.
- How to estimate your time.
- How to time management.
- How to prioritize your tasks.
- How to inform the team and clients of your progress and identify impediments.
- How to close out a project.
- How to speak to senior management.
- How to find your next job.
- How to network.
- How to present in front of groups.
- How to learn new technology and stay current.
- How to write your resume.
- How to market yourself in the social space.
Programmers create for a living. Once you finish the project, you're on to the next. Nobody's goes back and looks at your code and gives positive feedback. Chances are, you'll get very little recognition unless you finish the project way under time or budget, even still, customers rarely acknowledge all the hard work that went into the final product.
On a positive note, good programmers have a good future in any economy.