東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

答えられない…orz

デブサミ初日、主催である翔泳社さんの懇親会が終わって、新宿で待ってるわんくま達と合流。
沖縄居酒屋で呑んでました。僕は酒に強くないのでひたすら「さんぴん茶」でしたが。
# 「さんぴん茶」=ジャスミン茶。
# 台湾ではジャスミン茶を「香片(しゃんぴん)茶」と呼んでます。
# これが沖縄/石垣に渡り、訛ったものっす。

この席でなおこ(・∀・) さんに「C++の学び方」を問われたのですけど、
テキトーにお茶を濁してしまいました。
僕が答えずに誰が答えるよ!? なのに、申し訳なく思ってます。

答えられないんですよホント。
僕はC++が産まれてまもなくの頃からC++やってて、当時のC++はトテーモ単純。
Cわかってりゃどーてことのないシロモノでした。
そんなシンプルなC++から始めて、少しずつ進化していく言語仕様の差分を
積み重ねて今に至るわけでして。

んなワケだから「C++ってどうやって勉強すんの?」と訊かれても答えに窮するのです。
僕と同じことはやれないんだし、ン十年かけるわけにもいかんのだし。

いくつかアドバイス(ちゅーのもおこがましいけど)できるとすれば:

・ 表紙に"Visual"って書かれていない教本を選ぶべし。
・"三日でわかる"/"一週間でバッチリ"には注意。
 "三日でわかる"本は三日分の内容でしかない。
・基本はコンソール・アプリ。UIの絡むものは別扱いにすべし。
・覚えるな。理解せよ。(ムズカチー)

これらはどんな言語にもあてはまるんですけどもね。
知ってる言語(なおこ(・∀・) さんならVBか)との対比で理解するのがわかりやすいかも。

[追記] でぶさみ会場でひろえむさんにも似たよなこと訊かれたです。
「オススメのC++本は?」って。これにも答えに困るです。
本でおベンキョしたのは90年前半くらいまでで、近頃の本はほとんど
買って/読んでないっす。読んだにしてもC++文法/構文に絡むのは皆無。
ある程度わかってきたら「Effective C++」あたりかなー程度のことしか
言えませんです。

投稿日時 : 2007年2月17日 23:34

コメントを追加

# re: 答えられない…orz 2007/02/18 0:02 匿名

>・覚えるな。理解せよ。(ムズカチー)

「理解」って何ですか?

-Yahoo 辞書より引用 ここから-

1 物事の道理や筋道が正しくわかること。意味・内容をのみこむこと。「―が早い」

-Yahoo 辞書より引用 ここまで-

「意味・内容をのみこむ」って結局覚える事じゃないんですか?

覚えた事が無意識に出てくることが、「理解」した事になると思います。
例えば、50音だって「し」の次が「す」って考えないと出てこない人は、まずいないと思います。
特に意識しなくても自然に出てくるものだと思います。

「理解」は所詮「覚える」ってことかと・・・

# 「理解」って言葉は曖昧だなと思う昨今

# re: 答えられない…orz 2007/02/18 0:04 匿名

「理解」という言葉を理解してる人はどれくらいいるのかな・・・

# re: 答えられない…orz 2007/02/18 0:12 επιστημη

>「意味・内容をのみこむ」って結局覚える事じゃないんですか?

そーかもしれない。でも違うと思う。
理解してれば覚えにゃならん量を少なくできる。
単なる記憶では類推できんから。

# re: 答えられない…orz 2007/02/18 1:04 匿名

>理解してれば覚えにゃならん量を少なくできる。

理解した == 頭に入った == 記憶した(覚えた)

「Aということを理解した」としたら、その理解した内容は「覚えてる」
という事にならないでしょうか?

A の事柄に対して、時間を掛けてあらゆる情報を記憶してるにすぎないと思います。

A の事柄に対して、記憶してる情報がゼロの時、類推は不可能だと思います。

学生が試験前によくやる丸暗記とは少し違います。

短時間で10の事を覚えるの(丸暗記)と長時間で10の事を覚えるの(理解)では、その情報を頭の中に維持しとける時間が違う。
頭の中に維持しとける時間が(経験)長ければ長いほど、その記憶は
「理解」に近いものだと思います。

# 屁理屈と言われればそれまでですが・・・

# re: 答えられない…orz 2007/02/18 1:14 επιστημη

学びて思わざれば則ち罔(くら)く、
思いて学ばざれば則ち殆(あやう)し

ってことでえぇですか?

# re: 答えられない…orz 2007/02/18 18:46 シャノン

プログラミングって知識じゃなくてセンスだよね、と思う。
まぁプログラミングに限らず何事にも言えることではあるし、「俺はセンスがいい」と言うつもりはこれっぽちもないんだけれども。

