KOSEIのブログ

自分の可能性をどこまでも

プログラミング言語の種類その3<元SE独白記>

<元SE独白記>  2016/06/10

C言語

・日本語プログラミング言語

LISP

プログラミング言語の種類ということでお話してきましたが、昨日のブログでは「フォートラン言語」までお話しました。次に挙げているのが「C言語」というプログラミング言語です。いまはすっかり定着していますが、この「C言語」が登場したとき、「妙な名前のプログラミング言語だなあ~」と思ったのを覚えています。仕事仲間と「C言語」の話題になった時に「Cという命名があるからにはのはBもあって、Bの次に出たんじゃないの?」と冗談半分で盛り上がったものです。僕も半信半疑で「どうでもいいか」ということで無視していましたが、Wikipediaに次のようにありました。

B言語(ビーげんご)は、AT&Tベル研究所ケン・トンプソン (Ken Thompson) によって開発されたプログラミング言語である。ケン・トンプソンがデニス・リッチー(Dennis Ritchie)監修の元で設計し、1969年頃に登場した。

やはり本当にあったのですね。でも「C言語」のほうが使い勝手がいいので主流になってしまったのでしょう。なぜかというと、Wikiの同じ頁に「特徴」として以下の様に書かれています。

B言語で記述されたプログラムは、コンパイラによって中間コードに変換され、実行にはインタプリタを必要とした。実行時にインタプリタによって逐次処理されるため、実行速度は極めて遅かった。ただしPDP-7版は機械語を出力できるように改良された。

これからプログラミングを勉強しようとしている人に向けてこのブログを書いているため、そのような方は上記「コンパイラ」といわれてもチンプンカンプンでしょうが、「高級言語で記述されたコードをコンピュータが理解できる言葉に直す処理の一つの段階」と思っていてください。

インタプリタというのは僕のブログでもベーシック言語の紹介のところで書きましたが、実行時にワンステップ単位で翻訳していく方式です。当然速度は遅いのです。ふつうはコンパイルをした後は、リンカーというものによって「リンケージ」の作業、つまり関連ファイルをくっつけて(リンケージして)、オブジェクトファイル(exe-イグゼファイル-とか実行ファイルとも)をつくりあげます。これが最終の実際に動くプログラムですが、exeファイルは機械語になっていますからスピードは速いのです。しかしコンパイラのあとにインタープリタって・・・、やっぱり非現実的で「変わり種プログラミング言語一覧」にでも掲載するような部類ですね。でもこの「B言語」のコード例をみてみましたが、C言語の前身というだけあって、似ている部分は結構あります。

しかしこのB言語のほかにも驚くべきことに、「O言語」以外はA~Zすべてあるのです!物好きで暇な方が調べた結果がこちらsappari wiki

http://memo.sappari.org/a2z-languages

僕が現場を離れて事務所での管理職に昇格したあたりに、概念としては「構造化プログラミング」とか、ハードウエアの枠組みとしては「ワークステーション(WS)」というものが出始めてきて、C言語も普及し始めたのです。だから僕は「C言語」は実務ではほとんど使っていません、数本組んだだけですが、やはりとてもわかりやすく機能が高いプログラミング言語だと思っています。

C言語はネットワークにも強い言語です。今はPCでネットワーク接続をして独立して仕事ができますから、ある業務に慣れていて、またひとつのOSを使いこなせるならば、自宅でも仕事ができるわけです。僕の現役時代からは信じられないことです。

ある物流会社のNECの中型コンピュータで支社とラボを通信回線で繋ぐという仕事を経験したことがありますが、その当時はインターネットが無かった時代です(信じられないでしょう?!)。なので電話回線を使って繋いだのですが、詳細は覚えていませんが、「通信プロトコル(通信上の双方の決め事)」が現在のインターネット通信を前提としたものとはまったく違っていて、プログラムで直接に、あるビットのフラグを立てて、相手に送る。すると受信側はそのフラグが立っているのを確認してそれなりの処理をするという段取りなのですが、人生を同じで、話どおりに進まないのがプログラミングの世界で・・イヤ苦労の連続でした。失敗の繰り返しで3日間缶詰状態とか1週間前後でようやく繋がりました。

