プログラミング - みる会図書館


検索対象: UNIX MAGAZINE 2002年11月号
46件見つかりました。

1. UNIX MAGAZINE 2002年11月号

特集・プログラミング入門 1 いう特徴があります。そのためか、 20 年ほど前に私が大 見通しの悪いプログラミングをせざるをえない代表的な言 学のプログラミング演習の授業で初めて C 言語に触れた 語 Fortran で、いかにうまく構造化フログラミングをお ころには、「 C 言語とは高級アセンプラである」と冗談交 こなうか、さらに Ratfor と呼ばれるプリプロセッサを利 しりに説明する先生もいたほどでした。 用すれば、どれほどプログラミングカ瑢易になるかといっ ソフトウェア開発の現場で UNIX の利用が広まり始め たことか解説されています。この本を読むことで、見通し の悪いプログラムとはどのようなものであり、構造化プロ た 1980 年代前半には、 C 言語はその他のプラットホーム グラミングがいかに大きな変革をもたらしたかを理解する 上でも使えるようになりました。そして、 1980 年イ鷺麦半 ことができるでしよう。 になると標準化を求める声が高まり、ます ANSI で、次 いで ISO において規格として制定されました。その結果、 豊富なテータ型 C 言語は多くのマーケットを穫得し、 C 言語によるプログ C 言語か扱えるデータ型としては、整数型、実委文 ラミングができる技術者が多いという点でも、威風堂々た 字型などの基本データ構造があり、それぞれに多彩な型が るプログラミング言語といえるまでになりました。また、 用意されています。 UNIX にかぎらす、ほはすべてのシステムで利用可能な たとえは、整数型だけをみても、 一平であり、いまでは C の処理系が使えないプラット ホームをみつけることさえ難しくなっています。 ・ short (16bit) ・ long (32bit) 言語的特徴 ・ int い殳に 32bit) C 言語は、思想的には A1g01 60 というフログラミング という型の定義ができます。さらに、プログラマーにとっ 言語をルーツとして、 PascaI などの構造化プログラミン ては嬉しい列挙型 (enum) というデータ型も使えます。 グが・可能な言語系と、アセンプラに近い処理か第当可能な これらの基本データ型をもとにして、複雑なデータ構造 柔生を兼ね備えた言語といえます。 をするための構造体 (structure) 、共用体 (union) が C 言語には次のような特徴があります。 用意されています。 本豈化プロクラミンク 多彩な演算子 C 言語は、手続き型言語として作られています。簡単に C 言語にはたくさんの演算子が用意されており、複雑な いえば、言当した川頁番で処理をおこなう言語です。 演算を簡潔に書くことができます。 C 言語てイ吏える演算子 C 言語は、 1960 年代から耳目みカまった構造化フ。ロ を表 3 にまとめます。 グラミングの考え方に大きく景斧些され、一ド記のような多彩 ごく簡単な例として、 な制彳卸文が用意されています。 ・整数型の変数 a について、その値を 1 増やす ・ if—else ( 条 f 牛分岐 ) 整数型の変数 b について、その値を 2 増やす ・ for ( 縄区し ) ・ while 併区し ) という処理を考えてみましよう。従来の言語であれは、 ・ do—until 併区し ) a = a 十 1 ; ・ switch —case ( 複数条件礒皮 ) b = b + 2 ; という書き方をすることになります。一方、 C 言語では、 これにより、見通しのよい、読みやすく分かりやすい プログラムを書くことができます。現在では、構造化プロ 十十 a ; b + = 2 ; グラミングはプログラマーにとっては当り前の考え方です が、 c 言言韶 ) 登場以前は、構造化プログラミングが可能な のようにコンパクトに言当できるのです。 ート記の例の変数 a についての処理はインクリメント演 実用的言語はあまりなく、ひどく見通しの悪いプログラム 算子 (increment operator) を用いて当しています。 を書かざるをえませんでした。たとえば、文献 [ 2 ] では、 、一三ロ 113 UNIX MAGAZINE 2002.11

2. UNIX MAGAZINE 2002年11月号

