「C言語」を含む日記 RSS

はてなキーワード: 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言語おかしい」みたいな事を言ったら、めちゃくちゃ叩かれるんだよな。

2017-01-08

なんか書けたから続き書く ②

http://anond.hatelabo.jp/20170108153642 の続き。 


もちろん、日本に対する贖罪意識からボランティアじゃなく、ただ日本共産主義に染まったり太平洋ソ連艦隊が出てきて好き勝手暴れる状態が面倒だったからという、100%米国の都合ではある。

ダグラス・マッカーサーが言うように、当初は「日本農業軽工業の国にする」つもりだった。

連合国軍最高司令官総司令部

https://ja.wikipedia.org/wiki/%E9%80%A3%E5%90%88%E5%9B%BD%E8%BB%8D%E6%9C%80%E9%AB%98%E5%8F%B8%E4%BB%A4%E5%AE%98%E7%B7%8F%E5%8F%B8%E4%BB%A4%E9%83%A8

日本中の主要都市空襲で焼き払い、原爆投下を2回もやられたら、やられた側は事情は別として恨む。

恨みを買っている相手国をただ強く豊かにすると反撃されるだけなので、日本軍事政治の主導権は一切与えず、

日本におびただしい総領事館大使館を置いて冷戦終了まで日本コントロールした。

恋ダンス米国大使館・総領事館バージョン

https://www.youtube.com/watch?v=7xuXlpvWw1I

奴隷平和は望まない」と言いながら小泉純一郎氏が結果的米国奴隷的な首相となり、戦前戦時中労働環境への反省から労働基準法中間搾取を禁じたにもかかわらず、

派遣社員労働形態中間搾取と変わらないようなものにしてしまったり、女系天皇を認めそうになった。

アメリカ日本研究つくしているので、どのポイントをつついたら総崩れになるかを理解している。

アメリカの言うことをよく聞く首相戦後日本長期政権を築くという史実がある。

東大スタンフォード大を卒業した鳩山元首相をはじめ、旧帝大東工大などの難関国立大卒業者中心で日本最高峰エリート集団形成されたのが民主党政権だった。

あれ以上のハイスペック日本人を集めた政権を作るのはほぼ無理なのであるしかし不評を買って自民党政権が戻って現在に至っている。



自民党はずっとアメリカコントロール下にあった政権だが、アメリカ傀儡のほうが日本エリートよりも良い政治をする。

これが民主党政権で得られた結論だった。それもそのはず、明治維新GHQ占領政府を見ればわかるとおり

日本人は0から現代国家システムを築いた経験がない。

日本は『調整』するのはうまいのですが、根本的に一から作り変えるという思考のものがないのです -デービットアトキンソン

https://hbol.jp/122527


C言語を使っていろいろプログラミングしてるけど、C言語を考えたのはそもそもアメリカ人です、

ウィンドウズのOS使って仕事してるけどOS作ったのはアメリカ会社ですよ、という図式が国家間文明間、そして白人と非白人関係に成り立ってしまう。

欧米白人が作ったもので、非欧米白人じゃない人々が豊かになる構図である



これまで労働許可不要だったオランダ日本国籍者が働くのに労働許可必要となり http://www.nfia-japan.com/news_jp.html?id=237

移民受け入れ積極的だった欧州全体が移民消極的になってきている。排除される移民には日本人も含まれていると考えたほうがいいかもしれない。


欧米管理下を離れると勝手にゴタゴタして自壊するのが日本近現代史だけど、次に日本を立て直す白人様は居るのか?まさか・・・ロシア

白人キリスト教隣人愛を捨てた時代は、結構日本にとって生存不能レベルに厳しいものになりそうだ。

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 広く使われていたが今は若干時代遅れのスプリクト言語。汚い
Python Perlにかわって主流になりつつあるスクリプト言語。綺麗
PHP Web開発にフォーカスされたスクリプト言語一世を風靡した。
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を学べばゴールというわけではありません。プログラム言語次世代へと移りつつあります。業界動向には注視していきましょう。

2016-05-29

富士通退職した話」に言及とついでに自分の話でも。

自分も前に富士通に居て既に退職してます。後で詳しく書くけど、ソフトウェア開発職に居たです。

