Об очевидных минусах — сидячая работа, нагрузка на глаза — уже написали выше. К минусам я бы отнёс то, что далеко не все окружающие разделяют ценность твоего труда. Ты вроде сделал классный рефакторинг, упростил понимание и переиспользование кода, а кто-то в команде считает, что ты потратил время впустую, потому что в продукте не появилось новой функциональности. Или ты быстренько запилил новую возможность, а на тебя ворчат коллеги, говоря, что твой код ужасен.
Вообще в программировании очень много религий (ООП, TDD, pure functional и т.д.), и они постоянно стремятся обратить тебя в свою веру. Нужно обладать своей чёткой позицией, чтобы каждая новая фишка не заставляла тебя сомневаться, а правильно ли ты вообще программируешь.
Ещё один минус профессии — довольно частые конфликтные ситуации. Есть стереотип, что программисты не очень общительны, и в жизни такое и правда случается. Если тебе вместе с таким человеком надо что-то сделать, это может быть очень непросто именно с точки зрения общения.
Наконец, в большой разработке нелегко видеть результаты своего труда. Ты несколько недель писал код, чинил какой-то баг или добавлял новую функциональность. Потом долго ждал, когда выполнится сборка проекта и прогон всех тестов. Увидел, что какие-то тесты всё-таки упали, ещё несколько дней потратил, чтобы понять, что это за тесты, и их исправить. Дальше в какой-то момент твой код выезжает в production. К этому моменту ты уже можешь заниматься другой задачей и забыть про эту. И вообще это маленькая часть какого-то огромного web-сервиса, о существовании которой не подозревает ни один его клиент. Это я к тому, что порой бывает непросто доказать в первую очередь себе, что ты сделал что-то значительное.