特集・プログラミング入門 きましよう。 いろいろなことを書いたので、 こて要点をまとめてお ・ 2 層構造をもつアプリケーションの増加 丘は、 GUI と間的な操作を中心とした表層構造と、 プログラム型インターフェイスによって複雑な操作を可 能にする深層構造から構成されるアプリケーションか増 えつつある。 アプリケーションを使いこなすにはプログラミング能力 も必要 上記のような 2 層構造のアプリケーションを十二分に 活用するには、それなりのプログラミング能力カ球めら れる。 ・ソフトウェア開発の多様化 ーロにソフトウェア開発といっても、その対象はいわ ゆるプログラムだけではなく、 WWW のコンテンツや アプリケーション用スクリプトの開発など、多種多様で ある。 ・アルゴリズムの重要性 プログラムのどの部分に、どのようなアルゴリズムを使 えはいいかをみきわめる目を養おう。 ・すくなくとも 1 つのプログラミング言語は自在に扱え るようにしよう フログラマーやシステム管理の仕事に就くのであれば、 すくなくとも 1 つのフログラミング言語は不自由なく 使えるようにすべきである ( もちろん、複数の言語が C プログラミングの基礎知識 112 M. Ritchie と Brian 、 V. Kernighan によって作られ C 言語は、 1970 年代に AT&T ベル研究所の Dennis があるにちがいありません。 も 1 度くらいは C で書かれたプログラムを目にしたこと 必要はないでしよう。おそらく多くの読者は、すくなくと いまさら、 C 言語がどのような言語であるかを説明する C 言語の生い立ち 扱え川まなおよい ) 。 フログラムを読もう 他人の書いたプログラムを読むことで、フログラマーと しての技量は確実に上がる。 ・各種のツールの利用法をマスターする プログラミング言語だけでなく、テンヾッガ (gdb など ) 、 ソースコード管理ツール (CVS) 、コンパイル管理ツー ル ( とくに make) の使い方をしつかり身につけておこ ・パッケージ化の力法も知っておく ある程度の規模のソフトウェアを開発する場合には、パ ッケージ化するための技術も重要になる。 バグの修正にイ叫リなツールを使おう バグの j 亦・修正に必なツールは積極的に使うべきで ある。 最後に、、よいフログラマーになるには何が重要か " とい うことに対する、私なりの答を記しておきます。 優れたプログラマーになりたいのなら、なんといって も観察力が重要です。プログラムとは、・与えられた出題を 解決するガ去を記したものであり、その間題の内容を正 しく理解できれば、すでにフログラムの大半は完成したと いってもよいからです。問題の内容を正確に把握できると いうのは、よいフログラマーの第一条件てす。だからこそ、 鋭い観察力を身につけることがなによりも重要なのです。 ( やまぐち・すぐる奈良先立物斗 ! 物翅孑大続大学 ) OS のようにハードウェアに近い領域の処理も言当可能と いわれていた PascaI などと同様な言当生があり、さらに に作られたものです [ 1 ] 。 C 言語には、当時、高級言語と なわちオペレーティング・システム (OS) を言当するため C 言語は、もともとは UNIX のシステム記述言語、す 開発者の 1 人として有名です。 Kernighan も UNIX の高機能フィルタである AWK の とともに UNIX を開発したことで知られ、もう 1 人の たフログラミング言語です。 Ritchie は Ken Thompson UNIX MAGAZINE 2002 ユ 1

3. UNIX MAGAZINE 2002年11月号