日本語プログラミング:これは経験した技術者は少ないと思います。富士通の「BAGLES」という名前のプログラミング言語なのですが、COBOLの英文をそのまま日本語に置き換えてコーディングするのですが、結局は内部的にCOBOLに変換されますから、内容のチェックをするときはCOBOLが解っていないと読めません。某金融会社(生保だったかな)の仕事でしたが、この「BAGLES」で組みました。しかし日本語プログラミングは、あまり意味が無かったように思います。いまはだいぶ進化しているみたいです。↓

http://www.fujitsu.com/jp/group/fmcs/solutions/purpose/developptlang/bagles-open/

他のメーカーでも色々と販売していたようですね。

最後のLISPですが、これは人工知能言語です。これは解説すると長くなりますので、やめておきます。それに僕は実務での経験はまったくないです。会社内で「LISP研究会」をやろうという話が持ち上がったので、僕も賛同し勉強会を開いて研究していた程度です。

**さすが「C言語」ですね。ブログ記事がいつのまにか長くなってしまって。次のブログでは、「論理演算」についてお話したいと思います。

KOSEI

 

 

 

プログラミング言語の種類その2<元SE独白記>

<元SE独白記>  2016/06/09

アセンブル言語のほかにも色々なプログラミング言語があります。あくまでも僕自身が経験したことのあるプログラミング言語限定で列挙してみます。

・ベーシック言語

アセンブル言語

コボル言語

・フォートラン言語

C言語

・日本語プログラミング言語

LISP

1)BASIC(ベーシック)言語

まず最初の「ベーシック言語」ですが、これはインタープリタ型言語といって、1ステップ*ごとに機械語に翻訳していく言語です。むかしは若いお金のない学生は高い機器やソフトウエアを購入できなくて、雑誌の付録みたいなところのBASICを動かして遊んでいたのですが、結構色々なプログラミングができたようで、やり方によってはゲームのプログラムも組めたようです。でも考えてみたらその若い人たちが成人して日本電気富士通IBM等に就職して今の日本のソフトウエア界をリードしていく存在になっていったのですね。僕も遊びで数十ステップのプログラムを書いては実行しました。BASIC言語以降の特徴としては、「マンマシンインターフェース」と呼ばれる考えが発達浸透し始めた、ということでしょうね。どういうことかというと、マン(人間)とマシン(コンピュータ)のインターフェース(つながり)が重要視されてきた、ということで、要するにわかりやすいプログラミング言語が出始めたということです。2進数のビットを意識しなくても英文を記述する感覚でコーディング(プログラムの実行文を記述すること)できるということでしょう。これを「記述型言語」とも言いました。いまは「ヴィジュアル・ベーシック(VB)」というものが発売されていて評判もいいみたいですね。

*「ステップ」とは「ピリオドで終了する一行」と考えればいいですね。コンピュータはピリオド( . )を読み取ると、そこが命令文の終了と判断します。だから例えば次のような命令コードがあったとします。

 IF A = B GOTO C

これだけだと文末に「 . 」ピリオドが無いので、コンピュータは命令実行時に、次の命令コードも続きだと判断して処理してしまいます。最初の文法チェックの段階でエラーとなってくれればいいのですが、文法的におかしくないと(たとえば IF = B などと書くと明らかに文法的におかしいですからエラーになります)エラーになりませんが、実行時に正しく動かないのです。とにかく行が変わっても関係なくコンピュータは進み続けますからピリオドを忘れないようにします。上の命令コードの正しい書き方は次のようになります。

 IF A = B GOTO C.

ピリオド忘れで正しく動かなかったことは無数に体験しています。集中力が必要ですね。なお、大きなプログラムになると数百ステップにもなります。

2)ASSEMBLE(アセンブル)言語

昨日のブログで大体のことは大まかに説明しましたが、僕が仕事で始めて接した言語です。僕が入社した会社はゲームソフトを作成していた会社でしたが、僕はプログラミングとゲームの企画の両方をこなしていました。当時では非常に人気のあった「MSX」というハードウエア上で動くゲームなのですが、今から見れば「オモチャ」以下です(笑)。なにしろ横一列に同時に出力できる色の数が制限されていて(5色前後だったと思いますけど)、出来上がりは今のゲームソフトから見ると雲泥の差があります。コンピュータ・グラフィクスの世界は40年の間に驚くべき進化を遂げたものですね!

