「C言語」を含む日記 RSS

はてなキーワード: C言語とは

2017-07-14

プログラミング言語名に「言語」つける風習

C言語とかGo言語とかJava言語とか。

わざわざつけなくても文脈でわかるよね。

 

つけたほうが紛れがないってことなら、

Raspberry PiGo言語ミニトマト栽培環境監視してLINE Botで通知する」

みたいなのは

Raspberry Pi端末とGo言語ミニトマト栽培環境監視してLINEアプリ Botで通知する」

と書くかというとそんなことは絶対ないし。

 

--追加

Goじゃわからないとかつけたほうが優しいみたいな人がいるけど、golang.orgのドキュメントでさえ、golangみたいな書き方しないでGoしか書いてないよな。

CだってC Languageとか書かないでただCと書くのが普通だし。

ーー追加

TPOとか状況に応じてつけろとかいい加減なこと言ってる人がいる。

常に付けなくていいよ。

明示するときは「プログラミング言語C」みたいに文章最初に書くよ。あとはC。

English語とか、Japanese語みたいな書き方変でしょ。C言語とかCOBOL言語みたいな書き方おかしい。

イングリッシュ語と書くのが適切な状況ってどういう状況だ。

2017-07-13

ホワイト企業に勤めてるんだが、もう俺は限界かもしれない

大企業名前だけならたぶんほとんどの人が知ってる。毎日定時に帰れて、週休二日で、有給もフル消化できて、給料福利厚生も申し分無くて、寂しい時は社内イベント勉強会に出てワイワイできて、仕事もそこそこ面白い。だけどもうダメかもしんない。

俺はエンジニアだ。うちは IT 企業だ。俺はエンジニアとして働くつもりで入社した。面接でもそう言ったし、先輩にも上司にも主張した。衝突も多かったけれど、概ね希望は通ったと思う。今の仕事面白い。でも、それでも、もうダメかもしんない。こうしてお酒を飲みながら不満を垂らしちゃうほどに。

服装

スーツ強制である意味がわからない。あんな窮屈な服をわざわざ好んで着るほど俺はマゾじゃない。

営業マンオフィス街に勤めるビジネスマンだってんならまだわかるけど、違う。田舎に構える拠点だ。俺たちはエンジニアだ。仕事しやすい格好であるべきだ。だからといってさすがに裸は非常識だが、ジーパンくらいはいいじゃないか。

たまにお客さんやお偉いさんが来る時もあるけど、そんなの応接室で応対する奴だけ正装すればいい。なんで俺たちにまで押し付けるのか。本当に意味がわからない。マゾという性癖を押し付けたいの?

Webフィルタリング

ネットニュースは見れるくせに、Twitter は見れない。技術用語で検索して情報収集できることを知らないのかよ。

Stackoverflow や Quora や Qiita も見れない(知恵袋は見れる)。GitHubBitbucket も、そしてはてなさえもだ。え?IT企業だよね?何の冗談だよ。全然笑えないぞ。

情報漏えい対策です」だって?だったら POST だけ禁止すればいいじゃん。一部のサイトはそうしてるじゃん。情シスなのに GET と POST の違いもわからないの?

とにかく不便で不便で仕方がない。管理職は「自分のスマホで見ろ」「制限解除した専用タブレットで見ろ」とかほざいてるんだけど、なんでいちいち PC から離れてそっち見なきゃいけないの?コピペしたい時とかどうすんの?効率って言葉知りませんか?何なの?マゾなの?

ウォーターフォール

ウォーターウォールが常にダメとは言わない。ただウォーターフォールは昔のやり方であって、少ない人材スピードも求められる現代ではだいたい役不足だ。にもかかわらず、馬鹿の一つ覚えみたいにウォーターフォールで開発しようとする。

テストコード書いて効率化して暇を持て余して改善に勤しむ俺よりも、いっしょうけんめい(笑)ワード使ってコード日本語にひたすら翻訳するという詳細設計書執筆に勤しんでる奴の方が評価されてるという現実。第一ウォーターフォールに従うなら先にコードができてるのもおかしいじゃねーかよ。

開発審査

ウォーターフォール続き。開発審査といってこれを通過しないと先の肯定に進めない関所みたいな審査があるんだけど、これがまた冗談みたいに面白い(笑えない)。何十年も(何年も、ではない)前につくられた基準で、かつ無理矢理定量的解決しようとした体系をしていて、結果、

「30ページの仕様書ならレビューはx時間しているはずだ」

「x時間に至ってない?それはおかしい。x時間になるまでレビューしろ」

「x時間超えてる?それはおかしい。なんで超えたのは理由を説明しろ」

なんてことが起きている。何なの?ソフトウェア開発がそんなに単純にいくと思ってるの?そんなはずない。みんなわかってる。だけど逆らうこともなく、おかしいとも思わず、ただただ過剰な仕事を投入したり、数字いじりと作文に勤しんだりする。一体何と戦ってるんだよ。

パワポ民族

ちょっとした資料でもパワポが強要される。テキストで書くと渋い顔をするし、他部署や他拠点、部長より上向けの資料となると絶対に OK が出ない。

独自フォーマットじゃねえよ。Markdown 知らないの?別に Markdown 覚えろって話じゃない。ちゃんと見易いテキストで書いてるだろ。分量的にも、話題的にもこれで十分だろ。なのにわざわざパワポなの?何がしたいの?パワポ萌えなの?勝手にやってろよ。俺たちまで巻き込むな。

PC

PCとディスプレイは会社側が用意したものしか使えない。Windows 強制メモリとかCPUは家電量販店で売ってるレベル。いやそっちの方がまだ高性能かも。おいおい、総務とかじゃないんだぜ?エンジニアですぜ?開発マシンだよ?こんな貧弱なマシンでどうしろって言うの?

キーボとマウスディスプレイ枚数が自由なのがせめてもの救い。といってもディスプレイは会社支給品なので一人あたりどう頑張ってもトリプルだけど。

サーバー

サーバー仮想マシン動かしてそっちで開発しようとか、むしろ開発用のハイスペックマシン手に入れようとか画策するんだけど、無理。調達できない。壁が二つ。

上司の壁。「何贅沢言ってんの?」 贅沢じゃねえよ。それ営業マンに向かって「車?何贅沢言ってんの?(原付あるだろうが)」て言ってるようなもんだぞ。

会社の壁。やたら承認やらエクセル申請書やら冗長で数日じゃ終わらない。ちょっと記入ミスってたらやり直し。融通の利かないお役所仕事そもそもお金が無いからそんな調達できないんだってさ。無いことはないだろ。利益出してんだろうが。その金はどこ行ってるの?お偉いさんがガハハとかっさってんの?

結局、今部署にある分でやりくりしなきゃいけない。だいぶ昔から使ってるやつだから古いし、キャパも限界。使わないマシンを落とさないと他が使えなくて、そのためにみんなに使用状況聞いて回るとかしている始末。おかしいだろうがよ。

え?クラウド?「クラウド企業秘密置くなんて何事だ!」だってさ。だったら紙で仕事してろよハゲ

常駐ソフト

必ずインストールして常駐させるソフトが結構ある。特にセキュリティ系。中には Windows Update みたく動作に支障を及ぼすものもある。お前自身がウイルスじゃねえかよと言いたくなるレベル

あと全体的に実装が稚拙なようでメモリも CPU もやたら食う。ソース見せてもらえないから何とも言えないけど、初心者ゴリ押しで書いたみたいな臭いがする。これで何百、何千の人間の、いったいどれだけの時間を無駄にしているんだろう。

インフラ

インフラがとにかく弱い。メンテナンス日常茶飯事だし、入社年度とか拠点とかでアクセスしていい時間帯を分けるようアナウンスするし、24時間稼働じゃないし、稼働するにしても昼休憩とか夜間とか制限かけるし。自社のインフラさえままならない企業にいったい何ができるというのか。

本当に力入れた方がいいと思う。どれだけ損失してると思ってんだよ。お偉いさんのイベントで主張してみたりもしたけど、俺が浮いただけだった。こういうことに関して鈍感なのがデフォなのだ

IE

社内システムはほとんど IE しかサポートしてない。バージョンまで固定する始末。UI もレガシーだし、UX も全然考慮されてなくて、フォームを何十個もずらずら並べたみたいなページが普通に登場する。

バージョン管理

SVN である。これでもまだマシだ。いや SVN も相当にオワコンだけど(Git 信者が何を知ってるって?いやいや Git 知らないだけでしょ。gitignore が無い時点でどれだけレガシーなのかがわかりませんか)。

ひどいと VSS とかい化石だったりする。VSSて何ですか?だよね、知らないよね。調べてみるといいよ。面白すぎて笑えない。

残業体質

今上に立っている人たちが残業何十時間何百時間当たり前の世界バリバリ頑張ってきた人たちだから、そういう価値観蔓延している。残業40時間くらい何とも思わない人種である。いや40でも十分多いから。

物理的に仕事が多いならわかる。本質的に難しいことしてるならわかる。残業しなきゃままならないシチュは存在する。でもそんなの見たところ一握りだよ。大半はただだらけてて怠けてて非効率的無知なだけ。

いや、無頓着というべきかもしれない。たとえばつい先日こんなことがあった。レビューで(俺はレビューア。他にもたくさん)、レビューイがブラウザからファイルダウンロードした時にブラウザなのかダウンロード先なのかどこかおかして、ブラウザフリーズしたのね。イラっとするじゃん?と思ったら、したのは俺だけだった。数十秒くらいは続いたのに、俺以外はみんな平気な顔してた。平然と待ってた。そういうことに無頓着なんだ。プログラマの三大美徳を備えろとまでは言わないけど、そこまで無頓着なのは社会人として、エンジニアビジネスマンとして、どうかと思う。

俺は巻き込まれたくないからうまく立ち回っていて、帰ろうと思えば毎日定時で帰れるが。この体質はほんとどうにかした方がいいと思う。

全角

数字とスペースを全角で打つのはやめろ。それが許されるの小説だけだ。

コード規約「タブ4文字

インデントはタブを挿入すること ← 俺はスペース派だが、まあわかる。規約ならしゃーない。

タブはスペース4文字であること ← え?

いや何文字かはこっちが決めることだろ。何自由奪ってんだよ。

「従わなければいいじゃん」 俺もそう思ったよ。でもね、みんなね、レイアウト整えるのにタブ文字を入れやがんだよ。わかるかい、タブ4文字にしなきゃレイアウトが崩れるってことだよ。おかしくない?レイアウトはスペースで揃えよ。タブが許されるのは行頭のインデント部分だけだよ。

この件について戦ってみたことがあるけど、誰一人として賛同は得られなかった。俺は自分勝手な人間との烙印を押されただけだった。エンジニアとして主張すればそうなっちゃうのがうちなのだ

この件については宗教論争的なこともあるから最悪引き上がる覚悟もあった(それにぶっちゃけ手元のエディタツールで変えればいいことだし)。でもどいつもこいつも真面目に考えることなく、俺を一蹴した。俺が嫌いだから?何大人げないことしてんの?小学生かよ。意見を見ろよ、中身を見ろよ。

REST API

こんなことがあった。

オンプレで立ち上げてるサービスに対して REST API勝手に使ったら怒られた。曰くシステムがダウンしたらどうなるんだと。業務停止するだろうがと。

言ってることは正しいけど、だったらエントリポイントを閉塞しておけよ。あるいは注意で REST API 使うなと書いておけよ。REST APIデフォサポートしていて、何の注意や閉塞もなく解放されているなら、それは自由に使っていいってことだろ?(もちろんだからといってリクエストバーストさせていいわけじゃないが)。悪いのはそんなことも知らなかった無知管理者だ。責任転嫁するな。

ちなみに閉塞案と注意追加案と提案してみたが無視されている。もちろんそれらを行う権限は俺にはない。

口頭至上主義

チャットの意義は Pull 型コミュニケーションができることだ。受け取った側の都合で返信できることだ。送る側も、そのことを前提とした上で、期限に余裕のあることを送るのだ。

このことを知らない人があまりに多い。とにかく彼らは口頭を好む。え?あんたら、忙しいよね?むしろ俺は配慮してあげてるつもりなんだけど。口頭で割り込まれることでどれだけ集中を阻害されているかがわからないんだろうか。

まあ俺はいいけど。集中削がれて非生産的になって遅れるのはあんたらだから。俺には関係無い。もちろんそのせいで俺にまで影響が及ぶのだとしたら、そこは全力で反抗する。そういえば以前、この件で上司上司に対してチャットでみんなに意見を尋ねてみたら、問題行動として垢BAN食らったっけなあ。その部署からは異動しました。

C言語手続き

C言語手続きプログラミングマンがあまりに多い。OOPを使っただけで、Ruby スクリ実装しただけ異分子扱いされて「そういう最新技術を誰もが知っているわけじゃない」「自分が知っているからといって無闇に適用するにはやめろ」とか言われる始末。最新技術って。ジョークだったんだろうか。あの時は思い切り笑った。その先輩とは今でも疎遠だ。すれ違っても挨拶してくれない。

まあこれは部署や部門の問題だと思うけど。たとえば OSS で食べてる部隊ではそんなことはない。