富士通を退職した話

彼のへの感想

富士通はクソでっかい会社なんだし、サイト見ればメインフレームやってるのだって判るんだから、開発職を希望したらメインフレーム関連の開発やる可能性あるのは当然予見出来るだろうし、それを想像してなかったのなら情弱とかブコメで言われてしまうよね。あと何も記述が無いか想像だけど、「それほど有能ではない」と判断された可能性もある。と言っても学生が思う「開発者として有能かどうか」ってのと会社でのそれってのは別物で、要するに学生自身自分が実績もあって優秀だと思っても、会社的にはそうでないのよね。そうなると(後述の富士通入社して10年が経った人の話にもあるのだけど)新人能力客観的判断材料って大学資格応用情報レベル以上)程度なのよね。資格に関しても基本情報なんてMARCHクラス以上の人間なら受けたら取れて当然だから、「有能かどうか」の判断材料にならない。就活の際に本気でIT業界に入りたいかどうかの判断材料にはなる程度。自分の同世代富士通本体に入ってソフトウェア開発関連に配属された人のプロフィールを見たけど、確か偏差値的には少なくとも神戸大学とか千葉大学あたりの修士しか居なかった覚えがある。あと確か2~3人がソフ開持ってた気がする。だから、この増田がどの程度だったのかなと。

ただ、20人月案件が具体的に何かは判らないのだけど、自分の在籍していた当時でも炎上巨大案件というのはあって、(自分が知ってるのは確かデジタルテレビがどうのこうのとか言ってた)、そういうのに入社して間もなく入ってしまうと自身勉強等が出来なかったり潰されたり最悪死んだりするんで、そういう意味でも逃げるのは正解の一つ。(自分炎上案件に放り込まれ新人が寮で死んでたとか話を聞いたことある

上司対応はまあこれだけ見ればクソだわな。


富士通を退職して思うこと

はあ、としか。この人がこう判断した際の判断材料にするであろう自己体験を具体的に書いてないので、意識高い系がフカしてるようにしか見えない。あと、たった3年しか居なくてあの巨大企業経営とか体制とか理解出来るんかね?と思わないでもない。自分とは部署が違うだろうから当然かもしれないけど、自分体験とは違うなーって感じ。自分は、外から見たら馬鹿みたいな事やってるように見えるかもしれないけど、経緯や目的巨大企業特有問題があってそうなってるんだなって思う事が多々あった。


富士通に入社して10年が経った - blog

近い時期に入社したと思われる。具体的な話が自分経験と一致してる。特に富士通ソフトウェア開発と言えばミドルウェアの開発が主だというのは、富士通内部じゃないとなかなか(特に学生なんかじゃ)判らないかなと。

それでこれらの話を見てどんな人が富士通(というか大企業)に向くのかなと考えたんだけど、「やりたいこと」そこまで明確じゃないけどコンピュータは嫌いじゃないって感じで、地頭がまあまあ良くて勉強に関しても要領よくやれる(要するにそこそこの大学に行って卒業した人)、それでそこそこ安定した職・収入目当てな人かなと。ってコレ書いててふわふわしてる人みたいであまり良い印象の人物像じゃないな。マッチングミスはどうしても起きると思うし、学生の頃に思う「やりたい事」って往々にして変わったり間違いだったりするし、そもそも学生の頃に明確な「やりたい事」がある人の方が少数派でしょ。だからこういうそこそこ優秀だけどふわふわしてる人の方が良いんじゃないかなとか。逆に、ちゃんと「やりたい事」が明確にあるけどまあ安定はしたいって人はどうしたらいいのかって言うと、自分みたく大企業の子会社を狙うと良いんじゃないかなと。子会社ならその会社がやってる事が理解やすいし、入った後の配属の希望も大きく違ったものにはなりにくいし。まあ子会社子会社で色々アルかもしれないけど。

で、自分入社から退社までの話。

入社10年ぐらい前。入ったのは富士通の子会社で主にミドルウェアの開発をやっている所でした。入社して1~2年したら子会社の統廃合とのことで富士通本体連携してる部署自分がそうだった)は富士通本体になりますとのことで富士通本体の方に移ったという経緯ですね。別に待遇とか元々本体と同じだったから変わらず、事務関連が小回りきかなくなったぐらい。入社してから退職までは5年ぐらいでした。辞めた理由実家事業を継ぐ事にしたため。

