「オブジェクト指向言語」を含む日記 RSS

はてなキーワード: オブジェクト指向言語とは

2019-02-07

未来COBOLくらいの単純な言語覇権を握ると思う

変数スコープ概念が薄くて、データ構造配列くらいで、IFとループだけでロジックを組むみたいな。

記述が膨大で、静的型なのが欠点だけど、そこらあたりを克服したらすごいことになると思う。

オブジェクト指向言語を使ってる現場でも、オブジェクト指向らしい書き方をしてるところは皆無だし。

(世の中、イキってるWeb系の会社くらいでしかオブジェクト指向機能なんて使われてない)

オブジェクト指向やら関数型やら人類には難しすぎる。

2018-11-09

”今後必要になる〜”の著者がうちの派遣おっさんだった

かなり興奮しているし酔っているので要領を得ないかも。

今日急にうちに派遣で来てるおっさんに飲みに誘われて、会社の近くの安い居酒屋につれていかれた。

なんで誘われたかというとこれもうまく言えないのだが、チームや全体での飲み会で近くにいることが多く、不幸なことに自分が少し聞き上手だからかもしれない。

とにかく席についてビールが来ないうちに、人をばかにしたような半笑いで話を切り出された。

おっさんが持っている10年も前にあったようなガラケーメモ帳画面を見せられ、君になら理解できるだろうとかクィータとかいサイトにはろくな人材がいないとかブツブツ言っていて、俺はメモの中身を読み進めているうちに顔が引きつっていくのがわかってなぜか記事自体よりもそのことで笑いが止まらなくなりそうなった。

しばらく自分はどうすればいいのか知らないふりをするべきか、なだめたほうがいいのかまじでわからなかったのだが、結局記事の本意を聞きたい好奇心には打ち勝てなかった。

ちなみに自分仕事場ではWinXPが現役で動いている。派遣おっさんも含め会社がそういうカラーだと言えば伝わるだろうか。

自分趣味でReact(ないしReactNative) とかで家計簿アプリを作っているし、Androidも(それこそJavaでだが)やっていてちょっと新しい技術は知っているというレベルである

・「マスター言語」について

端的に言うと「必修」という意味で使ったらしい。ルー大柴かおまえは。いや意味が通ってないしルーに失礼か。

JavaJavascriptが同列になっている点について

どうやらプロトタイプベースオブジェクト志向という意味をはきちがえている。

まりJavascriptはオブジェクト指向言語プロトタイプとして生まれ言語であり、完全オブジェクト指向言語(これも意味がわからなかった)のJavaとは切っても切り離せない関係であると思っているらしい。もう自分はここらへんから笑いが変な声で漏れる笑いを堪えられなくなっていて、喘息気味なんですとかアホな言い訳必死ごまかそうとしていたんだけれど、この派遣おっさんに対してそこまで気を使っている自分にも笑いが止まらなくなってまあなんというか、おもしろかった。

RubyJavaサブルーチンとは

Rubyが(というかRORが?)動作が遅いという話をどこかで読んだか聞いたかしたらしく、そして動作が遅いかわりに処理がしっかりしている(現文ママ)という位置付けの言語だと思っているらしい。正確性が必要な処理はサブルーチンにしたRubyに投げるべきだとかなんとか。

パッセンジャーよりもエンジンクスにひもづけるべき(現文ママ)とか言っててもうビールがまずくて仕方ない。

MSDN