自社製品うんちく

昇進するための要件として資格取得がある。公的資格だけじゃダメで、社内独自の資格必要なんだけど、この資格たち、試験でどうでもいい自社製品うんちくばかり問うてくるものであるはてなを例にするなら、創業メンバー全員(一人かもしんない。知らん)のフルネームを答えよとか、創業日を答えよなど。

それ、覚えて意味ある?何がしたいの?愛社精神擦り付けたいの?そんなことしても逆に離れていくだけだと思うけど。違うかな。じゃあ何のためだろ。全く見当もつかない。それくらいに不可解だ。

ソフトウェア使用前の承認

ソフトウェアを新しく使用のにいちいち承認必要かいうふざけた制度があった。ソフト使うのって、エンジニアにとっては日常茶飯事じゃん。いちいち承認してたら進まないだろ。

それでもルールなら仕方ない。俺は何十という承認依頼を送った(ちなみに部長以上のお偉いさんが承認者になるという慣習がある)。反応が悪いし、仕事が進まないので口頭でも催促した。一蹴された時は「ならもっと上の人に掛け合います、XXさんが相手にしてくれなかったので来ましたって」的なことを言ったりもした。

結局、俺の部署では「なるべく新しいソフトウェアは使わないこと」「どうしても使いたい場合自己責任で導入すること」「もちろんウイルスチェックはちゃんとしてね」「実績のあるソフトだけ使ってね」みたいな緩いルールが新設されることでケリがついた。

今でも多くの部署承認制のままだろう。みんなどうしてるんだろ。それで仕事になるの?

足を引っ張る人達

うちは IT 企業なのに、リテラシーに明るくない人がいる。たとえば Wiki の書き方も知らないような人がいる。そういう人が部下を仕切っていたり、社員を支えるスタッフ業務に携わっていたりする。

エンジニアとしてより良いやり方を提案しても、導入しても「難しそう」と一蹴されるばかり。そもそも、ここまで上述してきたことに対してピンと来ることさえない。

厄介なのは、会社そのものがそういう人達に足並みを揃えようとするところだ。だからエンジニアにとっては物足りない、窮屈で、非効率的で、むしろ邪魔しかならないようなシステムや仕組みや施策ばかりが降ってくる。元を辿れば煩わしいセキュリティソフト群や承認フローの多さも、一部のバカが何かしでかしたせいだ。

一部の人間が足を引っ張っている。大企業であるということ、図体が大きいということは、そういうことなんだと思う。そうするしかないのだろうか?個人的には、エンジニアとそれ以外に二分して、前者には前者のインフラなり体制なり整えればいいと思うんだけども。

自転車でたとえてみる

うちの会社の連中は、彼らはエンジニアではない。思えば余暇技術的な話をすることが一切無い。彼らにとって技術手段しかないのだろう。エンジニアとしての矜持というものは存在しないのだ。

たとえるならママチャリに乗っている人達みたいなものだ。ロードバイクに乗る人からすればママチャリ手段としてありえない。ロードの方が何倍も早いし、移動範囲も広がる。けれどママチャリ乗りはロードには乗らない。そんな世界があることをそもそも知らないし、知っているにしても努力してそこまで至ろうとは思っていない。今のままで十分だと思っている。

同じなのだ。彼らもまた今のままでいいと思っている。エンジニアリングのエの字もわかっていない。無論、ただのママチャリ乗りならそれでもいいんだけど、俺たちは IT を生業とする会社だ。ロードレースでメシ食べてるようなものなんだよ。なのにママチャリのままなんだ。どう考えたっておかしい。それで勝てるわけないだろ。この先どうすんの。今はたまたま誰も走ってない道を走ってるだけだ。そういう道も着実に少なくなってきているし、ママチャリで頑張って登ろうとするゴリ押しマン要員も減ってきている。

色々書いたけど

他にも挙げればいくらでも出てきそうだけど、疲れたんでこの辺で。

俺も偉そうなこと書けるほどのエンジニアではないし、ちゃんと読みやすいよううまく書けたか自信ないけど、それでも書かずにはいられなかった。

2017-06-27

学校の授業でプログラミングを教えるとしたら言語は何が良いのだろう

自分情報系の大学生

弊学では、2年生の時に必修のプログラミングの授業でC言語を習う。

中学生の頃からパソコン大先生スクリプト言語を軽く触ってた自分としては、わざわざ面倒な書き方で面倒なコンパイルをして動かす事に疑問を感じていた。

ちなみに、試験は紙ベースで、手書きプログラミングをさせられる。つらい。

スクリプト言語で良いと思ってた自分は、C言語を覚えることに疑問を感じていた。

結局、授業以外で全く勉強せずに試験結果は散々だったが、なんとか単位が取れたので良しとしよう。

プログラミング学者である人は苦労して書き方を覚えていたように思う。

脱落していった人を何人も見たが、人間やれば出来ないと思っていたことが出来るのである

本来プログラミングは誰でも出来るはずである

今学期、PHPを書く授業とPythonを書く授業を履修してみた。

PHPは、某テキストをもくもくと写経して動かしてみる授業で、独学でテキストコードを動かす気力のない自分にとっては最高の授業だ。

Pythonは、MeCabなどで形態素解析構文解析をする授業で、サンプルコード自分で考えてカスタマイズして毎回レポートで提出する。

Pythonの書き方に慣れないからか、かなりハードであるが、やりがいがあっていい感じだ。

やはり、スクリプト言語楽しい

書いたらすぐに目に見える成果が出るところが大きい。

自分は、プログラミングを授業で教えるのならスクリプト言語に限るはずだと思う。

そう思っていた矢先に事件が起こった。

最近研究室に入ったところ先生が手当たり次第Javaを教え始めたのである

せめてJavaScriptでいいかスクリプト言語を教えてほしいところなのに、なんでJavaなんだと発狂した。

それでも、30億のデバイスで動くハイブリッドさとオブジェクト指向理解する上での分かりやすさという面ではJavaが手軽なのかもしれない。

コンパイル言語も悪くはないと思い始めた。

ところで、最近になってプログラミング教育義務化とか叫ばれてるが、Scratchでパーツを並べてプログラミングをするなんてただの積み木に過ぎないと思う。

絶対にツマラナイだろう。

自分は、プログラミングの授業で数字を足し算して黒い画面に表示させるとかツマラナイと感じてしまった。

こんな複雑なことをしても、これしか成果が出ないならやってられないと思うのは自分だけなのだろうか。

お願いだからプログラミングを教えるのならツマラナイ授業をしないで欲しい。

生徒に分かるように、生徒は楽しんでプログラミングをするべきだ。

別にどんな言語でもいいと思うが、プログラミング言語は人それぞれ好き嫌いが激しいだろう。

自分は、分かりやすくて直感的なRubyというプログラミング言語学校の授業で採用されるべき言語に間違いないと思う。

別にRubyにこだわる必要はなくて、スクリプト言語であればなんでも良いと思う。

CやJavaなどのコンパイル言語は複雑で分かりにくいし、教えにくいはずだ。

スクリプト言語を教えた後に、コンパイル言語オブジェクト指向概念を教えていくのがいいのではないだろうか。

これは、あくまでもたった1人の大学生意見しか過ぎない。

みんなの意見を知りたい。

2017-05-15

初心者はまずC言語から

それでも __auto_type 使えるんだから良いよなあ今の子は。

2017-05-13

http://anond.hatelabo.jp/20170430040636

97年新卒だった。

就職関連の何かに自分の住所とか電話番号とかを登録しておくと

大量のDMが届くようになるのでそこから気になる会社を選んでエントリーするのが一般的なやりかたっぽかった。

ただ僕らの情報電気電子系は当時からe-mailは使えたので、一度向こうのリクルータと接触した後はメールで連絡して企業見学面接の日程を決めていた。

旅行ホテル予約サイトがないしWebも始まったばかりでホテル情報がないので関東企業に行くのにホテル決めて予約するのが一番大変だった。

知らない土地でXX駅からYY駅までどれくらいの移動時間がかかるかわからないので駅すぱあとっていうソフトを買って調べたりした。

当時はそこそこの大企業でもコンピュータ技術者は少なくて

簡単デバイスドライバ実装できたりC言語簡単コンパイラ作ったりできるだけで即戦力だった。

なので選考とかで苦労した記憶はない。

ただ当時は大企業就職するよりフリーターで働いたほうがしばらくの手取りは上で、

大企業就職するやつはバカ、みたいな価値観が一部にあった。

僕も初任給20万くらいで手取り16万とかだったけど、普通にその時間アルバイトやってたら月30万は稼げてたと思う。

(そのとき目先の収入につられて非正規のほうを選んだ奴らが後で恨んできたりしたけどそんなの知ったことじゃないよね)

2017-05-10

C言語やりたくない

別に無理して使う必要ないって?

あるんですよ。次のプロジェクトで使うんですよ。

システムの改修だってよ。いっそ全部作り直してほしいわ。

今まで業務ではずっとJavaを使ってきた。

まあでもJavaもなかなか面倒くさいよね。

最近ちょっとした作業自動化するためにPythonを使ったんだけど、あれは良いね

コードを書くのって楽しいんだな。久しぶりにそう思えたよ。

そしたら何ですか。いきなりC言語に戻るわけですか。

いや、使えた方がいいとは思うけどさ。

文字列扱うだけにも面倒くさすぎない?

望ましい書き方も、人によってかなり言ってること違うし。

やってらんないよ、もう。

だれかC言語メリットを教えてくれ。

あ、ちなみにC++ではないよ。純粋C言語

コメントは /* */ しか使えないです。

なんなの、ほんとに。

2017-04-15

PHPってなんで流行るの?

よく知らんけどあれってPerlだよね

Perlってめちゃくちゃ書きにくくない?

C言語から始めていろいろ言語は触ったけど、JavaScriptが一番書きやす

サーバでもJavaScriptクライアントでもJavaScriptにしてるからもうJavaScriptしか書けなくなった

VBエクセルに付いてるからたまに使うくらい

2017-04-07

http://anond.hatelabo.jp/20170407112743

意識低い企業研究者です。プログラミングはサブウエポン。だけど趣味でも勉強してる。

働き方改革のせいで早く帰れって言われて、酒のみながら今これを書いてる。

C言語とかC++・・・これで作らないといけないものが今の所ないし、これでお金を稼ぐのはハードルが高いし、

WindowsAPIを使って複雑なプログラムを作りたいわけじゃないのでwhileとかifとか基本的な構文だけ覚えるだけで満足。

組み込みプログラミングではC言語はいまだに現役。お金普通に稼げると思うよ!次代のCOBOLと化しそうで怖いとこはあるけど。

Java・・・使える人が多いからあえて今から学習しなくてもいいような気がする。

文字列の結合だけでもダメやり方と良いやり方があるらしくて、何かPHPのようにその言語特有セオリーみたいなのを覚えるのが面倒くさそうなので入門の時点で学習するのをやめた。

セオリーとかあるかもしんないけど速度とか気に揉むまえに書いて測れ。たいていは杞憂か、あるいはCPUパワーで殴れるから

Go・・・HTTP/2が使えるから学習してる。他の言語だとnghttp2をインストールしないといけないようなのでGo便利だと思ってる。

ライブラリ選択肢が多すぎるのでこういうのが作りたいってときにこれを使うのがいいよっていうのが知りたい。

GUI作るのにライブラリありすぎてどうやって選べばいいのかさっぱりわかんない。

Goデータベース扱うならこれを使え、だけどMySQLしか使わないならこれを使え、あっSQLiteならこっちのライブラリ使うと便利みたいなこういう情報が欲しい。

GoGUIつくるの?あんまり普通じゃない気がする。軽量プロセスうまみがそんなない(詳しい人に否定されそうだけど)

普通にC#(mono/.net)かwebアプリにするかで良くないか

ただ、言語をあれもこれも覚えるのって僕は意味があるのかなという思いもある。

20言語Hello World出来るより、1つの言語でいろんなアルゴリズムを知っている方がすごいと思う。

コミュ症がフランス語英語ドイツ語覚えても、使う機会がないとまったく価値がないと思う。

アルゴリズムは使うものだ書くものではない!!

広く浅く学習するより、狭く深くいきたいとおもうけど、paizaでCランクしか取れない。

twitterで有名な人てやっぱりSランクとか余裕なのかな、こういうのもいろんなプログラマーに聞いてみたい。

一応著名なプログラマーTwitterフォローしてるけど、ご飯の画像を載せてたり、若者の僕には通じない寒いギャク連発してたり、ロリっぽい画像RTしてたりと、twitterはメインの情報収集としては利用してない。

twitterやってるプログラマーって勉強会とかオフ会に参加してるようなリア充の人ばっかりなので、肩身が狭いか自分からリプは送ったりはしない。

ファンがたくさんいるのに最近ニコ生配信してくれないchokudai先生みたいに、アルゴリズムを学ぶのがいいのかな。

深さ優先探索とか理解できない。

コード写経しても覚えられないし、仕組みは理解したけど自力コードが書けない。

コードにする能力ってどうやって鍛えるのか知りたい。

