はてなキーワード: 高級言語とは
自分は不器用なせいかグラフの手書きが致命的に遅かったので、2年前期の実験で危機感を感じた自分は2年の夏休み中にpythonを覚え、今まで苦労していたグラフのプロットなどをパソコン上で全部自動化しようと考えた。日本語の情報が少ないため(あっても多少古かったりすることが多かった)、情報をかき集めるのに相当苦労したが、夏休みが終わるころにはjupyter notebook(名前通りノートブックのような実行環境でセルごとにコードを実行するという形をとっている)上で統計処理をしたりそのデータを基にグラフをプロットするのはある程度できるようになっていた。
早速2年後期の実験でpythonを試してみたが、その威力は凄まじく、今まで時間のかかっていた作業が劇的に効率化した。pythonのモジュールであるpandas,numpyを使えばデータ列を文字式のように扱えるので(例えば実験データをdataとして、そのデータをすべてcos関数に代入したかったらnumpy.cos(data)と書けばよい、Excelと似たようなものだがこちらは変数として扱っているので使いまわしが容易である)、Excelでちまちま関数をセルに入力して列全体に引き伸ばすという操作もしなくていい。グラフもコマンドで出力するので当然だが今まで苦労していた手書きのプロット作業はなくなった。GUIありきのExcelと違ってコードひとつでグラフの罫線の調整などもかなり簡単にできる。高級言語だけあってコードは組みやすく、実験中に即興でプログラムを組むことも割りとできる。しかもコードさえ組んでしまえばあとは実行するだけで計算、グラフの描画を一気にやってくれるので、実験結果の確認が極めて素早く行えるようになった。しかもjupyter notebookはmarkdown形式の文章を埋め込めてメモ書きも残せるし、mathjaxに対応しているのでlatex形式の数式も途中に挟むことが出来る。最高の環境だと思った。しかし良いことばかりではなかった。
パソコンで全部やろうとする自分を見た一部のTAはなぜか自分にグラフを手書きにしろと要求してきた。自分は反論した。「グラフならパソコンですでに出力できているのになぜわざわざ手書きにする必要があるのか?」これに対するTAの答えはだいたい「平等性を保つため」、「他のみんなは手書きでやっている」、「理解を深めるため」、「他学科は手書き必須だから」というような感じである。自分にとっては、これらすべてが理解できなかった。そもそも手書きにすることによって実験に対する理解がどう深まるというのか?自分はむしろ手書きを徹底的に排除することによって、煩雑な作業をする時間を考える時間に充てた。そのおかげで実験に対する理解は以前と比べ物にならないくらいに深まった。手書きじゃなければ理解が深まらない理由はない。そもそもパソコンのほうが厳密にコードを組まなければならない分だけ理解力を要求されるはずである。「理解を深めるため」といっている本人だって結局その言葉の意味もわからず言っているにすぎない。
「平等性」に関しては全く別のTAから複数回言われた。「パソコンを使って効率化しようとするのはずるい」と言いたいのか、このTAは?pythonだって1ヶ月間死に物狂いで情報をかき集めて覚えたのに、それのどこがずるいというのだろう。平等性を掲げて効率化を否定し、全員に同じ作業を強要させ、「成績」をちらつかせて脅すのはずるくないのか?みんな一緒に抑圧されましょうということか?これを言われたときに感じた何とも言えない吐き気のようなものは今でもうっすらとだが覚えている。正直なところ、プログラミングが出来るというだけでむしろ褒められると思ったのだ。パソコンが使いこなせるほうが印象はいいに決まってると思っていたのも、結局は自分の勘違いだった。
pythonを使い始めてからの2年後期、3年前期を通して4,5回ぐらいTA(全員別の人)に「手書きにしろ」と言われたが、言われるたびに反論するのもいい加減に疲れてきた。なぜ手書きにする必要があるのか、自分は聞かれるたびにこう聞き返した。まともな答えを返したTAは一人もいなかった。大学の先生が担当する実験でPCは駄目なんて言われたことは一度もなかったし、どうもTAが勝手に「手書きにしろ」と言っているだけらしい。「他学科がパソコン禁止だから」とかいう非論理的なルールを鵜呑みにしてそれを適用しようとする姿勢にも無性に腹が立った。
TAがいうには手書きはコピペ防止の意味もあるらしい。本当に手書きにしたらコピペが減るのか?パソコンにしたらコピペが増えるというが、それは果たして本当に「増えた」のだろうか?確かにコピペするのは手書きと違って簡単だが、コピペするやつは手書きだろうがパソコンだろうがコピペする。そもそも自分の頭で文章を書く能力がないからコピペするのであって、パソコンを制限したからコピペがなくなるという理屈はおかしい。そんなにコピペが嫌だったらむしろ最初からコピペをチェックしやすい電子データに限ってしまえばいいと思う。パソコン有りにしてコピペが増えたというのは、手書きレポートでは見逃していた分のコピペがばれて、それで数が増えたように見えたという可能性もある。むしろパソコンだからこそコピペを見破れるのではないだろうか?
自分は、手書きは不正の温床ぐらいに思っている。手書きの場合見かけ上はコピペしたことがばれにくいし、グラフもそれっぽく適当に書いても適当にプロットしたことはほぼばれないし、そもそもアナログデータは機械の検閲にかけにくいためどの程度コピペなのかを判定する労力だって膨大過ぎる(別のTAに話を聞いたところ、採点する側から言わせるとコピペしたこと自体は結構分かるものらしい)。手書きを強制するということは、すなわち不正をごまかす余地を与えているに過ぎない。本気でコピペをなくそうとするならば、いっそのことすべて電子化してしまったほうがよいとすら思う。
pythonを使い始めてから1年経ち、「手書きにしてください」と言われるたびに反論していったが、元々自己主張の弱い引っ込み思案なタイプのために、自己主張してちゃんと言い返すというのは精神的な負担が大きかった。「パソコンではなぜ駄目なのか」を強く主張するたび、ものすごく疲れがたまってしまい、実験がない日でも「なぜこんな当たり前のことをわざわざ言わなければならないんだろう」と思い返してしまうせいでどんどんやる気を無くしていった。
なぜ大学の一部にはパソコンを使わせたがらない空気があるのだろう。この人たちは、手書きが苦手な自分にとっての最後の砦すら壊すつもりなのだろうか。なぜ手書きにこだわるのだろうか。
第一に、発端となった元ツイートには「非エンジニア新卒女子」とはっきり書いてあるのに
《旧式言語を学ばずに関数型言語一本槍でエキスパートを目指すような感じの方》
《「まず軽く触れてみよう」とか「趣味でやってみるか」といった程度ならいいのですが》
《実際には肝心なことを何も知らないのに、なんか知っていると思い込んでいる状態が、私いわく「脳味噌膿んでる」》
ひどい書きっぷりだよね。
もし自分が当事者だったら「見ず知らずの人になんでここまで言われなきゃいけないの」と傷つくと思う。
第二に、下位層のレイヤーについて知っていなければ上位層のことをちゃんとやる資格がない
という態度が明らかに本人のダブルスタンダードっぷりを示している点
と言いたいのだと思うけど、最近のCPUはマシン語に書かれていある命令をそのまま実行しない。
インテルの場合もCISCの命令セットで記述されたコードをRISC的なマイクロコードに分解・解釈して実行する。
さらに内部はパイプライン化されているため、単純に「1命令ずつ逐次実行」されてもいない。
外側から観察するとあたかもマシン語の命令列をひとつずつ逐次実行しているかのように振る舞っているだけだ。
マシン語のコードで記述されたプログラムが、命令通り入力と出力を繰り返すなら、内部でどのような先読みや予測分岐を繰り返していても問題ない?マシン語の忠実な実行装置とみなしてよい?もちろん回路の設計ミスで誤動作するかも知れないけど、それがプログラマの「根本的な過ち」になる?
OCamlの世界で記述されているロジックが、OCamlの仕様通りにちゃんと動作すれば、その下位層にあるマシン語がどういうパラダイムで記述されていても関係ないと考えていいと俺は思う。
余談1
くだんの女子について、周辺のツイートを見てみると(完全に部外者の憶測だけど)Railsを主力とするソフトウェア企業に非エンジニアとして新卒で入社した新人がプログラミングに興味を持ったのに対して上司がOCamlの本を教科書として渡したのでそれを学んでプログラミング考え方を身につけた。その後Railsについても学んでみようとしたが、考え方のギャップに強い違和感を覚えた。…という経緯みたいだ。
余談2
https://twitter.com/camloeba/status/611051620877537281
https://twitter.com/sessoh/status/611052396161183744
このやりとり、拙僧さんが「肝心なこと」と思ってることを卯之助さんは「重要でない」と言ってるんじゃないですかね。
二種類のレイヤが混ざってる。あと、スクリプト言語のレイヤは要らない。例は突っ込みどころが多すぎるので触れない。
コンピュータ上で動作するもの全て、システム周りの低レベルプログラムを含めてアプリケーションとして括るのはちょっと乱暴。
OSを書いてる人間から見ればユーザープロセスは全部アプリケーションだし、twitterから見たらAPIを叩くものは全てアプリケーションだろう。
基本的には外から持ってきたソフトウェア基盤の上に作るものを総称してアプリケーションと呼ぶのがより実態に近いと思う。
だいたい合ってる。ただ、高級言語より上にあるのは変。スクリプト言語は高級言語に含まれる。
だいたい合ってるが、自然言語云々は余計。例えばS式は自然言語のアナロジーではない。単に比較問題で抽象度が高いかどうかだけの区別でしかない。
OS云々は関係ない。OSもミドルウェアやライブラリーは使う。一般には自分が書いてないソフトウェア・コードをライブラリと呼び、何かと比較してより低いレイヤにあるライブラリをミドルウェアと呼ぶ。
問題ない
ここが一番まずい。まず、中間コードはコンパイラが内部的に処理の段階を分ける仕組みであって、出力ではない。
また、インタプリタはソース言語を逐次実行するのではなく、正確には中間コード(抽象構文木そのもを含む)を逐次実行するものだ。
他のプログラムで実行するコードを生成するものがコンパイラ、自分自身でコードを実行するのがインタプリタ、という区分けがわかりやすいと思う。
ただ、現実的にはインタプリタは内部的にコンパイラを持つし、コンパイラも最適化の過程では内部的にインタプリタを使う。
昨今はLLVMみたいに、コンパイラなのかインタプリタなのかコンテキストによって変わるものもあるので、正直区別しても意味がないと思うけど。
このお話はたぶんフィクションです。実在の個人や企業とはあんまり関係ありません。そういうことにしろください。
10年前、20代になったばかりの頃の僕は、今思えば本当に最低な生活を送っていた。高校を中退し、実家とは疎遠で、友達もなく、金もなく、夢も希望もなく、ただバイト先と自宅を行き来するだけの毎日。いつも視界には霞がかかったようで、底の見えない空虚さだけが僕の心を支配していた。
それでも趣味らしいものはあった。オンボロマシンにRedHatを入れ、ダイヤルアップの細い回線で自宅サーバを立て、Perlでガラクタのようなプログラムを動かす。そんな子供じみた遊びだけど、プログラムを組んでいるときだけは空虚さを忘れ、画面の中に没頭できた。
ただ、そのときの僕はもうすでにいろんなものに打ちのめされていて、若者にありがちな全能感などというものは霧散していた。自分がプログラミングで何かを成すだとか、それを仕事にしようなんてことは一切頭になかった。このまま夢も希望もなく人生を終えるのだと、そう思っていた。
それでも転機は訪れる。
勤めていた工場で派遣切りにあった僕は、「働きたくないでござる! 絶対に働きたくないでござる!」とか言いながらニート生活をしていた。そろそろ翌月の家賃も払えなくなってきたころ、派遣会社から電話がかかってきた。「プログラム開発の仕事があるんですがやりませんか?」と。そういや履歴書だかスキルシートだかに、Perlがどうたらとか書いたっけ。実務経験もない中卒に仕事まわすとかwww ……とは思ったものの、このままでは本気でホームレス一直線だったので引き受けた。
派遣された先は従業員数10人くらい、パートさん含めても50人くらいの小さな会社だった。現在手書きの伝票でやっている処理をWeb化したいのだという。システム担当者はおらず、事務員さんがExcelやAccessを使える程度。すべて僕一人でやらなければならない。マジか。
ともあれ、まずはサーバである。後々の運用を考えるとLinux系は使えない。事務所の片隅に放置されていたWindows 2000マシンにApacheを入れてそれでよしとした。
次はデータベース。でもこの頃の僕は「正規化ってなんれすか?」というレベルだったので基礎から勉強した。なんかMySQLってのがいいらしい→社長に申請→「今Access使ってるからそれでいけ」→「はい」→パフォーマンスの面で問題出るだろうなとは思ったがしょうがない。
次は言語。最初はPerlで書こうと思ってたけど、PHPってのが流行ってるらしいのでこっちにした。ウホッ! いい言語……。
そして業務内容を把握するため、現場をあっちこっち駆けずり回りながらヒアリングする。ときには部長から愚痴を聞かされ、ときにはパートのおばちゃんから誘惑され、そんなこんなを繰り返し、仕様をつめていく。
そして数ヶ月かけて開発したシステムの稼働である。そのときのことは今でも忘れない。
現場の人がラインからデータを入力する。サーバにデータが送られてくる。別の事業所からも送信されてきてる。問題ない。事務員さんが伝票処理を行う。問題ない。すげえ、ちゃんと動いてる。お遊びで作ったプログラムではなく、本当に本気の業務用プログラムである。それを僕が1人で作ったのだ。このプログラムで業務がまわり、利益を生み出すのだ。社会に対して、何らかの作用を及ぼすのだ。僕みたいなクズにでも、そんなことが可能だったのだ。
そのことに気付いたときの感動を、僕は今でも忘れない。
それからちょっといろいろあって、ホームレスになった。うん、急展開なのはわかってる。でもこの間のことは語ってもあまり面白くないし、公序良俗に反する話もあるのでざっくりはしょる。どうせフィションなんだから細かいことを気にしてはいけない。
話を戻そう。
ホームレスになってからの数日はひどい精神状態だった。足元から世界が崩れていく感覚。視界がぐにゃりと歪む。帰りたい。でも帰る家がない。だからホームレスというのか……というトートロジーを何度繰り返しただろうか。
もうあまり覚えていないけど、このときの僕は本当にもう何もかもどうでもよくなってたと思う。ただ、自分の全財産がバッグ1つしかないということに対する心地よさ、開放感があったのはよく覚えてる。そんな状況で地べたに座り込んで見る風景。きっと、今はもう見えない。あの頃の僕にしか見えない風景が、そこにはあった。
いろんな人と出会い、流れ流れて、最終的に西成のあいりん地区にたどり着いた。関西圏の人には説明不要かもしれないけど、よく言えば日雇い労働者の街、ぶっちゃけて言えばホームレスのメッカである。今はもう綺麗になってしまったし、治安もそこそこよくなったけど、僕がいた頃はまさに「カオス」としか表現のしようがない状況だった。
どこから持ってきたんだといいたくなるようなガラクタばかりを並べた泥棒市。簡素な骨組みにビニールシートをかぶせただけの飲み屋。「ないかーないかー」と声が聞こえてきたので見てみると、警察署の近くなのに道端で堂々と丁半博打をやっている。コンビニのトイレの張り紙には「トイレが詰まる原因になるので注射器を捨てないでください」とある。いやトイレが詰まるとかの前に気にすることがあるだろ。ケンカなんて日常茶飯事。頭から血を流したおっさんが普通に歩いてる。数百人規模で並ぶ三角公園の炊き出しは圧巻。四角公園の炊き出しでは誰もいない場所にワンカップの瓶とかがたくさん並んでる。何かと思って聞いてみたら「あれで並んどることになってん」と返ってくる。学食の席取りルールみたいだ。ああもう全然書ききれない。
でも一番印象に残っているのは、南海線の高架下、うず高く積まれたゴミ山の前でガラクタを解体していたおっちゃんのこと。奇声を発しながらハンマーを振り下ろしていたおっちゃん。その両目は、これ以上ないほどにキラキラと輝いていた。その鉄屑を売った金でビールが何本買えるか皮算用でもしているのか、あるいは幸せになる魔法の薬でもキメているのか、そのときの僕にはわからなかったけど。
そして、人生を投げ出していた僕に付き合ってくれたおっちゃん、あなたのことも忘れません。モーニングをおごってくれて、いろんな話をしてくれて、聞いてくれて、役所の福祉課まで連れて行ってくれたおっちゃん。あなたがいなければ、僕は今でも西成でぬるま湯の日々を送っていたかもしれない。
いろんな人に助けられて、ホームレスの施設に入ることになった。舞洲という人工島にあるのだけど、これがまた周囲に何もないのだ。スポーツ関連施設、ゴミ処理場、物流センターが点在するくらい。コンビニ1件ありゃしない。だけど施設での生活は意外にも楽しかった。2段ベッドが6つ並んだ12人部屋。むさくるしいけど、みんなバラエティに富んでいた。刑務所上がりのいかついおっちゃん、虚言癖のひどいおっちゃん、ほとんど一日中寝てるじいちゃん、薬のフラッシュバックがひどい兄ちゃん。そんな人達の中で過ごせば、自分がどれほどクズであっても気にならない。やはり僕はこちら側の人間だと再認識した。
市街地にある施設へ移ってからはいろんな仕事をした。生駒の山奥にドブさらいに行ったり、事務所移転のバイトで腰をやってしまいそうになったり、なんやかんやあったけど、長くなるのではしょろう。結局のところ、またプログラマをすることになるのである。
そろそろ身バレしそうな領域に入ってきたのでここでもう一度強調する。このお話はたぶんフィクションです! たぶんフィクションです! 大事なことなので2回言いました。
そう、またプログラマとして働くことになった。今度は従業員数300人くらいの大きな会社である。日本人なら誰でも知ってるであろう大企業の子会社ということもあり、本社からの出向社員は東大京大卒当たり前みたいな状況。そんな人達の前で中卒の僕が前に座ってプレゼンやら仕様検討会やらをするのだ。何の罰ゲームだよ……。
最初に思ったのは、「ここにいる人達は育ちがいい」ということだった。みんな礼儀正しい。喋り方や立ち居振る舞いまで、今まで僕がいた世界とは何もかもが違っていた。まるでドラマに出てくるような「ちゃんとした人生を送っている人達」だ。そんな人達に囲まれていると、「生きていてごめんなさい」と言いたくなる。本当に。
他に驚いたこと。社内で連絡を取り合うのにメール使ってる。やばい。社内メーリングリストとかもある。やばい。定期的にミーティングとか勉強会とかもする。なにそれ怖い。自分がいっぱしの社会人になったかのような錯覚に陥る。ちょっと前まで西成でゴミ拾いのバイトしてたのに。「勘違いするんじゃない! 西成の日々を思い出せ!」と何度も自分に言い聞かせ、自我を保った。
とはいえ、萎縮してばかりもいられない。気付いたことはどんどん提案した。あちこちに散らばっている共通の処理をライブラリ化したり、サーバで負荷がかかっている部分を改善したり。却下されたものも多かったけど、採用されたものもそれなりにあった。業務の改善案を考えるのは楽しい。誰かがプログラマの三大美徳に「無精」を上げていたっけ。極度のめんどくさがりで、楽をするための苦労は惜しまない僕には、こういう仕事は天職なのかもしれない。
システム開発の方も順調に進んでいた。この頃はMicrosoftですらWeb版のOfficeを出すような状況で、デスクトップアプリに比べても遜色ないレベルのWebアプリがどんどん出てきていた。この会社で開発しているのも、そんなAjax技術を多用したWebアプリだ。JavaScriptを用いた本格的な開発に最初はとまどったけど、書けば書くほど言語が自分の手に馴染んだ。クロージャ、prototypeといった基礎をちゃんと学ぶと、書けるコードのレベルが段違いに上がっていくのが楽しかった。
仕様にもこだわった。実際に使う人がどんなふうに操作するのか、何度も何度も脳内でシミュレートし、どんなUIが最適なのか、データ構造はどうするべきか考え、実行速度とメンテナンス性の板挟みに苦しみ、何度も何度もリファクタリングを繰り返す。
そのとき開発していたシステムは、メイン画面でほとんどの処理を行うタイプのものだったのだけど、そのメイン画面のJavaScriptコードは最終的に1万行を超えた。もうこの頃にはJavaScriptでのオブジェクト指向的な開発手法というものも自分なりに構築されつつあった。そしてこのカチャカチャとした手触りの、安物のオモチャのような言語は、僕の一番好きな言語になったのだった。
そんなある日、僕が作ったシステムのメインユーザーである他部署の偉い人が来て、開口一番こう言った。
この機能が素晴らしい、とか、あの発想はなかったわ、とか、とにかくべた褒めして、そして去っていった。機能追加要望の前口上だと思って身構えていた僕は拍子抜けした。「あの人が他人を褒めることなんてめったにないよ、すごいね」と近くの席の人が言う。
どこにもはまることのない歪な歯車。その僕が、社会という大きな機械の中に組み込まれる音だったのだと思う。まあすぐに外れてしまうのだけど。その一瞬だけは、僕は確かに社会の一部になれたのだ。
これからどうするか? 今の技術力ならそれなりのところに就職できるかもしれない。でも僕にはやってみたいことがあった。半年かけて海外を旅するのだ。
今、僕の手元にはまとまったお金がある。こんなのは人生で初めてのことだ。そして僕は今、どこにも所属していない。どんなところに行ったっていいし、何をしたっていい。この先、そんな状況がどれだけあるだろうか? 人生長いのだ、そりゃあ何度だってあるかもしれない。でも今回やりたいことをやらなかったのなら、僕はきっと何度だってやらずにいるままだろう。
もちろん怖くなかったわけじゃない。なにせ海外なんて行ったことがなかったのだ。ずっと極貧の生活をしてきた僕は、国内旅行だって満足にしたことがない。
いろいろと考えた。ない頭を使って考えた。自分の英語は通じる? 病気になったときは? 荷物をなくしたら? あれこれ考えると心配事ばかりが頭をめぐって、わけがわからなくなる。
最終的に決定打になったのは、自分が何も持っていないという、この状況だった。
そう、僕は何も持っていない。家族も友達も、夢も希望も。だけど、そんな人間だからこそできることがあるんじゃないかと思ったのだ。何も持たないからこそ、どこにだって行けるし、何にだってなれる。それはタロットカードの「愚者」みたいなものだ。愚かな者は恐れも何も知らぬからこそ、無限の可能性を秘めている。
心を決めたら後は早かった。
パスポートを取得した。航空券を手配した。住民票を海外転出した。トランクルームを借りた。住んでいた部屋を引き払った。
空港へ向かう電車の中で、懐かしい感覚に襲われた。あの日、ホームレスになったばかりのころの感覚。世界が足元から崩れていく感覚。でもあのときとは決定的に違うことがあった。それは、今回は自分が望んでこうなったのだということ。流されるまま生きてきた僕が、初めて自分の人生に対して主導権を得た。それだけが決定的に違っていた。それだけで十分だった。足の震えは、これからの旅路への、期待に対する震えなのだった。
自分とは異なる人種、異なる言語。街の看板すらまともに読めない。レストランの注文すらおぼつかない。ちょっと電車に乗るのも大仕事だ。それでも時間をかけてひとつひとつなんとかしていった。
見知らぬ街の匂い、喧騒、バケツをひっくり返したようなスコール、旅の中で出会う怪しい人、優しい人。僕の前でたくさんの風景が流れていく。
川辺のレストランで昼ご飯を食べた後ボケーッとしていると、猫が膝の上に乗ってくる。動くのもめんどくさくてボケーッとしてたら日が暮れてた。そのまま猫と一緒に晩ご飯を食べた。そんな日もあった。
長距離列車に乗っていたとき、車内食にピーナッツバターのようなものが付いていたので、普通にパンに塗って食べた。でも梅干的なものだったらしく、めちゃくちゃ酸っぱかった。「すっぱ! すっぱ!」とかやってたら向かいの席の女の子が爆笑していた。僕も笑った。そんな日もあった。
最初は少し移動するのにも大変な思いをした。でもいつの間にか、ローカルバスに乗って気ままに旅するようになっていた。
たどたどしかった英語も、日常会話程度なら普通に喋れるようになっていた。
いろんな国のバックパッカーにもたくさん出会った。お互いつたない英語でやりとりするのも楽しかった。今度は彼らの国にも行ってみよう。だからいつか世界一周に出ようと、僕は心に決めた。
こんな旅に出たところで自分は何一つ変わらないと思ってた。でも、何かが変わってきている。それが何なのかはわからない。たとえば図太さだったり、適当さだったり、そういうのもあるのだけど、何か違う。それよりもっとプリミティブなもの。感情になる前の感情、行動になる前の行動。マグマのような熱量を持ったドロドロとしたものが、自分の中に渦巻いているのを感じる。それがいつ形を成すのかはわからない、今はまだ。だけどいつかどこかで、忘れた頃にひょっこり出てくるんじゃないかと思う。そのときを楽しみにしていよう。
そして夢のような日々は終わる。
日本に帰ってきたとき、手持ちの金は10万以下だった。部屋は解約していたので住むところもなかった。普通にホームレスだった。僕は焦らず慌てず、西成へ向かった。
しばらくはドヤ(安宿)に泊まった。一番安いところなら500円から泊まれる。西成はいいところだ。
前の会社から戻ってこないかと誘われたけど、「働きたくないでござる! 絶対に働きたくないでござる!」と言って断った。
いや働きたくなかったのは本当だけど、もう1つ理由があった。職業訓練で組み込み系を学ぼうと思っていたのだ。
スマートフォン含むタブレット端末の市場がこれからも拡大していくのは間違いない。そうすると必要になってくるのは組み込み系の知識。いやアプリ作るだけなら必要ないかもしれないが、そういった知識があれば、自分ができることの幅がぐんと広がると思う。
それに、今の僕には基礎的な力が圧倒的に足りない。すべてを独学で、我流でやってきたけど、やはり限界を感じる場面が多々あった。だから今回ちゃんと体系的に学んで、足元を固めようと思ったのだ。
結果的には正解だったと思う。本当に基礎の基礎から学べた。
ブレッドボードを用いて回路を組むところから始まって、アセンブラ、C言語、組み込みLinuxでのデバイスドライバ開発、アプリ開発。これまで高級言語の十分に進化しきった部分にしか触れてこなかった僕にとっては、どれも難しかったけど、どれも面白かった。これからどういう道に進むかまだわからないけど、ここで学んだことは絶対に無駄にならないと思う。
そうして職訓で勉強するかたわら、悶々と考えていたことがある。世界一周についてだ。
今はまだ金もないし、そんな金を稼げるあてもないのだけど、いつか(たぶん10年後くらいには)行こうと本気で思っている。
ルートだけでも今から考えておこうと思って、いろいろと旅程検討アプリを試してみたのだけど、どれもいまいち使い勝手が悪い。海外のものも含めて探しまくったけど、自分が思うようなものは見つからなかった。
だったらもう自分で作るしかない。せっかくだから就活のときにポートフォリオとして使えるよう、ちゃんとしたWebアプリを作ることにした。
最初の1ヶ月は地図APIの選定と、検証コードを書き捨てるだけで終わった。
2ヶ月目は基礎部分の構築だけで終わった。
3ヶ月目に本気を出し、ほぼできあがった。
そしてベータ版をリリースした。 http://planetter.com/
それが先週の話。
だからこのお話はここで終わりだ。正確に言うなら、ここから先の展開はまだわからない。
10年間を振り返ってみて思う。あの頃と比べて、何か変わっただろうか?
家族や親類とは縁が切れたままだし、いまだに人付き合いは苦手だし、金はないし、夢も希望もない。それは今でも変わらない。ただ、あの頃あれほど感じていた空虚さは、跡形もなく消えている。
西成の高架下で見た光景を思い出す。ガラクタを解体していたおっちゃん。あのキラキラした目。たぶんあの瞬間に僕は、自分にとって一番大切なものは何なのか、心の深い部分で理解したんだと思う。
世界一周だなんだというのも本当はどうでもいい。僕はただ、いつだってドキドキしていたいのだ。
初めて人を好きになったときの気持ち。知らない街で暮らし始めたときの気持ち。そして、プログラムが思い通りに動いたときの気持ち。
それを持ち続けていたいのだ。いつだって新しい世界にワクワクしていたいのだ。
ふと目を閉じれば、まぶたの裏に映る、あの日のメッセージ。
"Hello world!"
このお話はたぶんフィクションです。実在の個人や企業とはあんまり関係ありません。でも、ここに綴った僕の想いは、ノンフィクションです。
やさしく書かれた書物の欠点は、「自分が知らない事」の存在に気付けないことなんだよね。
ITに限らず、技術系では致命的で、そういうことを知らずに設計すると、取り返しがつかない(再設計の)場合もある。
前にちょっと増田で話題になった、高級言語なら失敗が減るって勘違いも似てる。
知ってる人間の助けになることは有っても、知らない人間を助けたりはしない。と言うよりも、そこを助けちゃいけない。
「難しいことが正しい」とは言わないし、ただ難解に書いただけの悪書も沢山ある。
その誤魔化しを「誤魔化し」だと説明していない本(判りやすいと賞賛される本)は基本、信用しないことにしてる。
「理解していない人」
そんなレベルの話を始めちゃうんだ。
それこそ、クズみたいなプロジェクトに参加してから言ってほしいものだな。
「なんでも」「適当に」できるようになってる言語が、どんな惨状を生むのか。
「理解してない人」の話をするならね。
「プロジェクトに対して完全な知識を持っている人間を想定するべきでない」くらいのつもりで言ったんだけどな。そんな底辺PG地獄の話をされても。
というか、そういうプロジェクトこそ、きちんと高級言語を使うべきだ。手の施しようのないゴミと、選り分ければ何とか食えるゴミなら、どちらもゴミだから無駄と諦めるのではなく、後者を目指すべきじゃない?
こうした言語の話ってさ、いつもいつも狂信者みたいな人とか、単に引っ掻き回すだけの人が現れて
「高級言語なら簡単なことが簡単にできる」とドヤ顔で言うんだよな。
「簡単なことを簡単に書くために、高度な言語サポートがある」といって「簡単な事では問題が起こりません」って言うんだ。
そして、メンテナンス性とかの話をしてたはずなのに、「言語がカバーしてくれる」とか言い出す。
んなわけないじゃん・・・・ドキュメントの不備ひとつで、どんな言語だろうが難攻不落の砦になったりするんだよ。
それは君が、高級言語の機能を活かした質の良いコードを見たことがないだけだと思うよ。
そうしたコードは、たとえドキュメントが皆無でも実装者の意図を推測するのは難しくないし、メンテナンス性が高く、機能追加も容易だ。
アセンブラでも設計さえ確かなら問題ない。うん、そうだね。これは単純に比較の問題だ。アセンブラで堅牢さを実現できる設計なら、高級言語を使えばさらに堅牢に作れる。したがって、特に理由がない限り、アセンブラやC言語を使う理由はない。
ましてや、常に完璧な設計をすることは不可能だ。また、「完璧」な設計は要求変更に弱い。ならば、なおさら堅牢性の低い言語を使って実装する理由はない。
こうした言語の話ってさ、いつもいつも狂信者みたいな人とか、単に引っ掻き回すだけの人が現れて
「高級言語なら簡単なことが簡単にできる」とドヤ顔で言うんだよな。
「簡単なことを簡単に書くために、高度な言語サポートがある」といって「簡単な事では問題が起こりません」って言うんだ。
そして、メンテナンス性とかの話をしてたはずなのに、「言語がカバーしてくれる」とか言い出す。
んなわけないじゃん・・・・ドキュメントの不備ひとつで、どんな言語だろうが難攻不落の砦になったりするんだよ。
トヨタのような規模の会社で、開発環境を統一・限定するのは、コストダウンとしても悪くないし、従業員はその環境で開発できればOKと言うのはあります。
こうしたツールでは、シミュレーション・テストも行えるわけで、設計上の問題点も見つけやすいですし、言語的な考え方でのアプローチとは異なる思考で作れますからね。
設計と実装を考えたときに、実装は違う工程だというのは、あながち間違いないではないですし、設計に焦点を当てるのも効果的だとは思います。
ただまぁ、大型機械などではなく、小型の機械だったりすると、リソースの関係で高級言語が使えなかったりします。
C++で書いたコードが実際に使うメモリ量とか、ぱっと計算できないですよね。
a = b ;
プログラムの高級言語(特に古典的なBASIC)は、命令が英単語そのままだったりする。
いくつかの基本的な英単語と少しの数式が分かれば、簡単なプログラムの読み書きができる(はず)。
圧倒的に、知ってなきゃいけない単語数や文法の知識量が違うから。
最近は知ってなきゃいけない命令や概念が増えてきたけれど、それでもIDEの補完機能を使えばなんとかなる。それに、文法ミスがあってもコンパイルエラーで分かるし、その間違った場所のヒントもコンパイラやIDEがくれる。
英語はそういうのも、全部自分で処理しないといけない。似ているけどニュアンスの違う単語だとか、適切な単語・文法選択だとか。そこが、そもそも知っていて、自分で即座に判断できる能力もないと使えないので苦しい。
逆に言うと日本語や英語つまり人が、人間が理解できるように使う言語であっても的確に自分の意味するところを表現するのは難しい。プログラム言語となればいわんや。
機械語は確かに単純で、高級になって人間がわかるようになるにつれ表現数が増えそのぶん確実に伝わらない可能性も増加するんだ。僕にとってCは高級すぎる。機械語ならわかるけど、っていわれて君はどう思う?
併用するのは大いにありというか積極的にやるべきだと思います。ひとつの言語だけで伝わるはずだという思い込みは危険。あと、英語や日本語というのは同階層の言語だけれども、機械に対して存在する言語として考えるときにC言語は機械語よりは高級で、さらにその上に日常会話で用いられる言語というのがより高級言語として存在するのだから、そもそもの提案のレイヤーの切り分けが間違っていると思うよ。プログラム言語と日常会話に使う言語を並列に語るのは横暴というよりは違和感がある。
プログラム言語をある程度読めてくれっつう気持ちはよーくわかるけれども。数式がそうであるように文書中にコード例を出すくらいならいいんじゃないのかねとは思ったりする。
C/C++にいくつか思うこと (ちなみに、プログラマ始めたのはCができた頃でC++よりも私のプログラマ歴の方が長い)
Cはポインタ というか、ポインタを使いこなすことで、チューニングしていく言語だから ポインタ使いたくない=チューニングしたくない
って人は他の高級言語で良いと思う。ただ、動画などの処理をC/C++又はアセンブラ以外で書く人というのは、あまり聞かないので
速度が必要=C/C++って事かと思う。
昔、全くチューニングしていない、CとJavaを比べて同じ速度だからJavaでもOKというレポートを読んだことがあるのだが、あれは酷かった。
Cはチューニングしたときに、もっとも伸びしろが大きく、必要な場合アセンブラと並記できることで、ほぼアセンブラという領域まで
チューニングできるところが魅力。その際、ポインタは無くてはならない。知っておくべき技術。
繰り返しになるけどチューニングしない人には意味がない言語と言われればその通り。
また、ポインタだけではなく、レジスタについても知っておくとCでの伸びシロが大きくなる。
そして、少なくともアセンブラレベルでのPUSH,POP,CALLは覚えておいた方がよい。
関数コールをすると、レジスタ類の待避がアセンブラレベルでは走り、その上、スタックに引数や返値を積んでジャンプするという
ものすごく遠大な処理がアセンブラレベルでは走っているが、Cレベルでは1行の関数コールに見える。
という事を理解しておくと、C++でのインライン関数の重要性や、再帰関数が実行時にはかなり重い理由が頭の中に浮かんでくる。
こういう言い方をすると、最近はCPUが早いから大丈夫とか言う人が多いが、じゃぁWindows Vistaは売れましたか?と聞きたい。
少なくともチューニングが必要な事もある。必要ないこともある。という事で選択すれば良いと思う。
たかだか、数行のスクリプトでチューニング不要ならそりゃ、Perlつかうさ
参考までに書いておくと、個人的感覚ではC++はオブジェクト指向言語ではない。
アセンブラにまで行き着く C言語を大規模開発する時に最低限必要となる抽象化をするための言語
そのために、まともにOOPで設計するとC++では重くなる事が多い。いかに、崩せるかがキモ。
またC++使いか?エセC++使いか?の見分け方は
constを正しく使えるか?参照を正しく使えるか? vtableの説明ができるか?
という質問に正しく答えられるか?で見分けると結構見分けがつくと思っている。