自分MSDN学生時代にVisualC++とかで使ったことがあって、デスクトップアプリ用のライブラリだとずっと思ってたんだけど、違うんですかね。(無知

MSDM(何度聞いてもエムにしか聞こえない)の逆アセンブリ言語C++だとか、ここの話は輪をかけて本当に何言ってるのかわからなかった。

ねこのことを考えて耐えた。

SQL

あんま深く考えてなかったらしい。言語名前がついているか言語のくくりに入れた、くらいのスタンス

ちなみになぜか、使ったこともないらしいSQLiteで配列型を使えないことは知っていた。

と、ひと通り聞きたかたことを聞いた後、もうなんか疲れ果てたのでビールを半分残して帰った。

よほど調子が悪く見えたらしく、おっさんはひどく自分のことを心配してくれた。ごめんおっさん

2018-09-19

anond:20180919015322

そもそもオブジェクト指向のものが40年以上前技術だろが。

生物が単純な細胞の組み合わせと相互作用で複雑なシステム構成するモデルに習って、単純なオブジェクトメッセージパッシングの組み合わせでプログラム表現する事で、プログラムを完結する小さなオブジェクトという単位に分割し、管理困難な複雑さに対処する事がオブジェクト指向本質だろ。

構造化との違いはデータ構造管理単位に含めた事で、これによって複雑な状態管理オブジェクトの中に閉じ込め、インターフェースだけ意識すれば良くなった点。

本質理解していればオブジェクト指向プログラム作るのにオブジェクト指向言語とか必要ない。ジェネリクスとかそもそもオブジェクト指向関係ないし、後付けのいろんな用語に騙されて本質を見失うなよ。

日本語オブジェクト指向が相性良いと言われてたのは日本語語順オブジェクトメソッドというプログラム上での表現に似ているから、日本語話者にはすんなり理解やすいよねって点。

2018-09-18

anond:20180918233214

えー……そうかー?

オブジェクト指向言語の「言葉」ってそのものコンピュータお気持ち位に思ってるけど。少なからメモリ理屈を知ってなきゃまともな言葉は交わせんやろ。

2018-04-02

低級言語的なやつとオブジェクト指向言語関数型言語やれば一通りのプラグラミング言語対応できる?

具体的にはcとjavahaskellやろうと思ってる

cはもうすでに勉強してて一通りの仕様理解してるしょぼいプログラムなら書ける

2018-01-14

anond:20180114172059

増田みたいな匿名掲示板自作してみるとか

強いSEならIaaSの扱い方からオブジェクト指向言語javascriptまで一通り知ってなきゃだろうし

2017-03-27

それはオブジェクト指向言語を使ってるからでしょ

そういう意味ではJavaなのにstaticばかり使うおじさんは、やっぱり馬鹿にされてしまうか

2016-11-05

なぜソースじゃなく詳細設計を欲しがるのか

Javaを始めとするオブジェクト指向言語による開発になると、設計手法も従来とは大きく変わる。

その結果、不要になるドキュメントが出てくる。

詳細設計のことだ。

ここでいう詳細設計とは、本来コード記述する処理を、逐一日本語で書き下したものを指す。

てか、そんな物を読むくらいなら、現物ソース読めよって話だ。

だいたい、ソースに書くレベル粒度記述を、なんでいちいち日本語なんて表記揺れも甚だしいフォーマットで書かにゃならんのだ。

何よりソース修正が入ると、遡って詳細設計も直さないと整合性が取れなくなるので、言うなれば二重に工数を掛けることになる。

「違うよ、設計を直して実装するんだよ」というが、合理性を重んじるSEPGという人種が、実質同じ内容を何度も書きたがるわけがない。

それに、単体テストくらいまでの段階ならともかく、開発要員が縮小される結合テストシステムテスト以降で、そんなことをしている余裕など現場にはない。

結果、実装と合ってないドキュメントけが放置されてしまう。


でも、そうなることが目に見えているにも関わらず、欲しがる客や元請が後を絶たない。

負担ばっかり増えて、尚且つ無意味作業やらせるなって感じ。

なんでそんなに「日本語訳」が欲しいの?

ぶっちゃけソースコードレビューでいいじゃん。

もし客がソースを読めないなら、その時に客が読みたい部分だけを元請が訳して説明すればいい(全部読みたがるヒマな客なんてそうそういないだろうし)。

そして元請はITプロなんだからソースなんてスラスラ読めて当然なわけで。英語読めない英語専門家存在しないのと同じ理屈ね。

それこそ読み取り専用でリポジトリアカウントの一つや二つくらいいつでも作れるので、ソース抜き打ちレビューどうぞって話だ。


はいえ、別に何も「真実ソースただ一つ!」なんて言うつもりはない。

ソースに行き着くまでにも考えることは色々あって、その考えた結果は全て形に残さなければならない。

ソースもまた考えた結果の成果物の一形態であり、他の形態が、各フェーズで書くドキュメントなのだと思っている。

そしてドキュメントがあるお陰で、システムがトラブった時もいきなりソース問題箇所を探し回る苦労から解放されるのだ。

ドキュメントを手がかりに「このクラスの、このメソッドが怪しい」まで行き着いてから、そこで初めてソース確認すればいいと。

Javaだったら、ユースケース図、アクティティ図、クラス図、シーケンス図、Javadocによるメソッド説明と読み込んでいってアタリを付け、それから当該メソッドソースを読めばいい。

逆に言えば、記述粒度が同じ成果物は2種類以上も要らない。整合性を保つための手間が増えるだけなので。

詳細設計書は不要というのはそういうことだ。

つーか「ソースが読めないか日本語訳を渡せ」とか甘えんな

2016-07-18

日本語文章中の英語表記


例: プログラミング言語説明に「Method(メソッド)」という単語が出現した場合


例: ライフハックブログヨガについての記事に「Method(メソッド)」という単語が出現した場合

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-04-22

プログラミング。好きだけど、さようなら

追記(2015 5/20)

洋食屋ジョブチェンジを果たしました。

---

1年の間、プログラマとして働いていたが、続けていくことが無理だと思い、さようならする話。

プログラマになる前は、コーヒー屋で働いていた。しかし、色々とあり辞め、職業訓練校に通ってプログラミング(php)を学び、60人ほどのソフトウェア開発会社就職した。

会社に入ると、まずC#研修があった。研修と言っても、C#で内製ツールを独りで作るという研修だった。この研修中に「あれ、オレ、プログラム書けねー」と思ったりしたが、研修は終えることができたし、社内の人にも「なかなか良く出来ている」と言ってもらえ、大丈夫だろうと思っていた。

研修が終わり、C#の社内で実際に使われているツールに、機能をいくつか追加する仕事を振られた。前任者にどんな設計になっているのか大雑把に聞き、なんとなくイメージができ、コードを読み始めたのだが、これが全く意味不明で、何のために有るかがわからないクラスが大量にあった。名詞王国だと思った。前任者に、何故このクラスは、この単位で分割されているのか聞くと、「単一責任原則だよ」とか「hogeパターン使うと、後から機能追加しやすいじゃん」というような回答をもらった。納得は出来なかったが、プルリクも承認されて、このツールデプロイされていたので、社内的にも、このコードは、クソコードと言われる物では無いはずだと思ったので、自分プログラムを書き続けていれば、こんな感じの設計に慣れてくるんだろうと思った。モヤモヤは残っていたものの、仕事はしなければいけないので、前任者のコードに習うように、クラスを追加したりして、機能を追加した。プルリクを出すと、設計には何も言われずに、タイポや、テストコードを注意されただけだった。指摘された点を修正すると承認された。振られた仕事は完遂した。が、結局最後まで、モヤモヤは消えなかった。むしろモヤモヤモヤモヤになった。

次に振られた仕事は、内製ツール設計から自分で行い作成する仕事だった。言語Goだった。Goで書いてと言われた時は、以前から自分モヤモヤオブジェクト指向のせいで、モヤモヤしているんじゃないかとも思っていたので、喜んで!という感じであった。が、Goを触ってみると、結局、Go継承の無いオブジェクト指向言語やないかと思った。Goの標準ライブラリinterface名もHogerみたいな感じに接尾辞に-erを持ってくることが慣習らしく、この命名だと、interfaceを満たす構造自身が-erになるので、正にオブジェクトだなぁと思った。巷での「Goオブジェクト指向ではない」というのに期待していたのだが、自分にとっては、とてもオブジェクトしていました。

Goに対する印象は良くなくなったが、ツール設計をしないといけなかったので、Go構造体をC#クラス見立て、前回の前任者のコードのように、単一責任も持つ構造体に(無駄に)分けて、プログラムを書いて、プルリクを出した。自分でクソなコードだと思いながら。だけれどもレビューでは、「errorのチェック忘れ」「標準ライブラリにこの機能ある」「こんな風に書ける」といった感じだった。こんなコードで良いんかよと思ったが、良いらしい。ワケワカメだった。

ここらで、プログラムを書く仕事は、無理だと悟った。現実世界は、自分自然だと思う方法と違う方法で、プログラミングをすることを強要してくる。

ちなみに、仕事ではC#Goを書いていましたが、オブジェクト指向と仲良くなるためにSqueak(Smalltalk)で、オレオレ言語作ってみたりもしましたが、何が嬉しくて、オブジェクト同士のメッセージパッシングプログラムを作るのかわかりませんでした。

Lisp語族言語も触りました。

Clojureは、気持ち良くプログラムを書いていても、Javaが顔を出すところでフラストレーションが溜まってしまって、つらくなりました。

Common Lispは、自分が触った言語の中でも、秀でて良いと思いました。プログラマを辞めても、プログラム書く必要に迫られたらCommon Lispで書こうと思うくらいにです。Land of Lisp楽しいです。あと、CLOS総称関数の考え方が大好きです。

最後に、この投稿は、一種の決別の表明です。いつまでも自分に向いていなかったことに、時間を掛けてしまっている自分との決別です。

最後まで読んでいただきありがとうございました。

自分共感をもった参考リンク

2015-09-20

オブジェクト指向はなぜダメなのか?

人類には難しすぎたから。

日本PG/SEの60万人のうち、オブジェクト指向らしいコードを書けるのは1割以下だと思うわ。

もっと少ないかも。

オブジェクト指向言語オブジェクト指向フレームワークを使っていても、クラスにどんどんメソッドやメンバ変数を追加していって、クラスの中で手続き型言語風にコーディングしてるだけだし。

まだ手続き型で、ちゃんと構造プログラミングしてればいいけど、一個のクラスにやたらとメンバ変数を作って、各メソッドから適当アクセスしてるから手続き型言語グローバル変数を多用したようなコードが量産されてるし。

普通人間には手続き型で「サブルーチンを使いなさい」「グローバル変数は多様しないように」と教育するくらいが限界だと思われ。それでも対応できるのは何割かしらんけど。

2015-05-18

関数型言語が普及しない理由が分かった

関数型言語なんて、多くのプログラマにとって猫に小判、豚に真珠ということだ。

コミュニティ文化独自とか、学習コストが高いとか言われているが、それは本当の理由じゃない。

本当の理由は、オブジェクト指向言語すら使いこなせていないのに、関数型言語なんて必要ないという理由だ。

オブジェクト指向言語を使い倒していれば、同じ概念関数型言語ではずっと楽に実現できることにすぐに気づく。

逆にオブジェクト指向言語で無理して使っている概念(例えば高階関数など)がないと利点に全く気づけない。

普段余計な一手間を加えてでも、実現したい便利で強力な概念を、そもそも使っていないのでは、関数型言語を書く意味はない。

関数型言語でもオブジェクト指向言語でも、やることは変わらないとずっと思ってきたし、それなのになぜ関数型言語が普及しないのか、ずっと不思議だった。

しかし未熟なプログラマには無用長物だということだ。

2015-02-11

関数型とオブジェクト指向って……

毛の壁以降、色んなところであーだこーだ再定義言われてるけど、結局名前が悪いんだよなぁ。

どちらかというとオブジェクト指向の方が「何もかもサブルーチン(ただし値を覚えていてくれるおまけつき)」で、関数型の方が「何もかもが値(関数も)」なんだけど、まず名前からだと逆っぽく聞こえる。

加えて、この二つの概念が対立すると思われてしまうけれど、んなこたーないのはjavascript見れば分かる。何もかも値かつサブルーチン、でOK。

両立しにくいのは、オブジェクト概念高階関数概念ではなく、オブジェクト指向言語採用してきた型システムと、関数型言語採用してきた型システムだ。

まりC++やらJavaやらが採用してきたサブタイプ多相をベースにしたクラスによる型付けと、ML言語採用してきた代数データ型が噛み合わない。致命的に。

いやまぁScalaは頑張って統合したけど、コンパイル遅いわ書き方次第で型チェックが無限ループになるわで、色々と無茶しやがって感ある。

これからは「サブタイプ多相言語」と「代数データ言語」って分けて呼ぶべきなんじゃないか?

2014-11-14

CVSって何よ状態で困ってます

俗にいう「使えないシステム」ってやつをつかまされたのかもしれない。

今、オブジェクト指向言語みたいので、業務ツール作っているんだけど設計が見えてきた段階で実は環境ボロボロなことに気が付いてきた。たとえばpushとかpullみたいなレポジトリ挨拶するコマンドが何種類かあるんだけど、なんかhageっていうコマンド打たなきゃいけなくて憎い。TortoiseHgpushしようとするとhage hair pushみたいなエラーが出て全然pushできないし、そもそもcommitとpullの違いがよくわからない。社内のSEに聞いても、commitは個人レポジトリに反映するだけで、pushしないとマスターレポジトリには反映されない、あとmergeが必要って言っている。TortoiseHgにMergeしてっていったら「それは無理」の一点張り。そうする間に新しい変更が反映されていたりして、もうぐっちゃぐちゃ。CVSだけじゃなくてほかにも必要自動ビルド環境の画面が執事だったり、そもそもユニットテストのAssertionが欠落しててすべてSuccessになってたりとかしてどうにもならない。

このまま実装がすすんでテストフェーズになったら大変なことになるって言っても「CVSくらい使えるのが当然だし、ブランチとかなにそれ美味しの」とかサラッというし。40代のクソガキが!つうかpush/pullがよくわかんねぇのは俺のせいだけどいくら何でも今の時代CVSはねーよ!っていうかCVNじゃねーかよ!まぎらわしいなって、ベテランに文句言ったところでツールを変えたがるとは思えない。だからといってPerforceのライセンス買う金もない。push and pullしてgitgitする時間金もない。死にそうです。

つかれた。p4mergeが使いたい。

http://anond.hatelabo.jp/20141113134907

2014-09-27

[]

政府委員広瀬勝貞君) 先生御指摘のとおり、この情報処理技術者試験は、情報処理分野の人材の育成あるいは技術者レベルの向上にとって非常に重要ものでございまして、私ども常にこれの見直しをしながらやっていかなきゃいかぬというふうに考えております

 この試験の分野でただいま使わせていただいております言語は、COBOL、FORTRANそれからアセンブラ言語、それにC言語でございますが、こういう言語を選択していただけるというふうにしております

