「Scheme」を含む日記 RSS

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

2014-12-02

僕はもうプログラミングしなくていいんだ

大学回生の夏、下宿の扉に「出入禁止」とチョークで大書し、親を呼ばれて精神病院に連れて行かれた。

 

パソコンを買ってもらったのは小学三年生の冬だった。今でも覚えている。1996年12月2日のことだ。Windows95発売で世間は揺れていた。インターネット回線がうちに来たのは翌97年の1月、これはそこそこ早い導入だったと思う。さらに翌々年の99年にはケーブルテレビ常時接続になった。親には先見の明があったが、しかしパソコンには詳しくなかった。PC-8001も確かそうだ。親はこれが次世代の必需品になると確信して買っていたが、買った一方で使い道が分からなくてオブジェとして放置していた。親はPC-8001パソコンだと言っていたけれど、僕にとってパソコンはおっきなテレビが標準で付属しているものだったし、マウスもなかったので、それがパソコンだとは到底思えなかった。でも親は言った。今度来るのは違うんだ、オフィスも入っているパソコンなんだ。僕は聞いた。一太郎っていうやつは入ってないの?テレビで言ってたよ、と。親は答えた。オフィスってのは一太郎より機能がスゴイんだよ。僕はへぇ、とだけ言った。どちらにせよペイントは入っているだろう。ペイントなら親戚の家で使わせてもらったことがある。パソコンお絵かきができるのだ。マウスをカチカチして、キーボードをカチャカチャするのだけが楽しみで、納品の日を一週間ひたすら待った。その頃、漢字宿題提出が滞っていて、そのままでは居残りでさせられることになっていた。僕は久々に奮起した。いつもは踏み倒していた宿題を、全部一気に終わらせた。家に帰るとパソコン電気屋さんの手で設置されつつあった。今は亡き、ニノミヤで買われたパソコンであった。

 

97年にインターネットを始めた。一日一時間まで。実のところ電話代の問題ではなく、一時間ほど使うとブルースクリーンが発生するからだった。一日一時間以上動かすと壊れるから。PC-8001キッチリ買った親なのに、それぐらいの(?)ITリテラシーであった。ただ別にそれを責めるつもりはない。僕はすぐにアングラサイトに入り浸った。人に飢えていたのだ。普通のチャットには人がいない。テレホタイムにならないと、誰一人ログイン氏亡いのだ。でも、アングラサイトなら四六時中書き込みがある。僕は思う存分厨房行為を楽しんだ。煽り騙りなんかは、小学生がやっても大人がやっても大して変わらないものだ。You is a big fool manという文句をリアルタイムで目にした人は、多くても数百人だっただろう。何千、何万のツイッタラーが押し寄せ、ブクマが1000以上付くような今の炎上とはほど遠い暢気さだ。当時の匿名掲示板とはそういうものだった。誰一人本気で投稿しなかったし、しかし誰一人面白くない書き込みをしようとはしなかった。トイレでもネタを考え、思いつけばすぐに投稿し、ワラタが付くのを待ち続ける。あやしいあめぞうあやしい、2ch。人の多いところから人の多いところへ。ワラタが多くもらえる場所へ。気づいたらインパクが終わっていた。

 

その一方で僕は中高一貫私立校入学していた。高校受験がないことから、ネット依存さらに加速した。しかし2000年を境にアングラ掲示板は衰退の一途をたどり、2ch一強時代を迎えていた。1ch.tvボコったりするなど楽しいネタがないわけではなかったが、匿名掲示板ネタの宝庫と言うより、本気でちゃんと議論することもできる場所になり始めていた。ちゃんと議論しようとしたらすぐさま崩しにかかるのが2ch隆盛以前の匿名掲示板文化であったが、2003年頃を境にはっきりと潮目が変わっていったように思う。まあその辺はどうでもいい。アングラと非アングラの境目は消え始めていた。

 

その狭間に、僕は生きていた。

 

自分掲示板を設置することにした。けれども何をして良いのか分からない。CGIレスキューに救援要請をして本も買った。Perlだ。Perlしかない。しかしPerlがどうして動いているのかは、全く分からなかった。何十行、何百行もの文字の羅列が、どこでどうなって、掲示板になるのか。インタプリタコンパイラ?訳が分からない。そもそもCPUがどうやって動いているのかも分からない。僕にとってプログラムとは、セットアップウィザードCD-ROMをギュンギュン言わせながらインストールするものであって、掲示板というものは、Teacupで借りるものだったからだ。でもどうやらそうじゃないらしい。コンピューター翻訳するのがコンパイラです。さっそくコンパイラを使ってみましょう……

 

お手上げだった。

 

コンパイラがないのだ。コマンドプロンプトにはない。Linuxを入れる?使い方が分からない。Vine Linux初心者お勧めだった頃の話だ。ボケッとしててもGNomeぐらいは動かせる程度には簡単になっていたが、そこからターミナルを開いてgccでコンパイルするなんて想像も付かないことだった。Hello, Worldはなんとか表示できても、それをGUIで動かす方法が分からない。僕はデスクトップに「Hello, World」のポップアップウインドウを表示させたかったのに。全然訳が分からなかった。

 

プログラムが動いている方法を知らなければならない。プログラミングを学ばなければいけない。しかし全体像を把握するにはあまりにもほど遠い……。絶望感が支配し始めていた。Hello, Worldはできたけれど、その先が全くわからない。どの参考書を読んでも分からない。ググってもググっても分からない。ポインタで躓く初心者が多いです!……どの本にも書いてあったけれど、僕はポインタどころか、変数の種類がたくさんあるところでお手上げだった。int?char?long???意味不明文字列が並び続ける。メモリメモリって、挿したらいいんじゃないの?確保?fopen????どんなプログラミング言語も、何一つ分からなかった。その頃インターネットは加速し始めていた。切るのが当たり前だったJavascriptが復権し、Ajaxと名を変えてやってきた。掲示板スクリプトもどんどん高機能化し、もはやPerlを知るだけでは何一つできないようになってしまった。苦痛の日々が始まった。どの言語も、全く分からなかった。分からなければならないという焦りが募っていった。

 

あるとき、一年間ほど、とりあえずお手上げのままにしておくことにした。大学受験が迫ってきたからだった。そして案外あっけなくそれは終わった。僕は某大学情報科学科に入った。

 

教授ガイダンスで説明したとおり、情報科学科のプログラミング演習はそれほど多いものではなかった。一回生の時なんか、キーボードを目で追って人差し指で打っている人もいるぐらいだった。学校の授業はアテにならない。そして大学受験でいったん引っ込んだ、とにかく十代でなにかしないと、という焦りが復活してきた。

 

大学キャンパスは広すぎた。何をして良いのか全く分からなかった。授業内容はひどくつまらなく、何が役に立つのかも分からず、ただただ苦痛で、キャンパスサークル活動に打ち込んで楽しく過ごせるほど社交的ではなく、かといってオタク集団に混じる勇気も無く、とにかく、とにかくここで四年間、四年間で何かしないと、何かしないと就職に間に合わない、大学院進学に間に合わない、十代のうちに何か大きな事を成し遂げなければならない。日々研鑽に励み、日々プログラミングスキルを磨き、日々勉強会に参加し、日々コードを書き、日々環境設定をし、日々本を読み、そして日々コードを美しく書かなければならない、そういう焦りだけがどんどん加速していった。大学生協で片っ端からプログラミングの本を買った。ド初心者向けのPerl本から、美しいコードは何か、みたいな本まで。でも、どれ一つ、僕のスキル向上には役に立たなかった。プログラミングスキルの向上=自分自身の地位=生活の保障、と思っていた自分には、悪夢のような現実だった。

 

とにかくインターネットと一緒に歩んできた僕にとって、ITスキルはすなわち力であり、むしろITスキル以外は何の価値も持たないもの、と思えるほど脅迫的な観念にとらわれていた。入ってくる情報さらに増えていった。Cができるのは当たり前、Ruby on Railsがアツい、Java、PHPはもちろんできるよね、MySQLは当然使えるよね、もちろんHaskellSchemeObjective-Cもやらなきゃね……何一つできないのに、習得すべき言語だけがどんどん増えていく。加えて美しいコードを書け!という文句が飛んでくる。クソッタレが。何が美しいコードじゃ。goto使ってもいいだろ。好きなだけ使わせろクソッタレが。全部getsで書いてやる。クソが。アルゴリズムアルゴリズム勉強会勉強会ビューティフルコードMacMacMacジョブズジョブズジョブズ……???????????????

 

