プログラミング

コンピュータに実行させる手順をプログラミング言語で記述し、動作を作り出す行為

プログラミング初学者
プログラミング」の技術書を見る →

プログラミングとは

プログラミングは、コンピュータに実行させたい処理の手順を、プログラミング言語を使って記述する行為だ。人間の意図を、コンピュータが解釈できる正確で曖昧さのない命令へと翻訳する作業ともいえる。Web サイト、アプリ、業務システム、AI まで、あらゆるソフトウェアはプログラミングによって作られている。

書いたコードが動くまで

CPU が直接理解できるのは機械語だけで、人が書いたソースコードはそのままでは実行されない。間にどんな翻訳が入るかで、言語は大きく三つに分かれる。

方式動き代表
事前に翻訳する実行前にまとめて機械語へ変換し、できた実行ファイルを動かすC, Go, Rust
その場で解釈する書いたコードを読みながら順に処理していくシェルスクリプト
中間表現を経る中間の命令列へ変換し、それを仮想マシンが実行するPython, Java, C#

三つ目が分かりにくいが、Python の公式用語集は、ソースコードはバイトコードと呼ばれる内部表現へコンパイルされ、それが .pyc ファイルにキャッシュされるので 2 回目の実行が速くなる、そのバイトコードは仮想マシン上で動くと説明している。翻訳を完全に省く言語はほとんどなく、いつ翻訳するかが違うだけだと捉えるとよい。

この違いは学習中にも顔を出す。事前に翻訳する言語は、型の食い違いのような誤りを翻訳の段階で弾くので、実行する前に指摘が出る。その場で解釈する言語は、問題のある行に処理が到達するまで何も起きないため、ある条件のときだけ落ちる不具合が残りやすい。動かして確かめるだけでは足りない言語と、動かさないと分からない言語があるということだ。

基本となる構成要素

言語が違っても、プログラムを組み立てる土台はおおむね共通している。計算機にできることが、値を記憶する、命令を上から順に実行する、条件によって進む先を変える、決めた場所へ戻る、という限られた動作だけだからだ。

要素役割対応する計算機の動作
変数データを一時的に保持する記憶した場所に名前を付ける
制御構文条件分岐 (if) や繰り返し (loop) で流れを制御する次に実行する位置を変える
関数処理をまとめて再利用する呼んだ場所を覚えて戻る
データ構造配列やオブジェクトでデータを整理する記憶の並べ方を決める

つまり文法は、限られた動作へ人間に読める名前を与えたものだ。これらの組み合わせ方を理解すれば、新しい言語の習得も速くなる。

言語は目的で選ぶ

プログラミング言語は数多くあるが、「どれが最強か」ではなく目的に応じて選ぶのが実務的だ。判断は二段階で進む。まず動かす場所が選択肢を削る。ブラウザの中で直接動くのは JavaScript だけなので、Web の画面を作るならそこは動かせない。次に効くのは文法より周辺の資産で、データ分析や AI で Python が選ばれるのは文法が優れているからではなく、数値計算や機械学習ライブラリが厚く積まれていて、同じことを自分で書く必要がないからだ。言語を選ぶとは、その言語に集まった蓄積を借りることでもある。最初の 1 言語を深く学べば、その経験は他言語にも応用できる。

上達のために

プログラミングの上達は、文法を暗記することよりも、「課題を小さな手順に分解する力」を鍛えることにかかっている。動くコードを書けることと、読みやすく変更に強いコードを書けることは別の能力で、後者は設計の知識と結びついて育っていく。

伸びるかどうかを分けるのは、むしろ不具合との向き合い方だ。うまい切り分けは推理ではなく二分探索で、処理の途中で値を表示させ、そこまでは意図どおりかを確かめて、正しい範囲と怪しい範囲の境目を詰めていく。「ここは合っているはず」という思い込みを検査対象から外した瞬間に、探索は止まる。エラーの表示に並ぶのは呼び出しの経路で、末端に出てくるのはライブラリの中の行であることが多いが、原因は自分が書いた最も内側の行にあるのが通例だ。メッセージを読み解いて原因を切り分ける過程そのものが力になる。

学習の進め方としては、小さくても最後まで通る題材を一つ作り切るのが早い。入力を受け取り、加工し、保存または表示するところまで一本つなげると、断片的に覚えた文法が初めて互いに結びつく。写経で動かして終わりにせず、変数名を変える、条件を反転させる、わざと壊して直すところまでやると、どこが何を担っていたのかが自分の言葉で説明できるようになる。

この記事は役に立ちましたか?

関連用語

関連する記事