特集・プログラミング入門 1 表 1 おもなプログラミング言語 ( 1 ) カテゴリー 汎用手続き型言語 言語 特徴 現在、もっともひろく使われている言語で、習得しているユーザーも数多い。もとも とは UNIX の記述言語として開発されたが、高級言言蔀勺な文法構造をもち、しかも ードウェアにかなり近いことも記述可能な柔帙性がある。ー -- 部では、高級アセンプ ラ " といわれたこともあった 算用フログラミンク言語として登場し、 1970 年イじ人降、大学の理系学部・科 でのプログラミング教育では、ほは確実にこの言語か教材として使われていた。現在 でも、大規模帽 f: 算パッケージて利用されることがあり、根強い人気をもっている。 通常は Fortran77 を使うが、自由構文に近い Fortran90 や、去も丘は Objective Fortran まで登場し ・五としての将来的な道筋か不透明になっている 、に 1 ロロ 強い型付け (strong typing) と明確なて幻冓造て理解しやすく、 1980 年代にはプロ グラミング教育でひろく使われた。初期の Mac OS ではシステム言当言語として利 用され、 Macintosh 上のプログラミングではおもに Pascal が使われていた。この ため、一都には Macintosh は世界 0 に一の、 P-machine" であったという評価もあ る。また、 PC 環竟では Borland の Turbo Pascal も普及していた。現在はソフト ウェア開発環竟 Delphi に統合さオプジェクト勺なミ施された Object Pascal という言語になっている 関数型言語の代表格。処理系としては KCL (Kyoto Comrnon Lisp) などか有名 である。関数型言語はプログラミングを考えるうえで興啝架い点か数多いため、大学 の清幸財斗学里の学科ではほは確実に教材として使われている。ただし、実用的なプ ログラム開発をおこなう環境か整っていないため、現実には Emacs Lisp を除いて あまり普及していない ( 1980 年代に一世を風靡した Symbolics のシステムは唯一 Lisp をシステム言当言語として採用し、実用的なアプリケーションを提供していたこ とはある ) 。しかし、プログラミング・スタイルの幅をひろげるために、一度は Lisp を習しておくべきである。山も丘は Lisp か爬 E した Scheme の処理系が使えるの で、関委豐言語を学ふ、にはこれを利用するとよいだろう オプジェクト指向言語 オプジェクト指向言語としてひろく受け入れられた最初の処理系。 1980 年イ鷺麦半に Smalltalk 80 流行した。最大ク寺徴は、処理系も含めてすべて Smalltalk 80 で言己主されているこ とにある。したがって、プログラミングは SmaIItalk 80 で書かれた世界を拡張し ていくようなかたちになっている。 Smalltalk 80 の処理系は現在でも入手可能で、 UNIX 上て利用できる C 言語にオプジェクト指旬自鰰広張を施した言語といわれている。しかし、 1980 年代 後半に C 十十カ磴場した直後には、オプジェクト指司原理主義者からは、オプジェク ト指向ぶりが少なすぎるという社」もあった。だが、大規模なプログラムをデータ構 造や処理の階層化などの面で見通しよくきれいに言己主できる C 十十は、すばらしい処 理系である。さらに、 C 言言韶 ) ために用意されているライプラリの大半は C 十十でも 使える。その意味で、 C 十十は実用的なプログラム開発に利用できる言語といえる 1990 年代に入り、ネットワーク・コンピューティングが本剳ヒするという予測の もとに開発された言語。 Sun Microsystems か引車となって普及をイ眉匯してきた が、 Sun の期侍する Java マシンを基盤としたものより、 WWW 工竟と通常のシ ステムの上での処理系がひろく使われ、 Virtual Machine として利用されているの カ躾情である。言語としては C のフレーバーに近く、描丘はプログラミンク教育にも 利用されることが多くなってきた。実用的なプログラムも書けるオ剽勺なクラス構造、 JavaBeans と呼はれる再利用可能なパーツ窈是供も増えつつある 「はかの人か書いたプログラムをできるかぎり読みなさ います。いうまでもなく、プログラミンク言語は人工的に 作られ、自然言語とくらべ川ま表現能力もたいへん低いも 衄であることは事実です。したがっ のです。とはいえ 私は、プログラミングの一 EG 土への第一歩は、どんな言語 、「ヨロロ て、その習得も自然言語とそれほど違わないアプローチで であっても他人の書いたプログラムを読むことだと思って Fortran Pascal 五ロ 二 1 一口 Lisp C 十十 Java 108 UNIX MAGAZINE 2002 ユ 1

4. UNIX MAGAZINE 2002年11月号