入社して数ヶ月の時にある温泉地にある某所でその手の開発をやってる子会社沢山と

富士通本体ソフト開発配属の人達研修をやったのだけど、その際に富士通本体人達と知り合った。(この際に全員のプロフィール冊子が配られた)そのときは流石子会社に入る人達本体とじゃレベルが違うな~と思いましたね。(ちなみに自分MARCHより下の院卒。)

自分が配属されたのは某製品部署API部分チーム。その製品C言語Java言語からも使えるように出入り口を用意する部分。中でやってる事は指定されたIPポートプロトコルに沿ってデータ投げるだけなんだけどね。ちなみに配属希望の際は「そこそこの忙しさの所がイイ」と言っていました。「バリバリに働きたい」と言ってた同期は多忙ヤバい所に配属されてました。他にもチームがいくつかあったけど、それらのうちの一つは例の「山奥の工場」でしたね。自分が配属された当時はC言語APIリニューアルするって開発してたのだけど、設計担当Javaしかやったことない人で色々とC言語流儀に反してて後々のメンテが大変でした。まあそれでもリニューアル前よりは遙かに良くて、以前はユーザに見せてる関数名が ○○search1 ○○search2 ○○search3 とかでしたね(ちなみに機能はそれサーチか?思うのもあった)。もっと酷かったのが初期製品Javaの公開メソッドで、マニュアルには「このメソッド引数○○を□□を指定した場合戻り値Objectを△△にキャストしてください。××を指定場合は…」という「これ製品にして売ってたんだ…」と思うレベル。もちろんコレがダメだったってのは開発側も認識していて当時は既にリニューアル済みだったけど。リニューアル済みでも少し微妙だったけどね。

これは、ミドルウェアの開発をやってる人達って基本的C言語が主でJavaとかをやってる人がほぼ居なかったからだと思う。上司もそういうのは良くないってのは認識してた。対象OSWindowsLinuxSolarisだったけど、そんなにたいした事やってなかったからほぼ同じコードだったような。ソケットの一部だけ違ってたっけかな。

それでそのバージョンの開発が終わったあたりで、.NET Frameworkが出始めてきたので次バージョンでは.NET FrameworkAPIを作る事になりまして、自分が少し勉強していたのでそれの設計から担当する事に。当時は.NET Framework 1.1で今思えば少し時期が早かったと思う。2.0Genericが出てからやった方が良かったと思うんだけど、そういうの政治的判断だし結果論だしなー。それまでにRubyとかオブジェクト指向言語に触れてその辺の勉強もしていたので、.NET用のAPIに関しては設計実装結構良い感じに出来たと思う。ああ、そういえばRuby用のAPI効率化の開発ツールとかの名目仕事中に勝手に作ってたなあ。他にもC言語APIも内部実装がクソすぎ!とキレてユーザ公開関数インターフェースだけ同じで中身をフルスクラッチした事も。もちろん絶対LDしてるんで完全に趣味なんだけどな。これでAPIC言語Java.NETになった訳だけど、現場案件で使われたのってほぼ全てJavaだったと思う。(開発中のサーバテストアプリC言語だけど)。要するに自分が数年関わったコードが世の中ではほぼ使われてない訳でして、取りそろえとして必要だったとはいえ世の中の役に立ってないってのは嬉しくは無かったですね。まあ、大企業仕事なんてそういうもんです。.NETに関してはそのバージョンが出る頃はその製品があまり売れてなかったんだか使われたって話は聞かなかったですね。ほほほ。大企業に勤めるのならこういう覚悟必要かもね。

で、.NETAPIが出来たあたりに開発ネタがなくなって保守気味になってきたので、人員整理作業整理との事でインストーラと切りたいけど一度やったからには切れない補助製品担当が増える事に。インストーラWindowsがInstallShieldというクソみたいな言語上で作られたものLinuxSolarisシェルスクリプトのもので、InsallShieldの方のコードはあまりにクソなのでリファクタリングさせてもらった。この辺の開発は少なかったのだけど新OS対応(Vistaとか)とか保守作業が大変だった覚えある。