アルゴリズムは使うものだ書くものではない!高階関数とかテンプレートプログラミングとかその辺勉強するといい。

あと計算制限時間内に終わるなら総当たりが最速で品質も高いぞ。

エディタサクラエディタからVimに変えた。

どうしてVimかというとプラグインが多いしIDEっぽくできるから

Vim使う一番の理由は補完が強いのが気に入ってるから

Vimってハードル高いイメージあったけど、入門記事がたくさんあるので助かっている。

NetBeansが重すぎるんだよ。補完ボックスが表示されるの遅すぎて警告メッセージが出た。補完ボックスが表示されるまで7秒ぐらい経過すると警告メッセージが表示されたと思う。

Vim知らない。Linux使うならVimemacs使えるだろみたいな雰囲気あるけど、GUIならgedit, CUIならnanoでいいよね。

パソコンスペックもどのくらいのものを用意したらいいのかわからない。

10年前のVistaが搭載されていた頃の家電量販店で一番安かったCeleron 1コア メモリ1GB グラボなしノートからプログラミングに向いてないのかもしれない。

VirtualBox上のubuntuMySQLコンパイルすると2時間20分ぐらいかかった記憶がある。

CPUが1コアなのでコンパイル中にそれ以外の作業なんて重くてできない。

スペックお金をかけることで時間節約ツール選択肢が増える

EclipseなどのIDEが支障なく使えるレベルスペックってどのくらいするんだろう。

ノートCore i3メモリ4GBにランクアップしたらいけるのかな。

他人がどんなスペックPCで何のツール使ってプログラミングしているか知りたい。

3年前のCore i7, SSD, 8GB。最近はもっぱらJupyter。

もっと早いPCが欲しいけど、年度末に買うのを忘れた。

Python・・・機械学習する上で避けて通れないけど、今のPCだと無理。

例題が豊富逆引き辞典みたいなサイトや本がほしい。

あと、クレジットカード持てないのでAWS上で機械学習するのだけは遠慮したい。

過大請求されるの怖いし、トラブルが起きた時に英語コミュニケーション出来ないから。

Pythonはいいぞ、機械学習だけじゃなく計算系はエクセルじゃなくてJupyter使う。でも周りはエクセルつかってる、勿体ない。

使ってないけど最先端研究では機械学習使って当たり前感があってそろそろヤバい

僕は中学生の頃、いじめにより心の余裕なんてなかったか勉強どころではなかったけどもっと英語勉強しておけばよかったと後悔している。

やっぱり子供の頃の生活環境って大事だなと思う。

今は英検3級に向けて勉強中。

APIドキュメント頑張って読もう。俺も頑張って読んでる。

何を学習したらいいのか本当にわかんない。

迷宮にいる感じ。

なんとなく、プログラミングじゃないほうがいい気がするなあ。

とりあえずバイトしてPC買わない?プログラミングバイトでもいいと思うよ。

働き方改革最前線からは以上です。

プログラミングの学び方がわからない

C言語とかC++・・・これで作らないといけないものが今の所ないし、これでお金を稼ぐのはハードルが高いし、

WindowsAPIを使って複雑なプログラムを作りたいわけじゃないのでwhileとかifとか基本的な構文だけ覚えるだけで満足。

Java・・・使える人が多いからあえて今から学習しなくてもいいような気がする。

文字列の結合だけでもダメやり方と良いやり方があるらしくて、何かPHPのようにその言語特有セオリーみたいなのを覚えるのが面倒くさそうなので入門の時点で学習するのをやめた。

Go・・・HTTP/2が使えるから学習してる。他の言語だとnghttp2をインストールしないといけないようなのでGo便利だと思ってる。

ライブラリ選択肢が多すぎるのでこういうのが作りたいってときにこれを使うのがいいよっていうのが知りたい。

GUI作るのにライブラリありすぎてどうやって選べばいいのかさっぱりわかんない。

Goデータベース扱うならこれを使え、だけどMySQLしか使わないならこれを使え、あっSQLiteならこっちのライブラリ使うと便利みたいなこういう情報が欲しい。

ただ、言語をあれもこれも覚えるのって僕は意味があるのかなという思いもある。

20言語Hello World出来るより、1つの言語でいろんなアルゴリズムを知っている方がすごいと思う。

コミュ症がフランス語英語ドイツ語覚えても、使う機会がないとまったく価値がないと思う。

広く浅く学習するより、狭く深くいきたいとおもうけど、paizaでCランクしか取れない。

twitterで有名な人てやっぱりSランクとか余裕なのかな、こういうのもいろんなプログラマーに聞いてみたい。

一応著名なプログラマーTwitterフォローしてるけど、ご飯の画像を載せてたり、若者の僕には通じない寒いギャク連発してたり、ロリっぽい画像RTしてたりと、twitterはメインの情報収集としては利用してない。

twitterやってるプログラマーって勉強会とかオフ会に参加してるようなリア充の人ばっかりなので、肩身が狭いか自分からリプは送ったりはしない。

ファンがたくさんいるのに最近ニコ生配信してくれないchokudai先生みたいに、アルゴリズムを学ぶのがいいのかな。

深さ優先探索とか理解できない。

コード写経しても覚えられないし、仕組みは理解したけど自力コードが書けない。

コードにする能力ってどうやって鍛えるのか知りたい。

エディタサクラエディタからVimに変えた。

どうしてVimかというとプラグインが多いしIDEっぽくできるから

Vim使う一番の理由は補完が強いのが気に入ってるから

Vimってハードル高いイメージあったけど、入門記事がたくさんあるので助かっている。

NetBeansが重すぎるんだよ。補完ボックスが表示されるの遅すぎて警告メッセージが出た。補完ボックスが表示されるまで7秒ぐらい経過すると警告メッセージが表示されたと思う。

パソコンスペックもどのくらいのものを用意したらいいのかわからない。

10年前のVistaが搭載されていた頃の家電量販店で一番安かったCeleron 1コア メモリ1GB グラボなしノートからプログラミングに向いてないのかもしれない。

VirtualBox上のubuntuMySQLコンパイルすると2時間20分ぐらいかかった記憶がある。

CPUが1コアなのでコンパイル中にそれ以外の作業なんて重くてできない。

スペックお金をかけることで時間節約ツール選択肢が増える

EclipseなどのIDEが支障なく使えるレベルスペックってどのくらいするんだろう。

ノートCore i3メモリ4GBにランクアップしたらいけるのかな。

他人がどんなスペックPCで何のツール使ってプログラミングしているか知りたい。

Python・・・機械学習する上で避けて通れないけど、今のPCだと無理。

例題が豊富逆引き辞典みたいなサイトや本がほしい。

あと、クレジットカード持てないのでAWS上で機械学習するのだけは遠慮したい。

過大請求されるの怖いし、トラブルが起きた時に英語コミュニケーション出来ないから。

僕は中学生の頃、いじめにより心の余裕なんてなかったか勉強どころではなかったけどもっと英語勉強しておけばよかったと後悔している。

やっぱり子供の頃の生活環境って大事だなと思う。

今は英検3級に向けて勉強中。


何を学習したらいいのか本当にわかんない。

迷宮にいる感じ。

2017-03-12

から情報学部学科で学ぶあなたへ

購入すべき物

macでもwindowsでもいい、core i3以上、メモリが8G以上が乗った持ち運べる物。これは絶対に買うべき。atomceleronが乗った廉価機は避ける。どうしてもお金が無いなら5年以内の中古でも良い。

これは講義資料などの閲覧用。なくても良いが、あると非常に便利。逆にプリンターは大抵の大学にあるのでいらない。情報系の教科書web上に無償で公開されている物が多いので、それらを活用して学ぶべし。MOOC活用するのもよい。

以下は学ぶべき

大学カリキュラムにあっても、先行して学んで損はない。

コンピュータのしくみと合わせて学ぶ。

英語情報の方が早くて正確である場合が多い。

どうせいつか覚えるので、早めに使えるようになっておいて損なし。

  • OSにまつわる内容

基本。

使えると色々自動化できて便利。個人的にはpython(3)がオススメ

必須では無いと思うが変換ツールと合わせて使うと便利。レポートにも使える。

どちらかお好みで。大抵のエディタIDEで使えるため汎用性がある。筆者はemacs派。

サークル課外活動

ひとりで手を動かして継続的に学べるのであればそれでいいが、そうで無い人間の方が多いのでは無いかと思う。筆者もそうだ。そういった人間他者と共に学ぶのがよい。

大学情報系や電気電子系のサークルがある場合はひととおりみておくといい。真面目に活動していて、ソフトウェアなりロボットなり成果物があるようなら入って良いと思われる。唯のオタクの溜まり場になっているようならまあ入らない方がいい。

サークル以外にも、都市部に住むのであれば技術主体としたコミュニティが多くある。SNSや同期、先輩のツテを使って興味のあるものに参加してみるとよい。

プログラマーバイトなども良い経験になる。しかブラック職場もあると聞くのでよく選ぶべし。

といっても、課外活動に惚けて大学の授業を疎かにするのは愚の骨頂。大学の授業で学ぶのは全ての基礎なので、これを知らずにどんな最新技術に触れようと意味が無い。

競技プログラミング

これは情報学部で学ぶならやらない理由が無い。プログラミング力を鍛えるには最適である

AIZU ONLINE JUDGEやAtCoderゲーム感覚で楽しむとよい。

まとめ

思いつきで書いたので書き漏らしはあると思う。あとよく言われる教授質問に行ったりして活用しろ〜などは情報系でも同じ事が言えると思う。

情報系の学生として最もやってはいけないことは、読んだだけ、聞いただけで理解した気になってしまう事だと思う。授業で聞いた事全てとは言わないが、せっかく場所を問わず実験ができる学問なので、興味を持った内容だけでも良いのでコーディングして動かしてみて欲しい。

2017-02-09

http://anond.hatelabo.jp/20170209002119

うーん、行間からいろんなものが漂ってくるな。

>在学中はC言語からプログラミングを学んだのだが理解できずJavaもまったく理解できない状態に陥った。

相談した講師からネットワーク関係DB関係知識を深めれば就職のあてはあると言われてCiscoCCNAとか

オラクルDB資格とかLinuxLPICまで取ってたのだが学歴の壁に苦戦。

専門学校に行っても全く理解できないってことは、素養が無かったんだろう。

あと、IT場合学歴あん関係なくて(DeNAみたいなところは除く)、結果的高学歴ハイスペック人材が成果を出しているだけなんだよね。資格も実際に使えないんじゃペーパー免許と一緒。

SE肩書倉庫での作業がメインでパソコンに触れるのが在庫管理表を更新する週に1回か2回ほどだった。

テスターとかコーダーとか底辺人材ですら人手不足のこのご時世に、そんな仕事を振られるってことはよっぽど使い物にならなかったんだろう。

会社あんたを雇ったときいくらなんでも専門学校まで出ているんだから、最低限使えるだろ」っておもったら、研修の段階で想定以上に使えなくて誰も行きたがらない現場に回したんだろう。

うちの職場にも、あなたみたいな人が高ギャラのエンジニアバーター派遣されてきているけど、そいつ教育管理する工数のせいで高ギャラエンジニアパフォーマンスが下がっている。

悪いことは言わない。他の業界に行ったほうがいい。SIerにしがみついたところで、あなた派遣先派遣元も誰も得しない。

会社辞めた

情報系の専門を卒業就職してから2年、辞めた

在学中はC言語からプログラミングを学んだのだが理解できずJavaもまったく理解できない状態に陥った。

相談した講師からネットワーク関係DB関係知識を深めれば就職のあてはあると言われてCiscoCCNAとか

オラクルDB資格とかLinuxLPICまで取ってたのだが学歴の壁に苦戦。

 

何とか特定派遣会社就職できたが就職してから2年間は酷かった・・・

インフラエンジニアが足りないから是非うちにと言う事でその会社就職を決めたのだが1ヶ月の研修後、派遣先が見つからないと言う理由で急きょ運用現場半年派遣された

SE肩書倉庫での作業がメインでパソコンに触れるのが在庫管理表を更新する週に1回か2回ほどだった。次に1年ほど派遣された保守現場では保守サポートが行われている現場

日替わり2交代制の24時間365日体制現場責任者シフト作成社員の都合は一切聞かない)を行い2日以上休むのは禁止と口頭で注意された。

そんな感じで働いていたが精神と体に限界が来て会社営業に「現場を変えて欲しい」と訴えると契約終了後、社内待機になった。

社内待機の間は打ち合わせと称した会議管理職5人と営業2人がいかに僕が会社負担になっているか昏々と説明したのち転職を勧める事が続いた。

僕に転職を進める理由営業は、派遣する現場がないのと業務経験評価できるようなものではないからと説明した。

さすがに憤りを感じたため反論したが「でもお前、大した経験できてねーじゃん。そんな技術者はうちにいらないよ。」と言いい聞いてくれなかった。

社内待機になって半年後、退職届会社に出した。

 

退職届を出したのちに、ハロワに行き僕がいた会社実態を話して「あの酷い会社制裁を加える事ができないのか」と聞いてみたら

「グレーでも法律違反していない以上はどうすることもできません。」

と言われたため不満を持ちつつ納得するしかなかった。