特集・プログラミング入門 1 解決すべき問題の王蠏 「よりよいプログラマーになるために」でも触れましたが、 そのプログラム 0 夬すべき間題への早は不可欠です。 たとえば、スケジュール管理のためのプログラムであれ は、スケジュール管理とは何かカ吩からなけ川まお手上げ でしよう。プログラミング能力がいくら高くても、対象と なる問題を正しく孑当屋していなけ川ま、役に立っプログラ ムはなかなカイれないものです。プログラムがうまく作れ ないのは、かならすしも C 言語のプログラミング能力の 低さに起因するとはかぎりません。間題を自寉に捉え、そ れを鮹夬する方法をみつけられるかどうかにかかっている のです。誰の言葉かは忘れてしまいましたが、「問題の解 き方が分かっていれは、プログラミングの 7 割は終った ようなものだ」というのはまさしく至言だと思います。 間題を正しく理解し、その鮹夬去を町寉にイメージで きれは、プログラムを書く竹喋も・商に進められるはすで す。しかし、現実にはいきなりプログラミングにとりかか り、プログラムを書きながら角夬方法を探ろうとして泥沼 にはまる、といったケースが多いのではないでしようか。 いうまでもなく、このような状況はできるかぎり避けるべ きです。 ☆ プログラミングは楽しい「ド業です。なかでも、 C ・せ衄に に一口ロ よるプログラミングは制約か少なく、はは思いどおりに書 くことができます。 C 言語そのものはたいへんシンフ。ルで、その他の言語と くらべても十達しやすいはうだと思います。今回の説明を 丁トかりに、どんどんプログラムを書いてみましよう。 ( やまぐち・すぐる奈良先立斗 ! 判支術大完大学 ) [ 文献 ] [ 1 ] Brian Ⅵを Kernighan and Dennis M. Ritchie, C Pro- gramm をれ 9 ん佖れ tage , 2nd Edition, Prentice Hall 1988 ( 邦訳 : 石田晴久訳『フログラミング言語 C 第 2 版 (ANSI 規阜拠 ) 』、共立出版、 1989 年 ) [ 2 ] Brian Ⅵを Kernighan 、 P. J. Plauger 著、 : イ財寸泉訳、『ソ フトウェア、共立出版、 1981 年 私は、学生に向かって「いきなりプログラムを書こうと してはいけない」と諭すことがあります。間題について十 分に考えてからプログラムを書き始めても遅くはありませ ん。事実、中途半端な理解のままプログラミングにとりか かると、コーディングにの単純なミスではなく、もっと高 い論理レベルでの ( 大きな ) 間違いを犯しやすくなります。 アルゴリズムとデ - タ構造の基礎知識ー配列 プログラミングの世界には、さまざまなアルゴリズムや データ構造があります。それらのなかから、今回はデータ 構造としてはもっとも基本的な酉改について説明します。 添字 配列は、データが並んだものです。配列のそれぞれの要 素には、添字を用いてアクセスすることができます。添ネ によるアクセスは、たんに複数の変数か存在する場合と配 列を用意した場合の大きな相違点でもあります。 C 言語を例に考えてみましよう。整数型の変数が 4 つ 必要であ川よ、次のようにして i0 、 il 、 i2 、 i3 という 4 UNIX MAGAZINE 2002 ユ 1 つの変数を宣言することかできます。 int iO, このとき、これら 4 つの変数のあいだにはなんの関係も i 1 , i2 , i3 ; 一方、配列を利用すると次のような宣言になります。 前です。 ありません。独立した変数ですから、当り前といえは当り int a [ 4 ] ; この場合には、 a [ 0 ] 、 a [ 1 ] 、 a [ 2 ] 、 a[3] の 4 つの int 型 の変数かイ吏えます。これら 4 つの変数は、さきほどの iO —i3 とまったく國兼に利用できます。 変数 i0 ~ i3 の場合には、プログラムを作成するときに どこでどの変数を使うのかを決めなければなりません。し かし、酉改」を使えは、プログラムの実行時にどの変数を使 133

5. UNIX MAGAZINE 2002年11月号

