My experience in the software development field is that employers generally consider two kinds of software developers to be a "net negative:"
1) People less than two years out of college
2) People in their first few months at a new job.
They perceive these people as not understanding their trade and/or not understanding the job that needs to be done. They may be able to produce something of value, but they require a significant amount of mentoring by someone who is much more productive. Further, there is a significant chance that anything actually produced by an inexperienced developer will have to be thrown out and/or redone.
This perception makes it hard to enter the field. Employers much prefer to hire someone with a few years of experience rather than a new grad.
All the "If the company asks you to work for free, they are trying to rip you off" comments miss a fundamental point: If interns were economically advantageous for the company, there would be a lot of companies staffed mostly by interns. But there aren't. Instead you see companies very reluctantly get one or two interns in order to address their corporate citizenship obligations. And then they neglect the interns, because they don't care enough about corporate citizenship to actually invest in the interns.
Co-ops and internships (paid or unpaid) are a way for newcomers to the field to get past this barrier to entry. I'm not saying every intern has a good experience. But internships in general address a very real problem for the intern. My advice to anyone who wants to be a software developer is: get as much on-the-job experience (paid or unpaid) as you can while you are in school. If you don't, you will have a difficult time finding a job at graduation. There is a very real chance that you will have to take a job that diverts your career in a direction you don't want it to go.