Software engineering can easily be one of the most lucrative jobs today. High growth industry, the best companies to work for are mostly software firms, plenty of job opportunities and ability to touch million of lives quickly through your work.
However, there can be many problems plaguing a Software Engineer. This is not an exhaustive list but will give you an idea of the kind of problems software engineers face.
The kind of abilities required for programming and software engineering is general, attracts a class of people who are good at problem solving, reasoning, creativity, algorithms etc. However not everyone gets the right job were one get to deal with interesting problems everyday. There can be lot of monotonic work for months where you have to refactor code, implement trivial thing, implementing solutions which are already well defined, review code, write software specification and requirements, debug issues. Once in a few months you may get to work on something interesting but it can be really frustrating waiting for quality work.
Low Job Satisfaction
One of the major attraction in terms of job satisfaction is to work on path breaking solutions that thousands if not millions of people use everyday. But in reality, you may have to work on products which may get scrapped after years of development, products which are being used only internally in your company, products which are so business specific that only few customers use, or worse you may never get to know who is actually using the product you worked on so passionately.
8+ hours of sitting work everyday entails its own problems. Although most of the jobs are sitting jobs today, but specially in programming jobs, you may not need to discuss/ present/ collaborate for days to do your job. Glued to a computer screen daily for weeks can cause headaches, dry eyes, pain in wrist, elbow, shoulder, lower back and neck is common among software engineers who have been in industry for as low as 5 years.
Rapidly changing technology landscape
The technology is changing rapidly, the programming language/ platform/ software you are working on today may be obsolete tomorrow. You need to constantly upgrade yourself and keep on learning new things. It gets difficult as you put on years of experience. Learning new things is easier with a clean slate. A fresh graduate armed with the knowledge of latest technology can soon outpace the experienced engineers if they are not willing to learn.
It's common for software engineers to work odd hours. Sometimes to collaborate with teams in different time zones, sometimes to catch up on your learning plans, and sometimes to finish off work which you couldn't get time for in the office because you were so busy interviewing candidates or understanding business requirements.
This disrupts your sleep cycle and makes you feel tired all the time. This may not be true for all companies and all profiles but it's a common occurrence.