それでもなんとか、そう、なんとかなった。友達が優秀だったのだ。僕には到底できないような、きれいに整理されたコードを書く人だった。聞けば在学中から外注プログラマをやっていて、それなりに稼いでいたのだという。性格ちょっとアレで、風俗に勇気を出して行こうかどうしようか迷ったけどその金でオナホ買ってシコってオナホを床に叩きつけたみたいなヤツだったけれど、そいつからもらったコードを、わざと汚く成形し、変数名も汚らしくし、提出し、なんとかなった。結局自分最初から最後までプログラムを作ることはできなかった。丸々コピペはしなかったけれど、コピペがなければ卒業は無理だっただろう。

そうして三回生の終わり、試験がどっと押し寄せてきた。一月のことだった。機械学習と……なんだっけ?そういう感じの試験が、2月の初日、行われることになった。三回生はただでさえ試験が多かったが、その大トリこそが機械学習だったのだ。

 

僕は試験放棄した。

 

まるで意味が分からなかった。推論、それは分かる、機械学習機械学習??やっていることは数式だしベイズがどうの……まるで分からない。泣きそうだった。三年間必死こいて勉強したり勉強会に行ったりプログラミングスキルを上げようとしたり本を読んだり色々したのに、何一つ得るものは無かったのだ。僕はあやしいわーるどオマンコ連呼していた頃から、何一つ成長出来なかったのだ。そしてそれは、間違いなく、疑いようがなく、自分のせいだった。自分頭が悪いせいで。自分の勉強不足のせいで。自分のせいで……コンピュータとともに、十何年も育っていた僕にとって、コンピュータに関するスキルこそが、全ての力の基準だったのに、その全てを否定されたような気持ちだった。プログラミングができなければ、死ぬだって友達はみんな就職して、SEになったりSIerで働いたりネットワーク管理者になったりしてるのに、僕はなんで、こんなところに。そいつらに取り残されるのに。みんな勉強会に出てMacを持ち寄ってハッカソンしてるのに。泊まり込みでプログラミングしたりしてるのに。なんで僕は、fgetsすらマトモに使えず、getsとscanfだけであなた名前を入力してください オマンコ オマンコさん、こんにちは!みたいなプログラムしか書けないんだ。

 

大学回生になった。研究室を選択する必要があったがしなかった。しないでは困るとのことで、適当に書いたらその一番上に配属された。でも一切研究せず、下宿に引きこもって何もしないをした。今日輪講はここまで進みました!という報告が毎週回ってくるが、まるで研究室では日本語でなくアラビア語公用語になっているのではないかと思えるぐらいの光景だった。この頃、近所の人の証言によれば、言動がおかしく、訪ねてきた人に暴言で返し、殺す殺すなどの声が聞こえ、時折モノを投げつける音が聞こえたりしたそうだ。まあよく知らない。僕は普通に何もせずぼんやりネットを見ていただけのような気がするけど。

 

それからしばらく経った。

 

結局僕は中退した。そして別の大学に入り直した。今度は、工学じゃない別の場所に。みんなキーボードの文字を読みながら指先でキーを叩いている。安心する光景だった。僕らはプログラミングを習わなくてもいい。これから習う必要も無い。タッチタイピングだって、できるに超したことはないだろうけど、できなくてもいい。ただ、そこにある便利なモノを使えば良いだけなのだChromeを使っていて、うっかり開発者向けコンソールを開いてしまっても、何も分からなかったことにして閉じて良いのだ。きっとマクロを書けば、楽ちんに勝手にやってくれるような作業を、人の手で何度もやる。それでいいんだ。マクロを考えるために必死になる必要なんか無い。マウス右クリックコピーペースト。それでいいのだ。キーバインドすら覚えなくて良い。メモ帳を使ってもいい。viやEmacsキーバインドを覚えなくてもいい。マウスも使えないようなエディタと格闘する必要は無い。Macを買っても、XCodeportsを入れる必要は無い。iTunesiPhoneを同期させて、音楽を聴くだけでいいんだ。

 

僕はもうプログラミングしないでいいんだ。

 

それが分かったとき、全てから解放されたような気がした。僕を苦しめ続けたプログラミングというものは消えてなくなった。パソコンでやる作業は、昔と一緒、匿名掲示板オマンコと書き込むだけだ。それ以上のことをしなくてもいいんだ。勉強会に出てハッカソンする必要は無いんだ。プログラミングスキルを錬磨しないと死ぬなんてのはウソだったんだ。美しいコードを書かないと天罰が下るというのはウソだったんだ。毎日毎日はてブホッテントリを見てると、プログラミングマスターしなければならないこと、何何する方法開発者必須スキル、便利ツール、Macでのアプリ開発、セキュリティ、通信、データベース勉強会ハッカソン、そういうもので溢れている。苦しくないのか不思議で仕方ない。もちろんプログラミングをしていて楽しい人もいるんだろう。けれど、僕みたいに、プログラミングという行為が苦痛で苦痛で苦痛でしかない人もいる。たとえ1000回の同じ操作でも、人力でやる方がマクロを書くよりも楽だという人も、ここに存在するのだ。そしてそのような人の存在も当たり前に肯定されるのだ。みんな苦しまなくて良いんだ。誰かが勝手にやってくれればいい。できる人にお金を渡して、僕らはそれを享受するだけで良いのだ。ここでプログラミングという言葉を連呼したけれど、コーディングという言葉との違いとか、そういうのを気にするような人とおつきあいする必要は無いのだ。いずれプログラミング必須スキルになるとか言われて何年も何年も苦しみ続けてきた。けれど、そんなことをする必要は無いんだ。

 

さようなら。僕はもうプログラミングしません。

 

 

 

 

それでぶっちゃけここからが本番なんだが、十代でなんとかしないと、という焦りはこないだの青木君の小四なりすましの話に似ている。僕もそうだった。僕らの世代だと登大遊氏なんかが結構輝いてて、ああいう感じにならなきゃ、と思っていた節はある。十代の時になにか成し遂げないといけない、そのためには誰かに認めてもらわなければならないという焦りは、どれくらいの「大人」に理解してもらえることなのだろうか?誰かの承認を得たいという承認欲求を、同じ世代の誰かを使って満たすことができず、むしろ同じ世代の誰かを一緒に引き連れて、承認欲求を満たしてくれる「教祖」にすがりつく。NPOの大学生が「承認」を欲し、政治家が「承認」を与えているのだ。AO入試用の作文?図?みたいなものも見かけたが、「私はリーダーシップがあります!」とか実にくだらないことしか書いていない。しかしそういうものでさえ、学生団体とやらは「承認」してくれる。結局、オウム真理教が丸ごと開けたポジションに、バラックが建ち並び闇市が行われていて、コミュニケーションで自然と得られるはずの承認欲求が、法外な札束で取引されている、そんな感じのような気がする。

 

意外にブクマが増えていた。PC-8001は俺が産まれる前に買われたもので、ずっとオブジェだったのだ。動くかどうかもわからない。テレビに接続するコードがなかったから。

2014-02-21

プログラマの俺が思うLispの弊害

お前らLispしろ

Lispすれば、知識はつくし抽象化力がつく。

アイディアは途方もなく出てくるし、言語設計スキルもつく。

多分、世の中のプログラミングパラダイムといったものは、大半はLispでまかなえる。

その辺にあるScheme仕様50ページくらい実装すれば、自分の成長ぶりに驚愕するぞ。

でもな、Lispすると他のプログラミング言語が滑稽に見えてくる。

マクロに自惚れて、予約語が許せなくなる。

そんな括弧肥大人間社会には受け入れられないんだよ。

からさ...社会で生きたいなら、Lispするな。

http://anond.hatelabo.jp/20140221132243

2013-04-05

JavaScript Lover

いっせーの!

Webにのって さあ出かけよう
ブラウザとのランデブー
ユーザー大事 実装が大事
JS、マジ大好き