# re: 答えられない…orz 2007/02/18 19:19 ghost_shell

差分プログラミングならぬ差分学習ですか。いいですね。

> 僕はC++が産まれてまもなくの頃からC++やってて、当時のC++はトテーモ単純。

昔のC++はC#1.0以上にCプログラマ向きだったんでしょうね。


・・・違ったらごめんなさい。
(そもそもC→C#のとっつきやすさには個人差があるか。)

# re: 答えられない…orz 2007/02/18 20:13 かずくん

>「オススメのC++本は?」って。これにも答えに困るです。
(snip)
>ある程度わかってきたら「Effective C++」あたりかなー程度のことしか言えませんです。

本じゃないけど、力がつくのは手になじむクラスライブラリと格闘することではないかと。
格闘していてわからない箇所を入門書やEffective C++で理解力を深めると。

# re: 答えられない…orz 2007/02/18 21:17 Gushwell

>理解してれば覚えにゃならん量を少なくできる。
>単なる記憶では類推できんから。

これ、よく分かります。
僕も、新人君に、覚える必要はない、理解しろって良く言います。
もちろん、最低限のことは覚えないとダメですがね。

# re: 答えられない…orz 2007/02/18 23:21 おにあく

覚えるな、理解せよ、の気持ちはよくわかります。文法をぎちぎちに覚えていくことよりも、やってみて現象から学ぶ、というやり方がすんなりいくかと。(試行錯誤の連続に耐えられるかどうかは学ぶ人の気持ちに依存しますけどね)
理解していると知識を知恵に変えられるってことだと思います。

すんなり読める本じゃないけど、C++をやってみたいなら、C++ Primerくらいは目を通してみては、と思います。

その前に、構造化プログラミングの基礎をおさらいすることをおすすめするのがいいかもしれません。

王道なんてないですからね。どのみち。

C++のコードをプリプロセッサがCのコードに変換して、そのコードがコンパイルされて、ライブラリと結合して実行形式ファイルができあがる、といったそもそもの出発も知って欲しいかも。

悩ましい。

# re: 答えられない…orz 2007/02/18 23:45 επιστημη

言語を問わず、「ふっきれる」瞬間があるのよね。
それを境にぱぁっと目の前が明るくなるよな。
この瞬間が訪れる前に挫折する方が少なくないのが残念です。

ライブラリを読むのは力がつきます。
文法に慣れたら是非、動きを知ってるライブラリを読んで欲しいす。

# re: 答えられない…orz 2007/02/19 7:42 ひみつ

> 理解した == 頭に入った == 記憶した(覚えた)

必要条件と十分条件の違いですよね。

# 「分解」せよ! 2007/02/19 10:17 .COM -どっとこむ-

「分解」せよ!

# re: 答えられない…orz 2007/02/19 10:19 NAO

大学時代はFORTRAN(Cなんて無かった)→大体年齢がばれる(w

なので就職してからCを覚えた人間が来ましたよ~
アセンブラもどっちかというと就職してから(ぉ

組み込みやるとそれら2つって必須なんですよね~
で、Cの構造体からクラスの概念は意外と簡単に
理解しましたけど。

#最初につまずくのはポインタだな…やっぱ(w

なのでC#とかVBとかああいったクラスの概念の
延長で出来てる物は意外と簡単に見えたりします。

# re: 答えられない…orz 2007/02/19 11:37 とっちゃん

理解=もののことわりをときあかすこと。ですよね?
記憶とはちっと違うのではないかと。

どれかのプログラミング言語を理解できていれば、他の言語を学ぶのはそれほど苦労はしないはず。

より新しい言語からより古い言語を学ぶって場合は、また違った難しさがあるようにも思うけどw

επιστημηさんほどではないにしても、ほとんど差分だけ学んできた人だからなぁ(^^;

言語の勉強はその言語の歴史をなぞることに他ならないと最近思うようになってきたw<それだけじじぃになったってことか...orz

# re: 答えられない…orz 2007/02/19 12:53 kirapa

>>理解してれば覚えにゃならん量を少なくできる。
>理解した == 頭に入った == 記憶した(覚えた)
>「Aということを理解した」としたら、その理解した内容は>「覚えてる」
>という事にならないでしょうか?
理解するのに覚える事と、記憶するのに覚える事はイコールではないのでは?

ここでいう理解とは、何故そのように記述するかをわかるということだと思う。
結果だけを覚えても応用がきかない(例えば変数名や改行の位置が変わるだけでわからなくなるとか?!)
理解した事は、次の新しい事を理解する時に再利用できるので、結果、「覚えにゃならん量を少なくできる」ってことでしょう。

# ソフトウェアテストに見立てます 2007/02/19 14:23 nagise

私は理解しないといけない事象を関数にみたてていますね。

「理解」している人はいろいろな「問い=パラメータ」に対し適切な「答え=return値」を返します。
「覚えている」という状態は、問いと答えの組み合わせを幾つか記憶しているにすぎません。

設問はプログラムのテストの際と同様に、カバレッジが十分である必要があります。
境界値付近ではバグが出やすいので注意してテストする必要があります。

ただし、あくまでブラックボックステストなので、内部のアルゴリズムが適切なのかはわかりません。
仮に、関数の中身が膨大な記憶領域を使用して問い->答えのハッシュテーブルを持っているだけだとしても、ブラックボックス的には検出できません。

そこで、ソースレビューを行うわけですが、実施の方法としては該当関数が未実装の人相手に実装させるというのがよいと思っています。
(つまり、他の分かっていない人に教えさせるわけですな。)

こういったテストケースに対してチューリングテストをクリアするレベルで実装されているならば「理解している」と見なしています。

# re: 答えられない…orz 2007/02/19 20:19 Jitta

> ・覚えるな。理解せよ。
 覚えることより理解する方が難しいよ。
覚える:
1 記憶にとどめる。記憶する。「相手の名前と顔を─」「あの時のことは今でもよく─・えている」「この本を彼に返すことを─・えておいてね」「〔捨てぜりふで〕ようく─・えておけ(=仕返しは覚悟しておけ)」 「憶える」とも。
2 学んで身につける。体得する。「運転を─」「コツを体で─」「酒の味を─(=知る)」「犬が芸を─」
3 ある感情や感覚を感じる。「新しい仕事に生きがい[とまどい]を─」「親しみ[怒り・興味・のどの渇き]を─」

理解する:
1 物事の道理がわかること。意味・内容などを正しく判断すること。「文章[日本語・年金制度]を ─する」「─が早い」「何を意図しているのか─に苦しむ」「─力」
2 他人の立場や気持ちをくみとること。「 ─ある態度を示す」「生徒に─のある先生」
(明鏡国語辞典より)


 ひとつのことを、そのまま繰り返すことが出来るのが「覚える」。ひとつのことを、応用して使用できるのが「理解する」。
 単に「丸呑み」するのではなく、「よく噛んで、よく味わえ」。字面を追って、字を覚えるのではなく、何を説明しようとしているのか、その意図をつかめ。

 「覚えるな。理解せよ。」というフレーズでは、このような意味を指して用いている人が多いですね。


> ・ 表紙に"Visual"って書かれていない教本を選ぶべし。
> ・基本はコンソール・アプリ。UIの絡むものは別扱いにすべし。
同感。UI が絡むと、MFC 等を使わないといけないから。これを「C++ の一部」と思ってしまうと、もうダメ。

# re: 答えられない…orz 2007/02/20 11:49 刈歩 菜良

> ・基本はコンソール・アプリ。UIの絡むものは別扱いにすべし。
まったくもって同感ですね。
JavaもC#もきちんと学ぶのであればコンソールアプリからが基本だと思います。
VBも本来はそうなんですが、歴史的に言ってまず受け入れられないんですよねぇ(経験者は語る(^^ゞ)。
#理解への早道だし、力つくのに...

# re: 答えられない…orz 2007/02/20 15:21 επιστημη

うん。
同様に「テキストエディタとコマンドラインで、まっさらの状態からIDEの助けを借りず"全部"のコードを自分の手で打ってみな」ってゆーんですけどね。
そうすれば"なんかわからんけど動いちゃったー"てのがずいぶんと減るんだけどな。

# re: 答えられない…orz 2007/02/20 16:58 刈歩 菜良

そうそう、
みんなでVimつかおう!!(って、違っ

C#のスタートポイント(って言い方あってるのかな?)がMainメソッド(Mは大文字)って知らない人も結構多いのでは...
Winアプリだって実はMainメソッドの中でApplication.Runしてたりする。
# ま、これはどちらかというとどうでもよいことですが... (^^ゞ

オーバーごくまーぐらいでメモ帳でWinアプリ作ってみるとか。
# 実務的には何の役にも立ちませぬが、おもしろひと思ひまする。

# re: 答えられない…orz 2007/02/21 16:34 NAO

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

}

(-。-) ボソッ

# 三度出航、そして難破/遭難、そして沈没 2007/04/20 13:11 AQUA's .NET 奮闘記

三度出航、そして難破/遭難、そして沈没

# 三度出航、そして難破/遭難、そして沈没 2007/04/20 13:14 AQUA's .NET 奮闘記

三度出航、そして難破/遭難、そして沈没

タイトル
名前
URL
コメント