システムの受託開発を行う場合には、顧客の要望にもとづいて要求定義仕様書を作成し、それを元にシステム設計を行ってプログラムを作成することになります。システムエンジニア(SE)の仕事というのは、この要求定義仕様書を作成した上で、システム設計を行うことと、このシステム設計を元にプログラム開発を行うプログラマーの業務を管理して、指導することです。このために、システムエンジニアになるには、システム設計を行うためのエンジニアリング・スキルと、プログラマーの業務を管理し指導するためのリーダーとしてのスキル、というものが求められることになるわけです。
ほとんどの場合、SEへのキャリアパスとなっているのは、まず、SEの下でプログラマーとしての現場経験をある程度積んだ上で、今度は自分が徐々にSEになる、といったようになっています。これは、プログラミングの経験をある程度積んでいなければ、SEとなってからプログラマーの管理、指導が上手くできないから、ということによっているためです。中には、プログラマーの経験がないままにシステムエンジニアになった、という人もあるわけですが、そうした場合には、システム設計にもとづいて作成されるものであるプログラムと、設計との対応が上手くとれない、といったことになってしまうこともあったりするわけです。
SEになれば、プログラムの作成自体は行わなくなるのですが、プログラミングというものがわかっていて、システム設計とプログラムとの対応付けができなければ、プログラマーの管理、指導が上手くできないために、やはりSEにはプログラミング経験が必要なものとなっているのです。