ユーザーの痛み それ言語のせい?
UIの動き UXのつもり
今までのJSポジションを
越えた未来は どうなるの?

ねぇどうせWebKitでしよ ダメ?
ダメ! ECMA標準だけ
油断も隙もない
APIとのボーダー越えたい

そうもっと!

大胆で ちょっと強引?
俺ワールド全開
優しいJSも いじわるなJSひとりじめ

型つけてみて やっぱやめて
ウラハラ alt-js
Java以上C++未満の
JS、マジ最高

V8けが きらめいて
遠い背中も 追いかけたよ

これから最適化
フローグラフの分まで伝えたい
ぎゅってしてPNaClコンパイル ダメ?
ダメ! 不埒です

CSS3に甘えたい
GPUに触れたい
どこまで? APIボーダー教えて

おっとっと!

手強い IEの仇
ムキになったら
古いシステムFlashの将来も
譲れない

実装して やっぱやめて
一方通行プロセス
W3C信じて
プラグイン書いて
No more E4X

動的なの? 静的なの? 型推論好き?
好き!
好きだからわず答えて
Ion Monkey 越えよう

おっとっと!

大胆で ちょっと強引?
prototypeを知ったら
JSでの設計コーディングも変わるの?
答えてよ!

ときめき 走り出す
わくわくコーディング
Self以上 Scheme未満の
JS、超愛してる!!

「Girlish Lover」 PV

2013-03-22

プログラミング出来ない奴ちょっと来い

プログラミング出来る方法教える。

世の中「プログラミング言語」を説く本はごまんとあれど「プログラミング」を説く本やブログはあまりない。

いや実際に "ない" というのはかなり語弊があるかもしれない。

しかし、通常この種の説明している本に辿り着くまでには多くの時間必要だ。

普通の人は、多くの間違った方法を試し、その都度試行錯誤を重ね、プログラミング経験を経ることよって、重要概念を獲得するのだと思う。

例えば、「計算機プログラム構造解釈」や「実用 Common Lisp」、「コンピュータプログラミング概念技法モデル」などの書籍現実の問題に対し "プログラム" をどう書くかという問題に正面から取り組んでいる良書だ。

しかし、どれだけ”普通の”プログラマが上記のような書籍を読んでいるのだろうか。

そして、"普通プログラマ" がプログラミングを学ぶ書籍として、それらは果たして適切と言えるだろうか。

僕はそうは思わない。

というのも、多くの人は計算機科学を学び、効率のよいアルゴリズムデータ構造、美しい階層化・モジュール化されたプログラム、などを作るためにプログラミングするのではない。目の前の問題を解決するためにプログラミングを行うからだ。

それは自分の作りたいアプリだったり、

クライアントから発注されたプロジェクトだったり、

上司から頼まれた仕事だったり、

業務を効率化させるための Excel マクロだったり、

授業で出された宿題だったり、人それぞれだろう。

このような目の前の問題を解決したい人達が、わざわざ LispMozart など何の役に立つのか分からない言語を、根気よく勉強するのだろうか。(ちなみに、LispMozart は上記の書籍で実際に使われている言語である。)

目的現在の問題を解決することであって、

新しいプログラミング言語を学ぶことや、プログラミングの種々の概念を獲得することではない。

もちろんプログラミング言語を上達するためには一つでも多くの概念を会得する必要があるので、あるレベル以上を目指すのであればこれらの書籍を読むことや、抽象化を実現するための様々なツールを手にすることは必須だと思う。

純粋プログラミングを楽しんでいる人やハッカーを目指したい人はこのような文章を読むのではなく、ぜひ上記に挙げた本を実際に購入し、自分の手で動かして確かめてみることを勧める。プログラミングに対する考え方や姿勢が変わるのは間違いないと思う。

今回はそのような”純粋プログラミングを楽しんでいる人”に向けた文章でない。

現実の問題をプログラミングを用いて取り組んでいる人に向けて書いた文章だ。


そのような人の中で、なかなかプログラミングが上達しないという人に向けた文章である

もしプログラミング学習限界を感じているのであれば、プログラミング学習方法が間違っている可能性が高い。

そして残念なことに、初学者向けの書籍では、"プログラミング言語の文法" を説く本はあれど、"プログラミング学習方法や上達するための正しいスタンス" を説く本はほとんどない。


できるだけ多くの人にプログラムをする楽しみを知ってもらうためにも

より多くの人がより生産的にプログラムが出来るようになるためにも

そして特に、右も左も分からなかったプログラミングを始めたばかりの過去自分に対して、

効果的な学習方法プログラムする際の指針を書き記したいと思う。

それらは単に指針を示しているだけなので、

どんなプログラミング言語を使っていようとすぐに実践に移せるはずだ。

後はどれだけそれを実践に移し地道にプログラミングしていくだけである

正しい努力と、ちょっとしたコツさえ知っていれば驚く程生産性を挙げられるはずだと確信している。

プログラマレベルを以下の 3 つに分けてそれぞれについて説明していきたい。

1. 初心者レベル

プログラミング半年未満

・使えるプログラミング言語は一つだけ

ただし以下のことは出来ない。

・500行以上のコードが書けない

エラーが出た時の対処方法が分からない

写経は出来るが、自分プログラムが書けない

2. 中級者レベル

プログラミング半年 〜 3年

・1つ以上のプログラミング言語は使える

オブジェクト指向は理解している

ただし以下に当てはまる。

自分制作しているアプリケーション向けに "実用的なフレームワークライブラリ" を書けない

・1万行以上のコードだとスパゲッティコードになり、保守不能になる

・重複するコードが多く存在する

・適切なサブルーチン化できない

3. 上級者レベル

プログラミング歴 3 年以上

現実の問題に対して適切なデータ構造アルゴリズムを選択できる

抽象化について理解し、可変部分と不変部分を考慮した設計ができる

全てのプログラマはどれかのレベルに属するはずである

またそれぞれのレベルクリアするには明確な壁がある様に思う。

これらの壁を超えるにはどうすればよいかを説明する。

前置きが長くなったが、以下ではまず初級者レベルの人に向けた具体的なアドバイスをする。


初心者レベルの人に向けて

完全に初心者レベルの人はまずどのようにプログラミングを行えばよいのか分からない。一行も書けない。そのため、必然的に以下のような行動を取ると思う。

検索エンジンで似たプログラム検索コピーペーストする

・本に載っているプログラムをそのまま書き写す(いわゆる写経

上のような行動を行なっているだけでは、いつまで経っても自分プログラミングが出来るようにならない。

なぜなら上記のプロセスでは決定的に重要なことが学べないからだ。

それは、【プログラミング言語モデル】を自分の中に作ることである

プログラミング言語ルールの塊である

それは普通言語と同じように文法が存在し、そのしきたりに沿って記述しなければならない。

のしきたりを学べば書けるようになれる。非常に単純だ。

それなのに、なぜいつまで経っても書けないのか?

それは、”書き写す・コピーする” だけでは、そのしきたりが習得できないかである

特に最初のうちのプログラミングは頭を作業使う作業でなく、むしろ "体で覚える" 類のものである

それは例えば、日本語を話すことと似ている。

友達と会話する時、頭を使っているだろうか。

それは簡単な受け答えについては体が覚えているので、考えるより先に日本語が出てくるのではないだろうか。

プログラミングも同様に頭を使うのではなく、こうしたい時はこう書く、という反射神経を育てなければならない。

もちろん日本語話せるだけでは、ミーティングプレゼン出来ないのと同様に、文法が出来ただけではプログラミングが出来るとは言えない。しかし、文法が出来ないと "現実の問題に対処するソフトウェアを作る" というレベルには到底進めない。そのために、まずそのような文法の反射神経やパイプラインを頭の中に作る必要があるのだ。

それには以下の点を意識してプログラミングすればよい。

・"何をしたい時" に "どう書けば正しく動くか" というデータベースプログラミング言語モデル)を自分の中に作ること

このままでは抽象的すぎるので、このような "データベース" や "考える習慣" を自分の中に作るための具体的な指針を以下に挙げる。

1. エラーをたくさん出す

2. デバックの仕方を覚える

3. 小さく動かして確かめ

4. Google を使い倒す