特集・プログラミング入門・ 1 ことができます。このように、アプリケーションの十はみ のなかで、独自の処理系で利用するプログラムの作成も広 まっています。 Lotus Notes の場合は、 Notes script に よるカスタマイズを専門的に請け負うソフトウェア会社が 数多くあり、根強い需要があることがうカ功ゞえます。 もちろん、汎用フログラミング言語によるプログラムの 開発も依然としてひろくおこなわれています。この分野で は、数年前とくらべるとプログラマーにとって窈尺肢が 急速に増えています。たとえは、プログラミング言語にし ても、 Fortran や C などの言語だけでなく、 perl 、 PHP 、 Ruby といったスクリプト系の言語もいろいろな場面で使 われるようになりました。 さらに、 C 十十や Java のように、オプジェクト指向 型言語処理系か独自の環境を内包する言語も普及していま す。これらの言語処理系では、多くの人かイ吏うであろう便 利なパーツを、、クラス " という形態で組み込んで提供する ことで、アプリケーション開発を簡便におこなえるように しようという考え方か査しています。 たとえは、 Windows 用アプリケーションの開発で一殳 的に利用されている Visual C 十十では、たんなる言語処 理系だけでなく、アプリケーションが使うさまざまなパー ツもあわせて提供し、実用的なアプリケーションを開発し やすくしています。これをプログラマーの側からみると、 Windows の工竟か言語処理系と一体化されたものといえ るでしよう。 Java における JavaBeans もこれに似た考 え方にもとづいたものですし、 GNOME のアプリケーシ ョン開発用ツールキットである GTK 十に用意されている 各種の、、パーツ " 引研兼です。したがって、これらの言語 と環竟を使いこなすには、たんにプログラミング言語を習 得するだけではなく、竟を構成するクラスの構造やライ プラリ、あるいは伺属のパーツの使い方なども同時に学ぶ 必要があります。 開発するプログラムも大小さまざまです。たとえば、お もに Windows 用のシェアウェアやフリー・ソフトウェ アのダウンロード・サービスをおこなっている Vector の ページを眺めてみると、かわいらしい小さなプログラムか ら、本格的なパッケージ・ソフトウェアまで、じつに多種 多様なものが公開されています。これらのソフトウェアの 作成過程にしても、 1 人でこっこっと開発しているものも 2 http://www.vector.co.jp/ 106 あれば、複数の開発者か共同で竹喋をおこなっているもの もあります。 このように ーロにソフトウェア開発といっても、使用 する言語や環境は従来よりもはるかに幅広くなっているた め、目的をよく見定めたうえで適切な開発言語を選択しな ければなりません。また、開研彡態の多オヒとともに開発 を麪爰するためのシステムも多彩になりつつあります。 プログラミングとは さて、プログラミングについてもう一度考えてみましょ う。さきほど述べたように、プログラムには次の 2 っク芋 性があります。 ・処理の去を表現する。 再利用可能なかたちでほかの人たちに提供する。 このうち、前者の、、処理方法の表現 " は、アルゴリズム (algorithm) とプログラミング言語という 2 つの要素か ら構成されます。 アルゴリスム プログラミングをおこなう場合には、どのアルゴリズム を使うべきか、つまり、どのような手順て処理を進め川ま よいかという間題を考える必要があります。たいていは、 私たちが自然に思いっく手順をそのままプログラミングの なかでも使うのか普通でしよう。しかし、場合によって は、使用するアルゴリズムを真剣に考えなけ川まならない こともあります。その代表的な例が、膨大な数のデータに 対してある処理を適用するような場合でしよう。 1 つ 1 っ の要素に対する手間をうまく減らしていけば、全体として 処理にかかる日判を大きく去できるからです。 データの並べ替えや探索 ( 検索 ) については、適切なア ルゴリズムを適用することで、手間を大きく減らせること カ吩かっています。また、複数の条件か設定でき、そのな かで最適解をみつけるような間題の場合は、それぞれの条 件に応じて適切なアルゴリズムを使う必があります。 ノート 2 手許の百科事典によれば、アルゴリズムという言葉は、ア ラビア代数学の基楚を作った 9 仙記の数者である、 (the) 十紡面 277 ( フワーリズミー ) UNIX MAGAZINE 2002.11

6. UNIX MAGAZINE 2002年11月号