自分なりに2年間頑張ったのに評価されるどころかバカにされて実質的にクビになったのが惨めだった。

 

転職を勧められるまでは会社を信用していたが今、考えてみれば初めから都合よく捨て駒的な使われ方をされた思う。

派遣先がない事を理由に大した経験の出来ない現場新卒派遣して以降は適当現場派遣して派遣できなくなったり不満を言い出したら追い出す。

実にいいように利用されたものだ、会社を信用していた自分が恥ずかしい。

 

インフラエンジニア希望して入社したのにインフラに一切触れることはなかった。

希望職種に就くのがこんなに大変だとは思わなかった、IT業界は本当に人手不足なのだろうか・・・

しばらくしたら転職活動を始めようと考えているが僕は本当にインフラエンジニアIT業界を目指すべきなのか悩んでいる。

2017-01-31

プログラミング特別じゃない

ポエム

冬なのでポエムを書きたかった. 炎上したら怖い.

プログラミングしてみたいとぼんやり考えている仮想的な若者妄想しながら書いた.

プログラミング特別じゃない

プログラミングは, おそらく多くの人が触れたことがないからだろう, 特別扱いされるきらいがあるように感じる.

すぐできるという錯覚

よく話題に上がることであるが, 最近プログラミング簡単!」「一ヶ月でプログラマになれる!」のようなキャッチコピーを売りにしたサービスなどが多い. そういうものを見るたび, たとえできたとしても, それは本当に目的合致しているのか考えてしまう.

料理だって, 一ヶ月あればできるようになると思う. ただし決して, それだけでお金を儲けられるということではない.

これは料理に限らない. スポーツだって, 日々の練習があるからちゃんとプロたりえているし, 自動車整備士だって, 普段やって慣れているか安心して任せられる. そういうものだとみんな知っている.

もちろん, プログラマだって, コードを書いたり勉強したり, そういうことは必要なはずである.

ビジネスとしての教育

「教育」は儲かりにくいとはいえ, ビジネスになる.

料理教室, 英会話教室や, 資格講座, パソコン教室などがある. 学校も加えても良いかもしれない.

そういうものをみて, カリキュラムを終えたらゴールだとは思わないと思う. あくま入り口として有用ものである.

ビジネスなのだから, 良いことを売りにするのは当然である. [『苦しんで覚えるC言語』](http://amzn.to/2htZRFi)のような稀有なケースもあるが, 大抵の人は苦しみたくないと思うので, 「明快!」とか「猫でも分かる」とか, 「n日でできる」ほうが心地よいと感じるであろう. また, カリキュラムを終えたら一人前な方が良いと思うので, そういうことを売りにしようとするであろう.

知らないからと言って, 鵜呑みにして良いものではない.

プログラミング楽しい
ポジショントーク

※ここで言う「[ポジショントーク](http://d.hatena.ne.jp/keyword/%A5%DD%A5%B8%A5%B7%A5%E7%A5%F3%A5%C8%A1%BC%A5%AF)」は誤用としての意味であるが, ぴったりなので使いたい. 正しい意味リンク先を参照されたい.

プログラマに聞けば, 「プログラミング楽しい!」答えると思う.

料理人に聞けば, 料理楽しいと答えるだろうし, プロ野球選手に聞けば野球楽しいと答えるだろう.

人によって合う合わないはあるだろう. 少なくとも, プロとして働いてる人は, 意識的であれ無意識的であれ, 続けようと思った人である.

ものづくり楽しい

工作好きな人は多いと思う. プラモデルとか体験教室とかは, お金を払ってでも工作を楽しみたい良い例だと思う. プログラミングもその中に加えたい.

教室などで, プログラミングアプリを作ってみることは楽しいと感じたとして, では次それが仕事になってまで楽しいかといえばそうとは限らない.

創作楽しいからといって, 美味しくもない料理を出すわけにはいかない.

プロにはもちろん責任が伴うし, すべてが自分の思い通りなわけではない.

はい

はいえ, 少なくとも自分は, 時にはつらくても, 最終的には楽しんでいるので, 世の中そういう人もいっぱいいると信じているし, いてほしいとも思っている. そう信じているが, あくま自分感情なので, 自分プログラミングを教える時, どうしてもその人にとって本当に幸せか考えてしまい, ジレンマを感じる.

もし今あなたが誰かに教わっているなら, ここまで考えてどう思ったかを, その人に伝えてあげてほしい.

プログラミング価値がある?

自尊感情

自分は, プログラミングを昔からしてきたから, 論理的思考力が身について, 大学受験もうまくいった気がしているし, バイトプログラミングのお陰で人並みに稼ぐことができた. PCの使い方に慣れて, 検索や, 情報の真偽判断もうまくなった気がする. もちろん, ただの結果論であって, 因果関係保証はない.

もし自分プログラミング価値はなかったといえば, それは同時に自分人生否定することに繋がる. 自分一定自尊感情を持って生きているので, 自分過去生き方について一定肯定し, その結果プログラミング価値見出しているにすぎない.

プログラミング楽しい?の節とほぼ同じ内容だが, プログラミングに限らず, そういうものだと思う.

プログラミングで何ができる?

プログラミング手段という考えは浸透しつつあるように思う. 同時に, プログラミングができると何ができる?という質問をされることもよくある.

大きなもので言えば, 人工知能と騒がれているものだったり, LINETwitterだったり, いろんなアプリだったりゲームだったり, WEBメールといった大きなシステムも, プログラミングの延長であると言えると思う.

ただし, そういうものは, 何十人, 何百人という, エンジニアだけでなくデザイナー, 企画, マネージャーなどが何年も協力してできていて, また, エンジニアだけでもフロントエンドエンジニア, サーバーサイドエンジニア, インフラエンジニア, グラフィックエンジニア, ……とても多くの, 各部分のスペシャリストが作っていることを知る必要がある.

一人でできる範囲は, それほど大きくはない.

さなことで言えば, 計算などを, 電卓よりもプログラミングをしたほうが速いという話がある. 僕の場合は, 確かにくり返し同じような計算をする場合や, 複雑な式の場合は, そうかもしれない.

但し注意すべきは, なにか新しいことができるようになれば, 他にもできるようになることが増えるのは当たり前である. 軽いプログラミングができることは、それほど価値があるのか?

アマチュアとしてのプログラミング

プロとしてのプログラミングをしなくても, アマチュアとしての仕事もある.

ホテル料理人は, 一人で良いものを作ることを求められる. 一方で, 飲食チェーンでのアルバイトぐらいなら, そこまでは求められないだろう.

いわゆる, エンジニアコーダーの違いだと思う.

また, オーナーとしても, 料理に関する知識を持っていれば有利なことはあると思う. デザイナーマネージャープログラミングをする目的である.

これも一つの価値だと思う.

やってみることの価値

何事も, 一度やってみることは価値があると思う. 自分田舎育ちかつ父親の影響もあり, 自転車パンク修理や, 車のタイヤ交換等は, 家で行っている.

本職ではなくても, お金節約になるし, いつでもできるというのはメリットではある.

将来の選択を決めかねている場合でも, やってみないと楽しいかどうかも判断できないので, やってみることは決して否定しないし, プログラミングに関して言えば自分もっと広めたい立場なので, ぜひやってみて欲しいとも思っている.

偉そうに書いておいて

偉そうに書いておいて, 自分自身全然社会の波に揉まれてるような年齢じゃないし, 人生めっちゃ成功しているわけでもない.

全てにおいて, 僕がプログラミングに近い立場いるからこそ言えたことだし, 自分が違うことをしていれば多分こうは言っていなかっただろう.

もしコメントを読んで自分が間違っていたとか、扇動的だと思えば記事を削除するし, そうやって考えを成長させていく. ネットの1記事というのはそういうものだと思っているし, そういう目線で読んでほしいとも思っている.

まとめ

プログラミング特別じゃない.

ビッグデータ, 人工知能, プログラミング, そういう流行言葉に踊らされて, 大事ものを見失わないでほしい.

意志を持って学びたい人を邪魔する人はいない. みんなプログラミングが大好きだし, 広めたいと思っているはず. 自分含め.

2017-01-28

C言語Go言語Java言語COBOL言語HTML言語JavaScript言語

ジャパニーズ語」とか「イングリッシュ語」とか書いたら絶対受け入れられないと思うけど「C言語おかしい」みたいな事を言ったら、めちゃくちゃ叩かれるんだよな。

2016-11-21

尊敬していた、大嫌いな教師の話

たまに思い出してはウジウジ引きずってる、高校の頃の話です。どっかに供養すればすっきりするかなと思って、ちょっと書いてみます

これでも大分削ったんですがだらだら書いてると長くなってしまいました。お暇なときにお読みください。

嫌味に聞こえるかもしれないけど、私は勉強しなくても授業をそれなり聞いてればテストの点は取れるような、要領の良い人間だった。

周りの評価は、別に直接言われたわけじゃないけど「優等生」だった。生徒から教師からも多分そう思われてた。

校則はきっちり守るし。授業態度良いし。成績も良いし。コミュ障で地味な根暗から、ツンとしたつまらない真面目ちゃんって思われてんだろうな。

私は「怒られること」が嫌い、というか、恐怖すら感じる。小中で何度か理不尽にキレられたトラウマからなんだけど今はそれはどうでもいい。ともかく怒られるということが怖かった。

校則守って授業ちゃんと受けてれば怒られることはないでしょ。だから真面目だった。ちゃんとルールは守るべきだとかそういう使命感?正義感?みたいなのは別にない。私は本当は優等生なんかじゃなかった。

それで高校でも授業ちゃんと聞いてたら、さっき書いたように要領がいいから、テストの点は勝手についてきた。

それでますます私には優等生イメージがついた。そのせいか、私は教師たちからバリバリ期待された。

私が通ってた高校は、俗に言う「自称進学校」で、教師たちはみんな私を大学に行かせたがった。

でも私は大学に行きたくなかった。

だって大学行ったら勉強しなきゃいけないじゃん。

私は勉強が嫌いだああああ!!!キャンパスライフも待ってなくていいぞおおおおお!!!

興味のあることの勉強なら楽しいけど、興味がないことの勉強ほど私にとっての苦痛はない。

私は両親も、複数いる兄もみんな高卒だったか大学に行くっていうイメージがそもそもなかった。大学は将来なりたいものがしっかり決まってる人が行くみたいなイメージだった。私は特になりたいものもないので、高卒適当事務職とかに就職する気満々だった。

あと、私の家は貧乏な方で、大学に行くお金を用意するのはキツかった。親は優しいから何も言わないけど、私も早く稼いで親に楽させてあげたい気持ちがあった。

じゃあなんで自称進学校に来たのかというと、家から近い高校適当に選んだら自称進学校だったんですよ。馬鹿ですね。

それでまあ、最初無難公務員を目指してた。

2年の時、勉強の出来る優秀クラスに入れられた。

つらかった。他のクラスより何倍も勉強させられた。

そしてこれは私の性格の面倒くさいところなんだけど、周りが抱く私の「優等生」のイメージ裏切りたくなかった。というより、そのイメージを壊したときの周りの目が気になった。なんというか、目立ちたくなかった。勉強サボって、成績が落ち、優等生ちゃんが急にグレた!とか思われたくなかった。

今思えば、別に落ちぶれても大して何も言われなかったと思うけどね。自意識過剰なんだよね。

それで仕方なく、勉強頑張って、優等生を演じた。

おかげでガンガン成績が上がった。周りの評価も期待も上がった。

苦痛だった。ますます勉強が大っ嫌いになった。

2年の担任は、私を大学に行かせたくてたまらないようで、公務員になるって言っても聞いてくれなかった。

勉強したくないとは言いにくいので、お金がないと言い訳すると、奨学金がどうのとか、高卒公務員になるより長い目で見れば大学に行ったほうが得だとか、出来るんだから進学しろとか言われた。

若干ノイローゼ気味になりつつ、じゃあ第二希望として大学を考えときます、と言った。担任は嬉しそうだった。

3年。大学進学クラスに入れられた。ふざけんな。

そして何を隠そう、3年の担任、これがタイトルにある大嫌いな教師です。

今書いたらそういえば2年の担任もひでぇや!と思ったけどそれまで忘れてたほど3年の担任が嫌い。でもタイトルにある通り、尊敬してたんです。

あの人の授業、本当に分かりやすかった。今までのどの教師の授業より一番分かりやすくて、面白くて。得意科目だったこともあるけど、一回テストで満点をとったのはどう考えても彼の授業が良かったから。

とても頭が良くて、言ってることはだいたい正しいと思えたし、本当に理想教師像で、尊敬していた。

公務員目指すと言うと、ちょっと残念そうな顔されたけど一応応援してくれた。

そして迎えた公務員試験……

いくつか受けたけど全滅でした。あのね、いくら勉強できてもコミュ障公務員なれない。

もしこれを読んでくれてる人で公務員目指してる人がいたら、適性試験勉強はそこそこにしてとにかく対人能力を鍛えて。そして面接練習をたくさんしてください。健闘を祈る。

それでも私は懲りずに、浪人して来年また公務員目指そうと思ってた。だって給料いいんだもん。休みも多いんだもん。

しか自称進学校浪人なんて認めるわけがない。

担任は、専門学校ならまだ間に合う〜とか言ってやはり進学を勧めてくる。

しつこいんですねこれが。でもその時は私はまだ彼を尊敬してたので、進学も視野に入れるようになりました。

じゃあどうせなら自分がやりたいことを考えて、向いてない公務員じゃなく、何か将来の夢を作ってそれを目指してみようかな…と思うようになった。

そして考えて、決めた。私はパソコンが好きだからプログラマーになろう!と。

安直に見えるかもしれないけど、いや実際安直だったかもしれないけど、プログラマーという職に実は前から興味はあった。適性もそれなりにあると思ってた。でも、絶対なりたい!!ってほどでもなかった。大学行くくらいならならなくていいや、って感じ。それほど、大学に行って勉強ってのが私には地獄に思えた。

でも進学進学言われるし、じゃあいっそ情報系の専門学校に進学してちょっとなりたいと思ってるプログラマーを目指してみるか、と思った。

基本勉強は嫌いだけど、興味のあることの勉強なら楽しめるはずだし。

そして調べた。実家の近くに、情報系の専門学校があるじゃないか

パンフを見ると、わあ楽しそう!C言語や、他にもいろいろ情報系のことが学べるようだ。これなら楽しめそう。プログラマーになれそう。レベルも低めで、まあ私なら余裕で受かるだろう。ここにしよう!

嬉々として担任に報告した。ここ行きたいです!とパンフを渡した。

それから数日後。担任に呼び出された。進学の話だ。

お望み通り進学してやるぜ…と、したり顔で職員室に行った。

もう私は既に進学したつもりになって、これから学べるいろんなことに思いを馳せていた。

担任に怒られるまでは。

私が選んだ学校は、レベルが低いことからも推測できるけどあんまり良くない学校で、情報系のくせに就職先は花屋とかホテルマンとか情報関係ない場所ばっかりだった。

私はパンフの楽しそうな授業内容のとこだけ見て浮かれてて、就職先のところを見てなかった。

「何でこの学校選んだの?」

パソコンが好きで…C言語とか学びたくて」

「お前はC言語学んで花屋になりたいの?」

もっとである

もっともなんだけど、威圧がすごくて、怖かった。

私は怒られるのが怖いんだ。

泣きそうだった。実際目に涙が溜まってた。よく耐えたと思う。

担任説教は続く。

プログラマーになりたいって言うけどプログラマーなんて高校生でもなれる」

「そもそもプログラマーが何か分かってるのか。お前はよく分からないものを目指しているのか」

C言語なんて俺でも出来るし今は使われてない。今はjava時代だ」

「授業が楽しそう、で学校を決めていいのか。大事な進路なのにそんな適当に決めていいのか」

尊敬してたんですよ。彼の言ってることはだいたい正しいと思ってたんですよ。

そんな尊敬する、いつも正しい人に、全否定されたんですよ。キレ気味に。恐怖ですよ。これ書いてる今も、ちょっと泣いてる。それくらい怖かった。

だけど、恐怖と同時に少しずつ苛立ちも覚えてきた。

適当に決めたって。確かに今思えば適当だったかも、安直だったかもしれないけど、私は私なりに考えてあの学校にしたんだ。お前らが進学進学うるさいから!自分の興味のあること、学びたいことを考えたんだ!!!

こっちの気も知らないで。何をもってして私が適当に進路を決めたと言ってるんだお前は。勝手に決め付けるな。私の思想をお前が!勝手に決めるな!!

あとこれは今だから思うことなんだけど、プログラマーを、C言語を、馬鹿にするな!!!

当時は詳しくなかったことは事実なので、そうなんだ…って鵜呑みにしたけど、今なら言える。

プログラマーは立派な職業。それを高校生でもなれる底辺職みたいに言って。お前が使ってるスマホパソコン洗濯機電子レンジも全部全部プログラマープログラミングしてるから動いてるんだ!!

C言語大事言語。お前の言うjavaだって構文はCから引き継いでんだよ。馬鹿にするな。馬鹿にするな!!

こんなこと言われたせいで、私はjavaが嫌いになったよ。javaに罪はないのに。javaは便利なのに。あいつのせいでどうしても好きになれなくなってしまった。javaって聞くだけで思い出して、涙が出そうになる。

怒りが募って、もう、嫌になった。

そんな時に降りかかってきた、

「何でそんなに大学進学が嫌なの?」

という質問に、今まで隠してた本当の理由

勉強が嫌いなんです」

これをはっきり言った。

そうしたら、呆れたようにため息を吐かれた。

「じゃあもういいよ。お前の人生だし。勉強から逃げたいなら逃げれば?」

そうさせてもらいます、とは言えなかった。言いたかったけど。そんなこと怖くて言えなかった。

じゃあ考え直します。そう言って面談は終わった。

もうこのままどこにも進路決定せず卒業しちまえと思った。

言われた通り勉強から逃げちまえ。

嫌なことから逃げることの、何が悪いんだ。

2年で散々勉強させといて、まだ私に苦しめというのか。

甘えだって言いたいのか。

こんなことなら。

こんなことな勉強なんてサボれば良かった。

テストなんて白紙で出せば良かった。授業なんて寝てればよかった。

優等生なんてやめて馬鹿になればよかった。

そしたら誰も、私に、進学しろなんて言わなかった。

数週間後、担任が、私が選んだ学校より就職先もしっかりした専門学校パンフを持ってきた。

そこでは私の興味のある、情報系のことも学べるようだった。

そこに行くことに決めた。

それで今、その学校の2年生です。

就職先が決まりました。来春から晴れてシステムエンジニアになります

結局あの人が正しかったんです。

あのまま意地はって自分で選んだ学校に行ってればC言語学んで花屋にでもなってたんでしょう。

あのまま意地はってどこにも行かず卒業してたら最悪ヒキニートにでもなっていたことでしょう。

私が間違ってたんですよ。私が勝手逆ギレしてたんですよ。そうですよ。

でも、正しい、正しくないは置いといて、私にとってあの人の言葉の一つ一つは私のトラウマになったんですよ。

先生

感謝してます

この学校を勧めてくれてありがとうございます

おかげで就職も決まりました。

でも、私、

私にトラウマを植え付けたあなたのことが大嫌いです。

2016-11-20

大多数のプログラマは…

IT業界に努めてもうそろそろ二桁年。

そこそこの企業特にWeb系で渡り歩いた経験から真実を書こう。

一般的プログラマと呼ばれる人たちは

はっきり言う、ほとんどのプログラマ自称する人間の 9 割はコーダーである

言われたものを作る事はできるが、それ以外何も出来ないと言って過言ではなく、何もしない。

そんな驚きの生体をここに晒していく。

一般的コーダー自称プログラマ)は、アプリケーションの基盤が作れない

標準化と呼ばれるプロセスで、プログラマ環境設計、組み合わせ、開発プラットフォームセットアップ、開発環境の構築手順作成、開発手順の作成必要技術考察を行う。

なぜそうなったのかは知らないが、一般的にそうなっている。

その環境に浸っているせいか、彼らはゼロベースものを作ることが出来ない。

彼らにできるのは HelloWorldコマンドプロンプトで表示するプログラム程度の事しか出来ない。

複数ソースの連結、ライブラリの読み込み、サーバへのデプロイ、どれも手動で出来ないのだ。

一般的コーダー自称プログラマ)は、保守性を考えない