まり、小さく動かして、エラーをいっぱい出し、デバッグを素早く行なって、分からないことは google などの検索エンジンで解決する。これが上達のコツである


これらについては以下で詳しく説明するとして、

まず最初初心者ありがちな間違いをいくつか列挙してする。


関数メソッドをたくさん覚えなければいけない

無理して覚えなくてよい。

プログラマは覚えることが星の数ほどあるので、メソッドなどはリファレンス片手に検索できればよい。

よく使うメソッドなどについては自然に覚えていくので、積極的に覚える必要はなし。それこそ、"体" で覚えるはずである

覚えられないメソッドについてはそもそもあまり使わないから覚えられないので、重要性は低く覚える必要はない。

しろ実現したい処理が既にメソッド関数として提供されていないか、調べる力の方が大事

エラーがいっぱい出てつらい

全く問題ない。

以下で述べるようにエラーとどう付き合うかが非常に重要

写経をしなければならない

教科書や本の中に書いてあることをそのままエディタで書き写し、実行することを写経という。

上記でも述べたように、これからまり無駄努力をしないことを願って言えば、

写経にはほとんど意味がないと思って取り組んだ方がいい。

写経して書いた 10000 行のプログラムより、自分で考えて書いた 100 行のプログラムの方が遥かに意義がある。

なぜならば写経は "作業" だからだ。

そこに "言語モデル" や "思考" が伴わないと意味がない。

”思考” が伴わないとただの書き写す作業をしているだけだ。

自分の中に "モデル" が出来ていないので、いざ自分プログラミングしようと試みても、写経をしているだけでは全く書き出せないだろう。

写経はそもそもプログラミングに対するスタンスプロセスのもの勘違いさせる危険性をはらんでいるいる。

写経する場合、書き写しの間違いがなければプログラムは問題なく動く。

しかし実際のプログラムではコンパイルや実行するまで、そのプログラムが期待通りに動くかどうか、は絶対に分からない。

そして通常は一気に全てを書き上げるのではなく、まず小さなコア部分を書き、少しずつ他のコア以外の部分を書き上げながらプログラム完璧ものにしていく。

書き間違えさえなければ正しく動くと知っているプログラムを、上から一行ずつ書いていくプロセスとは正反対だ。

また、以下で述べるようにエラーが発生した場合デバッグ作業は非常に重要であるだが、そのための作法写経から学ぶことができない。

なぜならば、写経中にエラーが発生した場合教科書自分で書いたプログラム間違い探しをまず一番最初に行うからだ。これはプログラミングに関する作業ではなく、むしろ間違い探し絵本とにらめっこしているに近い内容である

それでは、デバッグ方法言語モデルを作るとても大切なプロセス経験できない。

ゆえにそのようにして完成したプログラムもおそらく正しく動きはするが、得られる経験値は驚くほど低いはずである

とは言え、いきなり自分で書けと言われても書けないと思うので、小さなプログラムを一旦は教科書通り写し、その後自分なりに改変していくのがよいと思う。この場合写経にはほとんどが意味がないと思った方がよい。"自分なりに改変する" というプロセスこそ意味がある。

さて初心者が陥りやすい部分については説明したので、

今度はどのように "言語モデル" を自分の中に作っていくかについて説明する。

1. エラーをたくさん出す

初心者エラーを出さない様にと慎重にプログラミングしようとしがちだ。

はっきり言うと、それは間違ったプログラミングスタイルだ。

特に最初のうちは、エラーをなるべく多く出した方がよい。

なぜならば、エラーを出すごとに、その言語の新しいルールを1つずつ学んでいくことになるからだ。

PHP で例えると、

printf の書式だとか

文末に付けるセミコロンだとか

function はネストできないとか

変数には $ を付けなければならないだとか

グローバル変数関数の中で使う場合は global 宣言するとか

などである

初心者のうちは一切上のようなルールは知らないはずだからエラーを全て踏むかもしれない。

例え今回作っていたプログラムエラーを踏まなかったとしても、回数をこなしていけばいくつかエラーに遭遇するだろう。

しかし、それでよいのだ。

エラーを修正することの繰り返しの中で、その言語モデル自分の中に出来てくる。

そのようなトライアンドエラーを繰り返えすことで、"言語モデル" は文字通り体の中に染み込み、プログラムだんだんと書ける様になっていく。

おそらくこれはは自転車に乗れるようになるプロセスと似たようなものだと思う。

誰しも最初は上手く走れずに転んでばかりいるけれど、何度も何度も転んで起き上がってを繰り返しているうちに少しずつ多くの距離をこげるようになっていくだろう。

そして最終定期には、難なく自転車を乗りこなせるようなっている。

プログラミング言語を学ぶ時も同じである

最初は何度やってもいろいろなエラーが出てくる。

それらのエラーを地道に1つずつ潰して間違いを訂正していくうちに、少しずつ多くの行数の複雑なプログラム書けるようになっていく。

そして最終的には、自由にプログラミング言語を使いこなせるようになっていることに気付くだろう。

自転車も本を読んだだけで乗れるようにはなれないのと同じで

プログラミング言語も本を読んだだけで出来るようになれると思わない方がよい。

それらはトライアンドエラーの繰り返しの中でしか得ることはできないし、誰かから教わる類のスキルでもない。

そして、プログラミングを行うからにはエラーとは一生付き合っていかなければならない。

早めにそれに気付いて受け入れる必要がある。

2. デバッグの仕方を覚える

さてエラー重要性については上で強調した。

実際にエラーに遭遇した時に大事なのはエラーに遭遇した時にいかにその原因を突き止めるかだ。

期待しない動作をした時のデバッグという。

まずいちばん基本的で一番重要デバック方法printf デバックである。これをまず出来るようにする。

怪しい変数をとにかく printf で出力し、変な値が入っていないかを確かめ方法である

僕が常々許せないと思っていることは、初学者向けの書籍にはデバッグ重要性やその具体的な方法論が非常に重要であるにも関わらず、それについては解説すらされていないことである

初心者からこそ、デバッグ方法論や開発環境をきちんと整えるべきである

ほとんどの言語処理系では、デバッグ作業を支援する機能提供している。

からなければ、"言語 デバッグ方法" でグーグル検索してみればよい。

例を挙げると、

C言語だったら、gdb

PHP だったら Xdebug

Ruby だったら pp モジュール

Schemegauche)だったら #?= デバッグ

javascript だったら firebug

言語はいわゆる"定石"と言われるデバッグ方法があるはずで、それらを検索し習得すること。

これは無益時間を過ごさないためにも本当に重要な要素なので、面倒くさがらずに開発環境を整えや方法論をマスターすること。


3 小さく動かして確かめ

最初の内は、基本的にプログラミングする時は小さな部品に別けてから1つずつ確かめながら作る習慣を付けるようにする。

その理由は簡単で、人間は正確無比に物事を進めるのは苦手な一方で、プログラミングでは正確無比に物事を進めることを要求されるからである。そのため、大きなプログラムを一度も実行せずに作成し、一気に確かめようとするとまず間違いなく正しく動作しない。

そして厄介なことに、大きなプログラムを作ってしまうとどこに問題があるのか切り分けすることが困難になるので、ますますデバックが難しくなってしまう。

そのためまず小さく作って小さく確かめ部品を組み合わせてプログラムを作っていくことが大事になる。

一般的に言って、どんなに熟練したプログラマーであろうとも、一つのミスもせずに一定以上の大きさのソフトウェアを作り上げることは不可能である。そのため、ミスエラーはある程度発生することを前提に、少し作っては実行して確かめる、というサイクルをたくさん回す習慣を付ける。

ソフトウェアは一行書き上げた瞬間から指数関数的に複雑性が増大し、気付いた時にはどうにもならなくなっていることも多い。そういう時は思い切って一から作り直すという選択肢検討してみるべきだ。

"Small is Beautiful"

これは非常に有名な unix (という OS)の設計理念である

unix開発者は様々な失敗経験から、このようなソフトウェア開発のベストプラクティスを学んだに違いない。

まだプログラミング経験の浅い人も、これから偉大な開発者経験から学ぶことができるはずである。"Small is Beautiful"。小さく作って動かすこと。


4 Google を使い倒す