んで、これらの作業が終わったあたりでこの製品でやることが無くなってきたのと同時に、この製品派生製品の話が出てきてて、それは1機能1exeで提供されてて、それらを纏めるバッチ処理機能部分を担当することに。バッチ処理の内容・順番を記述するのにXMLを使う事になったのでXMLのパーサが必要なのだけど、色々調べたら富士通内部でパーサ作ってたのでそれをもらって使う事に。そのパーサはC++からじゃないと使えなかったのだけど、趣味C++勉強してたので何とかなった。あと、結構OSの知識(プロセスとか)が必要WindowsLinuxSolarisで動くコードを書く必要があってまあまあ大変でした(と言ってもifdefで切り分けるだけなんだけど)。けど、これらの開発は自分が一から設計してコードを書いていたので楽しかったですね。それでこれが完成するかしないかあたりで、このバッチ処理機能が他の開発中の製品バッチ処理に使えないかとか話が出てきたあたりで自分退職する事に。(退職の話は1年ぐらい前に話し合って決定済み)引き継ぎをして退職ということになりました。最後は溜まった有給を使う予定でまだ在籍中だけど部屋を引き払って実家に帰ってたのだけど、打ち合わせに来て欲しいって言われてしま実家から何日か通ったのは良い想い出。というかまさか実家から朝8時に間に合うとは思って無かった。

振り返ってみて残業時間は月40~60時間が多かったかな。100時間超えた時は上司に怒られた。あと退職前の1年ぐらいはうちの事業本部(だったかな?)単位残業禁止になってホント残業0時間になった時期があった。他の部署の人の話で、どう考えても狂ってる上司の話とかを聞いてると上司とかの運は良かったと思う。あと、やっぱり仕事でみっちりプログラミングが出来たのは運が良かったと思う。富士通ソフト開発で C C++ C# Java シェルスクリプト InstallShieldとか(そんなに深くはないけど)色々やれた人間はそうそう居ないんじゃないかな。同期とかの仕事は年上の人の派遣の人に指示出したり取り仕切ったりする仕事とか、保守サポートみたいな開発じゃない仕事の話も良く聞いていたので、ソフト開発のキモ体験出来たのは良かったです(こなみ)。

2016-05-23

http://anond.hatelabo.jp/20160520093920

仮にCが純粋関数型言語で、岡部FRPのx.t=x.t+1;も関数型なんだったら、C言語のx=x+1;も関数型だよね。

岡部氏の本でさんざん「x=x+1;は論理破綻」って批判してたのは何だったんだろう。

というか普通のCやJavaScript関数型なんだったら、岡部関数型の存在意義は……

2016-05-22

http://anond.hatelabo.jp/20160520083417

「滅多なことが言えなくなった」としたら、nonstarter氏のブログのように

岡部氏に反する意見を言うと激しく荒らされるからですね。

迷惑がかかるといけないのでリンクしませんが、

住井氏は関数型言語に関する世界最高峰の国際会議委員長ですね。

エリオット氏のブログは、岡部氏が引用していない部分を読むと、

C言語の「プリプロセッサが」Cプログラムを「生成する」ので、

HaskellのIOモナドがIOアクションを生成するのと同様に

純粋関数型言語とみなせる、という主旨のことが書かれていますね。

岡部氏は「プリプロセッサ」という部分を引用していないようですが。

2016-05-21

C言語純粋関数型?

岡部健が「C言語純粋関数型だ」と言い始めたんだけど、この人正常なんだろうか。

>ttp://kenokabe-techwriting.blogspot.jp/2016/05/c.html

俺は最初レトリックのつもりで書いたタイトルだと思って読んだんだが、違うみたいなんだよね。

(多分、今後責め立てられたらそう言いだすんだろうけど・・・・)

ただ、この人はJavaScriptを使った関数型言語の本を出しているんだけど、そのような珍妙な説には触れていない。

最近そういう持論を持つようになったのかな。

ログイン ユーザー登録
ようこそ ゲスト さん