計算式を構成する関数について調べ、それを応用するよう になります。必要に迫らオレしは、普通のエンドユーサーで もこの程度のことはするでしよう。 ところが、エンドユーザーのなかから、ほんのちょっと 違うことを考える人がかならず出てきます。表計算ソフト ウェアで作ったデータをもとにして、具イ勺な直を入力 することなく特定の目的のための計算書 ( フォーム ) を作 るユーサーです。たとえば、確定申告をする際に表引算ソ フトウェアのお世話になっている人はたくさんいると思い ます。そのときにおこなった引算をもとに、個別のデータ はすべて空欄にし、必要な計算式の定義だけをセルに埋め 込んで誰でも使える ( 汎用の ) 計算書を作ろうと考える人 たちです。この考え方をさらに進め、マクロ機能を使って 入力へルバーを作り、入力を省力化しようとする人もいる でしよう。 このように、 1 回かぎりの計算に終らせるのではなく、 計算の、、方法 " を表現して再利用可能なかたちにしておこ うと考えるユーサーがかならすいるものです。まさしく、 ワンランク上のエンドユーサー " と呼ぶにふさわしい人 たちだと思います。 見方を変えると、このようなユーザーは、、、開発者とし てアプリケーションを利用するエンドユーザー " と捉える こともできるでしよう。このようなユーサーになれば、ア プリケーションを手際よく扱えるようになるのはもちろ ん、開発者として周囲の人たちの苦労を轤咸できるように 特集・プログラミング入門 もなります。 それはプログラムなのだ 上に述べたような、、ワンランク上のエンドユーサー 作るものには、 ・処理のガ去を表現する 再利用可能なかたちでほかの人たちに提供する が という特生があります。これは、まさしくプログラムその ものといえるのではないでしようか。もちろん、通常の プログラミング言語によって作られたプログラムとは形態 が異なります。しかしプログラムであることに違いはあ りません。言い換えれば、、、ワンランク上のエンドユーザ " とは、開発者としてプログラムを作れるエンドユーザ 104 ーといえます。 ソフトウェアの 2 層構造 もちろん、このようなユーザーの存在は表言 1 算ソフトウ ェアの分野だけではなく、ワードプロセッサやグループウ ェアなどの分野にも共通する現象です。これは、現在の多 くのアプリケーションが、 2 層構造をもっことに起因して います。 大多数のアプリケーション・ソフトウェアは、ユーサー が直感的に作業しやすい GUI (Graphical User lnter- face) と操作環竟を提供しています。これが、アプリケー ションの、、表層 " です。多くのエンドユーザーは、この表 層の機能を使って作業をしているわけです。 丘のアプリケーションは、東したユーサーに対して 複雑な操作を可能にするインターフェイスも提供していま す。こちらは、アプリケーションの、深層 " といえます。 このインターフェイスは、表層構造と同じように GUI の なかに埋め込まれ、、、詳細 " などという名前の付いたボタ ンを押したときに現れ . る場合もあります。しかし、たいて いはマクロだったり、スクリプトだったり、ある種の茁妾 的なプログラミンクユ羅竟を提供する方式が主充です。この 深層の構造を理解し、かつアプリケーションのほかの構成 要素との関係をうまく保ちながら、表層の機能だけでは実 現不可能な処理を言当できるようにするわけです。 この 2 層構造があるからこそ、エンドユーサーか前に進 もうとすると、、壁 " にぶつかり、さらに、この壁を乗り越 えたエンドユーサーが開発者に等しい存になるのです。 スキルアップ = プログラミング能力 工ンドユーサーであっても、上記のような 2 層構造の アプリケーションを使いこなすには、プログラミングかで きる開発者としての能力を身につけなければなりません。 すこし古い話になりますが、 1990 年代の初め、コンピ ータ・リテラシー (computer literacy) の重要性か強 調された日月がありました。その背景には、ユーサー教育 におけるプログラミング偏重への反省があります。 それまでの大学での情報処理教育は、 Pascal や For- tran などのプログラミング言語の学習から始まり、 ートン法を用いた数イ蒴 1 のようなプログラミンク育を 通じて、、、コンピュータの利用とは、プログラムを作り、 計算させることだ " という考え方を徹底して教え込むもの でした。たしかに、大型汎用コンピュータの利用か主流 UNIX MAGAZINE 2002 ユ 1

7. UNIX MAGAZINE 2002年11月号