先ほどから何度も書いてあるように、プログラミングする上ではエラーとの付き合い方が非常に重要になってくる。

おそらく何らかの上手くいかない場合は何らかのエラーメッセージが出るはずだ。

原因がどうしても分からない場合は、エラーの文章をそのままコピーして検索してみる。そうすると、おそらくエラーの原因と対策方法などが表示されるので、それを足がかりに再度挑戦する。




現実プログラミングは、どんなにスキルが伸びようとも、いつも上手くいかないことばかりだ。それこそ、何をしてもエラーが出てくるし、何をしても上手く動作しない。だから僕は初心者のうちで一番大事能力とは、実は "忍耐力" だろうと少しばかり思っている。

でも悩んでるのはあなただけではなく、おそらく全てのプログラマーが通ってきて道だ。

そして、自分の思い通りに動くプログラムを見た時程うれしいものはない。

ぜひ初心者の人はこれを読んで少しでもプログラミングが出来るようになればと思っている。





2013-03-03

http://anond.hatelabo.jp/20130303135038

元記事はそんなに外してもいないと思いますけどね。

静的型付き言語として関数型言語を持ち出してくるのは、論点が違うような気がしました。

静的型、型推論の嬉しさって、関数が一級かどうかでも違ってくると思いますし。

(つまり、静的型の得失について、scheme vs ML での議論と Java vs Perl の議論は別物だと思います)

結局は適材適所という結論にしかならないと思いますが、たとえば Web 系なら静的型付き言語で書いても面倒臭さの方が多そうです。

Web 系で一番面倒なのは文字列の扱いなので。そこは型システムで何も解決しないですよね。

そういうことより、文字列関数名として $funcName(arg1, arg2) みたいにコールできたりとか、

そういう柔軟さが便利なのですよね。

こういうの、静的型がある言語だと大変ですよね。Java ならリフレクションですよね。

他の言語ではどうするのでしょう。おそらく、自前で関数テーブルを作ることになるでしょうか。

静的型を持たない言語での開発が、大規模になると破綻するというようなことが言われます

別に破綻しませんよ。

大規模開発といっても、大抵フレームワーク規約に沿って実装するだけですし、

規模を LOC だと考える限りにおいては、大規模になっても複雑さは LOC に比例しませんから

単純にモジュール数が増えるだけで、一つ一つは単純な実装の繰り返しですよね。

おさしみにたんぽぽを乗せるお仕事と変わりません。たんぽぽの山が積まれていて途方に暮れるだけです。

もちろん、大規模になったときスケールしなくなるので C/Java にするというのはありますけど。

でも、これも Web 系では、ボトルネックネットワークデータベースというのが普通だと思います

2013-02-16

http://anond.hatelabo.jp/20130216013422

情報系なら全員最低一つは信仰してる言語があると思ってたんだが…。

ruby, c++, lisp/schemeあたりが人気なイメージ

2011-12-29

Portable electronic equipment battery technology

1, about the trickle charge, rapid charging and stable battery charging algorithm

According to the energy requirements of the final application, a battery may contain up to 4 lithium ion or lithium polymer battery core, its configuration will have a variety of change, at the same time with a mainstream power adapter: direct adapter, USB interface or car charger. Remove the core quantity, core configuration or power adapter type difference, the battery has the same charge characteristics. So they charge algorithm. Lithium ion and li-ion polymer battery best charging algorithm can divided into three phases: trickle charge, rapid charging and stable charge.

trickle charge. For depth discharge core to charge. When core voltage in less than about 2.8 V, use a constant 0.1 C of the current charging for it.

fast charging. Core voltage trickle charge more than the threshold, improve the charging current rapid charging. Fast charging current should be lower than 1.0 C.

stable voltage. In the fast charging process, once the core 4.2 V voltage, stable voltage phase began. This is through the minimum charge current or timer or of the two joint to interrupt charge. When the minimum current below about 0.07 C, can interrupt charge. The timer is to rely on a default to trigger the timer interrupt.

Advanced battery charger with additional security function normally. For example, if the core temperature exceeds the given window, usually 0 ℃-45 ℃, charge will be suspended.

Remove some very low-end equipment, now on the market/li-ion polymer lithium ion battery solutions are integrated with the outer components or, in accordance with the characteristics of the charging to charge, this is not just to get better effect charge, but also for safety.

lithium ion/polymer battery charge is an example of applications-double input 1.2 A lithium battery charger LTC4097

LTC4097 can be used to exchange adapter or USB power supply for single quarter/polymer lithium ion battery. Figure 1 for double input 1.2 A lithium battery charger LTC4097 schemes. It USES constant current/constant voltage algorithm charging, from exchange adapter power charge, programmable filling up to 1.2 electric current A, and with USB power can be as high as 1 A, at the same time, automatic detection in each input voltage whether there. This device also provide USB the current limit. Applications include PDA, MP3 players, digital camera, light portable medical and test equipment and big color cellular phone. The performance characteristics: no external micro controller charging termination; The input power automatic detection and choice; Through the resistance from the exchange of charging adapter input can be as high as 1.2 A programming charge current; The resistance of programmable USB charging current is up to 1 A; 100% or 20% USB charging current set; The input power output and existing bias NTC (VNTC) pin as a 120 mA drive ability; NTC thermistors input (NTC) pin for temperature qualified charged; Pre-settings battery voltage with floating plus or minus 0.6% accuracy; Thermal regulation maximize charge rate and free hot air LTC4097 can be used to exchange adapter or USB power supply for single quarter/polymer lithium ion battery. The use of constant current/constant voltage algorithm charging, from exchange adapter power charge, programmable filling up to 1.2 electric current A, and with USB power can be as high as 1 A, at the same time, automatic detection in each input voltage whether there. This device also provide USB the current limit. Applications include PDA, MP3 players, digital camera, light portable medical and test equipment and big color cellular phone.

2, lithium ion/polymer battery scheme

Lithium ion/polymer battery charge scheme for different number of core, core configuration, and power types are different. At present mainly have three main charging scheme: linear, Buck (step-down) switch and SEPIC (booster and step-down) switch.

2.1 linear scheme

When the input voltage in big with the charger with sufficient clearance of core after opening voltage, it is linear scheme, especially 1.0 C fast charging current than 1 A big too much. For example, MP3 players usually only one core, capacity from 700 to 1500 mAh differ, full charge voltage is open 4.2 V. MP3 player power is usually the AC/DC adapter or USB interface, the output is the rule of 5 V; At this time, the linear scheme is the most simple, most charger of the efficiency of the scheme. Figure 2 shows for lithium ion/polymer battery solution linear scheme, basic structure and linear voltage neat device.

linear scheme charger application examples-double input Li + charger and intelligent power source selector MAX8677A

MAX8677A is double input USB/AC adapter linear charger, built-in Smart Power Selector, used for rechargeable single quarter by Li + batteries portable devices. The charger integration of the battery and the external power source and load switch charging all the power switch, so that no external MOSFET. MAX8677A ideal used in portable devices, such as smart phones, PDA, portable media players, GPS navigation equipment, digital camera, and digital cameras.

MAX8677A can work in independent USB and the power input AC adapter or two input either one of the input. When connecting external power supply, intelligent power source selector allows the system not connect battery or can and depth discharge battery connection. Intelligent power source selector will automatically switch to the battery system load, use the system did not use the input power supply parts for battery, make full use of limited USB and adapter power supply input. All the needed electric current detection circuit, including the integration of the power switch, all integration in the piece. DC input current highest limit can be adjusted to 2 A and DC and USB input all can support 100 mA, 500 mA, and USB hung mode. Charge current can be adjusted to as high as 1.5 A, thus support wide range of battery capacitive. Other features include MAX8677A thermal regulation, over-voltage protection, charging status and fault output, power supply good surveillance, battery thermistors surveillance, and charging timer. MAX8677A using save a space, hot enhanced, 4 mm x 4 mm, 24 of the pins TQFN encapsulation, regulations, work in exceptional temperature range (40 ~ + 85 ℃).

2.2 Buck (step-down) switch scheme

