プログラミングとは何か 基礎編第1回


20140218

翻訳者のためのプログラミング講座 基礎編第1回です。週に1~2回のペースで更新していきたいと思います。

はじめに

今、私たちの仕事はコンピューターなしには成り立たないほど、数多くのアプリケーションの恩恵を受けています。たとえば、電子辞書などは紙の辞書と比較にならないほど速く引いたり複数の辞書を同時に引いたりすることができます。その他に、ワードプロセッサー、エディター、翻訳支援ツールといった市販のソフトウェア、利便性を高めるための小物ツールやマクロなど、さまざまなアプリケーションを利用して、毎日の翻訳業務をこなしています。良くも悪くもPCスキルが不可欠になっていますし、最近では、こうしたアプリケーションのさらなる活用や作業環境の向上を図ったセミナーや勉強会が活発に行われています。

これまでの勉強会で気づいたことがいくつかあります。

まず、各参加者のPCスキルに著しい差があるということです。そつなくPCを扱える人、マニュアル通りには操作ができる人、なんとなく使えている人など、実にさまざまなレベルの方々が参加されています。いくらPCを使って仕事をしているとはいえ、それが本業ではないのですから差があって当然と言えます。ただ、せっかく参加したセミナーで、アプリケーションやツール、情報技術の基本的な知識が不足しているために理解しきれないのは、大変もったいないことだと思います。

次に、時間的な制約のために伝えきれないことが多いということです。限られた時間内で伝えられる情報には限界があります。上記のように参加者の理解度に差がある場合、特にその制限が顕著になります。シリーズ化したりレベル分けしたりという方法もありますが、開催頻度を増やすことも毎回参加することも決して簡単なことではありません。結局は、ツールや技術をちょっと紹介するだけで終わってしまいます。

そこで、勉強会やセミナーという有益な場をさらに有効に活用できるよう、拙ブログで基礎的な情報を提供します。また勉強会などの場に参加が難しい方や独学の方でも十分に役立つ内容にしていきます。

この講座について

これから始めるプログラミング講座の目的は、高度なプログラミングを作成できるようになることではありません。プログラミングの本質的な部分を理解することと、翻訳に関わるITの知識を取得し活用できるようになることが目的です。そのため、基礎的な知識と翻訳に役立つと思われる技術だけを重点的に取り扱います。「基礎編」では「プログラミング言語」によるプログラミングを扱う予定はありません。プログラミングのための基礎知識(文法や用語)についても多少取り扱いますが、文法や用語、プログラミングのテクニックを覚えてもプログラミングができるわけではありません。まして、翻訳(IT翻訳の一部を除く)には何も役立ちません。

前振りが長くなってしまいました。本題に移ります。

プログラミングとは

ここでは「コンピュータープログラミング(Computer programing)」を指します。

プログラミング(英: programming)とは、プログラムを作成することにより、人間の意図した処理を行うようにコンピュータに指示を与える行為である。
「プログラミング (コンピュータ)」(2014年4月3日 (木) 07:06 UTCの版)『ウィキペディア日本語版』。
http://ja.wikipedia.org/wiki/

または、

programming    The process of providing instructions to the computer that tell the microprocessor what to do.
"programming." Que's Comuputer & internet Dictionary, 6th Edition, 1995

Microsoft社の定義も引用しますがスルーしても構いません(下線は筆者)。

programming n. The art and science of creating computer programs. Programming begins with knowledge of one or more programming languages, such as Basic, C, Pascal, or assembly language. Knowledge of a language alone does not make a good program. Much more can be involved, such as expertise in the theory of algorithms, user interface design, and characteristics of hardware devices. Computers are rigorously logical machines, and programming requires a similarly logical approach to designing, writing (coding), testing, and debugging a program. Low-level languages, such as assembly language, also require familiarity with the capabilities of a microprocessor and the basic instructions built into it. In the modular approach advocated by many programmers, a project is broken into smaller, more manageable modules—stand-alone functional units that can be designed, written, tested, and debugged separately before being incorporated into the larger program.
"programming." Microsoft Computer Dictionary, Fifth Edition, 2002

コンピューターは、それのみで動作することはありません。必ずプログラムが必要になります。プログラムとは、コンピューターに動作を指示する命令(instructions)のセットであり、「入力されたデータを適切に処理して意図した出力を得る」ための手順を記述したものです。その手順を作成することをプログラミングと呼びます。

プログラムの概念を図式化すると次のようになります。

【入力】→【処理】→【出力】

入力(input)データ(data)であり、キーボードやマウス、ファイルなどから入力され、入力されたデータは処理(processing)が行われて、出力(output)されます。この最小単位をいくつも組み合わせてプログラムが作られます。

データと処理。この2つを徹底的に理解することがプログラミングにとって重要になります。データと処理については、これから詳しく述べていくことになりますが、まずはプログラミングを作成するとはどういうことか、つまり「プログラミングの発想」について説明したいと思います。以下は、私の個人的な意見であり、考え方は人により異なります。

前述の定義をもう一度見てください。

プログラミングとは、「人間の意図した処理を行うようにコンピューターに指示を与える行為」ですから、まず「意図した処理」を明確にする必要があります。コンピューターは指示されたことしかできず、理解できる指示が制限されています。さらに曖昧さは許容されないため、子供が理解できるような明確な指示を与える必要があります。

3つのシンキング(thinking)

明確な指示を与えるために必要なことは、指示する手順が「論理的(logical)」かどうかということです。論理的に破綻したプログラムは動作しないか、動作しても暴走してしまいます。たとえば、処理できる数値の範囲が1~10のとき11を入力したり、存在しないデータをリクエストしたりすることは許されません(一般的にエラー処理が行われます)。

また、プログラミングには「本質的(radical)」な考えも必要です。「本質的」としましたが「急進的」でも構いません。要するに、処理の目的は「意図した出力」を得るためであるということです。「意図した出力」を得るための処理は幾通りもあります。2という解を得る計算式は一つではありません。

最後は「批判的(critical)」に考えるということです。作成したプログラムは論理的に正しいのか、意図した出力が得られるのか、処理は適切に行われているか、エラーが発生するケースは有り得ないかなど、多角的に検証しなければなりません。

ラジカルに発想し、ロジカルに手順を構築して、クリティカルに検証する。これがプログラミングに必要な考えであると思います。抽象的な言い方になってしまいましたが、「logical」、「radical」、「critical」の3つは、翻訳作業においても必要なことではないかと考えます。論理的な文章になっているか、本質的に正しいのか等々。

プログラミングとは、コードを書くことではありません。「意図した処理を行うための指示」を作成することです。まず自分自身がその指示を明確に理解することが大切です。理解したことを適切に説明できるようになれば、プログラムもかけるようになります。これがプログラミングの第一歩です。

最後に問題を2つ出します。解答例と説明は次回。

問1) 入力した値2を10にする処理を説明してください。

問2) ワード(またはエディター)の初心者にコピー&ペーストの手順を説明してください。相手はコンピューター用語を知らないものとします。

 

最初から力不足を露見して、わかりにくい内容になってしまいましたが、「手順を明確に説明する」ことを理解していただければ十分かなと思います。

質問やご意見等はFacebookのコメントにお願いします。

次回から、しばらくはデータの話になります。

コメントしてみる