(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

UbuntuにJava8をいれた

これ見たら1分くらいで入った。スゴイ。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

これでインストール出来た。

複数バージョンのJavaが入ってる場合、

sudo update-java-alternatives -l

で使えるバージョンは確認できるし、

sudo update-java-alternatives -s java-8-oracle

すれば、java8使える。スゴイ。

UMLモデリングのエッセンス 第3版 読んだ

マーチン・ファウラーの本ですね。

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

読もうと思った理由だけど、エレメンタルデザインパターンの頭にUMLを読めたほうがいいって書いてあったのと、これまでのエンジニア生活の中でガッツリUML書く機会もなかったし、ぶっちゃけクラス図以外は自信がなかったというのがある*1

印象に残ったのは「双方向関連」と「汎化」の話で正直これはモデリングから脱線している部分に興味を持ってしまったのだけど、双方向関連はJavaで実装してみたいなって思った*2。汎化の説明のときに、リスコフの置換原則を元にスーパータイプと置換可能であるならば、継承を伴わない実装でもサブタイプとできるというのが凄く感動した部分で新しい知見だった。つまり、構造的部分型とか、ダックタイピング的な実装でも良いってこと。この話の中にJavaの古いバージョンのVectorの話が出てきて、確かに実装が最悪な何かを別の新しい何かに置換したいっていうときに、構造的部分型が使えるなら継承を行わなくていいし便利だよなーとか思った。サブクラス化とサブタイプ化というのを分けて考えることができるのはステキだと思う*3

とりあえず、この本自体は買って損はしないと思う。SIerとかでUMLを書く機会がどのくらいあるかはわからないけど*4、自分自身がアプリケーション開発をしていく中でコードで表現する前に頭の中のものを取り出してなんとなく形にできるのは利点だと思う。そして、書籍自体は「スケッチ」としてUMLを書くために紹介している感じがあるので実践的に使いやすい。あと新人研修とかでちょこっと習っただけで、UMLの良さを理解出来てない人には特にオススメします。はい。僕もこの本にあと3年早く出会いたかった。

*1:もっと言うならUMLに何があるのかも詳しく知らなかった

*2:少し考えてたけど、どう実装したらいいかわからない

*3:今のJavaは比較的小さいインターフェースを大量に継承した大きいインターフェースを作ったりすることによって汎用性を高めているイメージで、これによって昔のVectorの過ちを繰り返さないようにしている感じはある

*4:先日までのプロジェクトは日本語で設計書にロジック書きまくれっていう無理ゲーだったけど

IntelliJ IDEA で選択範囲を括弧で囲む

ずっとこういう設定ないのかなーって思ってた機能があったのでテンション上がっている。

IDEAのSettingsのEditor->Smart Keysにある
[Surround selection on typing quote or brace]という項目にチェックを入れるだけ。

f:id:ayato0211:20140115002856p:plain

これでダブルクォートとか括弧で囲みたい範囲を選択した後に、開き括弧とかダブルクォートをタイプすればokというわけです。
f:id:ayato0211:20140115004233g:plain

地味だけどたまーに、すっごくたまーにだけどこの機能欲しい時があるので嬉しい!

Java The Good Partsを読んだ

というのは、嘘だ()

8章までとりあえず読んで、師走に突入してしまいなかなか読めないでいるので、一応忘れないうちにそこそこ感想だけ書いておこうと思う。(残りはRMI、並行処理、エコロジーなのでまぁとりあえず後でもいいかなっていうのもある)

全体的に軽い読み物なのでさくっと読める印象です。*1
で、相変わらずだけど、僕はJavaのことを何も知らないなって思いました。はい。
たぶんEffective Javaあたりをちゃんと読めば書いてあるんだろうなーっていうようなことも書いてあってEffective Java欲が高まった。あの本は昔、辞書的に使っていただけなのでちょっと買って読み直したいですね。

例外、パッケージ、GC、コレクションの章はJava使っているならちゃんと知っておいた方が良さそう。
特に例外とコレクションは大変参考になりました。というか、コレクションのこと知らなすぎて泣きたい。

余程じゃない限り、ほとんどのJavaプログラマにおすすめできる本です。読みましょう。
僕は、ちょっとEffectiveJava買ってきて勉強しなおします;;

*1:さくっと読めるのに、なんで9,10,11章を読んでいないのかっていうツッコミはやめてください。死んでしまいます

Java初心者はテキストエディタを使ったほうが良いのか

仕事中、サクラエディタJavaソースコードをコピペして、シンタックスハイライトが効かなかったので、拡張子付きファイルにしかシンタックスハイライトが効かないのか気になって調べていたら以下の様な記事が目についた。

Javaクラスファイルは、Eclipseテキストエディタサクラエディタなど)で編集します。 (Java開発ソフトの紹介はこちら) EclipseJavaの開発者を中心に、広く利用されている統合開発環境です。 サクラエディタは、フリーソフトでありながら、多くの機能を備えているテキストエディタです。