特集・プログラミング入門 の名前に由来するものだそうです。 12 世紀にラテン語に訳さ れた彼の著作は alghoarismi と冠されて流布し、これか英語 では algorism となってアラピア数字やアラピア式記新去を 未する用語となりました。その後数を意味するギリシャ語 arithmos と結びついて algorithm と綴られるようになり、 数学的な処理の手続きを表すときにも使われるようになりまし た。見代の : 央語には algorism と algorithm という 2 つの表 記がありますが、記新去を表すときには前者を、処理の手続き を指す場合には後者を用いるようてす。 ソフトウェアを開発する場合、特別なアルゴリズムを 新たに考案しなければならない状況に直面することは少な いと思います。ー勺なプログラマーが出合うであろう多 くの間題の大部分については、適用できるアルゴリズムが 1960 年代から 1970 年代に活躍した情報科学分野の研究 者たちによって考案されているからです。したがって、フ ログラマーにとってのアルゴリズムの間題は、これらのア ルゴリズムを、開発中のシステムにどのように適用したら よいのかを考えることが中心になります。 それには、イ弋表的なアルゴリズムとしてはどのようなも のがあり、それぞれがどのような囓籍や文献で角見されて いるのか、また、各種アルゴリズムについて手間やコスト の評価はどういった手法でおこなわれているか、といった 点について基礎的な知識をもっていなければなりません。 ソート ( 並べ替え ) を例にとると、どのような処理手順が あるのか、 Quick Sort と Merge Sort ではかかる手間 にどのくらいの違いがあるのか、といった知識はプログラ マーであれば当然もっているべきものです。その他の領域 でもさまざまなアルゴリズムが考案されており、それぞれ にいろいろな特徴があります。 上の説明と矛盾するような言い方ですが、アルゴリズム の 1 つ 1 つを暗記する必要はありません。ただし、必要 なアルゴリズムをいつでも探しだせる手段をもち、各種の アルゴリズムの牛致を理解し、開発するプログラムに最直 なアルゴリズムはどれかを判断できるようにしておくこと か重要なのです。 プログラミンク言語 去も匠は、、、星の数ほど " といっていいほどのプログラミ ング言語があります。処理系が上交的簡単に手に入る代表 的なプログラミング言語には、表 1 ~ 2 に示したようなも のがあります。 UNIX MAGAZINE 2002 ユ 1 どの言語を茎 ; : べきか ? プログラミング言語について角見していると、かならす といっていいはど肋、れる質間が、 「どの言語を最初に学べばいいのでしようか ? 」 です。これに対する答は、おそらく人さまざまでしよう。 プログラミング言語というものについての考え方によって も、違う答カってくると思います。 私の場合は、たいてい次のように答えます。 ・どんな言語でもいいから、自由自在に使える言語を 1 つ は身につけておくこと。 職業としてプログラマーお尺するつもりならば、すく なくとも C 言語は自在に扱えるようにしておくべきで ある。現在でも、大部分のシステム開発には C 言語が 使われているからだ。 ・ UNIX システムの管理をするのなら、 Perl くらいは身 につけておくべきだろう。たとえは、システムの各種の ログを整理したり、ちょっとしたフィルタを作る場合、 perl を手足のように使えないと仕事にならない。 ・プログラミングの - Ei 凱こは、関数型言語を学ぶと効果が あるといわれている。ただし、山も丘は Lisp の処理系を 整備するのはやや面倒なので、手始めに Emacs Lisp あたりから習得するといいかもしれない。 もちろん、これは私見であり、絶対というわけではあり ません。事実、↑帯に科学関係の研究者や大学の先生、企業 でプログラマーとして働いている方々にこの間いをぶつけ ると、いろいろな答カってきます。たとえば、「プログラ マーを目指すのなら Lisp から学ぶべきだ」と力説する方 もいましたし、「 Fortran を自在に扱えなけれは研究か進 まない」と断言する先生に会ったこともあります。ただ、 私の知るかぎりでは、優秀といわれるプログラマーは複数 のに通していることが多いような気がします。 他人の書いたプログラムを読もう もう 1 つよく受ける質間は、ある特定の言語について、 「うまく書けるようになるには、何を学べばいいのでしょ う力、 ? 」 というものです。これにもさまざまな答え方があると思い ますが、私はよく次のように言います。 107

8. UNIX MAGAZINE 2002年11月号

