I'd like to point out a contrarian view of conditions at some software shops that employ very wet-behind-the-ears programmers.
I have worked in a union carpentry shop, as well as a Swift and Company kill floor.
I also worked for 7 years as a programmer, 5 years working for others and 2 for myself -- in a part of the country where the market for that sort of work, and the pay, is just terrible.
The carpentry job was better than programming as an employee, by far. At least at the places I worked.
The prefab construction job was often extremely physical. It was often dangerous. Every day, I walked into work and there was a backlog of fully finished half-ton pre-fab walls that absolutely had to be moved out yesterday, all different sizes and bizarre shapes. My job was to use some combination of forklifts, hoists, bundles of styrofoam, truck strap, plywood and temporary structures to move, stack and pack the walls into the smallest space I could, and then load them onto a semi trailer with the then-largest industrial forklift that Clark made. Straps broke, racks turned over, thousand-pound walls sometimes fell or swung or crumbled a little too near for comfort, and other people didn't always work safe around you.
You know why it was better than programming? Not because of the overtime pay or the view, although both were superior.
It was better because reality asserted itself more often.
If your boss thinks the hoist can lift 2X more than it actually can, that situation will resolve itself. Fast.
When things go wrong, they go wrong fast and it's easy to assign blame. If your coworkers think that they can lift a 24-foot-long wall by attaching a hook to a single 2x8 stud, they'll find out quickly that they should listen to the people who have seen it done.
We never ended up working like crack-addled beavers for 4 months straight because a team of yes-men convinced everyone that natural laws don't apply to us. Sometimes the company took on more work than it could actually handle. It became obvious very quickly, after a matter of only a few weeks. It didn't stagnate, dying horribly over the course of years as the backlog of unprofitable work dragged out into the infinite future.
The existence of physical limitations made customers more reasonable; no one ever tried to order a 5-story Ruby Tuesdays for the price of a lemonade stand. The equivalent of that happened all the time at the software shops I worked for; I saw them take on jobs that called for the tracking and reporting of complex resource flows, stuff that would be ambitious for even a YC team with 4 months to kill, but the devs assigned were pure designers who had managed to learn just enough vbscript to provide some meaningful interaction on the website templates they sliced out of Photoshop.
I know that there are people out there whose experience has been pretty different. Most of them probably react by moving to a better market, and that certainly seems a reasonable solution, although it wasn't mine.
But to dismiss the reality of crappy programming jobs with a "wow, heavy ones and zeros" -- uh-uh. I literally enjoyed the kill floor better than one of my programming jobs.
There are people out there who will abuse any humble, hardworking, inexperienced employees they have, and browbeat them into truly ridiculous efforts. I remember being 21 years old, being told that a project slated for delivery in 2 months had to be done for a demo to the execs of a chain of hospitals at the end of the week. I worked with zero sleep to get it done, because it was my project.
At the end of the week, my boss slipped and cut his head playing with his kids in the McTreehouseMansion behind his McMansion. So on no sleep, I had to train all of these people in on the new system, people who were executives at our biggest account.
I have public speaking experience; I put on a suit and did it. It was a big success.
I didn't get overtime or a bonus, and I would by far have rather spent that week gutting hogs for a mere 10 hours a day and going home to relax afterwards.