3)COBOLコボル)言語

僕はその後、事務処理のプログラムを組みたくなり転職しました。ゲーム会社の社長は引き止めたかったようで「え?キミが事務処理プログラムを組むのぉ?大丈夫なの~??」といかにも、「お前には無理だからヤメろヤメておけ」という言い草。そういわれると僕はますます自分の行動を優先する性格なので、あっさりと転職しました。転職後の初仕事は茅場町の証券会社の金融プログラムです。事務処理でもっとも使われているのが、この「COBOL」というプログラミング言語です。これはいったん覚えてしまうと単純で簡単なプログラミング言語です。つい最近まで金融系のソフトウエアはCOBOLで組まれていたのですが、あるときから徐々にC言語等にコンヴァージョン(移し変え=変更)されていっています。理由としてはメンテナンスが楽とか、ネットワークに対応しやすいとかいった理由です。まだ特別な分野ではCOBOLを使っているようですが・・・・。僕としては事務処理業務の初仕事で使った言語なのでなくなるのは寂しいですが、これも時代の流れでしょうね。でも逆に今はPC(パソコン)上で走る(実行できる)COBOLが安く売られているみたいですから、趣味で楽しんでも良いのですが仕事でないとどうも気が入らないというかなんと言うか・・・。金融系の仕事(銀行・証券・保険)が多い会社だったので、COBOLは本当によく使いました。

4)FORTRAN(フォートラン)言語

フォートランは科学技術計算用のプログラミング言語といわれています。僕がいた会社は金融系も強かったのですが、「航空システム」にも力を入れていました。全日空ANA)の「事前座席予約システム」はだいぶ前から存在していたのですが、僕はその何代目かのヴァージョンアップ版を開発する部隊に配属されました。予約と発券のチームに分かれていたのですが、僕は予約チームのリーダーとして活躍。ここでは実に様々なことを覚えました。上流工程(客先との打ち合わせ)でまずANAのシステム部の人と話をして「要求仕様」としてまとめます。ANAのシステム部の人はシステム部といってもあくまで「素人」ですから、僕がいた会社のほうに相談してくるわけですね。

それを何回も何回も見直しをして長い会議を経て、要求仕様書ができあがり、次は「概要設計」です。ここからいよいよコンピュータシステムの中に入っていくわけですが、プログラミングやシステム設計を経験してない人間には上流工程の「要求仕様」をまとめることはできないのです。客から出た要求はシステム的に実現できるものなのかどうか?これがわかっていないと「トンチンカン」な要求仕様書を作ってしまい、システム設計に入っての第一歩である「概要設計」の時につまづき「出戻り」です。時間のロスになりシステム開発が遅れていきます。世の中の多くのシステム開発は大体遅れますが、現場を知らない人間が上流工程を担当するからです(もちろんそれだけが原因ではないですけれど)。その後「概要設計」から「詳細設計」へ落とし込んでいき、さらに「プログラム設計」へブレイクダウンしていきます。そしてプログラマーへ渡す「プログラム仕様書」を書き、プログラマーへ指示を出します。

このANAの航空システムですが、まあ、その当時はここに限らずですが、ドキュメントはなんと!すべて手書き!です。現代の開発環境からすると考えられません。いま僕が書いている、このブログにしてもワープロで打っていますし、いまではシステム職ではない一般の人でもみんな「Word」といったワープロで文書を作成していますが、その当時は手書きでコピーという信じられない前時代的な環境でした!僕が仕事をしていた会社は「日本ユニシス」という会社なのですが、大元の会社はアメリカなので、何かわからないことがあると重たいファイルを引き出してきて読むのですが、悲しいことに英語で書いてあります(それは何故か活字でした)。外資系の企業でよかったことは給料が高かったということと、アメリカの休日には自分達も休めるといったことぐらいです。

おまけにユニシスのマシーンは11ビット・バンダリーとかいった、実に変則的な奇天烈(キテレツ)なコンピュータでした。プログラミングは論理的な作業だったのでまだしも、ファイル設計のようなフィジカルな部分を作りこむときの苦労は並大抵ではありません。如何に苦労したか思い出したくない思い出ですね・・・・。これはファイル設計を経験された方はよく解ると思います。フェーズ1の完了までに3年間かかりました。オンスケジュール(予定通り)に比較的近かったのではないかなと僕も仲間も皆自負していました。