・ ookshelf 『通信ネットワーク標準講座』 JA 、 『 Ja a 国際化プログラミング』 通 ネットワーク 標準講座 国際化フログラミング ・ An nabel Z. DOdd 著 ・ Andrew Deitsch 、 David Czarnecki 著 ・堤大介訳 ・風間一洋訳 ・ソフトバンク ・オライリー・ジャパン ・ A5 判、 328 ページ ・ B5 判変型、 449 ページ ・ 2 , 600 円 ・ 4 , 200 円 ・ 2002 年 9 月 6 日 ・ 2002 年 9 月 24 日 さまざまな通信ネットワーク技術とその歴史、通信産業 衄 ( おもに Java 2 SDK 1.3 ) でソフトウェアの Java ロロロ の現状と動向などを紹介した初心者向けのガイド。電気通 国際化のために提供されているクラスとフレームワークに 信の基本、通信ネットワークの基本技術、電話網とデータ ついて解説。 12 章構成で、国際化プログラムを記述するた 通信、その伝送媒体、公衆通信ネットワーク、各種ネット めに必要となる主要な概念、 Java における国際化サポ ワーク技術、インターネット技術、無線通信ネットワーク トに関連する各種 API やクラスの使い方などを、多くの について、それぞれ章を設けて説明している。 サンプルコードを示しながら説明している。 入門旧ルーティング』 『 KDE 3.0 アプ丿ケーションプログラミング KDE 3.0 アプリケーション プログラミング IP ルーティング ・ Ravi Ma 旧 0 a 著 ・ LOtzi BöIöni 著 ・清水奨訳 ・杵渕聡監訳 ・オライリー・ジャパン ・翔泳社 ・ B5 判変型、 300 ページ ・ B5 判変型、 331 ペー ン ・ 2 , 800 円 ・ 3 , 200 円 ・ 2002 年 8 月 31 日 ・ 2002 年 8 月 23 日 ルーティング・プロトコルの動作と設定に重点を置いた オープンソースの統合デスクトップ環境 KDE の概要と 解説書。 IP ルーティングの基本的な概念を説明した 1 章、 開発ツール、 KDE アプリケーションの作成に必要となる 各種ルーティング・プロトコル (RIP 、 RIP-2 、 IGRP 、 さまざまな要素 ( ウィジェット、メニュー、バー、ダイア EIGRP 、 OSPF 、 BGP-4) の仕組みや動作を解説した 2 ~ ログ・ポックスなど ) 、一般的な KDE アプリケーションの 7 章、それらのルーティング・プロトコルで共通して使え 構成や設定ファイルのフォーマット、 XML を利用した高 る管理テクニックを紹介した 8 章に分かれる。 度なプログラミング・テクニックなどを紹介している。 『入門 SNMP 』 『 Wiki WayJ iki メ コラホレーションツール Wiki SNMP ツ ・ DougIas R. Mauro 、 Kevin J. Schmidt 著 ・ Bo Leuf 、 Ward Cunningham 著 ・土本康生監訳、福田剛士訳 yomoyomo 訳 ・オライリー・ジャパン ・ソフトバンク ・ B5 判変型、 337 ページ ・ B5 判変型、 453 ページ ・ 3 , 400 円 ・ 3 , 800 円 ・ 2002 年 7 月 29 日 ・ 2002 年 9 月 10 日 システムやネットワークの管理に SNMP がどのように コンピュータ上での共同作業を支援するツール Wiki の 利用されているかについて、具体例を挙げながら解説した 開発者による解説書。 Wiki の基本概念、インストールと 入門書。 SNMP の概要と動作、対応ハードウェア、各種 基本的な使い方などについて述べた 1 部、 Wiki サーバー ネットワーク管理ツールなどの紹介に続き、テーマごとに の動作原理、カスタマイズ、管理について説明した 2 部、 商用製品やオープンソースのツール ()P OpenView 、 大学や企業での利用例を数多く紹介した 3 部からなる。各 Net-SNMP など ) の設定や使い方を紹介している。 種 Wiki クローンなどを収録した CD - ROM 付き。 158 UNIX MAGAZINE 2002.11

9. UNIX MAGAZINE 2002年11月号

Contents 2002 / 11 特集 SoIaris 9 で快適生活 32 プログラミング入門 103 ・・・坂下秀 SoIaris 9 の特徴、インストール手順の詳細 山口英、今泉貴史 C プログラミングの基礎知識、テータ構造ー配列 UNIX Communication Notes ・・・・・・山口英 ネットワーク・セキュリティ管理の課題 プログラミング・テクニック・・・・・・多治見寿和 traceroute6 新・倉敷芸術科学大学のネットワーク構築・・・・・・小林和真 GR2000-2B による旧 4 ハ P 6 デュアルスタック UN Ⅸ便利帖・・・・・・宮下健輔 MRTG こけつまろびつ UN Ⅸ・・・・・・杜ゆずこ メールサーバーの運用ー Postfix JavaServer Pages ・・・・・・荒井美千子 本体をもつカスタムタグ し inux のブートプロセスをみる・・・・・・白崎博生 startup 32 ルーチン RFC ダイジェスト・・ ・・宇夫陽次朗、小柏伸夫 連載 0 9 6 8 4 3 9 1 5 5 6 7 8 9 5 7 UDREY THE DESIGN) COVER, CONTENTS DESIGN, ILLUSTRATION ・ MORIYA, KAZ

10. UNIX MAGAZINE 2002年11月号

2002 月行 ( 毎卩 1P1 日発行 ) 第 17 巻第 11 号通巻 193 号昭和 63 年 9 月 5 日第三種郵便物認可 特別定価 970 円 002 20 ・データ構造の基配郭 ・これたけは知ってお暑一プログラミングの基礎ー プログラマーに求められること プログラミング入門 ・インストール手順の詳細 ・ SO ねⅱ s 9 の特徴 ・作業を始める前にマニュアルを読もう So ね′ is 9 で快適生活 traceroute6 プログラムを読む プログラミング・テクニック 検証 Apache/mod s ワーム Linux Update 本体をもつカスタムタグを作る JavaServer Pages トラフィック監視ツール MRTG UN Ⅸ便利帖 旧 v4 ハ Pv6 対応ルータ GR2000-2B の基本操作 新・自敷芸術科学大学のネットワーク構築 セキュリティ管理の課題 UNIX Communication Notes