ロジック

プログラミングを生業とするならば、論理的思考(ロジカルシンキング)は欠かすことのできない最も重要なスキルです。
論理的でない仕様には必ず仕様漏れや不備があるものです。
論理的でないソースコードは非常に読み辛くメンテナンスが難しいものとなります。
論理的でないテストは冗長であったり、テスト漏れがあるかもしれません。
しかし、論理的に記述された仕様は漏れもなく実装もしやすいものです。
論理的に記述されたソースコードは美しく実装者の意図が伝わってきます。
論理的に行われたテストは仕様や実装に隠されていた問題を明らかにするでしょう。

コンピュータ

システムエンジニアが扱うシステムは全てはコンピュータ上で実行されます。
開発言語がJavaであれC++であれアセンブリであれ、実行環境がPCであれ携帯電話であれ家電などの組み込みであれ、例外はなくコンピュータ上のシステムです。
コンピュータは3大装置(演算装置・入出力装置・記憶装置)で構成され…という話は聞いたことがあると思いますが、その構造はどれだけ複雑に進化しているとは言え、突き詰めれば単純な電気回路(論理回路)です。
つまり、突き詰めれば電圧のON/OFFというデジタルな世界であって"曖昧な"状態は表現できません。


コンピュータはある定められた手順に従って動作します。
そして、その手順を"間違える"という事はほとんどありません。
コンピュータがユーザーが期待しないような動作をしたのであれば、その原因は定められた手順、すなわちプログラムにあると言えます。
OSやプログラミング言語に原因がある場合であってもコンピュータの原因ではないのです。

プログラム

プログラムとはコンピュータを実行させる為の定められた手順であり、プログラムを作成する作業がプログラミングです。
プログラムは作成ツールを使ってポンと出てくるものでも、種を蒔いて飼育することで成長するものでもありません。
人によって考えられた手順を、プログラミング言語という言葉で記述することでプログラムが作成されます。


現実世界でトランプの札を並び替える場面を想像してみましょう。
おそらく"自然に"札をまとめながら効率よく並び替えていく事を想像したかと思います。
ところが、この"自然に"行う事は簡単な事ではありません。
人の脳は曖昧な判断を適切に行える高度な処理能力を持っていますが、コンピュータは高度な判断どころか独自に判断する事ができません。


コンピュータになんらかの判断を行わせたい場合、それはプログラムとして判断の手順を教えなければならないのです。
しかし、そのプログラムはによって作成されます。
プログラム(判断と手順)が間違っていれば、その結果(トランプの札の並び替えの結果など)は期待通りにならないでしょう。
コンピュータは曖昧な判断を行えない為、プログラムでも曖昧な記述(手順)は行えません。
すなわち、プログラマ論理的な手順を考えてそれをプログラムに変換する事が求められるのです。

プログラマシステムエンジニア

プログラマシステムエンジニアは同じように使われることもあり、明確な定義はありません。
職場や環境によってはプログラミングを行う技術者をプログラマと呼び、設計や要件定義などプログラミング以外の作業を行う技術者をシステムエンジニアと呼びます。
しかし、システムエンジニアがプログラミングを行うこともあります。
このブログではシステムエンジニアプログラマはほぼ同じ意味で使っています。

論理

プログラミングの世界では、処理・コード・プログラム自体などをロジック(論理)と呼ぶことがあります。
「ロジックはどうする?」とか「このロジックは変だな」と会話の中で抽象的な単語として使われています。
前後の文脈によってはプログラム全体のことを指すこともあれば、命令文1行の事を指すこともあるでしょう。


論理(ロジック)とは三省堂提供「大辞林 第二版」によると次のように説明されています。

(1)思考の形式・法則。議論や思考を進める道筋・論法。
(2)認識対象の間に存在する脈絡・構造。

プログラミングにおけるロジックとは、問題解決の為にコンピュータが判断する為の手順(法則・形式)です。
すなわち、プログラマシステムエンジニア)の仕事とはロジックを考える事です。
自ら考えてロジックを組まないのであれば、それは単にソースコードをタイプしているだけであり、プログラマシステムエンジニア)とは呼べないのです。