コンピュータ・システムズエンジニアという職業はその当時花形職業でしたが、家にはほとんど帰っていませんでしたね。もちろん土日はないに等しいです。気力(意志の強さ)、体力(内臓のタフさ)、知力(というよりもロジックを追求しても客先と長時間話してもブレない強い脳みそ)の三拍子が揃っていないと上級SEはつとまりません。

まあよかったことといえば給料が破格でよかったことぐらいです。しかしそれは別にしても、僕の上級SEとしてのキャリアはここで形成されたといってもいいと思いますので、充分感謝です!辛い思い出もありますが楽しい想い出も満載で・・・。

プログラミング言語の種類とかいうタイトルですが、僕自身の履歴書みたいになってしまってます。長くなりますので続きはまた明日。

KOSEI

コンピュータ学習/プログラミング言語の種類<元SE独白記>

<元SE独白記>  2016/06/08

「コンピュータ、ソフトがなければただの箱」と、よくいわれます。それだけソフトウエァというのは大切なものだということですね。さて、そのシステムを構築したりその中で動くプログラムを造っていくうえで、必要なことが二つあります。ひとつは開発環境、もう一つはプログラミング言語です。開発環境とは言い換えればコンピュータメーカーの考えに依存する部分、つまり富士通のOS(オペレーティングシステム)、日立のOS、といった感じのものです。プログラミング言語とはソフトウエア部分ですね。最近では「フレームワーク」という、ハードウェに依存しないソフトウエア開発という考えがありますが、僕の現役時代は共通化の考えが浸透していなかった時代でした。でもわざわざ「フレームワーク」などといわなくても、例えばWindows OSはだいたいどこのメーカーでも同じように動きますから、ことさら「フレームワーク」などと意識しなくてもいいのではないでしょうか?

あともうひとつ、ついでに言っておくと、「ファームウエア」というハードウエとソフトウエアの中間みたいなものがあります。これは電子機器に組み込んで、ハードウェアを制御するためのソフトウェアのことで、ソフトウェアをROM等のLSIなどに書き込んだ状態で、機器に組み込んだもの。ゲーム機やロボットなんかも一種のファームウエアでしょうね。

*ROM:Read Only Memory=読み込み専用のメモリー、書き込めません。

LSI:Large-Scale Integration=大規模集積回路

今日はプログラミング言語にスポットを当てて説明していきます。その種類たるや色々と書き出していくと、結構な数になりますので、今まで僕が現場で経験した言語にのみ限定して説明していきます。順番は時系列です。

アセンブリー言語(機械語とも):これはコンピュータが読み取れる「0」と「1」の並びより一歩人間側に近づいた言語です。僕はワンボードマイコンでこの機械語を打ち込んで練習していました。CPUとしては次のものが有名です。

Zilog Z80  これはZilog社のCPUの名前ですが、「ザイログ ゼットはちまる」あるいは「ザイログ ジーエイティー」と呼びます。そしてこのZ80に固有の命令セットが用意されています。これは以前(今もかな?)ロシアのスカッドミサイルに採用されていたそうで、機械の制御に適している言語です。このスカッドミサイルはいまは北朝鮮も採用しているようですが、誤差が大きいそうです!また軍事分野以外でも工場のロボットなんかはこの「Z80」で書かれていると思います。ではZ80の命令セットとはどんなものかというと、たとえば「LD A,(BC)」と書くとBCレジスターの内容をAレジスターにコピーしろ!という命令文になります。

またZ80の特徴としては可能な算術演算は加算と減算のみです。CPUの機能には乗算や除算の演算はないのです。そこを何とかしていくのがプログラマーの仕事というところですね。例えば2倍するには、シフト命令というのがあるのですがそれを使います。具体的には次のようになります。

00000010=2を表わします。それを1ビット左にシフト(ずらす)します。すると、

00000100=4となります。

これは2進数の数字の表わし方を勉強してからのほうがいいですね。

8ビット(つまり1バイトです)の並びで説明します。

1桁目=00000001(一番右)=数字の1

2桁目=00000010=数字の2

3桁目=00000100=数字の4

4桁目=00001000=数字の8

