Warning: This is very opinionated.
There’s a big misconception among non-devs and business people, thinking the geeks sitting in front of computers with glasses on just need to be told what to do and the software needed will just spring up from their brains naturally.
It doesn’t work that way.
When creating software, you are trying to solve a problem, whether that’s to automate a factory line or create the next Android keyboard. To be able to solve a problem effectively, you need to understand it from all angles related. That could be the technological limitations of target platforms, the prowess of the development team, the budget and time constraints of the project, the requirements of investors (if any), the expectations of users and the list goes on and on.
The team behind the project, regardless if it’s a one-man team or a 100 people, need to cover all areas as much as possible to make sure they fully comprehend the problem, and create a solution that’s usable and feasible.
When working in a team, a programmer is expected to have strong, technical skills that allow them to solve the problem from the technical side, on the basis of having been given the business requirements well documented and concise. This means knowing the ins-and-outs of whatever programming language and technology they’re working with.
On the other hand, a developer is expected to have an overall ability to solve problems via software. This means they may be lesser programmers than counterparts, since they don’t specialize, but it also means that they need to have business skills and understanding of user’s needs.