When A 1.0 C of the charging current more than 1 A, or the input voltage of the core than with high voltage open many, Buck or step-down plan is A better choice. For example, based on the hard drive in the PMP, often use single core lithium ion battery, the full of open is 4.2 V voltage, capacity from 1200 to 2400 mAh range. And now PMP is usually use the car kit to charge, its output voltage in a 9 V to 16 between V. In the input voltage and battery voltage is the voltage difference between high (minimum 4.8 V) will make linear scheme lowers efficiency. This kind of low efficiency, plus more than 1.2 A 1 C fast charging electric current, have serious heat dissipation problems. To avoid this kind of situation, will the Buck scheme. Figure 3 for lithium ion/polymer battery charger scheme Buck diagram, basic structure with Buck (step-down) switching voltage regulators completely the same.

2.3 SEPIC (booster and step-down) switch scheme

In some use of three or four lithium ion/polymer core series equipments, charger of the input voltage is not always greater than the battery voltage. For example, laptop computers use 3 core lithium ion battery, full charge voltage is open 12.6 V (4.2 V x3), capacity is 1800 mAh to 3600 mAh from. Power supply input or output voltage is 1 6 V AC/DC adapter, or is car kit, the output voltage in a 9 V to 16 between V. Apparently, the linear and Buck solutions are not for this group of batteries. This is about to use SEPIC scheme, it can in the output voltage is higher than when the battery voltage, can be in the output voltage less than when the battery.

3, and power detection algorithm is proposed

Many portable products use voltage measurements to estimate the remaining battery power, but the battery voltage and surplus power relationship but will with the discharge rate, temperature and battery aging degree of change, make this kind of method can top 50% margin of error. The market for longer to use product demand unceasingly strengthens, so the system design personnel need more accurate solution. Use capacity check plan come to measure battery or consumption of electricity, will be in a wide range of application power to provide more accurate estimate of the battery power.

3.1 power detection algorithm is one of the examples of application, function complete list, double the battery portable battery application design

power detection principle. Good capacity check plan at least to have battery voltage, temperature and battery electric current, measuring method; A micro 9 a; And a set of and the verification of the punishment power detection algorithm is proposed. Bq2650x and bq27x00 is full capacity check program function, with a measuring voltage and temperature of the digital converter (ADC) and a measuring electric current and charging sensor the asp. These capacity check plan also has a microprocessor, is responsible for the implementation of the Texas instruments power detection algorithm is proposed. The algorithm can compensate the lithium ion battery life.low self-discharge, aging, the temperature and discharge rate, and other factors. Chip embedded microprocessor as host system processor save these calculation burden. Capacity check program can provide remaining power state information, bq27x00 series products also offer surplus can Run Time (Run Time to Empty) host may at any Time to capacity check plan these information query, then LED indicator light through or displays will inform the user battery. Capacity check meter is very easy to use, the system processor need only configuration 12 C or HDQ communication drive can.

The battery circuit description. Figure 4 (a) can be used for identification of IC functions with typical application circuit batteries. According to the use of IC testing program is different, the battery needs to have at least three to four outside the terminal.

VCC and BAT pins will even to the battery voltage, so that for, C power and the battery voltage measurement. The battery is connected a grounding resistance smaller detection resistors, let capacity check meter high impedance SRP and SRN input can monitor sensor resistance on both ends of the voltage. Through testing the current flows through a resistor can be used to judge the battery or release the amount of electricity. Designers choose detection resistance value must be considered when resistance on both ends of the voltage can't more than 100 mV, low resistance may be more hours in current errors. Circuit board layout must ensure that SRP and SRN to testing from as close as possible to the connection of the resistor sensor resistance end; In other words, they should be the Kelvin attachment.

HDQ pin need external and resistors, this resistance should be located the host or the main application, such capacity check plan to the battery and portable devices when sleep function enable connection broken. Advice and resistance choose 10 k Ω.

battery identification. A low cost WeiMao batteries are getting more and more serious, these cells may not contain OEM requirements of security protection circuit. So, genuine battery may contain figure 4 (a) shows the appraisal circuit. When to identify the battery, the host to contain IC (bq26150, the function is cyclic redundancy check (CRC)) issued the battery packs a ask value (challenge), the CRC will contain battery according to this inquiry value and, in the building of the IC in CRC polynomial calculation the CRC value. CRC is based on the host of command and IC secret in the query of the definition of the CRC polynomial completed, the host in CRC values calculated with the calculation result of well battery comparison to identify the appraisal success.

Once the battery through the appraisal, bq26150 will issue commands to ensure that the host and quantity test plan of material lines between normal communication. When the battery connection interruption or to connect, the whole the identification process will be repeated again.

double the battery application. Figure 4 (b) for use bq26500 support double the typical application of lithium ion battery circuit. In order to support more battery, and this circuit is adding a adjustable regulators. Capacity check millions of BAT pin and the bottom of a battery anode linked to complete the variable voltage measurement of the battery.

Host to be able to read capacity check plan of variable voltage measurement battery, to make sure the end of discharging threshold and charging terminate threshold. As for the remaining state power (RemainingStateofCapacity), do not need to read can use directly.