彼らは自分に任されたものを動かせればタスクが終了する。

逆にそれ以外のこと、コードの読みやすさや、クローン率の低減、メソッドコメント記載などの保守に関わることをしない。

それは彼らにとって「必要ない無駄作業」としか考えないのだ。

早く仕上げるためなら、似たような動いてる箇所から、よく読みもせずにコピペを行う。

そして彼らは、作るより運用する期間の方が遥かに長くて、その間に修正地獄を見るという簡単論理に気づかない。

…何度味わっても気づかない。

一般的コーダー自称プログラマ)は、勉強しない。

一般的プログラマコーダー)は勉強をしない。

たとえするとしても、業務時間中に業務で使ってる技術ピンポイント学習するだけだ。

勉強会は確かに多い。「.dits」何かがいい例だ。

だが、プログラマと呼ばれる人間の母数に比べれば微々たるものだ。

彼らは言う「土日にまで仕事してられるか」「勉強会行ってるの?馬鹿か?」

あえて言おう、馬鹿は彼らだ。

一般的コーダー自称プログラマ)は、自分の使う道具がわからない

Web仕事をするならIDE統合開発環境エディタコンパイルテストデバッグ実行などを画面から行えるツール)はほとんど必須エディタで済ませる事も出来なくはない)が、彼らは状況に応じたセットアップができない。

たとえば「Mavenプロジェクト管理ツール)、checkstyleコーディング規約チェック)、editorconfig(改行、インデント文字コード設定)」が入っていたとする。

するとEclipseなどを使うとして

  1. どのプラグインを入れればいいか調べられない
  2. どうやってプロジェクトを取り込めばいいかからない
  3. プラグインを入れても設定方法がわからない(IDEデフォルト設定と、プロジェクト内の設定の違いを認識できない)
  4. IDE の設定画面がわからない

マニュアルチュートリアルを用意しないと、道具の使用もままならない。

一般的コーダー自称プログラマ)は、テストコードで書かない

テストをなるべく機械やらせようということの利点が理解できない。

コンパイルして動かして確かめればいいと本気で考えている。

そのために、何十回もコンパイルデプロイアクセスログインの手順を何度も繰り返す。

関連する他の修正を行うたびに繰り返す…。

そしてやっと動くとひと仕事終えたと満足感に浸る。

一般的コーダー自称プログラマ)は、プライドが無いか、変なプライドを持っている

ラリー・ウォールというとある有名な人物Perl開発者にしてC言語ハッカー)がいる。

彼の言う三大美徳に「傲慢」がある。

これは、自分の作るもの完璧なのだ、だから完璧であるように出来る限りのことをするという美徳である

一般的コーダー自称プログラマ)は、このプライドはない。

彼らは金のために嫌々動くだけのものを作るのだ、動きさえすれば報酬は変わらない、よって当然完璧かどうかなどどうでもいい。

同じ金でより良いものを作るのではない、要件だけ満たせばよいのだ。

変なプライドを持つコーダーは、それで運良く成功すると、自分知識は正しい、自分技術は十分なのだと考えている。

こういう人間は、プライドの無いコーダーよりたちが悪く、うまくいかないと他人環境のせいにする。

そして調べず周囲を苛立たせるのだ。

おわりに

土日に自ら勉強会に行くプログラマや、それこそ 50 人以下などという会社であればこうした事はあまりない(んじゃないかと思う。)彼らは自分でなんでもやらないといけないからだ。

だが、大企業に飼われる子飼い企業派遣(そもそも人手のみを求められる企業)、100人以上の企業では、役割分担に伴いこうした状況が多々発生する。

だが役10年、エンジニアを見てきた結果は変わらない。現実問題こうなのだ、こんな人間が大多数なのだ

人の多い企業ほど考えたほうがいい、それでより良いものが生まれるのかと。

必要とされる技術だけを叩き込んで金にしたいと言うのは分からなくないが、基本姿勢思想はどうなんだと。

経営者マネージャーよ、あなた方の言う「最適化」とは現場が日々考え行っている最適化か?人員最適化だけを行って、生産性が伸び悩んでいないか

そのあたりは考えた方がいい。

2016-11-14

Linux勉強して、プログラムってこんなに地味で泥臭いことやってたのかって感動した

windowsしか使ってこなかったからってのもあるんだけど

プログラムって魔法に思えて仕方がなかった

なにがどうなってこれが動いてるんだって思いながらゲームやったりしてたんだけど

部活HP作るってことになってサーバーの本読みながらサイトを公開しようと思ったんだけど

ぜんぶ文字でやっててボタンとかでないからすごいと思った

C言語勉強したときはいつまでたっても絵の話がでなくて文字ばかりで、文字表示ばっかりじゃんっておもったけど

実際文字を処理することで仕事できるんだな

命令するbashかいうやつも、それすら一つのプログラムで、ちゃんとファイル場所があって

あーこれwindowsでもあるPATHってやつじゃんって面白かった

にしてもここからどうやってGUIってやつに進化するんだこいつって思いながら

結局俺はLinuxのことがよくわからないままではある

こいつがどう進化したらwindowsとかみたいに絵になるんだか

それにしても面白い

まりプログラマーってのは俺らにGUIで見せてはいるけど

裏では文字で処理できるようなことをしてるってことだ

ボタンを押すのとコマンドをたたくのは違いがないってことか

から開発者文字だけで処理できるCLIってのがいいのか

しかし絵はどうするんだ

わからん

2016-10-13

英文法で迷ったら、一回プログラミング言語にすると良いよ

なんか知り合いが、↓を読んで、全く判らんが何だこれって言ってたんで解説したのメモっとく

英語が読めるようになるには英語を読むしかないが『日本人の英語』シリーズは読む価値あると思う - しいたげられたしいたけ

制限用法」と「非制限用法」は、「まず制限用法ありき」の用語

日本人英語シリーズは、