5桁目=00010000=数字の16

6桁目=00100000=数字の32

7桁目=01000000=数字の64

8桁目=10000000=数字の128

となりますから、8ビットがすべて1だった場合は11111111となり、数字の値は255になります。1+2+4+8+16+32+64+128=255となります。2を4倍するには左に2回ずらせばよろしい。またこのようにZ80は8ビットCPUなので、基本的なデータの単位は8ビットがよく使われます。一回の演算処理の大きさというか幅のことをバンダリーとかいういいかたもします。今で言う32ビットマシーンとか64ビットマシーンとかいうアレです。Z80は8ビットマシーンですね。

このアセンブリー言語は機械語といわれているだけあって、後々出てくるCOBOLFORTRANC言語などと比べるとより原始的な言語といえるでしょう。しかし高級言語であっても最終的には「0」と「1」に翻訳されて、コンピュータの中ではこういう処理が行われているのです。

KOSEI

 

 

 

コンピュータ学習/初歩<元SE独白記>

元SE独白記  2016/06/07

どの道にも「初歩」で学ぶべきことがあります。コンピュータ・プログラミングの世界での初歩のひとつは2進数でしょう。でもこれはなるべく早くプログラミングができるようにさせるスクールでは、時間がかかるので省略しているかも知れませんね。

2進数とは「0」と「1」だけの世界です。では何をもって「1」としているかというと、電圧です。コンピュータ内では「スレッショールド(閾-しきい-)レベル」という電圧値が設定されており、ある回路にこの値より高い電圧が流れれば「1」として、この値より低い電圧が流れれば「0」とします。この「高い電圧」と「低い電圧」の組み合わせがコンピュータが理解できる言葉なのです。

つまり人間は日常で10進数を使って生活していますが、コンピュータの世界には10進数という面倒なものは存在しないのです。すべては「1」と「0」で済ませてしまいます。実に簡単でいいですね、といいたいところなのですが、これはそのまま見ても何が書いてあるやらまったく人間にはわかりません。もちろん対応表を片手に解読はできます。

*ちなみに僕が現役のSEの頃はシステムエラーでプログラムが落ちた(停止した)場合は、コンピュータの中の記憶領域から膨大な量のリストを吐き出し(これをダンプリストといいます)て流れを追いかけていくのですが、そのリストはコンピュータ君が実際に見ていたものなので、すべて2進数です。厚さは5cmほどにもなる分厚いリストです(いやになります)。プログラムのどこの部分に問題があるのかを追いかけていくのですが、人一倍の根気と忍耐力と体力と知力が必要ですが、まあ大体は徹夜作業です。下手をすると徹夜でも終わりません。

さて「0」と「1」だけではわかりにくいので、人間がそれを見るときは2進数を10進数や16進数に変換して読みます。じつはダンプリストの解析も16進数に変換して進めていくのです。では2進数では数字や文字をどのようにして表わしているのか、ということですが、これを書き出すと長いので次の機会に書きます。

僕のコンピュータ学習歴ですが、僕は中学のころから「ワンボードマイコン」と呼ばれていたものを買って「機械語」と呼ばれるプログラミング言語を勉強していました。僕が持っていた「ワンボードマイコン」は日本電気NEC)のTK-80という機種でした。といってもこれが主流でしたね、あの頃は・・・。懐かしい限りです。TK-80画像↓

 

Wikipediaには「TK-80(Training Kit microCOM80)とは日本電気NEC)の半導体事業部が1976年8月3日に発売したマイクロコンピュータマイコンシステム開発のためのトレーニングキット」とありますから、まさにプログラミングのトレーニングにはピッタリだったわけです。またプログラミングだけでなく、コンピュータの基本的な構造もすべて見て学べるといった、優れモノでした。でも僕は好きで趣味半分で遊んでいたわけですが、将来プログラマーへの道を進む時に役立つとは、そのときは夢にも思わなかったものです。

それにしても、機械語のプログラミングをしたデータをこのTK-80にロードして右下にあるキーのたしか「RUN」と書いてあるキーだったと思いますが、そのキーを押すと、結果が右上のLEDに表示されるのです。最初はごく簡単な足し算プログラムを書いて実行しましたが、瞬時にして結果が表示されたときの、あのよろこび!快感!感動!今でもその感覚がありありと蘇ってきます!

ここで言っている「機械語」とは二進数の言葉より一歩人間に近づいた16進数で書かれたプログラミング言語です。今後時間を見て簡単にご紹介します。

KOSEI

 

 

 

コンピュータ学習とは?<元SE独白記>

元SE独白記  2016/06/06

ここしばらくビデオブログが続きましたが、今日はコンピュータの話題をお話したいと思います。この話題はビデオブログだと却ってわかりにくいので、今日は文章です。

さて僕は以前コンピュータ・システムズ・エンジニアの仕事に携わっていました。あの仕事はストレスが大きいので神経をやられますし、お酒の量も増えます、なので内臓を壊す人が多くて、内科医院で同じ会社の人間がバッタリという例も珍しくないのです。

最近ビジネスマンならコンピュータのことを、プログラミングのこともマスターしておかないと、といわれているそうですね。確かに家電並みに扱いやすくなっているし、価格も下がっています。なので、プログラミングマスターコースが結構盛んに開催されているとのこと。きっと受講者も多いのでしょう。しかしどうせコンピュータのことを学ぶなら「PG(プログラマーあるいはプログラミング)」は導入部で、ゆくゆくは「SE(システムズエンジニア)」を目指してほしいですね。なぜかというと、全体の構造が解ってないと部品であるプログラムを作るときにいい仕事ができないのです。もちろんプログラミング技術だけを学んでもいいのですが、コンピュータ・システム全体を理解できてないと応用が利かなくて、それを武器に世界中に出ることは難しいのです。あるいは全体のシステムに合った適格なソフトウエアを作成することができないのです。上位の人から言われたとおりの物を作る、内職仕事になってしまうのです。もちろん、その人が目標をどこに置くかはその人次第ですからなんとも言えませんけど。

たとえば、大きなシステムを開発するときは、そのシステム全体を把握している人がいる。そしてその人が指令を出して細かい部分を作り込んでいく。この構図は自分だけで小さなシステムをつくりあげていく時も同じです。人体をコントロールしているのは「脳」です。脳が指令を出しています。脳の中にも更に高度な存在がいて脳の各部分を制御しているわけですね。コンピュータは人間の脳が作り出した「偽脳」だから、人間が考えるものは人間の中にあるモノ以上のものにはならないのです。だからコンピュータシステムの内部もそうなっています。全体に目を光らせている人がいる(もちろんソフトウエア)。この人(ソフトウエア)のことを「アドミニストレーター」と呼んでいます。このソフトが指令を出している「大ボス」ですね。

よく人間の世界で「神話」というものは人間の心の奥底にあるものであって、太古の昔実在していた世界、神と人間が共存していた世界だという説もあります。これはサイエンス・フィクションのような話になってしまいますが、もしコンピュータの中の世界が独立した世界であってそれらが社会を営んでいるとしたら・・・、と考えると面白くなってきますね。その世界では神話がある。その神話の中でそのシステムを造った人間の名前が「神」として言い伝えられている「日本という神の国には”青柳神”という神がいて、ある日この世界を創造した。」コーヒーをコンピュータにこぼそうものならタイヘン!「神は我々の信仰がうすくなってきたので、黒い水で大洪水を起こされた!」とかいう話になります。僕は時々パソコンのソフトの動きが遅い時などに、PCを叩くんですね。そんなときはコンピュータの世界では「大地震」が起きているかもしれません。

そういうような空想の世界に浸っていると時間の経つのを忘れてしまいます。

KOSEI

*じつは僕は「ビジネス」という言葉を毛嫌いしていて「世界を変える」という表現が好きです。自分で「世界を変えていこう」とした場合に、いまやプログラミング技術は必須事項になっているのですね。

 

ビデオ・ブログ中国語練習風景(中級)

中国語練習風景

今日もビデオブログです。

よく考えてみたら、ビデオは音声が出ますからその強みを目いっぱい発揮できるのが語学の勉強風景ですね!

http://www.youtube.com/watch?v=MUtN4UVStbU

今僕が使っているテキスト本は、株式会社アルクの出している、

「真剣に学び続ける人の 中国語教法」という本です。

僕の使っているのは中級編ですが、初級編もあります。この本はお勧めです。

KOSEI