加藤修一君 今開発言語の話がございましたが、COBOLとかFORTRAN、アセンブラ、確かに一部では使われているわけでございますけれども、これはほとんど使われなくなってい

る傾向に私はあると思うんです。使用しているメーカーはありますけれども、私から言わせれば、時代錯誤的な言語についでまだ試験の中で取り上げてやっているということ自体について、これは非常に大変なことではないかと思うんです。

 今はC言語、C++あるいはPASCAL等々が主に使われているということを私は聞いております。そもそも言語自体が飛躍的に今進歩しているわけでありまして、御存じのように現在ではオブジェクト指向言語、こういったものが主流になっているわけであります。こうした新しい言語の新しい概念について試験をすべきであって、着流のCOBOLとかFORTRANといったものいつまでも試験の中に入れておくことは、今後の情報処理産業を含めて、非常に大きな足かせになっていく可能性があるのではないかと私は思いますけれども、その辺についてはどうでしょうか。

政府委員広瀬勝貞君) 御指摘の点はよく私どもも勉強してみなきゃいかぬと思っておりますし、またこれまでもいろいろ議論をしてまいりましたけれども、言語をCOBOLやFORTRANに限って試験対象にしているわけではございませんで、お話のありましたC言語なんかも含めてこれを選択していただくということにしておりまして、できるだけ言語の面でも技術進歩に即応できるような、対応できるような制度にしてまいっているつもりでございます