The above bq2650x and bq27x00 etc capacity check plan provides the battery manufacturer a simple to use options, this scheme L [just measuring battery voltage to be precise, so these capacity check plan can be applied to various battery framework, and can support the battery identification and double the battery application '

3.2 power detection algorithm is an example of applications another, can apply to all kinds of general voltmeter new IC.

Today's many manufacturers can provide a variety of voltmeter IC,, the user can choose the suitable function device, to optimize the product price. Use voltmeter measurement of storage battery parameters, the separate architecture allows users in the host custom power measurement algorithm within. Eliminating embedded processor battery cost. On this to Dallase semicconductor company called cases of DS2762 chip for typical analysis. A new separate voltmeter IC, its structure see chart 5 (a) below.

DS2762 application characteristics

DS2762 is a single quarter of lithium battery voltmeter and protection circuit, integrated into a tiny 2.46 mm x 2.74 mm inversion of packaging. Due to internal integration for power detection of high precise resistance, this device is very save a space. It is the small size and incomparable high level of integration, for mobile phone battery and other similar handheld products, such as PDA, etc, are all very ideal. Integrated protection circuit continuously monitoring the battery voltage, over voltage and flow fault (charging or discharge period). Different from the independent protection IC, DS2762 allow main processor surveillance/control protection FET conduction state, such, can DS2762 through the protection of the power system and the control circuit implementation. DS2762 can also charge a battery consumption has depth, when the battery voltage within three V, provide a limit of the charging current recovery path.

DS2762 accurate monitoring battery current, voltage and temperature, the dynamic range and resolution of common satisfy any mobile communication product testing standards. The measurement of current for internally generated when the integral, realize the power measurement. Through the real-time, continuous automatic disorders correct, the precision of power measurement can be increased. The built-in measuring resistance due to eliminate manufacturing process and temperature and cause resistance change, further improve the precision of the voltmeter. Important data stored in 32 bytes, can add the lock EEPROM; 16 bytes of SRAM are used to keep dynamic data. And DS2762 all communication all through the 1-Wire, more communication interface node, minimize the battery and the connection to the host. Its main features for; Single quarter of lithium battery protector; High precision current (power measurement), voltage and temperature measurement; Optional integrated 25 m Ω measuring resistance, each DS2762 after fine-tuning alone; 0 V battery restore charge; 32 bytes can lock EEPROM, 16 bytes SRAM, 64 a ROM;

1-Wire, node, digital communication interface; Support more battery power management, and through the protection system control FET power; Dormancy mode power supply current only 2 µ A (most); Work mode power supply current for 90 µ A (most); 2.46 mm x 2.74 mm inversion of packaging or 16 feet SSOP package led, and both are can choose with or without detection resistance; After has with e

2011-05-01

転載

誤字脱字は勘弁な。

I was at home the other night inth middle of my dinner when the phone rang.


ME:Hello.

AT&T:Yes, thie is AT&T...


ME:Thie is AT&T,

AT&T:Yes, this is AT&T.


ME:Is this AT&T.?

AT&T:Yes! This is AT&T, may I speak to Mr.Byron, please?


ME:May I ask who is calling?

AT&T:This is AT&T.


ME:OK, hold on.


At this point I put the phone down for a solid 5 minutes thinking that, surely, this person would have hung up the phone. I ate my salad. Much to my surprise, when I picked up the receiver, they were still waiting,


ME:Hello?

AT&T:Is this Mr.Byron?


ME:May I ask who is calling, please?

AT&T:Yes, this is AT&T...


ME:This is AT&T?

AT&T:Yes, this is AT&T...


ME:The phone company.

AT&T:Yes, sir.


ME:I thought you said this was AT&T.

AT&T:Yes, sir, we are phone company.


ME:I already have a phone.

AT&T:We aren't selling phones today, Mr.Byron. We world like to offer you 10 cents a minute, 24 hours a day, 7 days a week, 365 days a year.


ME:Now, that's 10 cents a minute, 24 hours a day?

AT&T:(getting a little excited at this point by my interest) Yes, sir, that's right! 24 hours a day!


ME:7 days a week?

AT&T:That's right.


ME:I am definitely interested in that! Wow!! That's amazing!

AT&T:We think so!


ME:That's quite a sum of money!

AT&TYes, sir, it's amazing how it adds up.


ME:OK, so will you send me checks weekly, monthly or just one big one at the end of the year for the full $52,560; and if you send an annual check, can I get a cash advance?

AT&T:Excuse me?


ME:You know, the 10 cents a minute.

AT&T:What are you talking about?


ME:You said you'd give me 10 cents a minute, 24 horus a day, 7 days a week, 365 days a year. Thats comes to $144 per day, $1008 per week and $52,560 per year, I'm just interested in knowing how you will be making payment.

AT&T:Oh, no sir. I didn't mean we'd be peying you, You pay us 10 cents a minute.


ME:Wait a minutes. how do you figure that by saying that you'll give me 10 cents a minute, that I'll give YOU 10 cents a minute? Is this some kind of subliminal telemarketing scheme? I've read about things like this in the Enquirer, you know.


AT&T:No, sur, we are offering 10 cents a minute for


ME:THERE YOU GO AGAIN! Can I speak to supervisor please?

AT&T:Sir, I don't think that necessary.


ME:I insist on speaking to supervisor!

AT&T:Yes, Mr.Byron. Pleas hold.


At this point, I begin trying to finish my dinner.


SUPERVISOR:Mr.Byron?

ME:Yeah.


SUPERVISOR:I understand you are not quite understanding our 10 cents a minute program.

ME:is This AT&T?


SUPERVISOR:Yes, sir, it sure is.

ME:(I had to swallow before I choked on my food, It was all I could do to suppress my laughter and I had to be Careful not to produce a snort.) No, actually, I was just waiting for someone to get back to me so that I could sign up fo the plan.


SUPERVISOR:Ok, no problem, I'll transfer you back to the person who was helping you.

ME:Thank you.


I was on hold once again and managed a few more monthfuls. I need to end this conversation. Suddenly, there was an aggravated but polite voice at the other end of the phone.


AT&T:Hello, Mr.Byron, I understand that you are interested in sighning up for our plan?


ME:No, but I was wondering - do you have that "Friend and Family" thing because I'm an only child and I'd really like to have a little brother...


AT&T:click.........

2010-08-15

http://anond.hatelabo.jp/20100815181858

Schemeなら少しはわかる。SICP読んでるからね。あとPython関数型だよね。背景的には。

関数型言語は確かに良いね。関数が1級オブジェクトだからメンドクサイこと考えなくても比較的直感的に書ける。

でも実用的なでかいプログラム書こうと思ったら参照透明性とか言ってらんないと思うし、

それはそれで何たらハックみたいな細かい(めんどくさい)テクニックが必要になると思う。

ほんとめんどくせーわ。コード書くの。

2010-07-26

http://anond.hatelabo.jp/20100726181636

確かに関数型言語勉強になると思う。

俺はSICPをほんの少し齧ってSchemeを知ったレベルだけど、それだけでも勉強になったと感じるね。

2010-05-21

http://anond.hatelabo.jp/20100521003404

うん。できない。末尾再帰最適化ができる形式の階乗は、

n! = fact_iter(n,1)

fact_iter(0, acc) = acc
fact_iter(n, acc) = fact_iter(n-1, acc*n)

だ。

schemeで書くなら

(define (fact n)
  (define (iter n acc)
    (if (= n 0) acc (iter (- n 1) (* n acc))))
  (iter n 1))

だな。

そのへん興味あるならSICP読むといいよ。

2010-05-20

関数論理プログラミング

last xs | zs++[e] =:= xs

 = e

 where zs,e free

うーん、とっても不思議コードだー。

Schemeだったら

(define (last xs)

 (if (null? (cdr xs))

  (car xs)

  (last (cdr xs))))

みたいに関数呼び出しがあるコードになるのにー。

2010-05-05

情報学部の新入生にはアセンブラC++関数型言語(何がいいかまでは知らないけど)やらせりゃいいと思う

基礎体力を養う意味ではここら辺がいいと思うんですがどうでしょう

アセンブラコンピュータの基礎を理解するには必須でしょう。

これがわかるとCLRJVMインフラ部分もわかりますし、組み込み方面にも強くなります。

後にOSコンパイラ勉強するにも役立つでしょう。

C++マルチパラダイム言語であり、これをひとつやれば構造プログラミングオブジェクト指向プログラミングの両方がわかります。

C++はCのほぼ上位互換言語ですので(正しくはC99が制定されるまでは)、プレーンなCしかやらない理由はありません。

最初ベターCとして始めればいいです。

嫌なとこも多くある言語で(どうしてEffective C++シリーズやExceptional C++シリーズみたいな書籍が多くでてるか考えるといいよ)、メモリ管理も手動ですが(これは半分嘘。RAIIがあるから半分自動GCがないから半分手動)、逆に細かいとこに気を配る態度を養うには最適です。

関数型言語は新しい世界を知るために勉強しましょう。

Erlangで並列プログラミングをやるのもいいかもしれません。

Common LispSchemeで怪しい(でも美しい)世界を爆走するのもいいかもしれません。

MLHaskellが最も現代的ですかね。

これだけやっとけばC#Java、軽量言語の類はあっさりと料理できるでしょう。

あくまでもプログラミング言語についてはですからね。

アルゴリズム離散数学もちゃんとやってくださいね。

システム屋になりたきゃソフトウェア工学経済学経営学、ついでにナンパもちゃんとしなきゃダメですよ。

2010-03-15

ttp://practical-scheme.net/trans/hs-j.html

学校で植え付けられる幻想の一番危険なものは、 素晴らしいことを為すには自分に厳しくなければならないというものだ。

2010-03-04

RubySchemeより優れているたった一つの理由

Rubyは、純粋オブジェクト指向と評されるHaskellの直系と遇されるのが常だが、私の見解は、むしろマクロアセンブラにより近い、というものなのだ。Rubyにおいて継続すなわちcontinuationの使用はもはや常態とも言えるが、一方のSchemeでは、Algol的な例外機構の残滓により、Unixシグナルに留まっている。

制御構造のみならず、データ構造の観点からも、RubySchemeよりはるかにポストモダンと言えるだろう。淵源へと遡れば、マクロアセンブラPascalの対立の図式へと導かれる。私は、Schemeデータ構造は、唾棄すべき要因を含むという思いを抱く誘惑に抗いかねるのだ。そうであるならば、民主党政権交代は失敗であったと結論せざるを得ない。

もとより、アインシュタイン相対性理論からも、明らかにRubyに軍配が上がるだろう。SchemeSchemeたらしめているブロックスコープ構造にしろ、今となっては決して珍しいものとは言えない。いやむしろ、真に純粋関数型を指向するなら、Schemeへの共用体の導入をこそ今真摯に検討すべきなのだ。演算子オーバーロードですべての問題が解決するわけではない。この実存的な課題をただ黙殺しているSchemeに、私は異議を申し立てる。

2010-01-17

http://anond.hatelabo.jp/20100117033236

おお、反応をいただけるとは、どうもありがとうございます。

確かに保守的な内容と思われるかもしれないのですが、ここに書いたのは学部3年までの内容ですので、プログラミングをやったことのない生徒もいることを考えると、基礎からやっていったらこういう内容になるのではないか、と思います。

4年以降になると、さらにUMLや、3DCGなど、応用的な分野の実習も入ってきます。

大学シラバスも見てみたつもりだったのですが、このような内容の実習を行っている大学は他にもあるのかもしれませんね。筑波大学の授業や、CLUは面白そうだと思いました。

今はほとんどシラバスの内容をネットで見られるので、受験生が授業の内容を調べながら大学を選ぶことができるのですが、一つ一つ調べていくのは大変だと思います。

大学の売りをみんなで宣伝しあったら、受験生の助けになるんじゃないかな、と思いました。

あと、scheme やっていないの?

残念ながらやってないみたいです。関数型言語については、一応MLを使った演習があるのですが、それほどサポートが手厚いとは言えなそうです。

http://anond.hatelabo.jp/20100117033236

コンパイラとかCPUとかシェルとかSchemeとかやったよー。大学で。Fラン。

やっぱり、どこもやってるんだね。

とはいえ、ちゃんとそういう基礎が身についているか、単に単位はとったけど、とっただけかは、本当に大きく違ってくると思うけど。

奥義とは基礎のことだと見つけたり。

http://anond.hatelabo.jp/20100116204834

コンパイラ作ったりCPU作ったりシェル作ったりは普通じゃね?

オーソドックスカリキュラムだと思うよ

CPU原理コンパイラ構造が、大きく変化することは無いから、授業しやすい

俺もやったし

凄いなと思ったのはこれかな

http://d.hatena.ne.jp/kzhk/20091202/p2

suffix array くらい習うけど、実際に意味のあるプログラムまで考えられているのが、課題として良くできている

自分が所属している専攻だと、昔CLU(くるー)って言語を教えていたらしい

初めてADTを実装した言語で、当時としては先進的だった、って先生がよく自慢してる

日本大学で、ここまで実戦的なコンピュータに関する教育を行っている場所はあまりないのではないか、と思います

保守的な授業だな、とは思った

尖った授業はあるとは思うけど

あと、scheme やっていないの?

SICP 読みながら meta circular interpreter 作るのは価値がある行為だとおもう。

2010-01-12

podcastの飽きない英語コンテンツ、2ヵ月後

忘れた頃にブクマがついたのでその後を書く。こういうニーズもやっぱそれなりにあるのね、ということで。楽しくのんびり続けることを最優先に選んでる。

今のところ飽きてないやつ

NBC Today ←普通の朝のニュース、雰囲気が明るい。天気予報黒人のおじさんがやたらテンション高い。最初にヘッドラインで言ってたニュースは「詳しくは後ほど」とか言うくせに最後までは流れなくて、どうして「30分(強)」だけなのよォオオオ~~~ッ!! と思う。続きはどっかで見れるのかな?

CBS Evening News ←かなりおカタい雰囲気のニュースだけど特集はコンテンツ的に濃かったりして見ごたえがある。

New York TimesのWorld News ←数分の、淡々としたナレーション付きのドキュメンタリーショートフィルムっぽいの。相変わらず世界の様々な話が面白い

CNN Larry King Podcast ←いろんな人を呼んできてインタビューラリーの老人っぽい声は聞き取りにくいけど、むしろ訓練にはいい。

【新しい項目】

Slate V ←短い日替わりコンテンツ。新作映画の詳しい紹介、視聴者からのお悩み相談(みのもんた級のベタな内容だが親近感はある)、その他もろもろ。

AFN Europe Video Podcast ←American Forces Network Europe軍隊がらみの短いドキュメンタリーを毎日、数本。米軍だけでなくドイツ軍とかイタリア軍とかの話もある。イラク軍に訓練法を教えてるとか、軍隊クリスマスとか、軍隊の中の洗濯係の女性兵士とか、各国軍一緒に砂漠マラソンやったとか、(プロパガンダだろうけど)本当にいろんな話があるので興味深い。

TIME Magazine Video Podcasts ←日替わりコンテンツインタビューや取材の映像。時々How they trainという番組があって、スポーツ選手オフシーズンにどんな練習してるの?を見せてくれる。雪の無いスキージャンプとかリュージュとか面白かった。

一応聞いてるけどそれほど楽しいわけでもないもの

The CNN Daily ←かなり早口。1年前はほとんどイミフだったが、毎日見てたおかげでTOEICリスニングぐらいは余裕になった。関係ないけどメインハイジたんは実は毎日ちょっとだけメイク髪型が違う。

CNN News Update ←かなり早口のラジオ歩いてる時とか画面を見れない時に聞く。

Big Ideas ←学者作家、どっかのCEOとかが1時間程度の講演をしてる。

Monocle ←cultureとdesignの話題。ファッション建築デザイナーインタビューしたり。更新が少ない。

ABC World Newsメインチャーリーおじさんが退職しちゃって、ベテランダイアン・ソイヤーに交代。topicごとの頭出しもできなくなったけど一応毎日見てる。

Good Morning America ←メインだったダイアンがWorldNewsの方に行って、今は若めの4人がリゾートとか週末のお楽しみ紹介とかしてる。たまにまじめなニュースもあり。

視聴をやめたもの

Cranky Geeks H.264 Video ←geekな話題で新しいサービスとか新しいガジェットとか紹介してる。自然な会話としてはニュースより役に立つだろうけど、複数人で同時に喋って聞き取れなかったり、話題ごとにダラダラ会話してるので短気な自分は飽きた。

Real Time with Bill Maher ←音声のみで1時間ぐらいある。通勤時間がほとんどこれだけで潰れてしまうのでやめた。

Rumor Girls ←ギャルのくだけた会話だけど内容がつまらんのでやめた。

Harvard Business Video IdeaCast ←経営やらマーケティングやらの本書いたインテリとかが出てくる10分程度のインタビュー番組。あまりにお堅い内容なので飽きた。

これから見てみる予定のもの

ブコメで教えてくれたみなさんありがとう!早速トライしてみるよー。とりあえず登録がてらチラっと内容を見た感じで書いておく。

TechCrunch ←かなり早口。音声のみ。

H&M Fashion Video ←動画映像的に結構面白そう。

NPRのTalk of the Nation ←音声のみ。

スタンフォード大学の講演Podcast speaker ←大学のはほんとに大量にある。

Planet Japan Podcast ←コメディ?音声のみ。面白そう。

NewScientist ←動画。月に1~2本ぐらいの模様。

Nature ←Nature Videoもあり。

CNN student news ←CNNはstudentじゃない方を視聴してるので・・・ごめん。

ついでに、自分がしつこく動画メインにする理由

単語をコツコツ勉強するのがめんどくさいから。スクリプト探すのもめんどいし、映像とセットの方が単語イメージが結びつきやすいと思う。複数のニュースを毎日見ていると数日間にわたって同じ話題が続いたりするので、自然といくつかの単語が耳に残るようになるんだけど、いちいち調べないで何となく意味とつづりが推測できるようになってからまとめて調べてる。コツコツ毎回やると数が多くなって忘れちゃう。ゆっくり確実に、でも楽して覚えたい。

自然に覚えた一例(印象に残ってるもの):

ぱんじーすきーむ ←金融屋のおじさんたちが悪いことした?…Ponzi Scheme

でべすてーてぃん、でべすてーてっ ←不況とか解雇とか自然災害とか悲惨な状況でよく言ってた。…devastate

みりとぅんつ ←なんか物騒な人々と戦ったらしい。…militant

じぇぺでぃー ←なんかやばい時とか?…jeopardy

リスニングに慣れたけど残ってる問題

はっきりと喋ってくれる人、人前で話すことに慣れてる人の話は聞き取れるけど、一般人のボソボソした話は分からないこともある。

聞き取ることに問題は少しずつなくなってきたが、しかし全然喋れないまま。語彙が少しずつは増えてるけど自然に口からは出てこない。

あと、聞けるスピードに比べて文字を読むのがすごく遅い。Webで記事も合わせて読むといいかもしれない。

また面白いの見つけたら書こうと思う。

http://anond.hatelabo.jp/20091004151031

2009-05-21

http://anond.hatelabo.jp/20090521125529

横だけど、a+biって複素数の表記を使える言語があるんだよ。

例えばSchemeがそう。

文法上iと言う名前変数複素数の構成要素としてのiは区別されてるんで混乱はないだろうけど。

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