ある程度Javaプログラミングに慣れてきたら、とても便利なのでEclipseを利用すると良いでしょう。 しかし、はじめてJava開発する場合は、以下の理由により「テキストエディタ」での編集をおすすめします。

  • 補完機能に頼りすぎてしまうため、意識しないと覚えることができなくなる。
  • Javaクラス間を簡単にトレースできるため、ソースコードを読み取る力がつきにくい。
  • Eclipseテキストエディタと比較すると、PCのCPUパワーやメモリを消費する。

Javaプログラムを作成・実行する方法

これを読んでふと、前職在籍中に「新人研修では最初にただのテキストエディタJavaを書かせるべきで、Eclipseを使うべきではない」と豪語していた10年くらいその会社に在職している先輩を思い出した。

10年前のデファクトスタンダードなIDEが何かは知らないが、彼ら*1は某B社の提供していたIDEをその昔使っていたようだ。Emacsを"マニアック"で使いにくいと評価していた彼らのお気に入りのエディタはサクラエディタだった。どうでもいいけど前職在籍中、僕はテキストエディタならUnEditorを好んで使っていたが。*2

閑話休題。しかし、なんで初心者ならテキストエディタを使ったほうがいいのか、僕には全く分からない。
この記事が書かれたのはcopyrightを見た感じ、2011年前後なんだろうと思うんだけども、今時初心者にテキストエディタを使えって勧める事自体理解に苦しむ。
この記事の筆者曰く、

  • 補完機能に頼りすぎてしまうため、意識しないと覚えることができなくなる。
  • Javaクラス間を簡単にトレースできるため、ソースコードを読み取る力がつきにくい。
  • Eclipseテキストエディタと比較すると、PCのCPUパワーやメモリを消費する。

らしいのだが、過去に新人研修を受け持ったことがある/自分も3年前に新人研修を受けた身としては、テキストエディタを使う弊害の方が大きい気がしている。

「補完機能に頼りすぎてしまうため、意識しないと覚えることができなくなる。」

これに関しては何が言いたいのかよく分からない。どういう意味での補完機能だろう。例えば初心者は以下の様な、標準出力を用いるコードを練習として多く書くだろう。

System.out.println("Hello, world!!");

この時、Eclipseならsysouだけタイプして、Ctrl+Spaceとするだけで綺麗にSystem.out.println()を補完して出してくれる。
これは初心者にとって嬉しいことではないのだろうか。何度も何度も退屈な標準出力をするだけのコードを書くのに、少ないタイプ数で補完してくれるというのは初心者にこそ嬉しい機能だと思う。
また、初心者がテキストエディタだけで書いたときにありがちなのが、タイポに気付かなくて動かない、だと思う。スペルミスしているだけで動かないコードっていうのを、新人研修なんかやっていると良く見かけるが、これはIDEさえあれば解決できる。たかがタイポごときで時間を浪費しているのはとても無駄だと思うんだが、どうだろう。

Javaクラス間を簡単にトレースできるため、ソースコードを読み取る力がつきにくい。」

わざわざテキストエディタだけでソースコードを読み取る機会が、そんなに沢山あるのだろうか?いや、あるのかもしれない。
けれど簡単にソースコードを追えるということは、それ以外の創造的活動に時間を割り当てることができていいのではないだろうか?
苦労して貧弱なテキストエディタで、ソースコードを追いかけたらソースコードを読み取る力が付くというのは根性論だと思う。

Eclipseテキストエディタと比較すると、PCのCPUパワーやメモリを消費する。」

今時のパソコンなら(少なくともCore i5でメモリ2GBあれば)Eclipseはなんなく動く。多少重く感じるかもしれないが、それでも動くのだ。
そして、CPUパワーやメモリを消費したら何が問題なのだろう。この筆者はもしかしてWindows2000時代のパソコンを使っているのかもしれない、それなら仕方ない。しかし、今パソコン買えば大概の環境できっと問題なく動くと思う。

まとめ

結局、僕自身も何が書きたかったのかよく分からなくなったけど、javac/javaコマンドとかも別に最初から教える必要ないんじゃないかなって思う。
右も左も分からない、ましてコマンドプロンプトなんてきっと開いたこともないであろう人間に、テキストエディタで書いてコマンドプロンプトjavaコマンドを叩けっていう方がおかしいだろう。それは本当にただのおまじないとしかその時は思わないと思う。2セントなら賭けても良いけど、javac/javaコマンドを最初に教えてその後でIDEを使わせたら1ヶ月もしないうちにjavac/javaコマンドなんて忘れてるよ。
そんな感じで僕にはやっぱりサクラエディタは早すぎたようだ。使いにくい。Emacsに帰りたいよ。。。

*1:前職の先輩たち

*2:自宅ではEmacsだけど