加藤修一君 アメリカ現実を考えていきますと、アメリカ大学カリキュラムを見ていきますと、もうCOBOLとかFORTRANとか、そんなのは全然やっていないんです。大体C言語なんですよ。もうこれは五年前の話ですよ。五年前の話でC言語が入ってきている、C++とか。実際問題、今の世界的な動向を考えていきますと、そういう開発言語というのはもうC++それからJavaに移行しつつあるわけでして、それに対応した試験内容になっていないと、受験者はやっぱりそれは選択とはいいながらもそれを勉強せざるを得ないというところがあるわけなんです。エネルギーをそこに注ぎ込まなければいけない。場合によっては、今使っていない言語それ自体コンピューターインストールしてその勉強をしているということも聞いているわけでして、本当にそういった意味では試験の内容について更新をしなければいけない。

 これだけ変化の激しい業界にあって、試験がそれに対応したものになっていないということは非常に大きな問題だと私は思いますけれども、そもそもこの試験が何年に一回更新をされているのかどうか、その辺を押さえていらっしゃいますでしょうか。

第142回国会 経済産業委員会 第8号

平成十年四月九日(木曜日

http://kokkai.ndl.go.jp/SENTAKU/sangiin/142/1240/14204091240008c.html

2014-04-10

プログラム中級者が感じる関数型の違和感

なんだか話題になってるから書く。

やっと初心者を脱して中級者になりかけてるプログラミング学習者が関数型言語に何を感じているかを書こうと思う。

1 圏論かいらないんじゃないの?

Haskellが短いコードプログラムを書けるというのは分かる。

forループmapやfoldで抽象化する利点も分かる。

それでやりたい処理のほぼ全てがまかなえるということも実感している。

副作用のない小さな関数を合成して大きな関数を作る利点も分かる。

再利用性も上がるし、どこからどう影響を受けているかが簡単に分かるからバグも出にくい。

ただ、Haskellの基礎になってる圏論が何の役に立つのかは、まったく分からない。

むしろ邪魔なんじゃないかと思う。

ファンクターやモナド概念圏論で扱われているのは分かるけど、圏論なんて名前だけ知ってればコードを書くのに不都合はないだろう。

圏論必要なのはHaskell設計する人であって、使う人ではないと思う。

なのに、やれクライスリ圏だ自己関手の圏だのと、うるさいったらありゃしない。

Linux上で開発環境整えるのにカーネルコードを読めって言うぐらい的外れだと思う。

いや、知識として持っとくのはいいだろうけど、役に立たんだろ。

2 言うほど新しい機能ないような?

Rubyが羊の皮をかぶったLispとはよく言われることだけど、関数型言語オブジェクト指向言語とそこまで違いがあるような気がしない。

純粋言語ではできないけど、クロージャに内部状態を保持してもらって無名オブジェクトみたいな使い方をすることはあると思う。

その無名オブジェクトもっとあれこれデータ関数詰め込めば、いつの間にか普通にJavaC#で使うようなクラスのできあがり。

その間はなめらかにつながっていて、不連続に切れるようなもんじゃない。

関数プログラミングと言いつつ、オブジェクト指向の考え方は利用できる。

上級者はデザインパターンdisるのが好きかもしれないけど、逆の考え方をするべきだと思う。

デザインパターンオブジェクト指向言語欠点を補うための苦肉の策じゃないよ。

関数プログラミングの基礎的なパーツだと思う。

からちょっと見た目がすっきりするだけで、結局やることはオブジェクトプログラミングと変わりはないと思う。

3 なんか選民思想にとらわれて無い?

関数プログラミングコミュニティの人って、業務でクソコードメンテさせられて、その現実逃避に美しいコードに擦り寄っているように見える。

もちろん、美しいコードを書けるなら書いた方がいいし、現代的な言語を使えるなら使ったほうがいいと思う。

けど、適材適所というか、オブジェクト指向言語でも、やってやれないことはないわけで。

役に立たない圏論をありがたがる所とか、どうもイキがってるように見える。

せいぜい生産性が倍になる程度で、他の要素が悪ければ帳消しになるような利点でしかないに違いないのに。

開発プロセスとかを見直す方が仕事を楽にしてくれるんじゃないのかな?

http://anond.hatelabo.jp/20140410174641

大きなってどれくらいを指してるのか分からないけど、実際、ざっくり汚いコードで書いても関数型はコード量半分で済むよ。

1万行書くのは無理って感じても、5千行なら届かなくはないって人も多いと思うけど。

そしたら事実オブジェクト指向言語で到達不可能な領域に、関数型言語のおかげで入れるってことになる。

2014-02-04

日本IT未来はない

今もろくに給料もらってないと嘆いているかもしれないが、さら未来はひどいことになるよ。

なぜなら最新の技術に対する危機感が全くないから

例えば関数型言語と従来使われてきたオブジェクト指向言語では生産性が3倍違うと言われている。

危機感を持っていない奴がそれを聞くと、ソースコードで300行が100行になるだけかと思うわけだ。

それぐらいなら気合でなんとかしろということになる。

しかし、生産性が3倍になるということは、コストが1/3になるということだ。

1000万の案件333万になるということだ。

保守点検の都度、毎回コストが1/3になるということだ。

これがどれほどの競争力を生むか、分からない奴はいないだろう。

しかし、この当然の理屈が理解されない。

よって日本未来はない。

まるで劣った装備で勝てるわけのない戦争突入した戦前のようだ。

直接的な戦争ではないが、経済的に苦境に立たされれば日本人自殺するしかない。

死ぬぞ、お前ら。

東京大空襲なんて屁でもない数の自殺者が出る。

2014-01-20

自称関数型プログラミングマスターの同僚がイタイ

一人で勝手イタイならいいけど、いい加減我慢も限界でなんとかしたい。

そいつ圏論に裏付けられた静的型付け言語スバラシサを布教しないと気がすまないらしく、事あるごとに純粋でないオブジェクト指向言語disる

曰く、静的型付け言語だと型を合わせてコンパイラが通るようにするだけで実行時エラーを絶対起こさなコードが書けるらしい。

ああまた始まったと思ってたら、そいつが熱弁する後ろから同僚が近づいて「ヒープ足んねぇ」って書かれたメモ背中に貼っつけてたのは笑った。

お前が書いたn3アルゴリズム(!!!!)も型さえ合えばコンパイラがnlognに書き換えてくれんのかね。

いやそれ、動いてるって言わないから

型チェックぐらいで取れるバグなんて、せいぜいスタックキューみたいなもんだろ。

その程度の仕事しか任せてもらってないのは分かるが。

お前の怪しい動的計画法バグをチェックできるコンパイラなんて存在しないぞ。

圏論なんてやってる時間があるならダイクストラ法でも復習しとけってんだ。

そもそも関数型言語生産性が高いというのが眉唾ものだ。

どちらにせよ設計においてはオブジェクト指向が使われるのだからほとんど違いなどない。

せいぜい数倍コードが短くなる程度の話に学習コストをかける価値は無い。

もちろん俺はとっくに学習済みであるが、他の同僚には難しい。

彼ら全員が理解しない限り、関数型言語で開発などできるわけがない。

そのコストと、純粋関数型言語によって得られるメリット差し引きすると、正直何の魅力も感じないのだ。

関数型にかぶれている奴は、プロジェクト全体を見通す力、マクロ的な視野なく、自分の狭い世界だけで騒いでいるだけだ。

ま、厨二病みたいなもんさ。

2011-09-27

モノ指向

おれCで仕事してるけど、よく、

なんかグローバル変数ローカル変数の中間ぐらいの変数みたいなのあったらいいなー、

あと、そういう変数関数ポインタみたいなのがセットになってたりしたらなー、

などと思うよ。

いやもちろんオブジェクト指向知ってて思うんだけど。

でも、構造プログラミングやってて、オブジェクト指向言語って便利そーだなー、って、自然に思うもんじゃないのか。

思わないのかみんな。

http://d.hatena.ne.jp/ryoasai/20110926/1317044975

2011-05-15

モテるstatic女子力を磨くための4つの心得

こんにちはプログラミングをしているただの女子です。私は学歴も知識もありませんしブスですが、staticに関してはプロフェッショナル。今回は、モテるstatic女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

 

1. あえてnewを使ってインスタンスを生成する

あえてnewを使ってインスタンスを生成するようにしましょう。そして飲み会の場で好みの男がいたら話しかけ、わざとらしくパソコンを出してインスタンス生成してみましょう。そして「あ~ん! この言語本当にマジでチョームカつくんですけどぉぉお~!」と言って、男に「どうしたの?」と言わせましょう。言わせたらもう大成功。「プログラミングとか詳しくなくてぇ~! ずっとこのオブジェクト指向言語っていうやつ使ってるんですけどぉ~しっくりこないんですよぉ〜!いちいちnewって書かないといけなくて使いにくいんですぅ~! ぷんぷくり~ん(怒)」と言いましょう。だいたいの男はインスタンスを生成せずに、すべてstaticな関数プログラムを書く習性があるので、newなんてキーワードは使っていないはずです

そこで男が「static関数使わないの?」と言ってくるはず(言ってこない空気が読めない男はその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ~!最近SQLが人気なんでしょー!? あれってどうなんですかぁ? 実行時に一行ずつコンパイルするスクリプト言語と違って、もっとも高級な言語なんでしょ?でもなんかよくわかんなーい。私かわいそーなコ★」と返します。すると男は「あぁあいつね、あいつ俺の友達なんだ、イイヤツだろ」といってくるので、そのまま調子に乗らせておきましょう。

2. プログラムでとにかくstaticを使うとモテる

ファイルローカル関数」や「関数自体で状態を持つ」ことなどができる「static」をとにかく無闇につかうと、一般のstatic男性は「この子はstaticを愛してるんだなぁ」や「え?こんなところにもstatic使えるの?なにこれ?」と思ってくれますインターネット上ではそのような〇〇おじさんや、××おじさんなど、変なひとがいるので、よいこの皆さんは関わらないようにしましょう。

 

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

飲み会などで男が女性に話すことといえばstaticの話やVBの話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「へぇーそうなんですかぁ~?」とか「よくわかんないですけどすごいんですねぇ」と返してしまうと、さすがの男も「この女ダメだな」と気がついてしまいます。ダメ女だとバレたら終わりです。そこは無意味テンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がない話題でも、テンションと積極性でその場を乗り切りましょう。積極的に話を聞いてくれる女性に男は弱いのです

いろいろと話を聞いたあと、「staticな関数を使えば、newって書かなくていいんですねー。覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。続けて頭に指をさしてくるくる回しつつ「キュンキュンキュン! キュンキュンキュン!」と言って、「どうしたの?」と男に言わせるのもアリ。そこで「うるせぇハゲ」と言えば女子力アップ! そこでまた男は「オブジェクト指向ってしっくりこないんですよね〜オブジェクト指向って(ry」と連呼して壊れだすので、放置しておきましょう。

 

4. プログラミングするときインスタンスを生成できない女をアピールせよ

男とプログラミングするときは、とにかく「あーん! 私インスタンス生成ないんですよねぇ~(悲)」と言いましょう。するとほぼ100パーセント「え?インスタンスなんて生成する必要ないじゃん。static理解せずにわざわざインスタンス宣言してるやつなんて笑っちゃうよね〜」といわれるので、(こいつなんなの・・・)と心のなかで思うだけにして口には出さないようにしましょう。ここでまた100パーセント「どうしたの?」と聞かれるので、うつむいて3~5秒ほど間をおいてからボソッとこう言います。「そうですよね〜staticおじさんカッコイイ〜」と心にもないお世辞を言っておきましょう。

その瞬間、あなた女子力がアップします。きっと男は「なんて優しい天使のようなコなんだろう! 絶対にゲットしてやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。そういうやつより上にのし上がったら、そんなことは忘れて好きなだけインスタンスを生成して大丈夫です。「インスタンスを生成できないんじゃなかったっけ?」と言われたら「は?」とか「うざい」や「おまえは一生C言語でもかいてろ」と言っておけばOKです

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