はてなキーワード: javaとは
東大卒、電通勤務経験、ベンチャー立ち上げて1年半社長を経て2億弱で譲渡、プログラムはJAVAとPHPが書ける
アドレスがわかったって見逃しでメモリリークは起こるし、デバッグするのにダンプファイル解析なんてしたくないし、やっぱJava的なものは必要だと思うけど。
毛の壁以降、色んなところであーだこーだ再定義言われてるけど、結局名前が悪いんだよなぁ。
どちらかというとオブジェクト指向の方が「何もかもサブルーチン(ただし値を覚えていてくれるおまけつき)」で、関数型の方が「何もかもが値(関数も)」なんだけど、まず名前からだと逆っぽく聞こえる。
加えて、この二つの概念が対立すると思われてしまうけれど、んなこたーないのはjavascript見れば分かる。何もかも値かつサブルーチン、でOK。
両立しにくいのは、オブジェクトの概念と高階関数の概念ではなく、オブジェクト指向言語が採用してきた型システムと、関数型言語が採用してきた型システムだ。
つまりC++やらJavaやらが採用してきたサブタイプ多相をベースにしたクラスによる型付けと、ML系言語が採用してきた代数的データ型が噛み合わない。致命的に。
いやまぁScalaは頑張って統合したけど、コンパイル遅いわ書き方次第で型チェックが無限ループになるわで、色々と無茶しやがって感ある。
Javaで開発されたアプリケーションにはインストールにまつわる難点がある。
それによりせっかく興味をもってくれたユーザーも試す前に諦めてしまいがちである。
また、サーバーサイドアプリケーションもJava製である場合、デプロイや監視の際の難点が多く運用者を悩ませてきた。
javafxで導入されたパッケージャを用いることで各OSネイティブなインストーラーの作成が可能になり、この問題を解消・緩和できる。
SpringBoot などを用いた ExecutableJar を作成するアプリケーションであれば、サーバーサイドアプリケーションであっても一部制限があるもののパッケージングできる。
Javaで開発されたアプリケーションの配布には以下の問題点がある。
javafx-maven-pluginを使うとよい。javafxと冠しているが実態はパッケージングツール。
javafxの冠があるがためにスタンドアロンアプリ開発者以外を遠ざけている感あり。
Windows(msi/exe), Linux(rpm/deb), Mac(dmg) など各OS・ディストリビューション固有のパッケージングが行える。
公式ページ( http://zenjava.com/javafx/maven/ )では更新が止まっているが、Github( https://github.com/zonski/javafx-maven-plugin )とMavenRepository( http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.zenjava%22%20AND%20a%3A%22javafx-maven-plugin%22 )を確認するとちゃんと開発は続いている。
pom.xml に以下を追加する。
mainClassはSpringBootなら@SpringBootApplicationのついてるクラスですね。
vendor は適当に組織や個人の名前を入れておきましょう。
※ 以下の XML が化けるのは増田の不具合か仕様っぽい。 http://anond.hatelabo.jp/20100205210805
<plugin> <groupId>com.zenjava</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>8.1.2</version> <configuration> <mainClass>[main method class]</mainClass> <vendor>[Vendor Name]</vendor> </configuration> </plugin>
あとはそのままビルドすればよい。
maven clean jfx:native
ビルドが終わると target/jfx/native 以下に、ビルドしたOS/distributionに合わせて msi, exe, deb, rpm, dmg ができあがります。
本当であればクロスビルドできてしかるべきなのですが、まだ実現はされていないようです。
これらのパッケージは Widonws であれば Program Files(x86) に、Linux系であれば /opt/ の下にインストールされるようです。
/opt/app-name/ の下には app と runtime の2つのディレクトリがあります。
app の下にはビルドした jar ファイルや依存ライブラリが置かれています。
runtime の下には実行用の jre が配備されています。
実行ファイルにそのまま引数を渡せば jar 実行時の引数としてそのまま渡されます。(-Xmxなどはまだ未検証です)
情報処理だけじゃなくて、JavaとかPHPとかオブジェクト指向とかWebプログラミングとか細かく細分化して、このプロジェクトはC#認定試験とWindows認定試験をもってるプログラマしか採用しませんとか。
ペーパーテストで分かるのかって言われるかもしれんけど、今の経験年数で測るやり方に比べたら格段にマシになると思うわ。
経験年数10年だから技術力があるってことになっているけど、実際は初心者レベルだとかゴロゴロいるし。
Javaの入門書さえまとに読んだことないだろってレベルの人が飲み会で「Javaに関しては任せられる新人が育ってなくてね」とかドヤ顔で語っていて、サラリーマンだから形だけ顔を立てられるって認識でなくて本人もマジで技術力あるつもりなのかってビックリしたことあるわ。
で、そういう人がプロジェクトの技術的な方針を決めてるから、本当にぐちゃぐちゃで効率悪い。
プロジェクトに応じた各種認定試験に通ってないと、コーディングさせないとか設計させないとかっていうのが常識になったら、最低でも水準に達してないような人がプロジェクトにかかわることは避けられるからね。
まあこれやると、日本のプログラマやSEの60万人のうち、3割とかへたすると半分くらいは仕事できなくなっちゃうんじゃないかって気がするから、実行は無理だろうけど。
このまえJavascriptをコピペだけで10年やっていて初めてまともに勉強したってエントリが何百もブクマを集めてるのをみて、モヤモヤっと思ったから書いた。
今やプログラミングといえば、Webなどで使われるような高水準スクリプト系言語中心のアプリケーションプログラミングが主流だ。
そんなこともあり、もはや以前の低レベル言語によるシステムプログラミングの苦労など、タダの昔話である。
そこに来て、実際は齧った程度の分際で、性懲りもなくそんな昔話を書いてみる。
少なくとも10年位前に自分が手がけた(押し付けられた)仕事はそうだった。
大学で初めて触ったC言語しかもポインタ分からないで止まっているような奴に、電文の再配信プログラムを任せたのだから。
客は「遅延が絶対許されないシステムなのでJavaとかPerlとかはやめてねー」とにこやかな笑顔かつ笑ってない目で注文してきた。
このうちC++は、Java経験がある自分からしても仕様が膨大かつ複雑すぎて、とても手に負えないと感じ、必然的にCで書くことに。
勿論Cの言語仕様がKR本一冊で収まるほどコンパクトであっても、それが簡単であることを全く意味していないというのを開発早々に思い知らされたのだが。
あ、Cと言えば電文提供側の機関が受信用のスケルトンプログラムを一応は用意してくれていたが、どう見ても電文受信中に接続が切れた時のことを考慮していない内容で、全く参考にならなかった。
コード書きにおいては、例え一人屋台の俺ルールであろうが、コーディング規約のようなものは絶対に必要である。
その時のルールは「gccのオプションに"-Wall"を入れた状態で、Warningゼロになること」にしてみたが、その途端、日付変更線をまたがない限り退社できない生活が始まった。
というかオブジェクトを使えないだけでも地味に辛いのに、更にCの言語仕様はコンパクトである以上に原始的と言っていい代物で(だからWarningは基本無視できないのだ)、しかも言語仕様以外の環境依存要素が山積していると来たもんだ。
そんな言語でシステムコールだらけのコードかつ複数のファイルディスクリプタの同時監視(即ち非同期でノンブロッキング)しかもマルチプロセスでシグナルもあるよ!とか、お客さんは俺を殺す気か、そもそも完成させる気無いだろとか、今だったら思う(当時はそう思う余裕もなかった)。
仕方なく最初のKRに加えて「UNIXネットワークプログラミング」をわざわざ東京に出かけてまで買って読み漁った。
後にも先にも、古今東西の名著と呼ばれるような本を、泣きながら読んだのはこの時だけだったりする。
そこまで凄い良書なのになんで絶版になったんだか。
いかし、それでも「子供を殺しても死なない」、かなり前の処理での領域破壊のせいで突然プログラムが止まっちゃうなどなど、やればやるほど問題が出る。
シグナルを受信し、仕様のとおりに処理するのがこんなに難しいのか!と途方に暮れたこともあった。
そして途方に暮れても解決の手段になるような便利なツールもなければライブラリもない。
結局、「ある程度正しく動いたら、あとは出来た所まで」で勘弁してもらってようやく開放されたが、今でも当時の自分の仕事ぶりには全く満足していない。
無駄に頑張ったというか、頑張っただけの仕事であり、折角低レベル実装というCの本領発揮分野の案件でありながら、スレッド、malloc()、可変長引数は遂に習得できなかった。
こういうプログラムって、どうやったら正しく動かせるんだろ。
このような経験を経て、後年、Cやシステムプログラミングを指してギークな人々が
Cはとても高効率ですし、マシンのリソースもドカ食いしません。残念ながら、Cがそれだけの効率性を実現するには、あなた自身が低レベルのリソース管理(たとえばメモリ管理)を手作業でやってあげなくてはならないのです。それだけ低レベルコードがあると、複雑でバグも起こりやすいし、デバッグですさまじい時間をとられることになります。今日のマシンはずいぶん強力になっているので、これは通常は悪いトレードオフです――マシンの時間を少し非効率に使っても、あなたの時間をずっと効率的に使う言語を使うほうが賢明でしょう。
本物のプログラマはアプリケーションプログラムなど書かず、まっさらな金属板にゼロから書き込んでいく。アプリケーションプログラミングなど、システムプログラミングのできない弱虫のすることだ。
あと、あれほど苦手だったポインタについても、「ポインタが理解できないと永久にC初心者」というのを嫌でも理解した。
あれはギターのFコードやSEALsのヘルウィークみたいなもので「習得できなかった者にとってはキャリアの終わりを意味するが、習得できた者にとっては始まりですらない」ものなのだ。
・・・で、これだけで終わってしまうと本当にタダの黒歴史だが、これには少しだけ嬉しい後日談がある。
それから数年後、やはり電文転送系のシステムで、かつて自分がCのソロプレイでこなしていた規模の数万倍はあると思しき超大型案件に助っ人の「兵卒」として参加したのだが、そこはインプラとアプリでチームが分かれており、アプリ側だった自分は
「配列とポインタと構造体しか使わないで済むなんて、なんて楽な仕事なんだ!」と左うちわでのんびり過ごし、しかも高評価をいただいて帰ってこれた。
ところがどっこいJavaには超高機能なIDEがあってだな、コードスタイルの統一はもちろん、
何かしら穴があったんだろうけど涙目。
JavaもAdobeも最新版にするように気を付けてたんだけどな…
どうしよう、面倒だけどパスワードも全部変えた方が良いのかな。
そもそも、静的型付け言語みたいに、インターフェイスを型で揃える必要ないけど(ダックタイピング)。
命名規則で充分だろ。Pythonでは'_'を先頭につけるのが標準。
Javaのビルドのほうが遥かにめんどくさいじゃん。Eclipse無しに複数ファイルコンパイルとか、プロでもできないやつ多いんじゃね?
インターフェイスが無くて何が困るの?
アクセス制御が無くて何が困るの?
さらには2.X系のpythonではマルチバイトの文字列が上手く扱えない。print("エラー!")のような所でさえ躓く。
これはエンコーディングの設定できてないだけじゃん。Javaでだって意識してなきゃ文字化けするよ。
俺の主張は
ってことだよ。
もちろんこの主張が正しい証拠は何もないけど、同時に間違っているという主張も何もない。
少なくとも、実際にこいつの提唱する謎関数型プログラミングで楽にプログラミングができるという証拠はまだ何もない。
Haskellとその巷に流行る解釈以上の価値を提唱しているようには見えないね。
それは俺がバカだからだって言うなら、そんなバカでも分かるような確たる証拠をつきつけてみせてくれや。
例えば、同じプログラムを実装するなら、JavaよりHaskellが10倍短く10倍早くプログラムが書ける。
逆に入門書の一冊もまともに読んだことないんだろうなって水準の人が、自分はすごいレベル高いって思い込んでるケース多いね。
SIerとか、建前上、技術力は経験年数に比例するってことになってるけど、建前じゃなくて「自分は10年選手だからエキスパートだぜ」って思い込んでるの。
ネットとか本とかで勉強しないから、自分がどの程度のレベルか客観的に評価できない。
このまえもJavaのStreamの記事に「こんなの趣味でしか使うな」「可読性が下がる」みたいな否定的なコメントがついていて、技術的な勉強はなるべる避けたい感じの人達ならともかくはてなのテクノロジーのカテゴリーをチェックしてるような人でもこんな感じなんだってがっかりしたわ。
たまに関数型の言語の記事に何十何百もブックマークついてることがあるけど、ああいうのもせっかくハテブ使ってるのに興味なくてぜんぜん読まないんだろうね。
ネットに対する否定的な意見で「自分の興味のある情報しか見なくなって視野が狭くなる」みたいのがあるけど、はてなみたいな雑多な情報が集まるサイトを利用していても、そうなるんだって思った。
http://b.hatena.ne.jp/entry/blog.livedoor.jp/itsoku/archives/42733566.html
このまえJavaのStreamを紹介する記事に「読みにくくなる」「趣味で使え」「素直に別の言語つかえ」みたいなコメントがついていて、世間の技術動向に興味ないSIerとかだったらともかく、はてなのテクノロジーのカテゴリをチェックしてるしてるような人がなんでって思ったわ。
たまに関数型の記事が数十何百もブックマークされてたりするけど、そういうのいっさい興味わかずにタイトルにJavaとか知ってる単語が入ってる記事しかチェックしないのかね。
http://b.hatena.ne.jp/entry/blog.livedoor.jp/itsoku/archives/42733566.html
Javaのstreamを薦める記事に「そんなの使うと可読性が下がる」とか「他の言語でやれ」みたいな反応してる人がいる。
SIerとかで働いてる技術的なことに興味の薄い人たちならともかくはてぶのテクノローカテゴリをチェックしてるような人でもこういう反応。
またに関数型の記事が何百もブクマを集めてるけど、ああいうのはまったく興味わかずにひたすら「Java」とか自分の見覚えのある単語のタイトルの記事しか読まないんだろうね。
「ネットは隆盛して新聞が衰退する」みたいな話題のときにでるネット批判で「ネットは自分の興味のある情報しか吸収しなくなる」みたいなのがあるけど、はてぶみたいな雑多な情報が集まるところを使っていてもそうなるんだって思った。
タイトル通り
いろいろわけあって、東海地方の6年制大学に20代後半で入学することになって勉強している。私立だけれども。
それで、アルバイトをしたいのだけど、どうアプローチをすればいいのかわからない。
一応、CodeIQ で『働きたい』という意思表示をしているのだけど、すべて東京方面の会社からオファーで、
お断りさせていただいている。一応は名古屋で働きたいと希望をだしているのだけど。
今できるプログラミング言語は Ruby と Java ぐらい。
C, PHP, JavaScript はよくわからなくなってしまった。
HTML5 + CSS3 は十分に勉強すれば対応できる気はするのだけれど、時間が足りない。
もちろん、Rails や iOS、Android のフレームワークは忘れてしまった。
あと、Swift や Haskell は興味がある(つまりは、習得できていない)。
それと Linux はなんとなく、サーバー構築等々ぐらいなら出来る自信はある。
○昼食:なし
○調子
普通。
昨日書いた、睡眠障害ちっくな状況は変わらず。
ただ、体は疲れているのか、ゲームしながら待ち時間に寝落ちしてしまった。
その時はぐっすり寝れたので、そんなに気にする事じゃないと思う。(というか、思おう)
非常にありがたい。
そして、ちょっと思う所があり、Windowsのセットアップをしていた。
これを何に使うかというと、ちょっとプログラムの勉強でもしようかと思っています。
今年の夏頃まではプログラミングをしていたのだけれど、ちょっと僕の体調不良でお流れにしてしまいました。
が、プログラマとして再就職すると決めたので、もう一度勉強をしておかないと、と思った次第です。
まあ、どんな勉強をするのか? とかはまだ全然決めてないので、ゆっくり考えようと思う。
Web系は仕事ありそうだから、Webの勉強しようかなあ、コンパイルしない言語をあまり触ってこなかったので、
JavaScriptとかがいいかなあ。
WebはFlashとかJavaなんちゃらしか知らないから、基礎の基礎としてHTMLとかCSS?
うーむ、悩ましいな。
一応、マイクロソフト信者って側面もあるから、ASP.NETとか?
あくまで職業プログラマとしての勉強だから、仕事のあるなしで考えるのが無難かなあ。
仕事のあるなしとかガン無視していいなら、XNAで同人ゲーム作るとかやってみたいなあ。
せっかく、はてな村界隈で活動してるんだから、はてなの何かを利用したゲームとかが面白い?
増田の文章がランダムで出てきて、それがモンスターに変身して戦う的なー?
って、まあそういうのも勉強にはなるだろうけど、就職に役立つか? って言われると微妙な気もするなあ。
楽しい!
床ドンとか壁ドンとかは、格好いいけど使うタイミングがよくわかんない!
けど勝てない!
3キル15デスとかが普通なので、ちょっとこれは迷惑すぎるなあ。
バトルライフルが好きな武器だなあ、体をパンパンと狙ってからのヘッドショットで一撃、って流れがたまらない。
(3回に1回ぐらいしかできないけど)