「a」と「the」と「何もついてない」名詞が、

全部違う名詞って話から入ってると思うんだけど(うろ覚え

ぶっちゃけ、「the」って言ってんのにそれが自明以外で説明がなかったらキレて良い。

と、英語話者は思ってるってのが、まず大前提にある。

なので、「制限用法」ってのは、

「オレの言ってる姉は、例のアレよアレ、あのアネよ」って制限するって意味がまずある。

で、そのうえで、そうじゃない「非制限用法」がある。

制限用法を、短文で理解するのムリ

そのまんま引用するけど、ここで「older sister(姉)」って言ったあとに、

なんかシカゴとか言ったな、姉の説明ねって、英語話者はボーっと聞いてたら思う。

  • 「こないだ姉ちゃん家行ったんだけどさ、シカゴに住んでる」

これを聞いた日本人は、どう思う?

『そんなん、聞いてる相手によって違うに決まってんじゃねーか』が正解。

  • (息子→父親)「こないだ姉ちゃん家行ってきたんだけど、シカゴの」
    • 父、母、姉、姉、息子の5人家族で、父親は姉が二人居るのを知ってる

この状況だと、父は「ああ、2人の姉のうち、シカゴの方だってのを伝えようと制限したんだな」って考えるわけだ。

まあ、考えないけど。どっちの姉ってああシカゴの方のねって理解するだけで。

これが制限用法ね。

この状況だと、友達は「ほーん、姉ちゃんシカゴに住んでんだ」と素直に思うだろう。

これが非制限用法ね。

おいおい、前提条件で制限用法か非制限用法か違うってナニソレ、とか思うだろ?

それが頻出である文脈によって判断する」ってヤツだよ。

(厳密に言うと、『日本人英語』での説明にも『前提条件無しで短文を読むなら』ってのが常についてると思って読まないといけないハズ)

プログラミングに置き換える

そうすっと、「どういう姉」かを伝えるやり方があって、

  • シカゴに住んでる方の姉貴を訪ねた。

って書いてあったら、日本人は「ほーん、じゃあシカゴに住んでない姉も居るのね」って考えるから

  • 「私には複数の姉があり、そのうち一人がシカゴに住んでいる。私はその姉を訪ねた」

って意味である、ってのが「I visit my older sister who live in Chicago.(コンマなし)」の解説なワケよ。

このまんまだと判り難いだろ?

疑似C言語あたりにすると、こんな感じ。

#define CHICAGO 1

int sister[3] = {45, 43, 41};
int who;

who = CHICAGO;
printf("%d", sister[who]);

まあ結果は43が出てほしいよね。

シスター配列を、CHICAGO指定してんのね。sister指定するのに使う変数who

ならこんな感じ

#define CHICAGO 1

int sister = 43;
int who;

printf("%d", sister);

who = CHICAGO;
printf("%d", who);

カンマで区切られてるから、『一回出力』してんのね。姉だ。

で、その後、どこ住んでるかの番号が出力される感じ。シカゴだ。

英語カンマは、「そこで一回出力してくれ」って命令だと思うのがコツ。

カンマが入っていないwhoは、ワザワザそれを伝えて限定しようとしてると読むべき。

まとめ

英語よりC言語の方が楽。

楽な言語に落とし込んで理解した方が早い。

2016-09-02

情報系の学科に通っています

学問の徒として生きるのは完全に諦めてるし、大学もはや無駄と思ってるけど、無能でない俺ですら無理と思う道であってこんな補助金出してガバガバ教育してる日本金の使い方無駄すぎ……とは思う 

もっとちゃんとした就職予備校設置してほしいけどそういう変革は無理なんだろう。

そういう話じゃないのか。今回はそういう話ではないです。

パソコンのご本を読めるようになるのが難しい、という感じのお話。独学? が難しい。

パソコンのご本、あんまり知識がちゃんとしてない人は読めないようになっているっぽい。

後述するけど、わかりやすいように作られたスクショまみれの本とか。

全体的なビジョンがないわけ。実際の世界がそれで動いてるようなビジョンが。だから読めない。

僕は社会の役に立つことを直接学びたかったよ。社会がどういう風に動いてるかみたいな話をさア

そういうのがあれば、パソコンのご本を読めるようになるんだろうなという感覚がある。

実務の話!! 実際に「IT系のおしごと」というのがやってるような話で、特にコーディングに直接絡んでくるようなもの

技術実態みたいなやつ。そういうのは学校で教わらないんですよね。

優秀な人はバイトとかやって知ってるっぽいけど、それみんなバイトでやるの? みんなはやらんでしょ。

というかバイトみたいな形で社会参画しないと学べない知識だったら、それはそれでやばくないですか? という提起でもあります

はてな民の人IT系で働いてる人多そうだけど、そういうところ、そういうところなんですよね。

そういう知識があれば、大学図書館に置いてあるような「技術本」っぽいやつ? の扱い方がわかるんだろうなーと思う。

いや別にやってきたことは何も無駄にはなってないんだけど。ハードよりの話もしたり、基本的数学とか物理とか電子とか論理学とかシャノンの話とか。

でも、パチョコンは実学も以前に学問というか、実際に使えてナンボな部分が(いまこの想定してる話では)デカすぎるのに、

そんな環境的な、Linuxサバ建てしましょーねーみたいな話も三年後期になるまでやらなくて、そんなん人が立ててるの見たら一発で覚えられることだし、みたいな。

みたいな。

そう、なんというか本が読めないんですよね。これ人がいたら一発なのに……というようなことだらけで、絶対間違った道に来ちゃってるよという感じがする。

(焦ってるんじゃないのか?一冊だけをしっかりやれよ。と思ったりするし、言われそうだけど、それが一番の正解なのかな…やっぱり)

つーか本読みながらチンタラチンタラ比較するの嫌になるわけですよな。わかる。

スクショがいっぱい貼ってあったからといってわかりやすくなるわけではないし……。

てかスクショ貼ってあると古くなるとすぐ対応できなくなるから本当に困りますわよね、という話もあります

僕が何を期待しているのかって?それは実務のうちで難しいお話が出てこない、環境の話、という感じ。

プログラミングをやれと言われても、それIDEはなによ?っつー話ですわな。WindowsだとVisual Studioとかになるのかな。

Eclipseはよくわからない。Javaアプリ作るっていうのそんなに真剣にやったことないし……

っていうかそもそもプログラミングお仕事??がよくできる人たちはプログラミングで何をしているの?

アプリを作っているんですか?それだったらヴィジュアルモードのチェックが簡単なやつ必要だよね、という話で。

あるいは別にアプリなんか作ってないのかもしれないよな。とすると何かしらサーバーを使って捌くようなシステムサービスの細かい調節のお手伝いをしてたりするわけだ。

その具体的なトラフィックがどうだからどうのこうの、というお話をしたり、アクセスの仕方がどうの脆弱性がどうの、新しい技術がどうの、という話だと思うんですけど、

端的に言ってそういう話がぜんぜんわからない。そういう話がわかるとスンナリ進めるはずなんだけどな~と思いながら。

親の金大学行ってるのに、なんかもっとこううまくできるはずなのに……という感じでつらい。

僕は人の役に立つ仕事のおべんきょおがしたいんですよ。なのに図書館で借りられる本、自分が何を知らないか理解できないのかもよくわからない感じで……

日経Linuxとか読んでみて、去年のやつにプロセスとかスレッド説明あったけど、僕はまだOS基本的な話もマトモに理解できていないなので、

そういう人間には難しすぎる (というか抽象的すぎてかなりわからなかった) スケジューリングの話はされたので、プロセス対象なの?とか、そもそもCPUアセンブリ命令ADDとか?を実行しつつ、

OSがそのアセンブリ命令をセットにした実行単位を用意して、OSスケジューリングしてくれる、みたいな話なのかな……? と思った

(でも明らかにプロセススレッドがわからない人間には伝わらないような程度のフワフワ説明しかなくて、これ、誰向けだ?とか思ったけど、やっぱり身近に聞ける人間がいる人のための本なのかもしれないですなあ)。

そういうの、本とか、自分の足りない知識とか、おそらくその辺にあるんだろうな~と思いながら、でもバイトで働くにも微妙プログラミング知識必要で、「これまで何作ってきましたか?」と言われても、

そういう、あんまりしっかりしたものを作ったことないし、C言語gccで可変引数までやって、でもアセンブリがどう実行されるんですか、という話はよくわからない。

Javaも習って、まあそれっぽいお話はいっぱいされたんですけど、アプリ作るの難しかったし、GUIはクソだね、というか、手打ちでやったんですけど、こんなん絶対手打ちより良いやり方ありますやろと思いながらやっていた。

絶対手打ちより良いやり方あるはずだけど、僕は知らんし、知らない以上何が効率的に作れるのかもよくわからないし、わからないことにはできるだけ手を出さない方がいいな、と思う。

いや~なんつーかこういうことばっか書いてると「甘えんなカス氏ね」とかコメントされて、2000回くらいは殺されちゃうんですけど、それは甘んじるとして、でも何というか……みんなそうなんですかね。

年代で「めちゃくちゃプログラミングできちゃいます!(漠然)」みたいな人間いるけど、僕が例えばどういう本読んでどういう道筋を歩んだらそういうカンジになれるか、かなり見えなくてつらいし、

そもそもそういうのを職業にできるスキル高く磨けるような人って、いったいどういう生き方してきたらそうなるんだろう、と思っている。

これで情報系の研究室いって、なんとか乗り切って就活して、プログラムがんばって書きましょうー!というような職場に行ったら、

それはもう「学生じゃないんだから。もう社会人なんだから自分で調べて」となるんですよね。マンガとかでたくさん読みました。それは死ぬほどつらいでしょ。現に人死んでるじゃないですか。

結局周りに聞ける人間がいる環境ってなに? 今もいないし、大人になってもいないんでしょ? だからはてブで「プログラマーはやっぱ自分で本読んでスキルアップしなきゃ死ぬぞ!」みたいなやつがホッテントリになったりするわけでしょ?

それはつらい。ご本読んで理解できないの、というか読めてないの、ウチにあるだけで目が上滑りして「全体像がよくわからいからな~ しょうがないよな~~」と言いながらろくに読む気も起きなくて、

「でも本当に役に立つ本って開いた瞬間に読みやすいのでは?」みたいな信念がある。 これが原因なのかな。でも、この信念、少なくともこれまでめちゃくちゃ役に立ってきたものなんだよなあ……。

学生の今、自分が考えてて不安に感じてることが、「追いつけない」みたいな不安が、イマイチわかり切ってないし、

から具体的な質問として一言で言える話の羅列としてわかってないわけじゃなくて、もっと漠然とわからない。こういうこと感じてるの、僕だけじゃなくてパソコン知りてえ~~となって大学に来た人のうちけっこう多いような気がするんですよね。なんか生半可に甘えた環境から

----------------------

とりあえずこれ書いてたら少し気分落ち着いたので、要点をまとめると、

「本で勉強するのつらいよなあ~ そんなんじゃどんな分野行ってもつらいだろうなあ~」

ということです。

そういう有象無象の本をスパスパッと切って、「この辺のこの本読んどくとこういうことができるようになるだろうな~」というモデルがまだあんまりできてない。

そういうのができるようになるのかと思ってたらあんまり学校でも学べる感じじゃない。全体像とは……となっているけど、こういう悩み、自然解決したりしなかったりするんだろうな。

とりあえず、これは自分メモの今後の方針です。OSより下の階層、たとえばALUとメモリの組み合わせで、program counterを進めながら動いてるんだよーという感覚はあるので、

それがOSとどういう風につながってるのか、とか、100均で売ってる電卓、あのデジタル表示の部分がどういう仕組みで動いてるの、ということを考えたり、

インターネットプロトコルパソコンが具体的にどういうパケット送信しているんだろう、というような話を攻めて、これが全体像とやらが見えるようになる一助になるかはわからないけど、

できるところからできるところだけ勉強していきたいと思います。それが、僕にとって、よくわからない本をじっと読まなきゃいけない義務から抜け出した罰の引き受け方っぽいので。

2016-07-06

コンピュータ言語言語ごとの特徴を俺が教えてやる(異論は認める

コンピュータ言語って世の中に山ほどあるけれど、それぞれの言語ごとに特徴がある(特徴のない言語は廃れていく)。

まり言語に詳しくない人相手に、俺の考えるそれぞれの言語の特徴を書いてみようと思う。

なお、取り上げるのはある程度広く使われている言語に限りたいと思う。

TL;DR

言語概要
C言語高速動作するバイナリ生成を目的としたコンパイル言語。だいたいどんな環境でも使えるがバグやす
C++マニアック言語、高速、習得大変
Javaサーバで高速かつ安定に動作するコンパイル言語、大規模でよく使われる
C#主にWindowsクライアント用のバイナリ生成に使われるコンパイル言語
Perl広く使われていたが今は若干時代遅れのスプリクト言語。汚い
PythonPerlにかわって主流になりつつあるスクリプト言語。綺麗
PHPWeb開発にフォーカスされたスクリプト言語一世を風靡した。
Rubyとても綺麗なスクリプト言語
JavaScriptブラウザで実行出来る唯一の言語言語自体はいまいちだが、ブラウザ事情需要あり
Goサーバサイドで安全かつ高速動作するバイナリ生成を目的としたコンパイル言語

詳細

C言語

メモリに直接アクセスして書き換えるといったコンピュータ機械語に近い言語構文を持つため、高速な処理が可能言語

コンパイラ歴史も古く環境も整っており、組み込み系などを含むほぼ全ての環境で利用可能な万能言語

一方で、メモリの確保や解放といった基本的なことも自前で処理する必要があるため、コーディング効率が良くなく、多種多様バグを生みやすい側面も持つ。

ある程度以上のエンジニアであれば常識として知っておきたい言語だが、初めて覚える言語としてはあまり適当ではない。

C++

C言語オブジェクト指向を導入した言語C++言語とはあまり呼ばれず、しーぷらすぷらす、もしくは略してしーぷらぷら、しーたすたす、などと呼ばれる。

C言語の速度を維持したままオブジェクト指向テンプレートなどの効率的記述可能にしようとした意気は真っ当だったのだが、

当時最先端だった色々な技術思想を叩き込んだおかげで、あり得ないほど複雑化した言語としても有名。

C++理解しています」という人はほぼ初級者で、本当に理解していくほど「C++には自信がありません」となっていく。

速度を追求する分野では良く使われている。完全に理解するのは難しいとしても、テンプレートくらいまでは理解しておくと仕事上なんとかなる…かもしれない。

Java

サーバサイドで安全コードを実行する目的でよく使われる言語。長い歴史を持っており、比較的高速に動作する。

当時は画期的だった「バーチャルマシン」や「ガベージコレクション」という機構を備え、CやC++でよく問題になるメモリ解放忘れというバグを生まず、

サーバサイドなどで何千時間動作するソフトウェアに適した言語として受け入れられた。

必然的エンタープライズ用途で利用されることが多く、各種ツールなども豊富人海戦術がしやす言語という側面も出てきた。

一方でブラウザHello Worldを出すだけでも大変な労力を必要とするので、スタートアップなどではあまり使われない。

ガラケーアプリや(ちょっと違うが)Androidなど、クライアントサイドでも使われることがある。

プログラミング言語最初Javaを覚えるという人は結構多いが、仕事としてJavaを使うのは大抵SI系の業務になり、なかなか辛い労働を強いられる可能性が高い。

C#

クライアントサイドで安全コードを実行する目的でよく使われる言語。こちらも比較的高速に動作する。

元々はWindowsクライアント用の言語であり、Javaとは違ってクライアント向きのAPIが多数ある。

マイクロソフトが開発した言語ということもあり、マイクロソフトの優れた開発環境が利用出来るので開発効率は非常に高い。

Unityなどでも利用可能であるが、基本的にはクライアントの実行形式ファイルを生成する目的が大きく、サーバサイドではあまり使われない。

自作ゲーム開発をしたいのであればうってつけの言語。初めて覚える言語としても十分に良いだろうが、C#を使う仕事は近年無くなりつつある。

Perl

ほぼ全てのLinuxディストリビューションに含まれており、ツールや様々な用途で使われていた。

上に紹介したC、C++JavaC#のようなコンパイル言語とは違い、(少し語弊はあるが)1行ずつ実行してエラーがあれば止まるスクリプト言語である

ちょっと開発してすぐに実行ということが出来るのと、コマンドラインでワンラインコードを読み込ませてちょっとした処理が出来るなど応用範囲の広い言語である

20年近く前にWebCGIが普及した時には、ほぼどのようなサーバ環境でも実行可能だったこともあり、Perlを使うことが極めて多かった。

しかし、主に読みづらい言語仕様のせいで、近年新規ではほとんど使われなくなった。既存コードもどんどん別の言語に置き換えられていることが多い。

日本大手Web企業の一部が使っているので、そこに就職するために覚えるのもアリっちゃアリだけど、今からPerlをわざわざ覚えるのは強くオススメしない。

Python

後発のスプリクト言語。こちらもほぼ全てのLinuxディストリビューションに含まれており、それゆえに広く使われている。

インデントまで言語仕様規定することで、誰が書いても読みやすコードになるように考えられている言語である

Perlの代わりに使われることが増えていて、周辺ツールなども充実しており、小規模から大規模までカバーする勢いがある。

ただ、Python2とPython3のバージョン間での非互換性があまり綺麗に設計されていなかったため、そこで混乱を招いていたこともあった。

最近だとマシンラーニング系のライブラリPythonが使われていたり、海外ではPerlに代わる言語として受け入れられつつある。

最初に覚える言語としては良い選択肢だろう。

PHP

Web開発に特化したスクリプト言語CGIの代わりに使われ始め、一世を風靡した。

以前CGIWebに何かを表示するには比較的大変な労力を割かなければいけなかったのが、PHPを使うと誰でも即座にWeb開発が出来たので爆発的に普及した。

またphp.net豊富ドキュメントスニペットのおかげもあり、開発初期の効率が大変に良い言語である

残念なことに、言語API設計がいけていない点が多く、一部の人から蛇蝎の如く嫌われている。

今でも根強い人気があり、海外でも小規模プロジェクト最初の開発にPHPを選ぶのは比較的よくある選択肢であるようだ。

Webアプリを開発をしたいという明確な目的を持つ人が、最初に学ぶ言語としてPHPを選ぶのは理にかなっていると思う。

なおこの言語を本気でディスってる人は大体視野の狭いエンジニアであることが多いので、地雷エンジニアを見分けるのにも役立つ。

Ruby

綺麗なスクリプト言語日本発で世界的に普及している数少ないIT技術の一つ。

言語仕様が美しく、それゆえにファンが多い。Ruby on RailsというWebフレームワークの登場で、Webアプリでの採用例も一気に増えている。

基本的には他のスクリプト言語と同じくサーバサイドでのプログラミングに用いられることがほとんどである

スクリプト言語で何かを作成するのであれば、Rubyを選んでおけばそう失敗することはない万能言語

サーバサイドで何かすることに興味を持っているならば、最初に覚える言語としてはとてもオススメ出来る。

一方で、なぜかRuby採用するWeb側のフレームワーク(具体的にはprototype.jsCoffeeScriptはいつもクソなので、そちらは深入りしないのが吉。

JavaScript

ブラウザで動くスプリクト言語ブラウザ戦争が勃発していた18年前、奇跡のようなめぐり合わせでベンダー間の合意が取れ実装された言語

言語としてはプロトタイプベースオブジェクト指向という少しめずらしい形式を取っているが、実際にはあまりその特徴は利用されていない。

言語仕様イマイチで、大変バグを生みやす言語であり、また関数スタックが深くなる特性もあり、あまり積極的に使うべき言語ではないが

ブラウザで動く言語現在これしかないので、大きなシェアを持っている。

一部の物好きがサーバサイドでこの言語を使おうと(主にnode.jsで)四苦八苦している(とはいえ、1つの言語Webサーバが完結するのは大きなメリットだ)。

ブラウザで動く唯一の言語のくせにとにかく書くのが面倒ということもあり、多数のAltJSと呼ばれるJavaScriptに変換される別言語を生み出されている。

まあJavaScript本体人が手で書く言語ではない…というのがECMAScript5までの印象だったが、新しい規格が順次導入されており、今後に期待。

Web業界で生きていくならば、好むと好まざるとにかかわらず覚えなければいけない言語である

最初に覚える言語としては、ブラウザ上でゲームなども作れるし、node.jsサーバサイドもできるしで、意外とオススメだったりする。

GO

C、C++Javaと同じでコンパイル言語サーバサイドで高速かつ安定なバイナリを出力することを目的とされ設計されたGoogle発の言語

その目的においてはかなり高性能を誇るので、特に速度を要求されるサーバサイドでのプロジェクトでは導入が進んでいる。

それ以外の目的ではあまりこの言語採用するメリットはないが、ニッチ用途ピンポイントで抑えており、これから広く利用されることも期待される。

コミュニティも活発であり、初めて言語を覚える人が参入すれば喜ばれるだろう。言語としても美しい言語なので、サーバ系のプログラムに興味があればオススメである

まとめ

繰り返しだけれど、それぞれの言語ごとに特徴があり、特徴のない言語は廃れていく。

ここに挙げた言語は何らかの特徴があり、何らかの用途必要なので生き残っている。

その背景を知った上で、ここにある言語は全部ある程度読み書きが出来るようになると素晴らしいと思う。

2016-07-01

人間最適化したアセンブラコードが最速・・・というのはガセ

http://d.hatena.ne.jp/shi3z/20160701/1467330446

C言語のところだけ見て、こんな勘違いする人まだいるんだよなあと思った。

機械語の最適性は環境によるからアセンブラコードでは特定環境最適化したコードしか書けない。

コンパイラによる最適化環境による違いを吸収する。

さらJITコンパイラでは実際の環境に即して最適化をかけられるからネイティブコードよりパフォーマンスが出る場合もある。

2016-06-22

C言語理解するのにまずアセンブラをやるのはありだと思うけど

Webアプリとかを作るのに、メモリ管理とか、繰り返しや分岐が裏でジャンプになってるとか、そんな知識いらんでしょ

2016-06-21

就活終わったし趣味アプリ開発とかWEBサービス開発やりたい

が、何から始めたら良いのかはわからない。

現状はC言語とかを少しかじった程度。

MicrosoftAzureとか、あこがれあるけど、具体的になんなのかとか、どうやればそれを扱えるレベルになるのかがわから

からやれば良いのだろうか

2016-06-17

1.0から学ぶJava

タイトルを見て釣られクマーな皆さんこんにちは

ホッテントリメーカーで作るような煽りタイトルって、みなさんもう見飽きてると思うんですよね。

今調べたらホッテントリメーカー2008年だそうで。どうりでねー。古臭いなーと思いましたよー。

「一から学ぶJava」ってのをね、1.0にするだけでこんなに素敵なタイトルになるんだから面白いですねー。

タイトルを思いついただけだったんですけど、思いついたらやっぱりちゃんと中身も書かないと行けないじゃないですか。やだー

面倒くさいんですけどね。ちょっと1.0から学んでみましょうか。

Java 1.0 1996年1月23日

Javaの1.0がリリースされたのは1996年1月23日ですね。発表されたのが1995年5月23日でJavaの誕生日といった場合にどちらを取るかで揉めることがあります。

かれこれ20年前なわけで、当時のパソコンというとハードウェアはCPU が Pentium 133MHz メモリ16M とかそんな感じだったかなあ。今どきの携帯電話の例としてiPhone 6sを挙げるとCPUが1.85GHz メモリ 2G ってんだから凄いですね。OSは1995年11月23日リリースされたWindows95とかそんな時代背景です。インターネットがようやく一般に普及し始めたところでしょうか。

今から思うと相当弱いハードウェアですけども、そろそろVM方式を採用しても良さそうな、そんな時代でした。インタープリタだと流石に遅い、でもC言語のようなコンパイル言語だと"Write once, run anywhere"とはいかない、という判断もあったのだろうと思います。Javaが純粋なオブジェクト指向言語ではなくintなどのプリミティブ型を持つというのは、当時のマシンスペックを考えた場合、ある程度妥当な判断だったと言えるでしょう。これが後々苦しくなってくるわけなのですが。

Javaを作った会社はSun Microsystems(サン・マイクロシステムズ)というアメリカの会社で、2010年1月27日オラクルにより吸収合併され今はありません。SolarisというOSとSPARCプロセッサでUNIXサーバーの販売で90年代後半までは一人勝ちのような状況だったと聞きます。当時にすでに「ネットワークこそがコンピュータ」(The Network is the Computer)というモットーを掲げてたんだからおかしい。1996年リリースのJavaが標準でネットワーク機能を備えていたのもこのあたりの思想から来ているのかもしれませんね。

当時のプログラミング言語としてC++が挙げられますが、C++でのプログラマへの負担といいますか、ヒューマンエラーの起きやすさといいますか、その辺を改善する目的で開発されたのがJavaだったわけです。

1996年の時点にこんな言語が登場したのですから革新的でした。

いろんな企業がJavaに賛同します。その中にはMicrosoftもありました。この時期、Microsoftは次期のWindows開発用のプラットフォームにJavaを据えようと考えていました。その後、袂を分かつことになるのですが……。

プログラム言語として構文などを見ると、C++を強く意識した構文なのは間違いなく、しかしポインタ演算を廃してポインタを機能を限定した「参照」に置き換えるなど簡素化が多く見られます。C++からはいろんな機能が削られています。関数ポインタ、構造体、演算子オーバーロードテンプレート((テンプレートについては実装が間に合わなかったという話を聞きます))などなど。そのためC++の劣化であるように揶揄する人もいますが、こうしたものを捨てて言語仕様を比較的小さくシンプルに抑えた点は評価に値すると思います。しかし、今でもこうした削減された機能を愛する人からはJavaを腐す要素として挙げられてしまうのでした。

Java 1.1 1997年2月19日

Wikipediaからピックアップすると1.1での大きな機能追加は

といったところです。当初よりJavaの内部文字コードUnicodeで文字を表すchar型は16bitで設計されていました。Unicodeは当時それほど普及しておらず、Unicode対応のテキストエディタさえ少なかったと記憶しています。時代を先取りしていると言えますが、大きな誤算はUnicodeが当初16bitのコードポイントに世界のあらゆる文字を格納しようとしていたことで、漢字圏の我々からすると16bit=65,536程度の空間に文字が全部入るわけないだろ!というものだったが故に早々に破綻し、Unicodeは21bitのコードポイントに拡張されることになるのです。これはまた後の話。

なんにせよ、日本語が対応されたのは1.1からで、日本でのJavaの採用が始まったのはこの頃からと言えましょう。

当時のJavaのGUIはAWTというものでしたが、これを用いたGUIの開発は当時は結構行われていたイメージですね。Visual BASIC でGUIを作るプロダクトも結構あったと思います。GUIのためのオブジェクト指向言語としてJavaが使われていたイメージがありますね。JavaBeansもそのための仕様でした。件のsetter/getterの話題に繋がっていくのですが。

JDBCはJavaとデータベースをつなぐインターフェースです。RMIではあるJava VMから別のJava VMにオブジェクトを送って実行する、といったことができます。こうした機能が用意されたことで、ソフトウェアフロントとしてのGUI、裏方の実装のためのネットワーク機能、データベース機能、さらにはソフトウェアを配布するためのJava Appletという布陣でJavaでのソフトウェア開発が加速していた時代といえます。

Microsoft Visual J++ もこの時代ですよ。

Java 1.1以降のバージョンのものは互換性確認のためにOracle Java Archiveからダウンロードすることができ、今でも入手することができます。もちろん、Java7ですら2015年4月にEOL(End of Life,サポート終了)となっているので、通常利用するのはJava8としてください(本稿執筆時点)。

当時のドキュメントを見るのも一興です。現在と比べると標準APIがかなり小さい。なお、当時のjavadocは今とはデザインが大きく異なります。

  • java.applet
  • java.awt
  • java.awt.datatransfer
  • java.awt.event
  • java.awt.image
  • java.beans
  • java.io
  • java.lang
  • java.lang.reflect
  • java.math
  • java.net
  • java.rmi
  • java.rmi.dgc
  • java.rmi.registry
  • java.rmi.server
  • java.security
  • java.security.acl
  • java.security.interfaces
  • java.sql
  • java.text
  • java.util
  • java.util.zip

この時代であれば、全パッケージを舐めて標準APIを学ぶこともそう難しくはありませんでした。この時代から触っている人間は新バージョンが出るたびに増えるAPIを順に学んでいけたのです。しかし、現代にJavaを学ぶ場合、どのバージョンでは何があって……というのをいちいち学ぶ必要はほぼありません。Java5以前は一緒くたでいいと思いますし、一部のAPIで歴史的経緯があってねーというのを知っていればおそらく十分ではないでしょうか。

Java 1.2 1998年12月8日

strictfpキーワード浮動小数点演算をやる人は覚えておきましょう。JavaはパフォーマンスのためにCPUの浮動小数点演算を扱うことが許されており、そのため実行するCPUによって精度が異なることがあるんですね。まあ今時のCPUだと大丈夫だとは思うんですが。

リフレクション機能ではJavaのクラスを抽象的に扱うことができます。設定ファイルに書かれたクラス名のclassロードして実行する……みたいなことができるんですね。フレームワーク的なものを作る場合には多用することになります。

1.2からは新しいGUIのSwingが採用されました。AWTがOSごとのGUIパーツを用いていたためデザインに違いがあったのに対し、Swingでは統一的なルック・アンド・フィールが用いられるようになりました。まぁ今ならJavaFXを使うのが良いと思います。

初期のJavaはやはりVM方式の実行速度の遅さが指摘されていました。実行時の構文解析を伴わないだけインタープリタよりは早いものの、実行バイナリを作るC/C++よりは遅い、そうした評価です。ここではサン・マイクロシステムズのVMにJIT(ジャストインタイムコンパイラ)が乗ったことが挙げられていますが、JIT自体は別の会社が先駆けて開発していたことは記しておきたいと思います。

JITコンパイラは実行時にJavaのバイトコードを環境のネイティブコードコンパイルして動かす技術です。この後、JITコンパイラ、動的再コンパイル技術、世代別ガベージコレクションを備えたHotspotといった様にJavaVMは進化していきます。現代では実行時の最適化が進み、大きなスケールで見た場合、Javaの実行速度はC/C++での実装と比べてそれほど遅れるものではありません。遅くても倍の時間は掛からない程度といったところでしょうか。

あとは特記すべきはコレクションフレームワークです。皆が多用しているであろうjava.util.Listやjava.util.Mapといったライブラリが整備されたのがこの時なのです。それ以前はjava.util.Vectorやjava.util.Hachtableというクラスが可変長配列の機能を一手に担っていました。今ではVectorやHashtableは使うべきではありません。

Microsoft 離反

Java の開発はSun Microsystems が主導していたけども、すべてがSunのものだったというわけでもなく。Javaには多くの会社が出資していてその中のひとつMicrosoftだったわけですね。

Microsoft の Visual J++ では delegate とか独自機能拡張もありましたけど、裁判で問題になったのは J++ でコンパイルしたclassファイルMicrosoftのVMでしか動かないという部分ですね(他社製のVMで動くclassファイルを作ることもできる)。classファイルがどこのVMでも動くの大事だろ、"Write once, run anywhere"だろ、お前何してくれてんの!と喧嘩になったわけです。当時のMicrosoftブラウザまわりでも独自拡張がやりたい放題、標準規格?なにそれ美味しいの?みたいなスタンスをあちこちで見せていたものです。

結局、この事件でMicrosoftのJavaはバージョン1.1相当でストップ。好き勝手にやれないなら独自に言語作るわーとばかりに.NET フレームワークと C# といった方向に舵を取ります。

JavaがPC上でのUI開発の主力になろうとした勢いはここで潰えます。

Java EE

Java SE とは別にこの時代に Java EEリリースされていることは特記しておきたいですね。これ以後、それまでのCGIに取って代わって、JavaはWebサービスの開発のプラットフォームとして多用されるようになります。

2000年あたりからはJavaはGUI開発というよりは、Webサービスの開発が主流という流れになっていきます。インターネットサービスが非常に発達していった時代、背後ではとてつもない量のJavaのプログラムが支えていたわけです。ただまあ、こうした産業利用は一般的ユーザーの目にはあまり入らないわけです。一般人からすればJavaといえばJava Appletみたいなイメージはずっと残っていたでしょうが、実体としてはJavaといえばServletという時代になっていたわけです。

企業で用いられる社内システムにもServletは多く採用されました。

理由はいろいろ挙げれると思うのですが

というのが大きな理由だろうと思います。JSPというテンプレートエンジンを用いてHTMLを整形してWebページを作り出す、というアーキテクチャある意味では便利で簡単でした。

もっともHTMLの表現力に足を引きずられるため、GUIの機能性という点では後退したわけなのですが。それでもメリットが大きいと判断されたのでしょう。というか、まともにGUIを組めるプログラマがほとんどいないから、GUIのシステム開発がなかなか成功しないってのもあったんでしょうけどね。

iアプリ Javaアプリ EZアプリ

2000年あたりというと携帯電話の普及も取り上げなければなりません。現代のスマホガラケーに比べれば非常に機能は貧弱で、まさに携帯「電話」でした。要するに電話とメールぐらいしかできなかったんですね。

そこにdocomoiアプリJフォン(ボーダフォンを経て現ソフトバンク)のJavaアプリ、auのEZアプリという携帯電話上でちょっとしたアプリが動くよ!というのが乗るようになってきたんです。これがJavaを組込み用途にコンパクトにしたJava MEというものが土台となっていて(正確にはiアプリちょっと違う)Servletと並ぶJava言語の大きなもうひとつの領域となっていました。

iアプリは当初は容量が10k byteまでといった制約があり、容量制限が非常に厳しかったのですが、新機種が出るたびに容量は緩和されていきました。

docomoiアプリ含めiモードによって一世を風靡します。こうした土台を作ると、その上で商売をしたい人がたくさんやってきて、勝手にコンテンツを作ってくれる。docomoはそれらから手数料を取るので労せずして大金を稼げるというわけです。賭場の胴元というわけです。

この賭場が、将来にAppleiPhone, GoogleAndroidに荒らされることになります。docomoがなかなかiPhoneを出さなかったのもiモードという自前の賭場を失うことを良しとしなかったためです。金づるを失ったdocomoSamsungと組んで独自の携帯向けOSであるTizenの開発に乗り出します。そんなTizenですが鳴かず飛ばず。噂ではインドあたりではリリースされたとか、なんとか。

RIA時代

話を2001年に戻しましょう。

Microsoft離反でGUIのプラットフォームとしてのJavaというものは存在感を弱めていました。この分野の復権に寄与したのはJava 1.4 (2002年2月6日)で導入されたJava Web Startです。

Java Appletブラウザ埋め込みで動作したのに対し、Java Web Startではブラウザから起動しつつも独立したアプリとして起動するのです。

Webシステムが企業の社内システムに採用された話は先に述べたとおりですが、やはりWebシステムのGUIというのはHTMLに引きずられて貧弱だったんですね。

端的に言えば入力値が数字かどうか?みたいなチェックがなかなか難しい。HTML上でJavaScriptでやるわけなんですが、なかなか気持よく入力できるような感じにはならなかったんですね。

また、Ajaxによるブラウザのページ遷移を伴わない通信というのが出てきたのも2005年ぐらいなので、入力値に対してサーバ問い合わせするようなことはできなかった。当時だと一旦画面遷移させないとできなかったわけです。

こうした事情から、クライアントサイド、要するにPC側でもっとリッチなUIが使いたい!という要望があったわけです。Webシステム使いにくい!という不満の噴出と言ってもいい。そこで出てきたのがRIA (Rich Internet Applications)というわけです。

Javaは1.0時代のAppletからそうですが、ネットワークを介して別のPCにプログラムを送り込み、そこで動作させるという能力を持っていました。それこそまさにRIAに求められる機能性だったわけですね。

RIAの代表とされるのは

あたりです。三つ巴の戦い、どこに軍配が上がるのか!?と注目されましたが、勝利したのはHTML / JavaScriptでした。

Google MAP で注目を浴びたAjax技術、それまでブラウザでは不可能と思われていた高級なGUIをHTML / JavaScriptで実現させました。もうやめて欲しいですよね。せっかく脱ブラウザの流れが来たと思ったのにまたWebシステムに逆戻りですよ。

RIAが失速した理由として考慮して置かなければいけないのはスマートフォンの台頭です。RIAでは端末を選ばずどこでも同じアプリが動かせる点がポイントひとつでしたが、スマートフォンではそうは行かない。"Write once, run anywhere"を破壊したのはスマートフォンだったというわけです。

しかし、先日インストールなしでアプリを実行するAndroid Instant Appsが発表されたりしまして、結局RIAの思想といいますか、要求というのは今でも息づいているのだなと思った次第です。

Java 5 (2004年9月30日)

1.3 / 1.4 では機能追加はあっても言語構文が大きく変わることはありませんでした。大きく変わったのはJava 5です。この時からバージョニングが変わって1.5ではなく5と表記されるようになりました。

Java5の特徴はなんといってもジェネリクス。それまでjava.util.Listにデータを出し入れするのにはキャストが必須だったわけですが、ようやくキャストから開放され型の安全度がぐっと高まりました。その他に以下のような変更があります。

言語としては随分変わっったわけですが、もうかれこれ10年以上前のことですからこれらの機能が「Java5から導入された」という知識は今となってはあまり必要とされません。これらの機能が使えないJava 1.4で開発をする事案が殆ど無いからです。0ではないのが悲しいところではありますが。

その後

Java 6 (2006年12月11日)がリリースされた後、Java 7 (2011年7月28日) が出るまでJavaは停滞してしまいます。その間にSun Microsystemsという会社がなくなってしまったためです。

Sun Microsystems の経営状況が悪化しており、ついに身売りをすることになりました。身売り先はIBMともGoogleとも噂されましたが結局2010年1月27日オラクル吸収合併されました。

Javaの停滞中にはJava VM上で動く非Java言語も台頭してきました。Scalaなどですね。

やや戻って2007年Androidが発表されます。Androidの開発言語にはJavaが採用されていますが、実行環境はJava VMではなく、ライセンス的な事情でJava(TM)は名乗らない微妙な位置関係にあります。

Java 5 以降で大きく言語仕様に手が入るのは Java 8 (2014年3月18日)です。並列処理を行うためのStream APIと、そのために簡易に関数を定義するためのラムダ式が導入された点が大きいですね。日付APIも刷新されました。

このように、Javaは1.1の黄金時代から今に至るまで利用ジャンルを転戦しながら産業の土台となって支えてきた歴史があります。ジャンルの趨勢により浮き沈みもあります。今後についても決して楽観視はできないでしょう。Javaを学ぶことはプログラミングを学ぶステップとしては意義はあると思いますが、Javaを学べばゴールというわけではありません。プログラム言語次世代へと移りつつあります。業界動向には注視していきましょう。

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん