「java」を含む日記 RSS

はてなキーワード: javaとは

2012-02-07

とある老害大手SI企業の例(書いたらムカムカしてきた)

コードも書けないSE(笑)とか言ってるアホ共は

ガチでメーラとWordExcel,パワポしかも2003(笑))、teratermFFFTPしかつかわねーから

あいつら本気でXP(笑)、メモリ1GBで足りてるとか思ってるからタチがわりーわ。

コードがかける若手SE(笑)EclipseとかMySQLOracle,Chrome,Firefox,IE,Java,.netと使うからある程度スペックが欲しい。(と言っても今時の5万で買える普通スペックで良い。。)

・若手が新しいPC寄越せと要求

・年食ったコードがかけないSE(笑)Office2003(笑)しか使わないし、めんどくさいから要らないと抜かす

・先輩がいいって言ってるのにお前らが要求するのか?とか言って取り合わない。

・ほんとに必要な最前線の若手にまともなPCが行かない、その結果朝にパソコン起動してメーラとEclipseが起動するのに15分かかる環境の出来上がりwww

 

一方部課長以上の役職には全員Androidタブレットが支給され

お飾り部長には組織移行都度に新PCが卸される(結局何してるかもしらんがwOfficeIEしかつかわねーくせによwww)

そりゃ社員がセットアップするし、何も入ってねぇから環境移行もし易いもんなww

もちろんAndroidタブレットメール確認するくらいにしか使わないwww

iPadAndroidタブレットブラウザメールをちょこっと触った位で最新になったと思い込むめでたい老害達。

これからタブレットだろとか抜かしてくれる。

そのHTML5サーバサイドの開発するのは俺たち若手SEなんだがなwwww

でも結局使わないし飽きて部長タブレットは机の中に入れっぱかおきっぱ。

老眼にはタブレットは見難いもんなwww

マジ老害しねよ。死ね死ね死ね

クラウドクラウド、SalesforcrSalesforce

うるせーんだよ。お前。意味わかって言ってんのかアホ部長が、

クソウォーターフォール維持しながらスピード感がとか寝言ぬかしてんじゃねーぞwwヴォケが。

上の承認が~承認が~って要件定義が~ってお前らクソ共の承認があってスピードも何もねぇだろうがwww

その上テストドリブンしようとすると、要件が固まってないだろ!とか抜かすし、殺すぞ。


結果アホ共が思いつきで言い放った言葉は忘れない

SalesForceパンフレットに開発は1月を目処に実装する、みたいな文言を間に受けて

これから1月単位で開発しろとか抜かす始末wwww

え?じゃあ、プロトタイピングとかテストドリブン型とかでやるの?とか聞くと、

いや、客の要件をしっかり聞いて要件をしっかり洗い出して~上司承認をしっかりと得て手戻りがないように~とか抜かすwwwwww

おい、お前それ今までとかわらねーじゃねーかwwwww


あーいうのは少人数チームで全員が開発者としてプログラムが十二分に書けて仕様書とかの書類を最低限にして

要件定義や決定権限の大部分を現場委任して優先順位の高い項目からを集中してやるから出来るのであって

日本ほとんどのアホSI企業典型的コードの書けないExcel書くだけの御用聞きSE(笑)なんて邪魔以外の何者でもないwww

そんなゴミSE(笑)が多くを占める会社で出来る事じゃねーんだよwwww

あーいうゴミ共は居るだけでどーでもいい好みでの文句をグダグダうから余計に作業が遅くなるwww

こういうクソみたいなことばっかりやってるから古い日本企業ダメなんだよ、ゴミどもが、さっさと潰れろ。

そして俺はクソSI業界を見限ってソーシャルゲーム業界転職準備をしているのであった(完)

http://anond.hatelabo.jp/20120207005408

PS:まなめはうすからリンクでここまでくるとは。。

まなめはうす恐るべし

ちなみに私のPCスペックPen4 1.6Ghz メモリ1GB HDD 30GBです。

これでメインはJavaStruts2Spring Eclipse3.7で組んでます

これより低い奴出てこいや



更にPS:おいおい、お前ら俺の叫びに反応し過ぎだろう。。

とりあえず一部間違えていたので訂正www

1.HDDは37GBでした。ごめんなさい、実際に見てみたら間違えてました。でもいつもSVNチェックアウトするときとかデカzipを落とす時はいつも何か消してからしています

2.ケースはチェーンで鍵がかけられているので開けられません(^p^)よって自分での拡張は不可

後、時々あった。

PGなんてのはゴミがやる仕事からそんなの気にかける方がゴミ

とか

ゴミは、勘違いしている「コードがかける若手SE」かも

とか

コードを書かなきゃいけない時点で大手ではない

ちなみにT○SとかI○M、NT○の人もコード普通に書いてたよ。

ってか書くとこは書くでしょww

んで上みたいな考えの人はそれで構わないでしょう。

そうやって思っててコードプログラム部分なんてどうでもいい。

フロントエンドバックエンドが発達しても設計レベルや提案レベルに落としこむ場合に実コードの知識なんて影響しない思うならそれでどうぞって感じ

いつまでも何でもバッチ処理(笑)にこだわる人も良くいますしねwwww

からしたらいつまでコードの書けないSE(笑)が成り立つか逆に聞きたい位www

ま~コードがかけないSE(笑)からいつも馬鹿にされてるのを知ってるからコードがかけるSE(笑)はどんどん逃げてっているんですよね~

わざわざプログラム(笑)とか馬鹿にされてまで居るものじゃねーよwww

現在どんどんSI業界から出来る人が率先して辞めてるからwww

ただでさえ人材不足のクソSI業界にいつ影響が表面化するか(もうしてるか?)楽しみですNE!

私は先に役に立たない大量の船頭しかいない泥船から抜け出しますwww

戻って来ることもないでしょう!多分!

それではアデュー!

2012-02-06

http://anond.hatelabo.jp/20120206221250

一週間やるだけマシだろww

社内でJAVAの講習やれって言われて与えられたの1日だけだぞwww

特定のURL叩いてサーブレット呼ばれてDBからSELECTしたの表示するだけで一日終わったわww

これでSI会社の大手だから笑えるwww

ほんとプログラマ軽視もいいとこだわ。

そりゃNECも潰れるだろwww

こんなSIばっかりだからなwww

http://anond.hatelabo.jp/20120206214050

そうなんだよな~ぶっちゃけ偉い人に新しいパソコンとかタブレットとか渡しても無駄だろ。

老害がこれ会社から貰ったんだよ、とか言ってる前にメインプログラマに支給してるPCを新しくしろやwww

俺なんてEclipseJava開発しまくりStruts2,Springとかフレームワークバリバリなのに今時Pen4の1.6Ghzでメモリ1GB、HDD30GBの10年前のデスクトップでやれとか言われてんだぞwwww

マジでクソ老害共に与えたAndroidタブレットの代金で新しいノートPCでもよこせやw

クソ老害マジしねよ。

2012-01-28

s2jdbc-genが動かない

増田でこんなこと聞いていいのかわからないけど、誰かわかる人教えて欲しい。

seasar公式サイトにある、s2jdbcチュートリアルを試してみたんだけど、entityの生成でいきなり躓いてしまった。

$ ant -f s2jdbc-gen-build.xml gen-entity
Buildfile: /Users/hoge/dev/s2jdbc-tutorial/s2jdbc-gen-build.xml

gen-entity:
[gen-entity] Java Result: 1

BUILD FAILED
/Users/hoge/dev/s2jdbc-tutorial/s2jdbc-gen-build.xml:46: Exception in thread "main" java.lang.NoClassDefFoundError: 
Caused by: java.lang.ClassNotFoundException: 
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

動かしている環境

- Mac osx 10.7.2

- java version "1.6.0_29"

- Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11M3527)

- Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)

s2jdbc-gen-build.xml:46 っていうのが、classpathに関する記述の箇所なので、動かすのに必要なjarが読み込まれていないからなんだろうなぁ、って思ってるんだけど。

同じ現象で躓いて、うまく解決できた人がいたら、教えて欲しい。

 38   <target name="gen-entity">
 39     <gen-entity
 40       rootpackagename="${rootpackagename}"
 41       entitypackagename="${entitypackagename}"
 42       javafiledestdir="${javafiledestdir}"
 43       javafileencoding="${javafileencoding}"
 44       env="${env}"
 45       jdbcmanagername="${jdbcmanagername}"
 46       classpathref="classpath">
 47         <jvmarg value="${vmarg.encoding}"/>

2012-01-19

Python vs Ruby vs PHP vs HaskellRubyistネクラオタクキモメン」 part2

Python vs Ruby vs PHP vs Haskell プログラミング言語バトル part1

http://anond.hatelabo.jp/20120118220204

441 : デフォルト名無しさん : 2011/12/14(水) 00:34:54.13

Rubyistってなんであんな小学校の図書室で毎日読書してそうな

いじめられっこネクラチビメガネみたいな色黒とかキモオタ

顔面オジサン、オバサンばっかなの?

445 : デフォルト名無しさん : 2011/12/14(水) 00:47:59.11

Javaer: 傲慢プライド高い、土方

Scalaer: 鼻持ちならない、モヒカン

Lisper: マジキチ

Rubyist: ネクラオタクキモメンいじめられっこネクラチビメガネ、色黒、キモオタ、顔面オジサン、オバサン

PHPer: 土方、DQN

Pythonista: イケメンリア充

473 : デフォルト名無しさん : 2011/12/16(金) 22:06:14.45

Python厨のRubyネガキャンは異常だなwww

608 : デフォルト名無しさん : 2011/12/28(水) 09:29:20.74

Rubyブロックが便利すぎて、Pythonをやめたくなった。

いちいちtemporaryな関数作成してから目的関数に渡していたのがばからしくなった。

609 : デフォルト名無しさん : 2011/12/28(水) 09:43:17.83

リストやジェネレータ式の内包表記が便利過ぎて

PythonからRubyには移行できないな

610 : デフォルト名無しさん : 2011/12/28(水) 11:03:14.91

日本人が開発の中枢にいるような言語はやめとけ。

どうせ廃れる。

611 : デフォルト名無しさん : 2011/12/28(水) 11:58:14.38

Pythonさんは、どうしてこう排他的かなぁ

626 : デフォルト名無しさん : 2011/12/28(水) 15:08:51.86

609

リストやジェネレータ式の内包表記が便利過ぎて

おれもそう信じてたけど、Rubyの、メソッド呼び出しを続けて書けるほうが便利だわ。

まるでjQueryみたい。といってもjQueryのほうが後発だけど。

たとえば「xsから0以上のものを選んで、その二乗の和を求める」場合

sum([ x*x for x in xs if x > 0 ])

これだと、後ろから読まないといけないんだよね。でも

xs.select{|x| x > 0}.map{|x| x*x }.sum

これなら頭からひとつずつ読めばいいから、わかりやすいし、考えたとおりに書きやすい。

まさにスクリプトって感じがする。

629 : デフォルト名無しさん : 2011/12/28(水) 15:55:19.77

Rubyメソッドチェーンって内包表記より弱いと思う

ネストするmapとかflattenとかわかりくいよ

Python: [[x,y] for x in xs for y in xs]

Ruby: xs.map{|x| xs.map{|y| [x,y] } }.flatten(1)

632 : デフォルト名無しさん : 2011/12/28(水) 17:25:29.75

いっぽうメソッドチェーンは

orz.sage().hage().hoge().hige() タイプの問題には向いている

まり向いている方向がちがう

(まあHaskellなら hige . hoge . hage . sage と書くだけだというのは置いといて)

強い弱いということで言うと、問題を解くのに必要な一番能力が弱い

(限定された)道具を使うという考え方があるようだよ

ベタ再帰は強い(汎用的)、がそれゆえ読むのに注意を必要とする

foldrは再帰よりは弱いが、foldrで表現可能な問題のクラス(原始再帰)はかなり

広いので、mapやfilterで済むならもちろんそのほうが望ましい

ではこの問題は弱いmapやfilterを結合させるほうがいいかというと、

俺はlist comprehensionのほうが集合表記そのもの=whatを表現していて好きだな

Pythonのlist comprehensionのsyntaxはあまり好きではないが

それは大きな問題じゃない

640 : デフォルト名無しさん : 2011/12/28(水) 19:56:09.23

メソッドチェーンってバグをわかりにくくするだけだと思うなあ。もちろん性能面もあるし。linqとかは良いと思うけど。

642 : デフォルト名無しさん : 2011/12/28(水) 20:28:45.92

同じメソッドチェーンでも、linqなら良いけどrubyなら悪い .....

一言で言うと「俺はRubyが大嫌いなんだぁーー」ということですな

663 : デフォルト名無しさん : 2011/12/28(水) 22:45:30.53

メソッドチェインなんてライブラリ設計次第でどうにでもなる

PythonどころかJavaでもできる

内包表記は構文でサポートしないと難しい(マクロがあれば別だが)

680 : デフォルト名無しさん : 2011/12/29(木) 00:07:41.77

メソッドチェーンが関数型の方法に比べて特に優れている点があるようには思えないが

パイプ順に書きたければ書けるし

682 : デフォルト名無しさん : 2011/12/29(木) 00:30:35.72

680,663

Pythonには関数型として致命的な弱点があるからメソッドチェーンでは簡潔なコードが書けない

たとえば「(1) Rubyは 条件判定が(文ではなく)式」だから以下のようなコードが書ける

 ys = xs.select { |x|

   if test

     if test_1 then test_1_1 else test_1_2 end

   else

     if test_2 then test_2_1 else test_2_2 end

   end

 }

あるいは「(2) Rubyブロック内で局所宣言が可能」だから上のコードを以下のように書き換えてもいい

 ys = xs.select { |x|

   cond_1 = if test_1 then test_1_1 else test_1_2 end

   cond_2 = if test_2 then test_2_1 else test_2_2 end

   if test then cond_1 else cond_2 end

 }

関数型言語であれば「(1) 条件判定(if/case)が式」で「(2) 局所宣言(let .. in .. end)が可能」なの当たり前

ところが残念な事に、どちらもPythonには欠落しているから、上の例はストレートコード化できない

からPythonではメソッドチェーンは使われないし、「酸っぱい葡萄」に見える

684 : デフォルト名無しさん : 2011/12/29(木) 00:37:06.68

Rubyでもリスト内包表記が言語として組み込まれてくれると嬉しい

リスト内包表記はトップダウン思考

メソッドチェーンはボトムアップ思考

だと思う

頭に浮かんだロジックをすばやくコード化するのはメソッドチェーンが適しているし、

じっくり腰を据えてコード設計するならリスト内包表記のほうが美しい

自分は、たぶんこのスレRubyコアの中の人も見ているだろうから

そのうちRubyにもリスト内包表記が実装されるんじゃないかと期待しているw

766 : デフォルト名無しさん : 2011/12/30(金) 10:04:41.40

メソッドチェーンは書き易い

内包表記は見た目が整ってて綺麗、最終的な型がわかり易い

いじょ。

2012-01-18

Python vs Ruby vs PHP vs Haskell プログラミング言語バトル part1

 

42 : デフォルト名無しさん : 2011/11/12(土) 23:53:51.20

Pythonの方が弄れる対象が多いのに、なんでウェブ系だとPHPの方が流行ってんだろ

端末からテキスト処理も楽だし、数値計算周りのライブラリも充実しているのに

PHPが優遇されているのって歴史的な経緯以外に何か他の理由でもあるのか?

けどまぁ、情弱文系SEが大半を占めているバカだらけの日本じゃ別にPHPで困ることもないか

45 : デフォルト名無しさん : 2011/11/13(日) 01:41:24.25

数値計算や端末からテキスト処理なんてWeb系じゃ大して使わないからなあ…

43 : デフォルト名無しさん : 2011/11/13(日) 00:04:23.30

PHPが未だに現役なのは、単に歴史的な経緯でしかないだろ

Pythonに関しては、ZopeさえコケていなければWebサーバLLとして大成功していたはずなのに、

Railsなんかが登場したおかげで、すっかり影が薄くなってしまますた....

44 : デフォルト名無しさん : 2011/11/13(日) 00:49:55.28

zopeってコケてたんだ

ってか、railsインスパイアされたフレームワークって今じゃ幾らでもあるよね

djangoとかCakePHPとか。rubyってRoRを使いたいユーザを除くと、

pythonPHPの方がユーザー数は圧倒的に多いと思うんだけど

本家railsって、他を遥かに越えるほど良いものなんだっけ?

48 : デフォルト名無しさん : 2011/11/13(日) 08:30:25.68

44

Zopeが登場した当時、RDB+PHPはもう古い、これからOODB+ZopeWebの中軸になる!」

さかんに宣伝され、雑誌でもZope特集が組まれていた

 

少なくとも自分ZopeからPythonという言語を知ったし、その時点でRubyは知らなかった

そして、その後のORM(RDB)+Railsの出現と華々しい革新性への注目は、誰もが知っているだろう

今でもZopeの開発は継続されてはいるが、結果的に当初の期待が大きく裏切られたという事実は動かしがたい

 

djangoCakePHPについては実際に触っていないので憶測になるが、おそらく技術水準ではRailsと同等だろう

しかしRailsはRailsコミュニティの活動が活発だし、その進化は異常に早い

 

Railsに何か致命的なトラブルが発生して開発が停滞する、あるいはdjangoCakePHPから

何かのイノベーションが提示されでもされない限り、後発のdjangoCakePHPRailsに追いつくのは無理

Railsは決して技術的に完璧Webフレームワークではないんだけどね....(たとえばSeaSideのような.... )

 

からこそ「もしもZopeが....だったなら」という「たら・れば」感はPythonコミュニティの潜在認識になっている

51 : デフォルト名無しさん : 2011/11/13(日) 12:55:40.83

 C a k e P H P は う ん こ   

遅い、設計が古い、動作がおかしいの3重苦

日本では流行ってないけど海外だとYiiが流行ってきてる

55 : デフォルト名無しさん : 2011/11/13(日) 17:31:12.14

CakePHP使ってんの?

可哀そうにw

53 : デフォルト名無しさん : 2011/11/13(日) 14:44:48.55

求人PHPばかりだからPHPやるしかないだろ。

57 : デフォルト名無しさん : 2011/11/13(日) 19:34:04.95

でもやっぱりいつもの使い慣れたLL(Python/Ruby)で

Webサービスを書きたいってのがある

73 : デフォルト名無しさん : 2011/11/15(火) 17:32:46.07

アメリカ言語ユーザー数は

Python>>>>>>>>Ruby

求人数は

Ruby on Rails>>>>>>>>Django

http://www.indeed.com/jobtrends?q=django%2Cruby+on+rails&l=

どういうことなの?

74 : デフォルト名無しさん : 2011/11/15(火) 17:48:15.59

RubyRails以外に使い道がないか

75 : デフォルト名無しさん : 2011/11/15(火) 17:54:35.50

海外ではRubyは昨今のRailsバブルのお陰で

もはやWebスタートアップ共通語になってるらしいからね

求人数が多いのはそのためだと思うよ

76 : デフォルト名無しさん : 2011/11/15(火) 18:03:23.05

なんかのミスかと思ったがアメリカでもRuby on Railsは人気があるのかなあ・・・

Pythonのほうが使いやすいと思うのだがフレームワークRailsが優位なんだろうか

77 : デフォルト名無しさん : 2011/11/15(火) 18:23:14.33

Djangoは周辺ライブラリ微妙だし本体も鈍くさい感じがする。

でも、FlaskはSinatraより好きだからPythonが嫌いってわけではない。むしろ好き。

 

ただ、いざ作り始めるとやっぱりRailsが楽だなあってなって、Railsを使い続けている。

78 : デフォルト名無しさん : 2011/11/15(火) 18:38:46.28

同感だ

同じように思っている人が他にもいて安心した

79 : デフォルト名無しさん : 2011/11/15(火) 18:54:37.13

PHPJavaScalaには

Railsみたいなフレームワークあるのに

Pythonはいいのないんだよな

80 : デフォルト名無しさん : 2011/11/15(火) 21:19:09.89

PHPフレームワークが乱立しすぎているから、RailsPHPで実装してみようというやつが出てきた。

Scalaも注目されだしたのはつい最近のことだしな。

それに比べてPythonは、Zopeというデファクトスタンダードが既に存在していたけど、

つの間にかフェードアウト

ただ、どうやってもRailsもどきRailsを超えることはできないのは間違いない。

83 : デフォルト名無しさん : 2011/11/15(火) 21:25:38.55

パクリオリジナルを超えられない(キリッ って定型句だけど、

これってキリッって言いたいだけだと思う。

後発品が先に出たものを超えたものなんていくらでもあるから

84 : デフォルト名無しさん : 2011/11/15(火) 21:30:04.39

D言語って超えたって?

85 : デフォルト名無しさん : 2011/11/15(火) 21:31:12.00

B言語って超えたって?

86 : デフォルト名無しさん : 2011/11/15(火) 21:53:33.76

でもRailsRubyの黒魔術を使いまくりから

PHPで同じ事をできないわけではないだろうけど、Ruby on Railsほど簡潔にはできない

90 : デフォルト名無しさん : 2011/11/15(火) 22:50:07.81

スタートアップなんて根無し草の集まりにとって、

googleが囲った言語coolさを見出せないんだろ

123 : デフォルト名無しさん : 2011/11/20(日) 11:32:16.79

まあくだらねえWEBサービス作って喜んでる情弱は早く死ねって事だよ

91 : デフォルト名無しさん : 2011/11/15(火) 22:52:42.98

そういう理由じゃなくてRailsのほうが単純に情報プラグインも多いからでしょ

3 : デフォルト名無しさん : 2011/11/15(火) 23:07:07.67

linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん

わざわざ不合理で不完全な言語を使うなんて

社会からハミ出た奴らの精神的な作用によるものじゃないの?

95 : デフォルト名無しさん : 2011/11/15(火) 23:20:20.21

django情報プラグインが増えないという、

現実に対する鬱憤を吐いてるようにしか聞こえないな

もしも

linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん

真実であるのなら、今頃はdjango情報プラグインが溢れかえっているはず

104 : デフォルト名無しさん : 2011/11/16(水) 01:20:49.05

Python信者乙。

yumや、gdbgnome拡張pythonであるからといって、それをwebアプリでも使いたいと思う人は少ないというだけのこと。

ソースからインストールする必要があったとしても、web開発ではrubyを使いたいという人が多いというだけのこと。

94 : デフォルト名無しさん : 2011/11/15(火) 23:15:11.93

というか、世界中Pythonプログラマが Remeber Zope!! を合い言葉

打倒RailsたるWebフレームワークを開発しているはずだけど、

いまだにRailsを超えるプロダクトが登場しないのはナゼ?

Railsも登場してから、かなりの年月が経過しているんだけどなぁ....

その間にもRailsRails 3が登場して、REST/AJAXの強化等の進化継続しているよ

347 : デフォルト名無しさん : 2011/12/09(金) 10:16:35.22

Ruby では

ary.map {|x| x**2}

となるものが、Python では

map(lambda x: x**2, ary)

となり、lambda の本体が1つの式では表現しきれなくなると

def mapper(x):

.....

map(mapper, ary)

書き換える必要があります

348 : デフォルト名無しさん : 2011/12/09(金) 10:24:20.94

Pythonのlambdaを用いた階乗計算

f = lambda x:(x and f(x-1)*x)or 1

RubyにはPythonのように「lambda本体は式でなければならない」という限定がありませんから

andやorを使った不自然記述をしなくても

f = lambda{|x|if x == 0 then 1 else x*f.call(x-1) end}

または

f = lambda{|x|x == 0 ? 1 : x*f.call(x-1)}

と書けます。lambda内でreturnが使えますから、書きたければ

f = lambda{|x|if x == 0 then return 1 else return x*f.call(x-1) end}

でもOKです。

390 : デフォルト名無しさん : 2011/12/10(土) 15:35:41.62

348

これはPythondisっているように見せかけてRubydisっているのか? と一瞬思ってしまったw

だってRubyのほうが長くない?CLのfuncallみたいなcall()がちょっとうざいし…

そしてどっちもlambda式の中で束縛変数名前再帰可能、と

350 : デフォルト名無しさん : 2011/12/09(金) 11:12:13.28

要素に対する関数適用と、抽出を組み合わせる場合

Python

print [x*2+100 for x in [1,2,3,4,5] if x > 2 and x < 5]

暗号のように見える。

Ruby

puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2+100}

思考の流れと、コードの流れが一致しているので書きやすい。

351 : デフォルト名無しさん : 2011/12/09(金) 11:22:55.04

だれだPythonなら書き方はひとつとか言ってるのは

map(lambda x: x*2+100, filter(lambda x: x > 2 and x < 5, [1,2,3,4,5]))

354 : デフォルト名無しさん : 2011/12/09(金) 12:22:07.37

pythonて可読性が高いのをうたってる割にはそこいまいちだよね

353 : デフォルト名無しさん : 2011/12/09(金) 12:10:08.46

Ruby場合には、左から右へと無名関数データフローあるいは

パイプラインのように並ぶからコードが読みやすい

 

関数型プログラミングに不慣れな初心者でも、参照透明性のあるコード自然に書ける

プログラマにとって優しい or プログラミングの楽しさを教えてくれるのがRuby

 

それと比較すると、Pythonコードは、関数型プログラミングというもの

いかに高度で難解なものであるかという事をもったいぶってプログラマ押し付け

 

もしもPythonしか知らないプログラマであれば、関数型 = 難解 という印象を持つだろう

356 : デフォルト名無しさん : 2011/12/09(金) 12:53:45.66

階乗計算くらいだと単純すぎて、ナゼ重要なのかが分かりづらいと思うのでコードで示す

result_list = source_list.map { |elem|

  x = foo(elem.x)  # ここが局所宣言を書く部分

  y = bar(elem.y)  # ここも局所宣言の続き

  x + y       # 最後に評価された式の値が、無名関数のリターン値になる

}

Rubyでは、map等に与える無名関数の中で局所的な環境(クロージャ)が作られるから

x = foo(...) のような代入文がいくつでも(= 複雑な処理でも)書ける

このポイントは、実用的なプログラム関数型風で書こうとした時に、威力を発揮する

357 : デフォルト名無しさん : 2011/12/09(金) 12:59:21.07

余計分かりづらくなった

358 : デフォルト名無しさん : 2011/12/09(金) 13:17:26.54

リスト内包表記が暗号みたいと言ってる奴は

高卒ドカタなんだろうなぁと可哀想になる

大学数学に触れる機会があれば

集合の表記に似せてることが分かるから

386 : デフォルト名無しさん : 2011/12/10(土) 01:41:34.46

数学とかで慣れてるし区切りが関数のがわかりやすい

359 : デフォルト名無しさん : 2011/12/09(金) 13:46:31.97

355

map/filterはfor/ifと同じだと言っているだけだから、難解という印象は持たない。

関数型プログラミングに慣れた、あるいは得意な人であれば、そういった印象なんだろね

Rubyの魅力はこれから関数型プログラミングを学ぼうとする初心者、 あるいはそんな初心者へ教える立場から見た、優しさ or 分かりやすさなんだ

360 : デフォルト名無しさん : 2011/12/09(金) 13:53:28.85

Rubyだと直感的に書けるコード

[1,4,3,2].sort.reverse.map{|x| x.to_s}.join('-')

Pythonだと読みにくい。

'-'.join(map(str, reversed(sorted([1,4,3,2]))))

361 : デフォルト名無しさん : 2011/12/09(金) 14:07:17.88

360

Pythonでは思考の流れと一致しないばかりか、「カッコだらけ」のコードになると.....

364 : デフォルト名無しさん : 2011/12/09(金) 14:28:55.99

カッコだらけのコードを分かりやすくする基本的な方法静的単一代入じゃないか

Rubyのやり方は基本ではなく玄人のやり方だろ

372 : 369 : 2011/12/09(金) 16:21:03.82

Pythonでは組み込みの型でメソッドチェインはやって欲しくないな

listにmap,filterメソッドができたとしても、

似たようなコレクションtuple,deque,array,queue等にも同じメソッドが必要になってくるし。

シーケンスプロトコルの利点が活かせない。

383 : デフォルト名無しさん : 2011/12/10(土) 01:17:28.39

372

外部のライブラリでも列挙可能なものは、たいていEnumerableモジュールをimportしてます

Rubyユーザーは列挙可能なものmapselectできて当然だろって思ってる気がしま

377 : デフォルト名無しさん : 2011/12/09(金) 18:41:51.79

Pythonは「何かを便利に書くためのしわ寄せ」をはっきり寄せてくる

得意と不得意を言語レベルではっきり主張するのでメリケン好みと言えなくもない

Rubyは全方位になんとなく八方美人なので、全体的になんとなく書きやすくてなんとなくキモくて遅い

379 : デフォルト名無しさん : 2011/12/09(金) 18:48:52.27

Pythonユーザー調教っぷりは異常

「書きにくいってことはその処理に向いてないってことだから諦めろ」を地で行く

387 : デフォルト名無しさん : 2011/12/10(土) 13:40:40.74

リストの内包表記はシンプルに書けるときは使うけど

基本その場でdefするのがPython風なんだと思う。

389 : デフォルト名無しさん : 2011/12/10(土) 14:40:31.04

無名関数が文を使うほど複雑なら名前を付けるのが Python 流と想像

384 : デフォルト名無しさん : 2011/12/10(土) 01:23:49.48

outer(center(inter( arg )))

これを読みづらいと感じるのは、左から右に流れる

日本語文に慣れているからだと思うが、

もしかしてアラビア語ネイティブな人からすると逆に読みやすいのか?

385 : デフォルト名無しさん : 2011/12/10(土) 01:34:57.89

なるほど、ということは右から左、左から右どっちでも行ける言語が最高ですね

F#パイプライン演算子最高ということで

2012-01-04

プログラミング初心者たわごと

JavaScript って生き物っぽいって思ったのがきっかけだった。

なんか菌?に遺伝子いれてたんぱく質生産させるやつ? Function は菌の細胞膜prototype遺伝子で、だから prototype全然関係ない違う生物遺伝子を生きてる菌に入れちゃったり。そうすると全然ちがうたんぱく質生産されたり。prototype にべべーっとコピーして追加するのなんてまさしくそれっぽい。

インスタンスからじゃないと複製できないのも生き物っぽい。

インスタンスって言い方になにか違和感があるなあ。

だってプロトタイプベースって、生き物しかいない世界じゃない?基本的に。インスタンスってのは生き物じゃない設計図があってそれにしたがって出来た生き物がインスタンスってイメージあんだけど。プロトタイプベース世界にはそんな設計図も生き物じゃないものもないよね?なのにわざわざインスタンスっていうのに何か違和感ご都合主義的なもの感じる。クラスは型で、インスタンスを実体だとかなんとかって氾濫してるせいかな。多分この辺の用語が JavaScript をわかりにくくさせてる気がする。

僕の感覚では、オブジェクトってのは生き物で、クラスベースってのは神が設計図に基づいて生き物を生産してる世界で、インスタンスベースってのは生き物が生き物を複製してる世界イメージだ。多分、原始の生物インスタンスベースみたいな世界で、海の中にうようよしてたんだろうな、とか。

オブジェクトじゃないものは、生き物じゃない死んでるたんぱく質RNA の破片みたいな。それだけじゃなにもできないみたいな。それだけじゃ命がないから、生き物の殻に詰めるってのが JavaScriptコンストラクタイメージ

Perl の bless したらこれはもう命入ったよ生き物だからねっあとは勝手にしてねってのも、Python名前空間さえあればなんとかなるよねってのも、JavaScriptハッシュさえあれば世界作れるよねってのも、みんなどこか似ている。ちゃんと OOP を理解できてるかは別としてもこの三つはわりとすぐやりたいことができた。昔 Java の本を買ってきて挫折したのにくらべたら、なぜかずっとわかりやすかった。(bless という命名はすごく洒落てる)

全然関係ないけど、Django日本語リファレンスは何か萌えるラクダ本日本語訳はむかつくのに。

プログラミングを始めたばっかりの時は、なんだか難しい用語の意味を理解しないと OOP がわからないと思ってた。それは僕らの住んでる世界とは全然関係のないプログラミング技術ってやつだと思ってた。

でも多分違う。

世界が動く仕組みさえあれば、あとは作り手に世界の成り立ちを抽象化する表現力さえあれば、世界勝手表現されていくし、動き出してく。たまたま僕らの世界オブジェクトもので溢れていて、プログラミング言語進化すれば世界に似るのも当然だろう。いや逆か。プログラミング言語世界に似てきたから、オブジェクトなんていう世界に似た概念が出てきたってことか。なんだか難しい用語ってのは、その表現の一部分の技術名前をつけてるだけなんだな、と。例えば何とか歌唱法や何々画法とか何とかレトリックとかパースの取り方みたいなのと同じ。それは表現を理解する手助けにはなるけど、その意味を知る事がイコール表現力をあげることにはならないんだよね。これに気づくのに遠回りしすぎたなあ。

(知識を得るだけで、100% 還元される人もいるかもしれないけど、そんなのは一部の天才だけだと思う。殆どの凡人はそうはいかない。とはいえ、元の錬度が低ければ、コツをいくつか教わるだけでいきなりうまくいくこともある。ただ、それをまるまんま実力だと思うのは、どんな分野でも危険だ。恋愛テクニックやらを必死に読んでる連中が男女間の深い人間関係を上手くやれてるとはちょっと想像できない!)

プログラミング表現力を上げるにはどうすればいいんだろう。きっと他と同じだろうな。いい表現を沢山味わって、世界をよく観察して、どう成り立ってるかどう動いてるか、私達はそれをどう認知しているのか、考えることかもしれない。漫画家を志す人が美術解剖学を学んだり、優れた画家が絵筆で世界を生々しく描写するように、優れたプログラマ世界のなりたちをプログラムに写し取ったり、世界の仕組みを作る事が出来るのだと思う。

やっとプログラミング面白くなってきた初心者より。

2011-12-28

id:xevra 、助けてください

20フリーター男。

今の仕事をずっと続けられるはずがない。機械がやるようになるだろうから

IT系起業したいが、技術を持っていない。とりあえずJava Scriptを独学し始めたが、起業までどう持っていけばいいのかわからない。

id:xevra、助けてください。何か起業きっかけをいただけませんでしょうか。

2011-12-21

Oracle DB Express Edition は 他のPCから接続可能。MS SQL Server Express はだめ

俺が最初に扱ったRDBOracle 8i か 7。

DBってこんなもんか...と思ってたけど、インストーラのヘコさにあきれまくる。

その後 Microsoft SQL Server 2000 の手軽さを知って、こちらにどっぷり。

で、ずっとSQL Server

そこそこの使い方ならどっちのDBも十分使える上に、Oracleは「くだらない」お作法大杉。(Oracle Master の為?)

クエリー実行計画が図解でわかりやすい、バックアップやアタッチが超楽。

サポート(修正パッチなど)も料金込みのMSのほうがトータルで安価だし、CubeやReporting Serviceなどもコミコミで使える。

言語関係もMS SQL Server のほうが良くできてる。

SQL Server のStandard Editionだけでなく、無償版であるExpress Edition も使っているが、

残念ながらこれは外部のPCから接続できない制限がある(はず)。

同じく無償版のOracle DB 11g Expressがあるが、こっちでは他のPCから接続できた。

Universal Installer は相変わらずjavaでできてるからUIヘコいけど、

「くだならい」設定項目がだいぶ減って楽ちんでインストール完了。時代進化した。

.NET Framework(OLE DB)で外部からPC接続ホスト名、ユーザー名、パスワード接続文字列で指定するだけで、あっさりOK。

tnsnames.oraとかいじることはもう無くてよいのだろう。

sqlplus懐かしいぞ、ちょっとOracle回帰してみるか...

2011-12-17

Flash vs HTML5」関連話への反論は まだまだ技術者側の説明不足か

先日「Flashエンジニアが今後10年食べていくには?」というテーマを元に

Flash精通した Web 技術者達のディスカッションが行われる催し物があった。

 http://www.publickey1.jp/blog/11/flash10.html

この記事だけでは内容が省略しすぎているため

時間があれば是非録画の模様もみていただきたい。前半初頭は音量が小さいので注意。

こういった催し物は面白いなと、私はとても楽しく見させていただいた。

 http://www.ustream.tv/recorded/19073524

 http://www.ustream.tv/recorded/19074357

ディスカッションでは Flash だけではなく HTML5 についても触れている。

ディスカッション感想をディレクションや営業を行なっている知人に聞いたり、

ネット上の反応を見てみたところ以下のような意見がいくつかあった。

「『Flash好きな人』だけではなく HTML5 派の人との対談もあればよかった」

Flash 派の人の話だから HTML5 が使えないという話はいまいち参考にならない」

Flash 派』『HTML5 派』という くくりで考えてしまう人は

まだまだ多いと実感する。

パネリスト達は

過去から現在までに様々なプログラミング言語を利用し、あらゆる技術精通している。

Flash という表示媒体/環境開発がベター(時にはベスト)だと考え、

Flash をよく扱っている、という旨を話している。

Flash 以外にも色々やってます、と言っている。

最後の締めとして

Flash よりも優れたものが登場するのであればそちらに移行するでしょう、

とも言っている。

これだけの説明があったのに

ディスカッション内で触れた HTML5 に対する否定的な話は、

Flash 派』とやらのポジショントークだと目に写ってしまったのだ。

Java やら C やら objective-c やら perl やら php やら

サーバサイドからスマホネイティブ言語を用いてのアプリ制作まで

色んな事やってます、と言っても

技術者ではない人達には馴染みのない単語は耳には入らない。

技術的な事はよくわからない。

現在世の中には HTML5 を推し、合わせて Flash を否定する記事が結構出回っている。

技術者が話す専門的な用語の飛び交う話よりも

どこの誰が書いたかもわからない

HTML5 vs Flash 的な読みやすい記事に耳を傾けてしまう人はいる。

Apple 製品を好む人は「ジョブズがそう選択したのだから」と

なおさらこういった記事に目を向けてしまう。

Flash vs HTML5 の話にのせられてしまうのは、よくわかっていない人だ。」

そうあっさり切り捨ててしまうのもいいかもしれないが、

そうもいかない状況にもなってきてしまっているのが最近だ。

ディスカッション内では、

Flash大丈夫なのか?」という

ネット上の煽り記事を読み不安に思ったクライアントから連絡を受け

きちんと状況をゼロから説明するハメになってしまった、という内容があった。

似たような状況になっている人もいるのではないだろうか。

当方周辺では、

Flash は駄目だ」「Flash でなくても HTML5 ならできるはずだ」

HTML5Flash の代わりになるものだと言われている」と

クライアント、あるいは仕事先の関係会社から耳にする機会が増えてきた。

技術者の及ばないところで

ベターではない技術が選択、あるいは勧められてしまう やっかい性。

危惧した技術者達による反論記事は結構出始めているのだが

その記事は世間の目には届かない。

TV CMバンバン流れている iPhoneiPad では Flash を見ることができない

という状況に乗じた

いかげんな煽り記事の効果は絶大だ。

よくわからない人が圧倒的多数なのだ

勘違いを正すためには、今までよりもより一層

からない人達に わかるように説明、

あるいはメッセージを発信するよう心がけていかねばならないと感じる。

技術へ移行は容易い

パネリスト達のような

Flash を扱う事が可能な技術力を持ち合わせている人にとって

Flash が終わろうが、代わりの技術HTML5 やらその他何になろうが

大した影響はない。

「この文章書いている人間Flash 派なのでは?

 Flash 派の人間がそんな事言っても説得力ないな」という

ポジショントークと見られないための判断材料として、

プログラミング』についての話をしてみる事にする。

プログラミングに詳しいすべてのエンジニアはこういうだろう。

「世にあらゆるプログラミング言語があるが

 それらプログラミング言語の違いは記述の仕方が違うだけ」

「何か一つ言語を習得し

 その言語で自由に物を作れるだけのスキルを持ち合わせたならば

 別言語、別環境になろうとも移行は容易い」

Flash の事は全く知らないがプログラミングプロフェッショナルの人』

が近くにいるならば是非上記について伺ってみてほしい。

その通りだと答えてくれるはずだ。

Flash で用いられている言語は何も特別なものはない。

世にある あらゆるプログラミング言語のうちの一つである

プログラミング概念を理解している人ならば

Flash で作ったものを他の言語移植することも、

他の言語で作ったものFlashプログラミング言語移植することも容易いのだ。

ここで上記三行の「他の言語」を「JavaScript」に置き換えてみてほしい。

HTMLDOM 操作に必要な言語JavaScript である

言語は、Flash ならば ActionScriptHTML5 ならば JavaScript を用いる。

画面描画は

Flash ならばグラフィックスシンボル等を作成・配置、

あるいは用意されている描画用 APIActionScript で呼び出し、

HTML5 ならば CSS, HTMLタグ記述

あるいは用意されている描画用 APIJavaScript で呼び出す。

Flash と似たような技術として Java AppletShockwave があるが、

これらも一緒で

言語を変え、その技術に合わせた描画を行う処理を記述するだけだ。

Flash派」「HTML5派」といった具合に

Web 技術者が何かに属していて、何かには属していないかのような区別の仕方は

的がはずれている事を なんとなく感じていただけただろうか。

技術者にとっては要はなんだっていいのだ。

仕事に対し、あるいは表現したい事に対し、ベターな選択を行うだけの事なのである

PC向けゲームなら Flash

スマホ向けサイトなら HTML5

環境や表示内容に合わせ両方を採る選択もあるだろう。

パネリストの中に ActionScript好きだ、という人がいた。

これは別に

Flash が好き(製品のファン)だから ActionScript が好き、と言っているのではない。

現存するあらゆる技術比較した上で

ActionScript が優れたプログラミング言語だと判断しての発言なのだ

将来的に HTML5 が格段に進化する日がくるならば

HTML5 を選択するだけの事であり、

HTML5 が廃れて別の技術が登場するならば

その別の技術を選択し、

Flash より優れた技術が登場しなければ Flash を使い続ける、

ただそれだけの事なのである

対立どころか むしろ近い存在

もう少し突っ込んだ話をすると

Flashプログラミング言語である ActionScript(ActionScript 1.0)と

HTML 表示制御を行う言語 JavaScript は 実は同じ言語仕様である

ECMAScript』という単語で調べてみてほしい。

FlashHTML5 は対立するもの」と考えていた人、

あるいは ActionScriptJavaScript を触れたことがない人にとって

「え?そうなの?」と思う人もいる事だろう。

JavaScript は大規模開発に向いていない、という話は聞いたことがないだろうか。

同様の言語仕様である ActionScript 1.0 はこの問題を解決するため

ActionScript 2.0 から ActionScript 3.0 へと進化していった。

FlashHTML5 とで同等のもの制作する場合

Flash は開発がし易い、という話がよく挙げられるが

その理由の一つがこれである

現行の JavaScriptActionScript 1.0 は ECMAScript 3 準拠に対し、

ActionScript 3.0 は ECMAScript 4 準拠である

言語として進化しているものFlash採用しているので

開発は抜群にし易い。

ECMAScript 4 準拠の JavaScript も登場する日もあったかもしれなかったのだが、

Adobe はここで大失敗してしまった。

ECMAScript 4 標準化白紙

ECMAScript 4 は無かったことになってしまったのだ。

ActionScript 3.0 で作成したプログラム

そのまま HTML ブラウザで動作する事はなくなった。

技術者にとってコストを削減できるための手段の一つを

政治的な思惑によって潰されてしまった悲しい過去の話である

ちなみに JavaScript は大規模開発に向いていない、という事に対し、

最近では Google が新言語 Dart というものを開発している。

位置づけとしては ActionScript 2.0 に近いと比喩した人もいる。

ActionScript 2.0コンパイルActionScript 1.0 に変換されて出力される。

Dart も同じく JavaScript 変換機能を持つ。

今後

先の事は誰にもわからない。

HTML5 が成長するとは必ずしも言えない。

技術者は身を持って知っている。

ブラウザの足並みが揃ったことは過去一度たりともない。

表示と動作の差異、技術者はずっと苦しめられてきている。

めんどくさい。コストがかかる。

日本では IE6呪いはまだまだ続く事だろう。

現状の HTML がひどい状況なのだから

HTML5 も同じ道を辿るのでは、と言われてしまうのも仕方がない。

実際に HTML5 の各ブラウザの実装具合はバラバラである

Flash はといえば、

今でも 10年以上前スクリプト言語 (ActionScript 1.0 よりも前の言語)で

携帯向け Flash を作るはめになっている開発者が多い。

携帯向け Flash Player 開発中止、とある

Flash が動作するブラウザがいつまで携帯に搭載され続けるのか、

まだ誰にもわからない。

今後も当面携帯向け Flash を作り続ける事になるのかもしれない。

この古い言語での開発はとても苦痛であるが、

携帯向け Flash は一つの容量が小さいというのが救いである。

IE6 対応 HTML サイト制作にせよ、携帯向け Flash 制作にせよ

10年以上前ものが現役とは妙な話である

しか技術者対応するのだ。

状況に応じて何を選択するかを判断できるほどの技術力を身につける事

それが一番重要である

これから Web技術者を目指す、という人は

HTML5 なり Flash なり何を学んだっていい。

選択する技術に何ができて何ができないのか、

どの技術を組み合わせるとよいのか、

自ら判断できるようになった時、一人前の Web 技術者になったと言えるだろう。

一つ何かをモノにしてしまえば前述の通り移行は容易い。

今何かを勉強中の人は周りの声に流されず、

それを極めるくらいまでとことん勉強してほしい。

続けていくと見えてくるはずだ。自信という名の悟りの道が。

ディスカッション感想

気になった点をいくつか。

現状の HTML5 の実装具合のバラバラさに対し、

「(HTML5の)表示の差分を埋めてくれる何かが登場するかもしれない」

と言う発言があった。

言った当人も会場にいる人達も、きっとこう思っただろう。

「それってなんて Flash Player?」と。

HTML5Flash の真似事をしてますよね」

「あれはやめたほうがいい」という発言があった。

おそらく HTML5 canvas の事であろう。

この意見に対し「ムッ」と来てしまった人がいるかもしれない。

勝手に注釈するのであればこの発言は

Flash で作られた重たい WebHTML5 でまた再現するつもりなの?」

という皮肉であろう。

2011-12-12

コンピュータプログラミング概念技法モデル」の目次

第1章 プログラミング概念入門
	1.1 計算器
	1.2 変数
	1.3 関数
	1.4 リスト
	1.5 リストについての関数
	1.6 プログラムの正しさ
	1.7 計算量
	1.8 遅延計算
	1.9 高階プログラミング
	1.10 並列性
	1.11 データフロー
	1.12 明示的状態
	1.13 オブジェクト
	1.14 クラス
	1.15 非決定性と時間
	1.16 原子性
	1.17 ここからどこへ行くのか?
	1.18 練習問題

第1部 一般的計算モデル

第2章 宣言的計算モデル
	2.1 実用プログラミング言語定義
		2.1.1 言語の構文
		2.1.2 言語意味
	2.2 単一代入格納域
		2.2.1 宣言的変数
		2.2.2 値格納域
		2.2.3 値生成
		2.2.4 変数識別子
		2.2.5 識別子を使う値生成
		2.2.6 部分値
		2.2.7 変数の,変数への束縛
		2.2.8 データフロー変数
	2.3 核言語
		2.3.1 構文
		2.3.2 値と型
		2.3.3 基本型
		2.3.4 レコード手続き
		2.3.5 基本操作
	2.4 核言語意味
		2.4.1 基本概念
		2.4.2 抽象マシン
		2.4.3 待機不能な文
		2.4.4 待機可能な文
		2.4.5 基本概念再訪
	2.5 メモリ管理
		2.5.1 末尾呼び出し最適化
		2.5.2 メモリライフサイクル
		2.5.3 ガーベッジコレクション
		2.5.4 ガーベッジコレクションは魔術ではない
		2.5.5 Mozartのガーベッジコレクタ
	2.6 核言語から実用言語へ
		2.6.1 構文上の便宜
		2.6.2 関数(fun文)
		2.6.3 対話的インターフェース(declare文)
	2.7 例外
		2.7.1 動機と基本概念
		2.7.2 例外を持つ宣言的モデル
		2.7.3 親言語の構文
		2.7.4 システム例外
	2.8 進んだ話題
		2.8.1 関数型プログラミング言語
		2.8.2 単一化と内含(entailment)
		2.8.3 動的型付けと静的型付け
	2.9 練習問題

第3章 宣言的プログラミング技法
	3.1 宣言的とはどういうことか?
		3.1.1 宣言的プログラムの分類
		3.1.2 仕様記述言語
		3.1.3 宣言的モデルにおいてコンポーネントを実装すること
	3.2 反復計算
		3.2.1 一般的図式
		3.2.2 数についての反復
		3.2.3 局所的手続きを使うこと
		3.2.4 一般的図式から制御抽象へ
	3.3 再帰計算
		3.3.1 スタックの大きさの増加
		3.3.2 代入ベース抽象マシン
		3.3.3 再帰計算を反復計算に変換すること
	3.4 再帰を用いるプログラミング
		3.4.1 型の記法
		3.4.2 リストについてのプログラミング
		3.4.3 アキュムレータ
		3.4.4 差分リスト
		3.4.5 キュー
		3.4.6 木
		3.4.7 木を描画すること
		3.4.8 構文解析
	3.5 時間効率空間効率
		3.5.1 実行時間
		3.5.2 メモリ使用量
		3.5.3 償却的計算量
		3.5.4 性能についての考察
	3.6 高階プログラミング
		3.6.1 基本操作
		3.6.2 ループ抽象
		3.6.3 ループ言語的支援
		3.6.4 データ駆動技法
		3.6.5 明示的遅延計算
		3.6.6 カリー化
	3.7 抽象データ型
		3.7.1 宣言的スタック
		3.7.2 宣言的辞書
		3.7.3 単語出現頻度アプリケーション
		3.7.4 安全抽象データ型
		3.7.5 安全な型を備えた宣言的モデル
		3.7.6 安全な宣言的辞書
		3.7.7 資格セキュリティ
	3.8 宣言的でない必要物
		3.8.1 ファイルを伴うテキスト入出力
		3.8.2 グラフィカルユーザインタフェースを伴うテキスト入出力
		3.8.3 ファイルとの状態なしデータI/O
	3.9 小規模プログラム設計
		3.9.1 設計方法
		3.9.2 プログラム設計の例
		3.9.3 ソフトウェアコンポーネント
		3.9.4 スタンドアロンプログラムの例
	3.10 練習問題

第4章 宣言的並列性
	4.1 データ駆動並列モデル
		4.1.1 基本概念
		4.1.2 スレッド意味
		4.1.3 実行列
		4.1.4 宣言的並列性とは何か?
	4.2 スレッドプログラミングの基本的技法
		4.2.1 スレッドを生成すること
		4.2.2 スレッドブラウザ
		4.2.3 スレッドを使うデータフロー計算
		4.2.4 スレッドスケジューリング
		4.2.5 協調的並列性と競合的並列性
		4.2.6 スレッド操作
	4.3 ストリーム
		4.3.1 基本的生産者消費者
		4.3.2 変換器とパイプライン
		4.3.3 資源管理し,処理能力改善すること
		4.3.4 ストリームオブジェクト
		4.3.5 ディジタル論理シミュレーション
	4.4 宣言的並列モデルを直接使うこと
		4.4.1 順序決定並列性
		4.4.2 コルーチン
		4.4.3 並列的合成
	4.5 遅延実行
		4.5.1 要求駆動並列モデル
		4.5.2 宣言的計算モデル
		4.5.3 遅延ストリーム
		4.5.4 有界バッファ
		4.5.5 ファイルを遅延的に読み込むこと
		4.5.6 ハミング問題
		4.5.7 遅延リスト操作
		4.5.8 永続的キューアルゴリズム設計
		4.5.9 リスト内包表記
	4.6 甘いリアルタイムプログラミング
		4.6.1 基本操作
		4.6.2 ティッキング(ticking)
	4.7 Haskell言語
		4.7.1 計算モデル
		4.7.2 遅延計算
		4.7.3 カリー化
		4.7.4 多態型
		4.7.5 型クラス
	4.8 宣言的プログラム限界拡張
		4.8.1 効率性
		4.8.2 モジュラ性
		4.8.3 非決定性
		4.8.4 現実世界
		4.8.5 正しいモデルを選ぶこと
		4.8.6 拡張されたモデル
		4.8.7 異なるモデルを一緒に使うこと
	4.9 進んだ話題
		4.9.1 例外を持つ宣言的並列モデル
		4.9.2 さらに遅延実行について
		4.9.3 通信チャンネルとしてのデータフロー変数
		4.9.4 さらに同期について
		4.9.5 データフロー変数有用性
	4.10 歴史に関する注記
	4.11 練習問題

第5章 メッセージ伝達並列性
	5.1 メッセージ伝達並列モデル
		5.1.1 ポート
		5.1.2 ポート意味
	5.2 ポートオブジェクト
		5.2.1 NewPortObject抽象
		5.2.2 例
		5.2.3 ポートオブジェクトに関する議論
	5.3 簡単なメッセージプロトコル
		5.3.1 RMI(遠隔メソッド起動)
		5.3.2 非同期RMI
		5.3.3 コールバックのあるRMI(スレッド使用)
		5.3.4 コールバックのあるRMI(継続のためのレコード使用)
		5.3.5 コールバックのあるRMI(継続のための手続き使用)
		5.3.6 エラー報告
		5.3.7 コールバックのある非同期RMI
		5.3.8 二重コールバック
	5.4 並列性のためのプログラム設計
		5.4.1 並列コンポーネントを使うプログラミング
		5.4.2 設計方法
		5.4.3 並列性パターンとしての機能的構成要素
	5.5 リフト制御システム
		5.5.1 状態遷移図
		5.5.2 実装
		5.5.3 リフト制御システムの改良
	5.6 メソッド伝達モデルを直接使用すること
		5.6.1 1つのスレッドを共有する複数のポートオブジェクト
		5.6.2 ポートを使う並列キュー
		5.6.3 終点検出を行うスレッド抽象
		5.6.4 直列依存関係の除去
	5.7 Erlang言語
		5.7.1 計算モデル
		5.7.2 Erlangプログラミング入門
		5.7.3 receive操作
	5.8 進んだ話題
		5.8.1 非決定性並列モデル
	5.9 練習問題

第6章 明示的状態
	6.1 状態とは何か?
		6.1.1 暗黙的(宣言的)状態
		6.1.2 明示的状態
	6.2 状態とシステム構築
		6.2.1 システムの性質
		6.2.2 コンポーネントベースプログラミング
		6.2.3 オブジェクト指向プログラミング
	6.3 明示的状態を持つ宣言的モデル
		6.3.1 セル
		6.3.2 セル意味
		6.3.3 宣言的プログラミングとの関係
		6.3.4 共有と同等
	6.4 データ抽象
		6.4.1 データ抽象組織する8つの方法
		6.4.2 スタックの変種
		6.4.3 多態性
		6.4.4 引数受け渡し
		6.4.5 取り消し可能資格
	6.5 状態ありコレクション
		6.5.1 インデックス付きコレクション
		6.5.2 インデックス付きコレクションを選ぶこと
		6.5.3 その他のコレクション
	6.6 状態に関する推論
		6.6.1 不変表明
		6.6.2 例
		6.6.3 表明
		6.6.4 証明規則
		6.6.5 正常終了
	6.7 大規模プログラム設計
		6.7.1 設計方法
		6.7.2 階層システム構造
		6.7.3 保守性
		6.7.4 将来の発展
		6.7.5 さらに深く知るために
	6.8 ケーススタディ
		6.8.1 遷移的閉包
		6.8.2 単語出現頻度(状態あり辞書を使用する)
		6.8.3 乱数を生成すること
		6.8.4 口コミシミュレーション
	6.9 進んだ話題
		6.9.1 状態ありプログラミング限界
		6.9.2 メモリ管理と外部参照
	6.10 練習問題

第7章 オブジェクト指向プログラミング
	7.1 継承
	7.2 完全なデータ抽象としてのクラス
		7.2.1 例
		7.2.2 この例の意味
		7.2.3 クラスオブジェクト定義すること
		7.2.4 クラスメンバ
		7.2.5 属性初期化すること
		7.2.6 第1級メッセージ
		7.2.7 第1級の属性
		7.2.8 プログラミング技法
	7.3 漸増的データ抽象としてのクラス
		7.3.1 継承グラフ
		7.3.2 メソッドアクセス制御(静的束縛と動的束縛)
		7.3.3 カプセル化制御
		7.3.4 転嫁委任
		7.3.5 内省
	7.4 継承を使うプログラミング
		7.4.1 継承の正しい使い方
		7.4.2 型に従って階層を構成すること
		7.4.3 汎用クラス
		7.4.4 多重継承
		7.4.5 多重継承に関するおおざっぱな指針
		7.4.6 クラス図の目的
		7.4.7 デザインパターン
	7.5 他の計算モデルとの関係
		7.5.1 オブジェクトベースプログラミングコンポーネントベースプログラミング
		7.5.2 高階プログラミング
		7.5.3 関数分解と型分解
		7.5.4 すべてをオブジェクトにすべきか?
	7.6 オブジェクトシステムを実装すること
		7.6.1 抽象図
		7.6.2 クラスを実装すること
		7.6.3 オブジェクトの実装
		7.6.4 継承の実装
	7.7 Java言語(直列部分)
		7.7.1 計算モデル
		7.7.2 Javaプログラミング入門
	7.8 能動オブジェクト
		7.8.1 例
		7.8.2 NewActive抽象
		7.8.3 フラウィウス・ヨセフスの問題
		7.8.4 その他の能動オブジェクト抽象
		7.8.5 能動オブジェクトを使うイベントマネージャ
	7.9 練習問題

第8章 状態共有並列性
	8.1 状態共有並列モデル
	8.2 並列性を持つプログラミング
		8.2.1 さまざまな手法概観
		8.2.2 状態共有並列モデルを直接使うこと
		8.2.3 原子アクションを使うプログラミング
		8.2.4 さらに読むべき本
	8.3 ロック
		8.3.1 状態あり並列データ抽象を構築すること
		8.3.2 タプル空間(Linda)
		8.3.3 ロックを実装すること
	8.4 モニタ
		8.4.1 定義
		8.4.2 有界バッファ
		8.4.3 モニタを使うプログラミング
		8.4.4 モニタを実装すること
		8.4.5 モニタの別の意味
	8.5 トランザクション
		8.5.1 並列性制御
		8.5.2 簡易トランザクションマネージャ
		8.5.3 セルについてのトランザクション
		8.5.4 セルについてのトランザクションを実装すること
		8.5.5 トランザクションについてさらに
	8.6 Java言語(並列部分)
		8.6.1 ロック
		8.6.2 モニタ
	8.7 練習問題

第9章 関係プログラミング
	9.1 関係計算モデル
		9.1.1 choice文とfail文
		9.1.2 探索木
		9.1.3 カプセル化された
		9.1.4 Solve関数
	9.2 別の例
		9.2.1 数値例
		9.2.2 パズルとnクイーン問題
	9.3 論理プログラミングとの関係
		9.3.1 論理論理プログラミング
		9.3.2 操作意味論理意味
		9.3.3 非決定性論理プログラミング
		9.3.4 純粋Prologとの関係
		9.3.5 他のモデルにおける論理プログラミング
	9.4 自然言語構文解析
		9.4.1 簡単な文法
		9.4.2 この文法に従う構文解析
		9.4.3 構文木を生成すること
		9.4.4 限定記号を生成すること
		9.4.5 パーサを走らせること
		9.4.6 パーサを「逆向きに(backward)」走らせること
		9.4.7 単一化文法
	9.5 文法インタプリタ
		9.5.1 簡単な文法
		9.5.2 文法のコード化
		9.5.3 文法インタプリタを走らせること
		9.5.4 文法インタプリタを実装すること
	9.6 データベース
		9.6.1 関係を定義すること
		9.6.2 関係を使って計算すること
		9.6.3 関係を実装すること
	9.7 Prolog言語
		9.7.1 計算モデル
		9.7.2 Prologプログラミング入門
		9.7.3 Prologプログラムを関係プログラム翻訳すること
	9.8 練習問題

第2部 特殊化された計算モデル10グラフィカルユーザインタフェースプログラミング
	10.1 宣言的/手続き的方法
	10.2 宣言的/手続き的方法を使うこと
		10.2.1 基本的ユーザインタフェースの要素
		10.2.2 GUIを構築すること
		10.2.3 宣言的座標
		10.2.4 リサイズ時の宣言的振る舞い
		10.2.5 ウィジェットの動的振る舞い
	10.3 対話的学習ツールPrototyper
	10.4 ケーススタディ
		10.4.1 簡単なプログレモニタ
		10.4.2 簡単なカレンダウィジェット
		10.4.3 ユーザインタフェースの動的生成
		10.4.4 状況順応時計
	10.5 GUIツールを実装すること
	10.6 練習問題

第11章 分散プログラミング
	11.1 分散システムの分類
	11.2 分散モデル
	11.3 宣言的データの分散
		11.3.1 オープン分散と大域的ネーミング
		11.3.2 宣言的データを共有すること
		11.3.3 チケット配布
		11.3.4 ストリーム通信
	11.4 状態の分散
		11.4.1 単純状態共有
		11.4.2 分散字句的スコープ
	11.5 ネットワークアウェアネス
	11.6 共通分散プログラミングパターン
		11.6.1 静的オブジェクトモバイルオブジェクト
		11.6.2 非同期的オブジェクトデータフロー
		11.6.3 サーバ
		11.6.4 クローズド分散
	11.7 分散プロトコル
		11.7.1 言語実体
		11.7.2 モバイル状態プロトコル
		11.7.3 分散束縛プロトコル
		11.7.4 メモリ管理
	11.8 部分的失敗
		11.8.1 失敗モデル
		11.8.2 失敗処理の簡単な場合
		11.8.3 回復可能サーバ
		11.8.4 アクティブフォールトトレランス
	11.9 セキュリティ
	11.10 アプリケーションを構築すること
		11.10.1 まずは集中,後に分散
		11.10.2 部分的失敗に対処すること
		11.10.3 分散コンポーネント
	11.11 練習問題

第12章 制約プログラミング
	12.1 伝播・探索法
		12.1.1 基本的考え方
		12.1.2 部分情報を使って計算すること
		12.1.3 例
		12.1.4 この例を実行すること
		12.1.5 まとめ
	12.2 プログラミング技法
		12.2.1 覆面算
		12.2.2 回文積再訪
	12.3 制約ベース計算モデル
		12.3.1 基本的制約と伝播子
		12.3.2 計算空間の探索をプログラムすること
	12.4 計算空間定義し,使うこと
		12.4.1 深さ優先探索エンジン
		12.4.2 検索エンジンの実行例
		12.4.3 計算空間の生成
		12.4.4 空間の実行
		12.4.5 制約の登録
		12.4.6 並列的伝播
		12.4.7 分配(探索準備)
		12.4.8 空間の状態
		12.4.9 空間クローン
		12.4.10 選択肢を先に任せること
		12.4.11 空間マージすること
		12.4.12 空間失敗
		12.4.13 空間計算を注入すること
	12.5 関係計算モデルを実装すること
		12.5.1 choice文
		12.5.2 Solve関数
	12.6 練習問題

第3部 意味

第13章 言語意味
	13.1 一般的計算モデル
		13.1.1 格納域
		13.1.2 単一代入(制約)格納域
		13.1.3 抽象構文
		13.1.4 構造的規則
		13.1.5 直列実行と並列実行
		13.1.6 抽象マシン意味との比較
		13.1.7 変数導入
		13.1.8 同等性の強制(tell)
		13.1.9 条件文(ask)
		13.1.10 名前
		13.1.11 手続抽象
		13.1.12 明示的状態
		13.1.13 by-need同期
		13.1.14 読み出し専用変数
		13.1.15 例外処理
		13.1.16 失敗値
		13.1.17 変数置き換え
	13.2 宣言的並列性
		13.2.1 部分停止と全体停止
		13.2.2 論理同値
		13.2.3 宣言的並列性の形式的定義
		13.2.4 合流性
	13.3 8つの計算モデル
	13.4 よくある抽象意味
	13.5 歴史に関する注記
	13.6 練習問題

2011-12-07

http://anond.hatelabo.jp/20111207191239

これは規模じゃなくて難易度の話だろ

難易度の話をするならCで言うポインタの理解なりの例えがあるんじゃないか

javaだとなんだ、、、オブジェクト指向コード書けることか?

元増田に話しとくとjavaで開発するにもHadoopstrutsやらのフレームワーク

jspなどなど色々ある

Androidアプリはその中じゃそんなに難しい部類ではないと思う

別の言語使ってもAPIやらフレームワークやらOSやら言語以外の知識と理解は山ほど必要だ

別の稼ぎ口があってプログラマが向いていないと思うなら、今なら遅くないか

引き返したほうがいいな

自分は他に稼ぎ口がないからコレで生きていくしか無い

似たように苦しむ事が多いが腹をくくってる

IT業界でやっていく自信をなくした話。

IT企業内定もらった学生だが、就職先について悩んでいる。専門は電気電子。在学中にIT仕事に興味持って、授業で習ったC言語が楽しかったというのもあって、IT系を中心に就職活動をしていた。だから、滑り止めってつもりは全くなかった。せめて学校IT勉強をしてきた人に負けないようにと、プログラミング勉強を独学でしていた。

それでおれはアンドロイドアプリを作りたくてjava勉強をした。アンドロイドアプリを作るための本も買ってきた。javaをやってるうちは問題なかった。授業で習ったC言語に似ていたし。問題はアンドロイドアプリ勉強をしようとした時に生じた。

おれはじっくり書店アンドロイドアプリ開発の本の調査を開始した。どれも3000円近く、貧乏学生にはやたら手を出せる代物ではなかった。そんな時、java勉強した本の同じ著者がアンドロイドアプリの本を出したんだ。ぼくは衝動買いした。買って大喜びで帰って家で勉強を始めたよ。だが、javaではあれほどわかりやすく書いてた同じ著者なのに、なんだかわかりにくい。基本的にjavaの知識があれば問題ないはずだった。なのに、解説を読んでも、コードを見ても何をしてるのかさっぱりわからない。

アンドロイドじゃ使う命令がまるでちがう。これホントjavaかって思うくらいに。おまけにインターネットリファレンス初心者に不親切で、こちらも何かいてあるか理解できなかった。僕は勉強する手段を失った。アンドロイドアプリ開発に挫折したんだ。見あげれば雲にも手が届きそうに感じた、自信満々だったあの頃の自分はどこへ行ったんだ?

別の本を買ってみても、やる気になれなくて放置してる。頭に浮かぶのは内定を貰った企業。俺のこの程度の理解力でこの先やっていけるだろうか。IT業界には35歳定年説ってのもあるし、やはり難しいんじゃないだろうか。IT企業で働いてみた所で、落ちぶれて途中で挫折するんじゃないだろうか。僕は自信を失って、一週間位鬱憤とした気持ちでいた。ひょっとしたらその時の傷を未だに引きずってるのかもしれない。学校勉強が身に入らない。1年生の頃は、あれほど勉強熱心だったのに。俺の心は腐ってしまったのか。

プログラマーという職業にワクワクする反面、不安の方も大きい。学校での勉強を活かせる回路設計にも興味ある。今から他の企業を探そうか迷ってる。僕はこの先どうしたらいいだろうか。

2011-11-19

Firefoxアドオンマネージャからノートンを除外する方法

セキュリティの設定なので実施自己責任で。

Windows 7 - Firefox 8.0 - Norton Internet Security(NIS) 2011 の場合

 

(xはバージョン番号)

1. NIS - 設定 - その他の設定 - 製品セキュリティ で「Norton製品の改変対策」を「OFF」にする。

2. C:\ProgramData\Norton\{0C55C096-0F1D-4F28-AAA2-85EF591126E7}\NIS_xx.x.x.x\

  内にある次のフォルダリネームする。

  ・coFFPlgn_xxxx_x_x_x → coFFPlgn_xxxx_x_x_xOLD

  ・IPSFFPlgn → IPSFFPlgnOLD

  ※WindowsXPでは C:\Documents and Settings\All Users\Application Data\Norton\{0C55C096-0F1D-4F28-AAA2-85EF591126E7}\NIS_xx.x.x.x\ (未確認)

3. Firefox再起動する。

 

元に戻したい時は、リネームしたフォルダを戻して「Norton製品の改変対策」を「ON」にする。

なお、OS再起動するとフォルダが強制的に作成されるようなので、その都度2.の実施が必要。

 

 

(おまけ)Java Console を削除する方法

C:\Program Files\Mozilla Firefox\extensions\

内にある {CAFEEFAC で始まるフォルダリネーム

2011-11-13

基金訓練講師

基金訓練講師をやめました。

基金訓練、今は求職者支援制度名前が変わったみたいですけど、そこの講師をやめたというか、会社ごとやめて転職しました。

何の講師をやっていたかというと、今をときめく(?)Android講師です

転職先にも少しなれてきて、今までのことを振り返って書き留めてみたのですが、せっかくなので発表することにしました。もともと僕だけが読むメモのつもりで書いたので、読みやすい文書ではないですがご容赦のほど。

Android講師になるまで

Android講師になるまでは、Javaサーバーサイドのエンジニアをやっていました。

お客様のところに常駐し、システムの一部ではあるけど、自社メンバーだけで上流行程から担当し、僕はそのチームリーダーでした。

でも、このご時世なので、仕事がどんどんなくなっていきます

プロパーの方でも仕事がないような状況で、それでも僕らのチームは半年ほどは細々とメンテなどの作業をやっていたのですが、最終的には契約終了になってしまいました。

自社に戻って、何をするのだろうと思っていたら、Android講師をやれ、といわれました。

Androidは、暇だった時期に少し動かしてみて、簡単なアプリなら組めるようになっていたのですが、人に教えるほどの技術はありません。しかも準備期間は1週間ほどしかありませんでした。

ビデオ教材と教科書が用意されていて、それに従っていれば最低限の講義はできるのと、最初のうちは純粋Java講義だったので、前半をやっている間に講師Android勉強をしよう、という、何とも乱暴な計画を立てたのでした。

基金訓練をはじめて

ほぼ定員いっぱい近い受講者の方が集まったのですが、スキルが全くバラバラです

JavaC#,C,C++経験者がいるかと思えば、人差し指だけでキーボードを打っている方もいます

講義最初のうちはコマンドプロンプトを使うのですが、教材には説明がなく、最近の人は知らないだろうと思って説明書を作っていたのですが、まさかコピーペーストのやり方から説明することになるとは思っていませんでした。

それでもやる気のある方はまだましで、どうみても給付金目当てとしか思えない、やる気のない方が何人もいます

こちらも準備不足の中、生まれて初めて「先生」と呼ばれる仕事を始めることになりました。

問題だらけの講義

基金訓練を始める前は「きちんと技術を教えられるかな」ということばかり気にしていたのですが、講義の運営の方が問題続出でした。

いかにもやる気のない方々は講義中もトイレ電話だといって抜けてしまう、講義中に当てても「わかりません」しかいわない、かといって質問もしない。当然課題も期限までに出さないので0点しか付けようがません。

そういう方でも、こちらから無理にやめさせたりすることはできないので、何とか講義だけはでてもらっていました。

けど、それがよくなかったようです

まじめに受講されている方々から「金をもらって受講しているのにあの態度は何だ」「入校条件(キーボード入力)すら満たしていないのではないか」「講義のペースが遅すぎて時間が余る」などの苦情があがり、まじめな方から就職が決まった」などの理由で辞めていってしまいました。

後に残った、やる気のない方々と、講義を続けていくしかありませんでした。

2回目の講義

1度目の皆さんが修了し、2回目の講義を行うに当たって、前回の反省点を改善すべく、いろんな手を打ちました。

最後の手は、会社に怒られるのではないかと正直不安でした。実際辞めていく方が増えたのですが、こういう方は「家業が忙しくなったので手伝う」「体調が悪くなったので療養する」といったもっともらしい(?)理由で辞めていったので会社から怒られるようなことはありませんでした。

むしろ受講生の方の中から、積極的に他の方にアドバイスする方が増えたため、スキルの低い方からも「質問をしにいける人が(講師以外にも)大勢いたのでよかった」といってもらえるようになりました。

今回は、終了後の受講生の方どおしの打ち上げ会に呼んでいただきました。おおむね好評だったのだろうと思います

本気でプログラマになりたい方へ

経験だけど、求職者支援制度を利用してプログラマになりたい方向けに、こういう人がプログラマに向いている、こうした方がいい、という条件を挙げてみます

プログラム勉強ははっきり言って辛いです。やりたいことが明確になっていないと、なかなか続かないです

僕は「写経」と呼んでいるのですが、サンプルプログラムを実際に打ち込んでみて、エラーがあれば自分で修正する

という「訓練」をやらないと基礎が身に付かないです。そもそもキーを打つのが苦手、という人はきっぱりあきらめましょう。エラーの原因を自分でぐぐって調べられないような人も、この業界には向いていないです

  • 計画的に作業できる。

いき当たりばったりではなく、最初に手順・段取りを考えてから作業を始める方が向いています

講義でも、課題作成に何日もかかる課題があるので、何も考えずに適当にやっていると期限までに終わりません。

  • 共通点を見つけるのが得意。抽象的な考え方ができる。

僕がプログラマもっとも必要な能力と考えています

「きりん、うさぎあひるかば、4つの動物で仲間外れは?」みたいな問題が苦手な人は、向いていないと思います

単に「読める」ではなく、課題を理解し、既知の技術で解けるものと未知のものに分けたり、繰り返し処理や、複数の似たような処理を一つにまとめるといった作業ができるかどうかです

さっきの抽象的な考えもそうですが、今までそういうことを意識してやっていない、という方が多いと思います。そういう人は、しんどい思いをすると思います

  • 習ったこと以外にもいろいろ自分で試してみる。

「AとBという方法がありますが、ここではAについて説明します」と講師がいったら、Bは自分で調べましょう。習ったプログラムを少し変えてみてどうなるか試してみましょう。それがうまくいかなかったとしても、経験というプラスが残ります

  • 自分で問題を考え、解く。

講師の言うことが理解できたと思ったら、自分で応用問題を考えて、プログラムを書いてみましょう。もしそれが期待した結果にならなければ、どこかで理解が間違っている可能性が高いです

先ほどの「試してみる」もそうですが、BLOG実施すると、それをみた方からコメントアドバイスをもらえることもあります

  • ちょっとずつ試す。

いきなり何十行もプログラムを書いて動かなかったとしても初心者はまず動かせるようになりません。少し書いて、動かして動作を確認し、また動かして、を繰り返す方が結局早く完成します。

ちゃんと動く「プログラムの断片」を増やすことは、後で同じようなプログラムを書くときに、「断片」をそのままコピーして使えるようになると言うことです

  • 動くものを書くのが先、きれいに書くのは後。

一度プログラムを書き始めたら、まずやることはプログラムを完成させて動かしてみることですプログラムを書いている途中で、同じような処理があるからforで書きたいとか、メソッド化したいとか、思うかもしれませんが、プログラム初心者はまず動くプログラムを書いて、それができてからきれいに書き直しをした方がいいです

  • 頭の中で考えてまとまらないときは、それを文書や図にして書き表せる。

すぐに解けない課題は、書いて残しておきましょう。書いて整理することで、解けることがあります。今は解けなくても、後で見返して解けることがあります

特に図に書く、という作業は意識的にやった方がいいです講師に質問するときも、口で説明するより、図に書いた方がずっと通じやすいことがあります

  • 困っている人を助ける

自分ができたことで他の人が詰まっていれば、アドバイスしてあげましょう。助けてあげると言うだけでなく、他人に説明すると言う作業は、自分自身の理解をより深める作業でもあります

もちろん自力で最後まで解くことが重要課題もありますが、そういうとき講師がそれとなく言ってくれるはずです

とりあえずアプリを書いたら、同じ講義を受けている人や講師に見せて感想をもらいましょう。

アイコンを書くのが苦手なら、イラストが上手そうな人を見つけて、書いてもらったり、書き方を教わったりしましょう。

講師以外にも味方を増やしましょう。

訓練を受けているのは同じような環境の方ばかりなので、相手だって同じことを考えているはずです

  • ノートに書いたことは理解できるようになるまで何回でも書き直す。

紙のノート講義内容を書いたり、テキストの余白にメモしている人がいますが、それは講義の内容を聞いて即理解できる人が、聞いたことを忘れないためのやり方です

からない人は、わかるようになるまで、何回でもノートを書き直した方がいいです。わかったことを継ぎ足して、表現を見直して、時には冗長な表現を削って、自分だけのオリジナルテキストを作るつもりで書きましょう。当然書くのは紙のノートではなくパソコンをつかいます

プログラミング以外の世界でもプロや、プロ顔負けの技術を持つセミプロハイアマチュアといった方は自分の作品を世に出すときに恥ずかしがったりしません。不安はあっても、それを上回る意欲を持って、どんどんアプリを書いて、マーケットに載せましょう。

ひょっとすると業界の習慣よりあなた意見の方が正しいこともあるかもしれませんが、未経験の人が言っても周囲はたぶん聞いてくれません。「私はずっとこのやり方でやってきたしこれからもやる」という意見はひとまずおいておいて、まずは周囲に認めてもらうようにしましょう。

余りに差がありすぎて自信をなくすと逆効果ですが、技術を身につけたければ自分より優れた人から学ぶのが一番ですコミュニティー勉強会にも積極的に参加しましょう。

最後のが理由で、僕は講師を辞めたんですけどね。

訓練されている方から学んだことも多いですが、僕は、僕自身が技術を磨ける環境に身を置きたかったのです

2011-11-07

2010/05/16 23:40

こんにちは。昨日会った者です(これで特定するには情報不足だけど、まあわかるよね)。

で「幅優先探索でやる」という方針自体はいいと思うし、データ構造の作り方も基本は押さえていると思います(斜め読みしかしてませんが)。

ただ、コーディングの発想が「C で作る」という大方針から見て、少しちぐはぐな印象も受けますデータ構造設計操作の部分、汎用のライブラリを作ろうというのならあれでもいいと思うのですが、わざわざ汎用のライブラリを使わず自分で専用の道具を一から作ろうというのなら、問題の性質を考慮して能率良くやることが大事です

ところが、ここに載っているコードを見ると、見かけが C らしくなく、C++Java の劣化版のような印象を受けます記法マクロ大文字化しない、ルーチン名を大文字で始めるなど)だけの問題ではなく、データ構造設計思想が「C で書く」という方針と矛盾しているように見えます

もう少し具体的に言うと、そもそも C というのは現在 Web 系の世界などで流行スクリプト言語類とは逆で、汎用言語でありながら低レベルハードウェアに近い)処理が簡単にできることに特色があります。つまり組み込みを想定してプラットフォーム依存コードを書いたり、ハードウェアの特性を考慮して低レベル最適化をやりたいというときに適しています

そこでこの問題ですが、これを C でやるということは、処理速度や使用メモリ量の最適化が要求される状況、つまり迷路の大きさが途方もなく大きいような状況を想定すべきですもっと言ってしまえばこの問題、たとえば画像処理などで似たような発想が要求されることがあります。このため、どうすれば時間のかかる処理を切りつめることができるかを考えてやらねばなりません。

このプログラム場合時間のかかる処理の代表格である malloc() が大量に使われています。これはいかにもまずいです。このような大量データを処理する場合の定石は、あらかじめ必要なだけメモリを確保しておいて、自分で割り当てることです。具体的には、必要と想定される量だけメモリ配列の形でどかっと確保しておいて、配列インデックスポインタ代わりに使います。そして、足りなくなったら倍々のような感じでメモリを realloc() してやればよいのです

なお、そのような観点で言って、木の各節点の子の数は高々 4 (スタート地点が内点でないとすれば 3)であることを使っていることはよいと思います。ここで「子のリスト」とかを作ってしまっていたらこれはもうアホもいいところですから(容量の節約にすらなりません)。

そんな感じでしょうか。

とにかく、この手の問題は、アルゴリズムさえわかっていれば可読性もヘッタクレもないので、「短く書く」というような表層的なことよりも、何が求められているのかをよく考えて、柔軟に設計思想を考えることが大事だと思います

2010/05/17 13:54

Oさんですね。専門的なコメントありがとうございます!cで書くと言いつつObjective-Cっぽい発想で書いていました。マクロの命名もその影響で、関数Image Magickなどに似た命名規則になっている気がします。mallocを使いすぎると時間がかかるということは全然意識していませんでした。今度作るときメモリ管理を自前で用意する発想を取り入れてみたいです。参考になるコメントありがとうございました!

2010/11/18 23:56

はいわゆる「正規表現」は形式言語理論でいう正規表現ではないんだけどね……(ぼそっ)

2011-10-17

http://anond.hatelabo.jp/20111017182754

そういう原理的にどうかという話ではなくて、単にC#とかJavaとかだと何するにもまずclass宣言から入らないといけなくて、初心者的にはなんだよそれってなると思うという程度の話。

python(LL)ならクラスも使えるけど(便利な関数のついた)Cっぽくも書けるわけだし、型付けとか煩わしいことも少なくていいじゃんという程度。

Javascriptって触ったことないけど、むしろ関数型だと聞いたんだけどどうなのかね。pythonもかなり関数型っぽいけど。

ただまぁVBはねーだろって思う。

http://anond.hatelabo.jp/20111017185754

C#(やJava)が初心者を混乱をさせるとするならば、それはオブジェクト指向のせいではないと思うんだがどうかね。

どうかなぁ。

継承とか、オーバーライドとか、インスタンスとか、良く知らずにサンプル引っ張ると死ぬだけだと思うんだが・・・

http://anond.hatelabo.jp/20111017165137

からすると、オブジェクト指向的な要素が絡んでくるC#を初心者に投げる方が混乱すると思うんだが。

C#(やJava)が初心者を混乱をさせるとするならば、それはオブジェクト指向のせいではないと思うんだがどうかね。

http://anond.hatelabo.jp/20111017141227

プログラミングは静的言語(C/C++,Java,C#など)と動的言語(rubyとかpythonとかperlかいわゆるスクリプト言語)と関数型(lispとかF#とかhaskellとか)を一つずつくらい眺めた方がいいと思う。

どれか一個くらい自分に合ってるのが見つかるかも。

プログラムはそういう視点で見ない方が良い。

やりたいことにどの実装系が一番適しているかを考えるべきで、実装系を目的に合わせるべきじゃない。

そういう考えでいると、PHPで何でもやる奴とか出てきて迷惑なんだ。

そもそものロジック構築などは、ターゲットには依存しても、言語にはほとんど依存しない。


馴染むための登竜門って意味で言えば、VisualStudioなどのGUIデバッグが出来る環境をもった言語が良いし、VB,C#などのサンプルが豊富で結果を確認しやすい言語が良いと思う。

2011-10-10

文系情報系の学科卒業して、おめでたい頭で何となくSEになって二年目になりました

情報系の学科ではあったけど、SEだのPGだのに就くのは男子学生のうち6割、女子学生では1割いないような感じ

で、非コミュと半ヒキと地頭の悪さで競争率の低そうなSE職についてめでたくその1割に当選

私以外は大体プログラミング楽しい~とか、そういう子ばっかりの中での1割

ちなみにプログラミングの授業は大嫌い。未だに関数がー引数がーポインタがーって意味分かんない。

で、さっき何となく学者向けのC言語解説サイトを見てみた

授業でやったのよりよっぽど分かりやすくて、今になって初めて知ることがたくさんあった

でも別に向上心はないので「そうなんだーすごいなーへー」という感想しかかばない

保守開発メインから今までの開発step数って3桁行かないし、使ったのは「=」と「if文」が精々

仕事で使うのはCでもJAVAでもないけど、そんなことも分かってなかったの?って呆れられるだろうなー

こんな私でも応用情報が余裕で取れているし、来週受ける上位資格も難なく取れそう

SEって馬鹿でもなれるしお給料いいしで良い仕事だよ!と、後輩には勧めておいた

ただし毎晩終電帰り・残業120時間超でも残業代出るのは30時間まで・仕事が終わらないなら土日は潰れて当たり前なのが気にならなければね、というのは黙っているけれど

SE職に就く女子が増えるといいなーと思っている。

職場結婚率は割りと低いけど、他の職場の同業種の人との結婚率はめちゃくちゃ多い。

三年以内に寿退社する人もとても多い。仕事きついし辞めたい女側と、家のことして癒してくれる子がいい男側の需要供給が程よくマッチングしてるんだろうな。

あと、私みたいなブスしか配属されなかった自担当には大変申し訳ないので来年当たり可愛い女の子が配属されてくれると嬉しい。

2011-09-20

SI業界で必要とされる新卒

http://d.hatena.ne.jp/aike/20080615

この記事が面白かった。2008年のだけど、今でも変わらんと思う。

SI業界での即戦力とは「金融工学財務会計に詳しくてCOBOLABAPが読めてWebSphere上のJavaが書けます」といったような人なのだが

こんな大卒新人が居たらヤだけどw


インフラ系の自分SIer最初プロジェクトに配属されたとき、必要とされた知識は主にWindows Server(ActiveDirectory)だった。

人によっては、大学情報センターの手伝いをしていたという学生が、ADなんか触っていたりするらしいが、情報系の学生でも

WindowsServerなんて触ったことがない人間ほとんどだと思う。


自分は、LDAPDNSは知っていたけど、ADなるものはよくわからず、標準的な規格、テクノロジーと、マイクロソフトプロダクトの間にあるギャップに当時かなり苦しんだ記憶がある。

LDAPDNSもまともに知らないシステム管理者が、いっぱしの「エンジニアヅラして、仕事をしているのがSI業界なんだなあと知ったのは、そののちすぐのことだったけど。

2011-09-12

firefoxプラグイン 3時間むだづかい

http://d.hatena.ne.jp/LukeSilvia/20080313/1205424352

10分どころか、3時間成果物ナシ。

そのままやってインストールできたけど、shift+Uも、右クリックメニューも何も出ないし。

まあ、記事を作ってくれたことは有難いことだな。

どうせどこかでオレが間違えてるんだろ?

とりあえず、flagfoxというもので確認したところ

install.rdfchrome.manifest の

改行コードはCRLF でOKそうだが、jsm やら jsLF のみみたい。

なんだ、この統一感の無さは。それとも、どっちでもいいのかな?

javaなんか、C++やの亜流.NETより下等だと思って勉強してなかったから、この辺ぜんぜん知らん。

2011-09-09

投げ売り堂の App Engine 対応状況 その2。

投げ売り堂で行っているGoogle App Engine の新料金体系対応についてのその2です

Cron 処理を Backends の無料枠で対応できそうだったので、無料分で収まるように Cron で行っている処理を Backends でやるようにしました。

その結果、日額0.1~0.2ドルで月間で3~6ドル程度になりました。

対応前は、日額1.5~2ドルで月間で45~60ドル

対応1で、日額1~1.2ドルで月間で30~36ドル

対応2で、日額0.1~0.2ドルで月間で3~6ドル

なんとか、1000円以内に抑える事が出来、このままだとなんとか大きな課金になる事無く対応は出来そうです

これに加え、新課金体系への移行についてに書いてあるとおり

新料金体系の適応11/1 になったので、落ち着いて作業を行えるようになったのです

現時点においてギリギリでやってる為、 Google App Engine のままだとなかなか拡張もやりにくい事もあります

ですので、やはり通常のサーバーでも動かせるように移植のほうも進めます

Java 以外で使い慣れている PHP を使って同じシステム作成しようと思います

全ての商品を1時間に1回商品情報更新や、フィギュアDVDBDゲーム以外の商品情報も集めるようにし

Cookie で表示商品の種類のカスタマイズ等などを組み込もうかなと思います

自由度が高いので迷っているのですが、どういう形であれ投げ売り堂はこれからもなんとか継続が出来そうです

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