はてなキーワード: javaとは
そんな取り調べされたら、オレなら「すげえ、javaとjavascriptの区別が付いてるよこの人!」と感心するね。
http://anond.hatelabo.jp/20121024004748
以前、"he doesn't use struct or union?"と書いて、ここの住民に糞味噌に言われた人です。
#が、この一言で何が言いたいか分からなければ、プログラマーとしては最低ランクだと思うよ。
俺の場合は、
1. C勉強開始
2. PC-9801でスプライト動かした段階で息が絶える...orz
3. 放置
6. アセンブラとかZ80、8086、386、486の勉強開始
8. OOの何がいいのか理解できたヽ( ゚∀゚)/
9. Javaで書いたソフトが雑誌で紹介されたり、賞を取ったりした
12. 振り返ってみると、全ての知識が有機的に結合されている!!!頭の中でCを簡単なアセンブラに(Javaの場合はバイトコードに)変換できるのが大事だったんだね!!!
13. 就職
14. 転職
15. 就職
16. 転職
18. 転職
19. 離職
現場はゴミみたいなコードを書く人とかゴミみたいな設計をする人で精神を痛められます。
ITは辞めた方がいいよ。
#これも後で消す。
まぁCのポインタを理解した時に、JAVAのオブジェクトも理解される、という意味ではそうかもしれないが、
上達の過程として、より抽象度の低いところ(すなわちC)から入る方がわかりやすい場合というのはよくある話。
元の人は何やってもダメだったけどね。
なんで突然英語で書き始めたのかわからないが、もうちょっと上手に書けないものかね。ピジンイングリッシュか。
一行目からしてひどい。itはトラックバック元の「抽象思考の苦手な人にたまにあるパターン」にかかっているのか、「JAVAのオブジェクトは理解できないがCは理解できる人がいる」になのか、can't understandと書いていることからしてもしかして構造体そのものを指しているのか。
もし前二者だったらunderstandなどというニュートラルな動詞をつかわず、バカにしていることが明白にわかるような構文を意識するべき。
スティーブン・キングの本にいっぱい載ってるから参考にするといいよ。
これは明らかに選択ミス。
中途半端に覚えて色んな言語を行ったり来たりして上達していく内に、
腑に落ちる瞬間ってのが訪れたりするからそうでも無いんじゃね?
単純に俺が嫉妬してるだけだけど、ひとつのプログラミング言語でたくさんの人たちが慣れ合っているのを見るのが辛い。
職場で使ってるC#(いまだに2.0)もJava(いまだに1.4)も、そんな世界とは無縁なんだもん。
どんなにPerlがすごいことになったとしても、俺には全く関係ない。っていうか、仕事でプログラミングする世界というのは楽しくないはずなのに。
そして、この「プログラミングが楽しくない」というのはきっとプログラミング言語そのものとは関係ない。今の職場でPerlが使われたとしても、それは今使っているC#/Javaと同じように、訳の分からないクラス/メソッド命名ルール、肥大化してメンテのされない"共通メソッドライブラリ"、前バージョンのコードはコメントアウトして保存、テストファーストでもなくリファクタリングも許可されない、のようなやり方になるわけで。
Joel氏の採用面接ゲリラガイドにもあるように、デキる開発者と一緒に仕事をしたいというのは、開発者なら誰でも思うことだ。
そこで、自分が面接する側だったら、初歩の初歩レベル、即ちプロとしてあり得ないレベルの人を足切りするような、くだらない質問を2つ考えてみた。
Java、VB.NET、C/C++、PHP、Perlといったオープン系では広く普及している言語で、ごく普通のPCやサーバで動作するコードを想定し、実装方法を考えてもらうというもの。
ここでポイントとなるのは「プログラムに正解はないが、明らかな間違いはある」という考え方。
つまり2つの質問に対して、明らかに間違った回答をしてきた人が失格ということ。
では上の問いで想定している明らかな間違いは・・・
どっちも教科書でよく見るやり方だけど、仕事でそれやるのは頭悪すぎて話にならないということで。
ちなみにそれぞれの質問で何を見ているか、デキる開発者には一目瞭然だと思うけど、説明すると
結局、コードを書くときに一番大事なのはそういう能力であって、間違っても努力や気合じゃないってこと。
cf). Software Design 2010/01号
!#/bin/sh vmstat 5 2 | tail -1 | awk '{print $4,$5,$6}'
service agent_mem { socket_type = stream protocol = tcp wait = no user = nobody server = Monitor/agent_mem.sh only_from = 127.0.0.1 disable = no }
php の場合、fopen() でもいけると思うのだが、明示的に sockopen() を使う。うむ、perlよりも楽だわこりゃ。
<?php /* -*-java-*- */ /** * モニタリングクライアント * */ $fp = fsockopen( 'localhost', 11001, $errno, $errmsg, 30 ); if ( !$fp ) { echo "Error: $errno - $errmsg \n"; } else { echo date('Y-m-d H:i:s'). "\t"; $stmt = fgets ( $fp, 128 ); if ( preg_match( "/([0-9]+) ([0-9]+) ([0-9]+)/", $stmt, $regs ) ) { $total = (int)$regs[1] + (int)$regs[2] + (int)$regs[3]; echo $regs[1]."\t".$regs[2]."\t".$regs[3]."\t".$total."\n"; } fclose( $fp ); }
こいつをモニターとして走らせっぱなしに出来るようにする。
<?php /* -*-java-*- */ /** * モニタリングクライアント * */ function mem_monitor ( $host, $port ) { $fp = fsockopen( $host, $port, $errno, $errmsg, 30 ); if ( !$fp ) { echo date('Y-m-d H:i:s'). "\t"; echo "Error: $errno - $errmsg \n"; } else { echo date('Y-m-d H:i:s'). "\t"; $stmt = fgets ( $fp, 128 ); if ( preg_match( "/([0-9]+) ([0-9]+) ([0-9]+)/", $stmt, $regs ) ) { $total = (int)$regs[1] + (int)$regs[2] + (int)$regs[3]; echo $regs[1]."\t".$regs[2]."\t".$regs[3]."\t".$total."\n"; } fclose( $fp ); } } while( 1 ) { mem_monitor( 'localhost', 11001 ); ob_flush(); flush(); sleep( 30 ); }
などというフレーズが日常的に飛び交う現場で3年目の夏を迎えた。
小さい会社だ。独立系ITベンダの皮をかぶっているが、何次請けなのかも分からないような仕事を丸投げされて、数名単位のグループで現場に送り込まれるという、典型的な人出し派遣零細企業だ。俺も本社にいたのは研修期間の最初の半年だけで、それ以降は海の近くの巨大なビル街のあちこちを転々としている。プロパーの目を気にしながら食べる昼食の味にもすっかり慣れた。
最初の1年で2人やめた。理由。1人は「公務員試験を受ける」。もう1人は「仕事についていけないから」。
前者は同期数名だけのささやかな送別会の場でこんな事を言っていた。「毎日遅くまで残業させられる上に、20も30も年上のベテラン社員がペラペラの安っぽい背広を着て若手と同じような仕事をしてる。あれが俺たちの未来の姿だと思うと耐えられない」。懸命だと思う。その後、何度か彼とはメールのやり取りをしたが、公務員になったという話はついぞ聞かない。知らせがないということは、芳しくないということなんだろうと思っている。
「仕事についていけない」後者は、俺たち同期の目から見ても、プログラミングという仕事が向いていない男だった。コードが書けないだけでなく、「どのような処理が求められているのか」ということすらなかなか理解できない。体育会系で気持ちのよい男で、入社直後は朗らかにみんなの輪の真ん中で笑っていたのだが、研修が進むにつれてだんだん笑顔が減っていき、暗い顔で研修室に毎晩居残るようになり、何とか研修期間が終わって現場にアサインされた数日後には本社に突っ返されてきた。彼もきっとすぐに辞めて懸命だったのだ。ここは彼がいるべき場所ではなかった。と言うより、誰もがこんな場所にいるべきではないのだ。
彼らの頃は、まだ「あいつ、会社やめるってよ」というフレーズがショッキングな響きを維持していた。その後に、「何もやめること無いのにな」という言葉が続いたりもした。
2年目には6人やめた。1つ上の代で、胃に穴をあけて倒れる先輩、心を病んで休職する先輩、誰にも何も言わずに消えた先輩が3人立て続けに現れたことが引き金になったのか、6人中4人はわずか2ヶ月の間に立て続けにやめてしまった。そのうちの1人、女性なのだが、泣きながら「このままだと病気になる。今すぐやめさせてほしい」と談判して、結構な火の吹き方をしている現場からそのまま離脱退職したそうだ。俺は、彼女もまた懸命だと思う。俺たち若手の代わりなんて幾らでもいる。燃え盛っている火の中で心身に大火傷を負いながら得られるものなんて、安っぽい達成感と、上長からの「こいつは無理がきく」という評価だけだ。そんなもんガソリンぶっかけて火をつけちまえ。
その頃には「あいつ、会社やめるってよ」が、まるで時候の挨拶のように軽い響きのフレーズへと成り下がっていた。だけど、俺は誰かの退職を知るたびに心の中でこう思っていた。「あいつ、やめるのか。うらやましいな」。そう思うのなら、俺だってやめればいい。簡単な話だ。だけど、俺はやめられなかった。怖かった。ろくに貯金もなく、技術もなく、経験もなく、はっきり言って社会性も大してない。ついでに言うと、俺以外の連中もその辺りの事情は大差なかった。何のことはない。この会社は他の会社では通用しないような人間をかき集めて、頭数を揃えて、泥臭い作業要員として使い捨てにしているのだ。ここを抜けだしたとして、他にもっとマシな場所があるのか。その先にあるのは、さらに深い下請けの下層ではないのか。この会社に居続けることが不正解だということは分かっている。だけど、会社をやめることが正解だとも思えない。
そして3年目。同期で残ったのは俺ともう1人だけだ。もう1人、便宜的にそいつのことを「増田」と表現してよいだろうか?紛らわしいことは承知の上だが、他に適切な名前も思いつかない。
増田はずっと、本社の経理にいる。簿記の資格を取っているということで、他の同期がJavaの研修などを受けている1年目の5月、6月の時点で経理に配属されて、そのままそこで働き続けている。毎日、ゆっくりと出社して、昼は社長と昼食に出かけて、夕方は定時に帰る。会社全体規模で行われる飲み会には必ず参加して、常に社長の近くで酌をしたり、社長の話に懸命に相槌をうったりしている。要は、増田は社長から殊更の寵愛を注がれていたのだ。増田は年不相応に幼く、ともすれば中学生ぐらいにも見える。そんな増田が、ゴルフ焼けした老ゴリラのような社長とべったりしているさまは、一見すると祖父と孫のようでもあり、それでいて2人に間を飛び交う視線にはどこか湿った情念のようなものが常に漂っていて、それがひどくグロテスクに感じられた。
そんな増田が8月いっぱいで会社をやめる。さすがに今回ばかりは「増田、会社やめるってよ」という言葉が、驚きと好奇心を伴いながら現場中を蔓延した。社長に新しい愛人ができたのか、はたまた増田にもっと別の若くて甲斐性がある彼氏ができたのか、あるいは地元に帰って見合いでもするのではないか、様々な噂が飛び交った。俺も表面上は周りの社員とそんなゴシップ話に興じてみせるのだが、心中はいよいよ穏やかではない。とうとう、俺だけが残されてしまった。俺だけが逃げ遅れた。そんな焦燥感に駆られながら、俺は煙草くさい先輩社員達が繰り広げる増田に関する下品な噂話に精一杯の作り笑顔で受け答えしながら、冷や汗をかきながら、この会社での3年目の夏を終えようとしている。
すくなくとも、ラッパーかませば C++では作れるから問題無いだろ。
でC++が使えるんだからJavaだってRubyだって動くわけだし、動かしてる人もいるわけだ。
ごく単純に言えば Objective-C は GCをつんで、ポリモルフをvtableではなくて、動的マップテーブルを使ったC++のライブラリだと思えば
って質問に実際に使ってるほとんどの人が『Apple製品で動くから』って答えると思うんだがどうだろうか。
なんか他の言語と比較して、Objective-Cを選ぶ理由がそれ以外思いつかなかった。
それでも、ここまでObjective-Cを引っ張って行ってるAppleの巨人さがやべえなーと考えながらも
Objective-C自体は糞言語で、言語自身の価値なんてなかった。
例えば、C++やGoやJavaやRubyでもApple製品でObjective-Cと同じようにアプリを作ることができます!
とかなったとするだろ?
「それでもObjective-Cを選ぶ!」という人の
Objective-Cが他の言語を押しのけて有利に立てる箇所を知りたい。
Objective-Cは言語戦争に引きずり出された時勝つことができるのか?
読んだけどそれが何か?
gotoもインラインアセンブラもある、実行速度最適型および、メモリ最適型のC言語に対して何か?
それこそ、美しい言語が書きたいならC/C++ではなく JavaでもRubyでも、LISPでもPASCALでも好きな言語を使えばいいよ。
道具は選べるんだから。そして、C/C++でも美しく書くこともそれは出きるだろうが、そもそも生まれとして、そう言うふうに生まれていない
用途が違う言語に対して、美しくない。というコメントは間違ってるよ。
あとvtableは歴史的表現で古くからあるから、読みやすいよ。
つかvtable知らずに、ポリモルフィズムは語れないわけだし。
さぁ?元ネタは『どう頑張ってもC++でも ポインタは使う』って話だったから
ライブラリを使いこなせば 頑張れば ポインタは 見かけ上使わない。(ライブラリの中は知らない。普通 自分が書かない部分は言及しないから)
という話であって
どう頑張っても という とこだけにもっと着目すれば 値コピーで十分な場合も多いから、頑張ればポインタは使わない。で いんじゃね?
ライブラリの中を見てしまえば、JavaだろうとPerlだろうと 実質的なポインタはどこかでは出てくることになるだろうからなぁ。
ポインタ、参照(リファレンス)、束縛(バインディング)、それぞれ似てるけど同様に語ると混乱の元ではないかと。
ポインタはメモリアドレスに型情報をくっつけたもの。加減算できる点が特徴で、それはメモリアドレスの概念由来だろう。
変数というメモリ上の記憶域を指すフィジカルに近い概念で、配列の運用(*p++で回すとか)、引数の参照渡し(コピー抑止、複数戻り値の実現)、メモリそのものの管理(malloc)あたりで、基本手作業による最適化のための仕組みという側面が近いと思う。
perlだと、変数はやっぱり記憶域ではあるけれど概念として一段抽象化されていて、メモリという連続した領域じゃなく独立した領域の集合となっているから、リファレンスの加減算はなし。
また、配列も単なるメモリの並びからより抽象化してリストもできたから、配列運用や複数戻り値もリストがあるのでリファレンスに頼ることはなくなる。
ただ、オブジェクトの概念があって、オブジェクトをオブジェクトとして入れる変数は用意せずリファレンスとすることで、文法上の変数の型を増やさない、コピー時のコンストラクタの問題を回避するなどのほか、オブジェクトの概念を援用して無名関数や無名変数、ファイルハンドルなども変数=引数として扱えるようにした。
で、pythonはもう一段推し進めて、今までの数値や文字、配列もオブジェクトとみなし、変数はすべてオブジェクトを指し示すもので、記憶域は変数としてあるのではなくオブジェクトとしてあり、変数にリファレンスという特別なものがあるのではなくなり、変数は記憶域をもっていて値が代入されるものではなく、既にあるオブジェクトに変数名という名前(ラベル)を付けて束縛する行為とされる。
見方を変えると変数はすべてにおいてリファレンスで、代入とは値そのものの代入でなく値へのリファレンスの代入で、引数も参照渡しであるが、引数に代入したところでリファレンスが変わるだけで元の値が変わるわけではなく、しかし他の演算などでは自動的にデリファレンスされており、単純な数値や文字列など、自身を変更する機構を持たない(できない)ものにとっては実質的に今までとの違いはないに等しい。隠ぺいといえば隠ぺいか。
java, javascript, rubyもおおむねこの考え方でよかったと思う。
ただ、phpは若干両者が混じったところがあって微妙なところがある。
参考