コンピュータの世界では明確な区別のない言葉っていうのが実に多いわけなんですが、、
よく聞かれるプログラマーとSE(システムエンジニア)の違いはというと、
私からするとこの明確な定義としては、ちゃんととしたシステム基本設計書の書ける人がSEで、そうではない人がプログラマーです。
そして、決定的にこの2つが違う点というのは、複数人数のチームでソフトを作る場合のその役割分担です。
チームの中で基本設計書を書く人がSEで、詳細設計から始めてプログラムを書くという仕事がプログラマーだと、一般的に開発現場ではそう区別して使い分けられています。(よく例えに用いられる話で言えば、大工の棟梁と一級建築士の違いのようなものですかね。)
なので、これはシステムの開発チーム内のポジション名ということになりますから、チームのない(一人で全部作るような)プログラム開発はすべてプログラマーと呼ばれます。
どんなに凄いシステムを作ったとしても、一人で作った場合にはその人は単なるプログラマーに過ぎません。
実は、プロとアマチュアの最大の違いというのも「チームの一員として作れるか否か」であって、一人でいくらすごいプログラムを組めたからといって、その人がプロと呼ばるわけではありませんし、一人プロジェクトの開発経験というのは、プロのシステム開発の世界では一切スキル評価はされません。
よくプログラマーの面接時にも、「このシステムは一人で全部作りました!」なんて自慢げなことを言う人もありますが、それは自慢にもなにもならず、逆に評価を下げるだけに他なりません。
それが証拠に、SE・プログラマー向けのスキルシートのフォームには、必ず、これまでに経験したプロジェクトの規模(人数)を明記する欄というのが設けられていて、そこの数字が大きければ大きいほど評価は高くなるというのが一般常識となっています。
間違っても、そこに1(1人)という数字を書いてはいけません。(少なくともその仕事に上司が存在するのであれば、うそでも2人と書いておけばまるっきり嘘にはならないわけですからね・・・(笑)。)
プロのシステム開発の現場というものは、どれだけ大人数の一員としてやったきた経験があるのか否か?ソフトウエアという目に見えない物を作るわけですから、その自分が担当する作業の部分をどう的確に他のメンバーに伝える能力があるか否か?
チーム内のコミュニケーション能力というのが評価される世界なのです。仕事は、決して一人でやるものではありません。システム開発の場合にも、それはしかりです。
というわけで、私も普段はSEですが、何か一人でプログラムを作るという場合にはプログラマーを名乗っています。^^