パスワードを忘れた? アカウント作成
1388 story
プログラミング

これからプログラミングを覚える人にお勧めの本は? 194

ストーリー by kazekiri
はじめての○○ 部門より
flame 曰く, "プログラミングの経験のない人から 「プログラミングを覚えたいんだけど、どんな本を参考にするといい?」 と聞かれたら、どう答えますか? プログラミングの楽しさとセンスをうまく身につけられるような本、 教えてください。私は 「初めてのPerl 第2版」 を薦めていますが、みなさんならどうでしょう?"
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 最初だと (スコア:5, 興味深い)

    by Anonymous Coward on 2001年10月27日 20時49分 (#33124)

    まず、ここは「言語」を選んでいるのじゃなくて「書籍」はどれがいいの?というのが質問の趣旨だよね。まずはそれをお忘れなく。

    最初に学ぶ言語によって、その人のプログラミングのスタイルや、ひいては今後どの分野に進むか、ということが決まることもある。もちろん、絶対そうなる、ということではないけれども。

    たとえば、アセンブラから学んだ、という人はハード寄りの環境を扱うわけで、ハードの分野とかかわりのある仕事をする確率が増える、ということもあるかもしれない。

    だから、「これからなにをしたいと思ってプログラミングを学びたいと思っているのか?」ということは、最初に学ぶ言語を選ぶときに、けっこう大きなファクタだと思う。

    だから、職場や指向している仕事によって、あるいは趣味によって、「最初の言語」は変わるのではないか、と思う。

    最近、若い人たちがよく「ネットワーク関連の技術を学んで...」なんて言うのをよく耳にするから、「ネットワーク言語みたいなキャッチフレーズの新言語を作ると売れる可能性もあるね。.NETとC#はそれを狙っていたんだろうね。もっとも、そこにはJavaという「先客」がいたし、肝心のM$の「ネットワーク技術」に疑問符がつきっぱなし、という不幸があったから、そう簡単に「その座」にはつきにくいと思うが。

    自分の経験から言えば、最初に学ぶ言語は、なんでもいい。どんなところにいても素質と能力のあるやつは、それをこなして自分のものにして、そこを窓口にどんな他の言語にも行くことができるから。ただ、中途半端にはじめて、中途半端に終わるのはまずいね。そういう意味で、最初に触る言語には、ちゃんとした「書籍」とか「先輩」が必要です。

    で、書籍だけど、プログラミング言語によって、書籍も変わっちゃうわけなので、言語のお話になっちゃうような気もします。だから、

    1.まず、必要な言語(やりたいと思っている言語)を選ぶ。とりあえずなんでもよい。
    2.その言語の解説書で、自分が気に入ったものを選ぶ。

    でいいんじゃないでしょうか?上にも書いたけど、能力や素質のある人は、そこからいくらでも伸びますし。

    概要的なものや考え方を学ぶ、という本は、やはりある程度プログラミングというものがわかってから読むべきと思います。

  • あえて言う (スコア:5, 参考になる)

    by SteppingWind (2654) on 2001年10月27日 22時31分 (#33164)

    システム屋としての発想ですが, 本当にプログラミングが必要ですか? というところからヒアリングし直さなければ適切な指導はできないと思います.

    ここでは知人から「プログラミングしたい」という話が来たわけですが, この段階で考えられるシチュエーションとして

    • 仕事か何かで必要になった
    • 単なる興味

    に大きく分けられると思います. 前者なら問題が解決できれば良いわけで, 単にその知人が無知でプログラミングしなければ解決できると思い込んでいるだけかも知れません.

    後者だとしても, その人の資質, 興味の対象等によって推薦するべき書籍は全く変わってくるでしょう.

    どうも技術者というのは(私を含めて)他人が自分と同じ興味を持つものだと考えがちです. ですから, ここではもう一度仕切り直して, XXの目的なら書籍YYが適しているという形で推薦してみたらいかがでしょうか.

  • 言語の文法よりも (スコア:4, すばらしい洞察)

    by gori (3642) on 2001年10月27日 21時32分 (#33141)
    私の経験では、「プログラミングを学びたい」という言い方をする人は、プログラミングとはどういうことかを知りたい場合が多いと思います。
    そこで求められるのは、Hello worldを表示させる方法ではなく、チューリングマシンの考え方であったり、I/Oモデルであったりと言った、コンピュータものの考え方ではないかと思います。
    こういったあたりから解き明かした良書があれば、それをお勧めしたいんですが、残念ながら知りません。
  • 和書は全部ボツ (スコア:4, 参考になる)

    by brake-handle (5065) on 2001年10月27日 21時38分 (#33145)

    プログラミングを勉強する時に必要なものというと、

    • 言語仕様
    • アルゴリズム

    の2つがあります。しかし、残念ながら和書でいくつか思いつくものを調べてみると、多くは前者しか扱っていません。このため、プログラミングを覚えた気になってみても、いざ問題を解こうとするとモデル化がうまくできないという壁にぶち当たってしまいます。

    洋書ですと、両者をともにカバーし、かつそれだけできちんと完結している本がいくつかあります。私は高校の頃に"C: The Complete Reference Second Edition"(Hilbert Schildt, Osborne McGraw-Hill)で勉強しました。この本は以下のような5部構成になっています。

    1. 言語仕様
    2. 標準ライブラリ
    3. アルゴリズムとアプリケーション
    4. ソフトウェア開発
    5. 新しい指針

    本自体は1990年発行なので、今となっては古い内容もあります。しかし、言語仕様の大枠は今でも使えますし、アルゴリズムについても

    • ソート、サーチ
    • キュー、スタック、連結リスト、木
    • スパーズな配列
    • 式のパージング
    • グラフと木探索

    というように、今でも問題を解くための道具として使える概念が解説されています。また、例題を元にして、打ち込めばすぐに動くプログラムを数多く掲載しています。これらを使えば、自分の手を動かして動作を確認することもできます。さらい、各種アルゴリズムについて計算量を示し、実際の応用におけるアルゴリズムの評価まで含めて役立てることができます。

    最近の言語は言語仕様自体がかなり複雑なデータ構造を内蔵しているため、アルゴリズムの選択は以前に比べて容易になっているはずです。しかし、出版される本(特に和書)がそれらを全て言語仕様としてしか見ていないことには危機感すら覚えます。

  • 日本ではいまひとつのPythonだけど、Pythonチュートリアル日本語訳がオススメです。PDFをそのまま印刷して移動中に読んでいました。

  • by Anonymous Coward on 2001年10月27日 20時21分 (#33118)
    sed & awk プログラミング 改訂版はとてもわかりやすい本です。

    sed と awk は本格的なプログラミングじゃないぞ!とお叱りになる方もおられるでしょう。
    ごめんなさいねほんとに。

    実は私まだプログラミングできませんがそれに準ずるものではあると思うんですね。
    覚える事が少ないし、どういったものか大筋でわかるようになるので。
    ステップアップとして

    sed > awk > perl & python & ruby

    と移っていくのが良いかと。全部スクリプトだね。
    #あっ 自分のステップとしては awk の次に bash シェルプログラミングが入る予定だけど。

    まったく学んだ事がないのですが、初めからC言語を学ばせようとするのはどうなんですかね?
    難しくてもメジャーな言語を最初に学ぶ事を強く推奨している人を
    Web 上でよく見かけるんですが。
    メジャーだから最初に学べというのは考えが稚拙すぎないでしょうか?

    C はコンパイルしないと動いてくれないんでしょう?
    値がすぐ却ってこないのは初学者には酷だと思うんだけど(実感として私もそうだし)。

    -- yuzo --
  • by ejusun (3366) on 2001年10月27日 20時55分 (#33128) ホームページ
    絵が出ると、初心者の方は喜ぶようなので、POV-Ray と言ってみたりして。
    本だと、POV-Ray ではじめるレイトレーシング とか。

    ええと。
    Java とか、Ruby とか勧めたいんですが、本は買ったけど全然読んでなかったりするので。
    POV の本も、一章くらいしか読んでないけど。
  • まず・・・ (スコア:3, 参考になる)

    by take0m (4948) on 2001年10月27日 21時15分 (#33135) 日記
    仕事で、プログラミング教えています。

    プログラミングという行為を続けるかどうかを判断するということを考えると、

    ・その言語系に特有の知識が必要ではない
    オブジェクト指向とか、正規表現とかがすぐに登場するような言語は控えるようにしています。

    ・プログラミング環境をインストールする必要がない
    OSを入れなおしたり、フリー・有料に関わらず、何らかの環境を構築しなければならないというのは、ハードルが高いと思われます。

    ということから、まずLinux環境は最初に除外しています。それと、PerlやJava、C++なども除外しています。

    一番手っ取り早いところで、ブラウザさえあれば使えるJavaScriptと、Officeが入っていれば使えるExcelのVBAをやらせています。

    と言うわけで、JavaScriptかExcelVBAの入門書をすすめています。これらができないとか、続かないようだと、Javaなんてさらに辛い道のりだと思いますので・・・
  • 結局は (スコア:3, 興味深い)

    by hmr (4234) on 2001年10月28日 4時18分 (#33248) 日記
     最初はなんだっていいとは思うんだよね。俺自身もN-BASICからはいった。だってそれ以外なんてなかったから。それなりに勉強にはなった。コンピュータプログラムってのは条件によって分岐することで複雑な処理を可能にしているわけで、そのへんはどの言語でも一緒だから。
     で、当時8ビットパソコンいじってた人はみんなそうだと思うけど、速度が足りないからアセンブラに突入(もちろんゲーム作るため)。あたりまえだけど、機械語でプログラムを書くためにはコンピュータの構造を知ることが必要になる。これもいまでも役に立ってる。コンピュータ(と一括りにしていいのかはわからんが)の基本的な構造は今も昔もそんなに違うわけじゃないから。昔のコンピュータにはこういうこともマニュアルに一応記載があったから、あとはトライアル&エラーでどうにかなった。
     その後はもちろんCをおぼえたんだけど、その時いちばん混乱したのはポインタじゃなくて関数って概念そのものだった(藁。コンピュータの構造は一応わかってたので、ポインタはなんなくわかったけど、関数ってのはそれまで知らなかったもんでさ。

     話が長くなってしまいました。言いたいことはさ、どの言語からはじめるにせよ、コンピュータの構造とかそういったプリミティブなことからは逃れられない。そういうものが巧妙に隠された高級言語ってのは大したことができないか、遅いかどっちかだ。コンピュータ言語にとって汎用性は大事だし、コンピュータプログラムにとって速度は最も重要なファクターの一つだ。だから、本当にコンピュータをやりたい初学者にはそれらを満たす言語を薦めるべき何じゃないかと思います。

     となると、一般的にはCかなあ。教科書はもちろんK&R。理解できない部分があれば、それを補う参考書として、その部分が詳しい他の本を買えばいい。
     もっと根性あるなら、PC-8801mk2 SRあたりの8ビット機。サウンド機能もグラフィック機能も一応あるし、それらをBASICから叩けるし、(逆)アセンブラも一応ある。それに壊れない。
  •  プログラムというのは、つまり「○○を××しなさい。もしも@@だったら##すること。」ということを計算機に実行して貰うための命令書だ。であるから、まずはその命令を、少なくとも自分にとってわかりやすく表現し、理解する必要がある。そのときに必要なのは計算機や特定のプログラミング原語の知識ではなく、単に物事を考えまとめる技術と知識、少し言い過ぎかもしれないが常識だ。

     物事をいきなりプログラミング言語で考えろということは初学者には無理な話であるから、まずはどのプログラミング言語でも必要になるであろう数学的知識と、自身が物事を考えるために必要な日本語(母国語)のレベルアップを行うべきであろう。

    #日本語や数学の勉強から始めなければいけない人はほとんどいないと、信じたいが…
    --
    char *A;
    モータースポーツ部 [slashdot.jp]
  • C言語は重要な位置にありますが、最初にやるべき言語と言うわけではないですし、ポインタ等で挫折する人も少なくありません。「ハッカーになろう」で最初に覚えるといいとされているプログラミング言語は、PythonかJavaです。

  • > C はコンパイルしないと動いてくれないんでしょう?

    Cint というインタプリタがあります。

    ということで、「何の本を勧めるか」の前に、「何言語を勧めるか」というのがあると思います。
    sed を勧めてますが、いきなり正規表現は難しくないですか?
  • by rug (55) on 2001年10月27日 20時46分 (#33123) 日記
    前にも 「図書館に置かれるべきComputer Booksは?」 というのがありましたよね。やはり、ここで挙げられている本がおすすめではないかと。

    あと、本もいいですけど、いろいろなソースコード、とくにOpen Source Softwareのそれを読むことが重要ですよね。というか、 本だけだと教条主義に陥りかねないような気がします。最近はいろいろな分野にOpen Source Softwareが進出しているし、いい時代になったものです。
  • by moriwaka (89) on 2001年10月27日 20時53分 (#33126) 日記
    親コメントはPython 1.5.1のチュートリアルですが、
    Python 2.1のチュートリアルが、
    Python Documents 日本語翻訳プロジェクト

    和訳されているので、紹介しときます
  • by rug (55) on 2001年10月27日 21時07分 (#33133) 日記
    C はコンパイルしないと動いてくれないんでしょう?
    Hello World程度なら大した手間じゃないと思いますが...

    で、ソースファイルの数が増えてきたらmakeの使い方を覚えましょう。Makefileを書くのがだんだん面倒になってきたらautomakeの使い方を覚えて楽をしましょう。
  • いちおし (スコア:2, 興味深い)

    by bugbird (4706) on 2001年10月27日 21時11分 (#33134) ホームページ 日記
    ワインバーグの 「ライトついてますか?」

    でしょう。この本を読み、そこに書かれているものの見方、考え方の重要性がすんなりと理解できない場合は、プログラム方面の業界を職場とするのはとっても不幸な選択だと思いますよ。

    能力の問題じゃないよ、あくまで適性の問題よ > 為念

    --
    --- Toshiboumi bugbird Ohta
  • の和訳をこの間読みましたが、純粋オブジェクト指向の甘い罠ですね。「初学者こそプログラミングの楽しさを学んで欲しい」という意味でこれ以上の本はないと思いますが、かといってこれが当たり前になるとJavaはおろかCすら使ってられないと言うことになりかねません。

    やはり最初に勧めるのはスクリプト言語だと思いますので、Lerning Perlも賛成です。Pythonはちょっと日本語ドキュメントが不足していると感じているのでRubyのほうがよさげでないかと。

    VBは・・・「プログラミング」のために今から始める必要は何もないと思います。「仕事」ならともかくね。

  • 古典 (スコア:2, 興味深い)

    by paprika (5024) on 2001年10月27日 21時26分 (#33138) 日記
    「UNIXプログラミング環境」には,UNIX入門,シェルスクリプト,そしてC言語へと,たいていのことは書いてありますね。これに代わる本が出ていないと言っている人もいるくらいですし。でも,なんだか入手困難になりつつあるようです。
  • sed を勧めてますが、いきなり正規表現は難しくないですか?
    sed & awk は「たのしいUNIX」(ISBN4-7561-0785-0)を読んで 覚えましたが、そんなに難しいという印象はなかったですね。

    でも、いきなりPerl5の拡張正規表現から入るとしたら、話はまた別でしょうが。
  • Debianユーザの場合は、acroreadと、acroread-asianfontが必要です。また、fontのtarballは、AdobeのFTPから フォントファイルアーカイブをroot所有のパーミッションで、/tmpに置いておく必要があります。ちょっと面倒ですが我慢。

  • by yasusii (125) on 2001年10月27日 21時51分 (#33149) ホームページ
    元ネタから話がズレちゃうけど、 From Logo to Python in Two Decadesなんて記事を見つけました。ご参考まで。
  • JavaScriptは動いているところがそのまま伝わって来るので、オススメかもしれません。クセが強いのが難点ですが。

    ブラウザさえあれば使えるJavaScript
    など、環境の構築が不要という点も大きいです。が、ちょっと複雑な処理になるとブラウザ間で仕様がかなり違って来るので、ブラウザ間の差異を吸収できるようにする訓練にもなってさらに効果が出て来ます。(いいんかこれは)

  • by rug (55) on 2001年10月27日 21時54分 (#33151) 日記
    そんな事言うから初心者が遠のいていくわけですが…
    まあ、初心者に限らず道具の使い方を覚えるのが億劫に感じる人はいます。無理に覚えろとは言いませんが、でも楽をするための道具ですから、いずれは覚えておくべきだと思います。

    なんなら、autotoolsやCVSなどの導入事例も示しておきますかね。
  • sedとかawkは、正規表現を知らなくても、単純な検索や置換はできるので、問題視するほどでもないと思います。使ってもいないのに難しそうだからやらない、だといつまでたっても成長しませんよ:-p

  • なんだかそれじゃあ学生時代のクラブ活動勧誘みたいかも...

    言語仕様とアルゴリズム、および書法は切り離して考えられるので、この言語じゃないとダメってわけじゃないですけどね。

  • Re:K&R C (スコア:2, おもしろおかしい)

    by oku (4610) on 2001年10月28日 0時05分 (#33179) 日記
    それは「千尋の谷から這い上がって来い」と言うことですか? :-)
  • by yasubei (6188) on 2001年10月28日 1時24分 (#33203) 日記

    おもしろいですけど、真に受ける人がいるかもしれないのに。

    POV-Rayは好きですし、確かにプログラム的な部分はありますけど、プログラミングの入門としては間違いすぎでしょう。
    POV-Rayをプログラム言語的に使いこなすには結構数学的能力がいるんじゃないかと思います。私は使いこなせてないんでよくはわかりませんけど。
    3DCGについても深く理解しないといけないし、明らかにマニア向けです。
    しかも見た目がCっぽいだけで他の言語に応用効きません。

    逆に、一般的なプログラミングには飽きたというようなマニアな方々には特にお勧めできますが(笑)

  • by might (194) on 2001年10月28日 1時56分 (#33216) ホームページ
    > その友達曰く、「この本を理解できたらCはバッチリ」ということだったので、当時は必死に理解しよう
    と頑張ったものです。
    だそうですが、本当に「Cはこの本だけで覚え」た貴方は「この本を理解できたらCはバッチリ」と思われました?

    私見だが、K&Rは辞書として使うべきではないかと。…もちろん標準ライブラリの一覧のところね。

    はっきり言ってK&R(邦訳)は読みづらい。この本は「Cをやっている」とアピールするためのバイブルだと考えたほうが良い。少なくとも「これからプログラミングを覚える人」向けの本ではないと思う。

    では何を読むべきか。私だったら「入門」と冠していて、薄っぺらい本であれば何でも良いと思う。
    とりあえずその本を一通り理解できたら、その本はさっさと捨てて、まともな解説書なり良質なソースを読み漁れば良い。

    ちなみに(その意味での)私個人のお勧めは、藤原さんの「Cプログラミング診断室」と「Cプログラミング専門課程」と、技術評論社から出ている丸々一冊ポインタの本。(タイトル失念)

    特に診断室はお勧め。人は成功から学ぶべきではく、失敗から学ぶべきなのだから、このソースのどこがどう悪くて、どう直すべきかを示したこの本の存在は貴重だと思う。自称「中級者」は絶対読むべし。そして「C言語中級レベル認定問題」の回答が浮かぶまでは「中級者」を名のるべからず。
  • by muraken (2830) on 2001年10月28日 3時17分 (#33236)
    MSX FAN のファンダムですね. これがなかったら, プログラムなんか作れてないです.
    --
    Kenta MURATA
  • Re:OOSC (スコア:2, 参考になる)

    by G7 (3009) on 2001年10月28日 3時19分 (#33237)
    >オブジェクト指向とか難しい事は考えない楽しい言語環境がいいのでしょう(手頃な関数型言語とか)。

    うーん。別口でも書いたけど、なんでミンナ(^^;、OOPイコール難しい、と呼びがちなんだろう?
    どこがそんなに難しいんだろうあれ?
    少なくとも関数型言語と比べて難しいってのは激しく違和感あるんですけど…
  • by G7 (3009) on 2001年10月28日 3時53分 (#33241)
    重要な揚げ足を取らせてくださいm(__)m

    >その言語系に特有の知識が必要ではない
    >オブジェクト指向とか、正規表現とかがすぐに登場するような言語は控えるようにしています。

    ええと?OOPや正規表現って、「その言語系に特有」の知識ではなく、今や結構広い代物ですけど?

    #「OOってそんなに難しいか?」という疑問が(^^;

    >プログラミング環境をインストールする必要がない
    >OSを入れなおしたり、

    gccと叩くだけで動きます(Cが適切な言語とまでは強弁しませんが(^^;)し、
    OSについては聞くところによるとフロッピー一枚+LANケーブル一丁あれば
    全自動で(予め用意した一台のサーバーから)リモートインストールをするなんていう芸当も出来るそうですから、

    >Linux環境は最初に除外

    少なくとも貴方が示した理由は、Linuxを除外する理由としては、ちと不適切かと思います。

    >Officeが入っていれば

    Officeのインストールを誰がやるんでしょうか?(^^;

    そういやMLD Linuxなんてなものもありますね。
    あれのInstallはOffice以上に簡単ですぜ。
    なんせ選択肢が超少ないですから(^^;;;;
  • by brake-handle (5065) on 2001年10月28日 9時00分 (#33269)
    言語はそれらのライブラリを実現できるようにするためのメタ機能を提供してる「だけ」です。

    この論法は、わからない人にはいつまで経ってもわかりません。オブジェクト指向の落とし穴は、言語とライブラリの区別がつかない、すなわちシンタクスとセマンティクスの区別がつかない(そして両者の境界が自由に動くことがわからない)ままにそれらを切り離すことを強制されることにあります。

    これは難しい問題です。なぜなら、これはそれなりの教育を受け(主に言語理論)、かつプログラムを書いた経験がある人(少なくともジェネリックプログラミングが必要になるぐらいにコードの使い回しにおける傾向を学んだ人)でなければ正しい理解ができないためです。したがって、これからプログラムを覚えようとする人にとっては、「タマゴとニワトリ」問題が生じてしまいます。

    また、モデル化というと現実をやみくもに形式化することだけが叫ばれています。これは誤った方法論です。というのは、モデル化の目的は、あくまでモデル上で問題を解くために何らかの計算を行うことにあります。したがって、どのような計算が可能なのか、そしてそれはどのようなモデルの上で可能なのかを並行して議論しなければ、問題を正しく解くことはできません。例えば、グラフによりモデル化する場合でも、問題が2部グラフの計算で解けるか否かはグラフのトポロジや計算量のオーダに影響します。これらは具体的な実装や実行時間など、目に見える形で跳ね返ってきます。

    オブジェクト指向がシンタクスとセマンティクスを切り離すのは、あくまで仕様に縛られず、問題に最も適切なセマンティクスを選択するためです。それを切り離されたものは勝手に別々に作ればよいと誤解しているがために、計算が面倒なモデル化が独り歩きする現状が生じてしまいます。

  •  関心を育てる、こんなものをプログラミングしたい、という意欲を湧かせるために、私は、
    「日経サイエンス別冊 コンピュータレクリエーション #1~4」
    の4冊を薦めています。
     需要なのは、手段ではなく、目的を与えることだと思うのです。その為にも、フラクタル、カオス、ライフ、人工生命といった、ウケそうな話題から入るのが良いかと。薄く大判の本ですし、基本的には読み物ですし、コード例はわかりやすい擬似コードですし、本当に初心者向けの記事もあります。

     本当のところ、手放しで推薦する本、”これ読んでおいて”だけで済む本は、今のところありません。
     初心者向けの本には、
    • 簡単なコーディングで成果が得られること
    • ”呪文”を要求しないこと
    • ビジュアルにその成果が見えること
     といった要素が必要だと思います。
     初心者にコーディングの楽しさとか美しさとか云々したって意味無いです。それより、自分の書いたプログラムが動く、その喜びを知ってもらいましょう。
  • タイトルが切れてしまった。後半は
    中学生レベルの算数・数学の参考書
    である。
    --
    char *A;
    モータースポーツ部 [slashdot.jp]
  • でもまあ、最終的に必要なのは、本よりも生身のプログラマー友達だと思われ。
    同感だが、
    #まさしく百聞は一見にしかず。
    この諺をそのまま受け取ると、アプリケーションとそのソースコードがあれば友達に訊く必要はないという解釈にならないか?
    --
    char *A;
    モータースポーツ部 [slashdot.jp]
  • 翔泳社
     独習シリーズ
     10日で覚えるシリーズ
    は入りやすいと思う。

    実際に手を動かしながら読み進めることで、自分が組んだ(と言っても書いてあることをなぞる程度だけど)プログラムが動くことを実感できて、プログラムを組むことの楽しさを感じ取ってもらえるかも。
    # それで騙されてプログラマとして飯を食うようになると後で苦しむ?

    将来プログラマになるかシステムエンジニアになるかでその先の勉強の仕方は変わると思いますが。
  • by ghost (6328) on 2001年10月28日 12時43分 (#33304)
    必要に迫られるなどして嫌々プログラムを学ぶ人ではなく、
    どんな理由であれ意欲的に学ぼうとしている方へのアドバイス:

    書籍とは別のアプローチとして初心者の方へ助言したいのは、
    他人が実装したコード(プログラム)を「読む」のは非常に勉強になります。
    質の良いコードはもちろん、反面教師として冗長なコードからも
    得るものは多いと思います。
    # どのコードが良くて、どれが悪いとは一概には言えません。
    # 好悪の問題もありますし。

    しかし有限な時間を有効に活用したいなら、書籍とともに、
    良質なコードを読むのは上達への近道であると思います。
    良質でも複雑なコードは初心者には辛いので、
    単純機能の枯れたコードなどが良い教材になるかもです。
    (C言語の場合なら枯れたunixコマンドなど)

    コードの入手先は、使用する目的や言語がハッキリしないと、
    なんとも書きようがありません。

    p.s.質問に対する話題の焦点がずれて申し訳ない。
  • by rug (55) on 2001年10月28日 13時35分 (#33309) 日記
    私の乏しい経験上、あまりに大風呂敷を広げると、初心者は引きます。
    ええ、だから必要になったら覚えるというスタンスでいいんです。(というか、最初の方でもmakeを覚えるのは「ソースファイルが増えてきたら」と書いているじゃないですか。) そういう意味ではそれこそCよりはsed, awkなんかの方が導入には向いているのかもしれません。

    ちなみに先のpostでNamazuを例にあげましたが、初期のNamazuはMakefileすら存在しなかったそうです。
  • by rug (55) on 2001年10月28日 15時40分 (#33331) 日記
    ソースコード読むのがいい、と言われても どれから読んだもんだろうと思う人もいるかと思います。
    まずはサイズの小さい、あるいは行数が短いものから徐々に慣れていくとか。
    皆さんが読んだ中で割と綺麗だったり、参考になったソースがあれば教えてください。
    CならGLibあたりはどうですかね? あとGNU autoconfを使う人はm4マクロも目を通した方がいいかな。
  • Re:OOSC (スコア:2, すばらしい洞察)

    by G7 (3009) on 2001年10月28日 15時53分 (#33334)
    >言語にも馴染めない人に同時に新たな概念を理解させる

    でも、それを言うなら、関数型だって構造化だって
    「自然な」概念だといえる理由なんか無いじゃないですか?
    OOだって同じことだと思うのですが、OOはなにか格別に違うんでしょうか?

    ついでにいえば、

    >それは既にほかの言語をやっていたとか

    そういや俺も確かにOOPLが初言語ではなかったですが、
    どういうわけか、ほかの言語を先にやってた人でも、OO難しいとか言う人一杯居るんですよね。
    あれ一体何なんでしょう???

    >関数型言語の方が簡単です(必要最小限覚える事柄が少ないから)。

    関数型は俺はまだ覚えてないんでなんとも判断できませんが、
    OOだって十分少ないですよ。

    というか、十分少ない数の覚えることしか持っていない(必要としない)OO言語が、少ない、ってのも
    逆にいえば不幸なのかも。
    C++は論外としても、他の多くの言語も、余計(?)なものが一杯ついてるし。
    つまり、覚えなくてもOOは出来るハズなんだが、実際のOOPLが出来ない、という状態。やれやれ…

    うん。とりあえずクラス(が流行する)をやめよう。
    prototype型にすればだいぶ楽になるっす。
    無名手続きを作って(というか無名手続きしか作れないことにして)
    それをObjectに名前付きで登録すればMethodとなる、
    くらいの奴を作ればいいんだろうな。

    これでだいぶ楽になると思います。
  • by ncube2 (2864) on 2001年10月28日 18時29分 (#33361)
    どちらも絶版ですが、
    ・丸善から出ていた「Common Lispプログラミング」(Rodey A. Brooks)
    ・講談社から出ていた「LIPS技法」(上・下) (Robert Wilensky)

    当時COBOLとBASICとFORTRANしか知らなかった自分には刺激的かつ面白かった。
  • >#日本語や数学の勉強から始めなければいけない人はほとんどいないと、信じたいが…

    誤解されにくい記述、解釈、算数がうまく使えないくせに、自分だけ例外処理という高度な技を使っているのはよく見ます。
    というか、指摘されたり。
  • by argon (3541) on 2001年10月28日 23時03分 (#33403) 日記
    最初に試した言語は BASIC でしたが、行番号はさておき理解しがたい壁がありました。
    それは、なぜ等号の左右が等しくないのか?という点。

    A = A + 1

    算数の表記と異なるので違和感が続きました。
    左右が逆 A + 1 = A ならまだ納得できたかも。
    当時は Pascal の表記 A := A + 1 の方が落ち着いたようです。
  • by take0m (4948) on 2001年10月29日 2時54分 (#33482) 日記
    こんちはー。

    Linux使っている方からは当然反論あるでしょうと思いましたがぁ。ま、みなさんのコメントでもあるように、Linux入れろと初心者の方には言えないんですよね。Officeは入っている人多いので・・・

    あと、OOが難しいなんて訳じゃあなくてですね、後のコメントでも書いておられると思いますが、擬人化ってのが要するに余計なことなんです。もっと、やりたいことをストレートにやれる。思ったとおりにコンピュータが動く、というのが、教育的には重要だと考えています。そこでちょっとした感動とかを感じない人は、プログラミングを仕事としてしか捉えられなくなっちゃいますから・・・

    プログラミングを楽しめるかどうかってのを判断するだけでしたら、JavaScriptやVBAを数時間やらせらば、答えが出ますからね。実際そうやって教えています・・・まー、学ぶってよりは、フィルタリングに近いかもしれませんが・・・
  • by ncube2 (2864) on 2001年10月29日 9時07分 (#33515)
    >まぁ対象者によりますが、LISPを薦めるということ自体に何か問題がある気はしないでもないんですが。(^^;

    実用性はともかく(^^;、純粋にプログラミングを楽しむってことでは結構よさげとも思います。 ;-)

    #あっ、これならPrologもありだ
  • by take0m (4948) on 2001年10月29日 10時14分 (#33534) 日記
    どんどんオフトピック気味ですなぁ。

    そこまで言うと、教育方針の違いでよいのではないでしょうかね?CPUはオブジェクト指向じゃあないですし・・・工学優先か、科学優先かって感じもしますし。個人的にはオブジェクト指向なんていつ学んでも良いと思っていますし、コンピュータの基本じゃあないと思っていますんで。そんでテキスト書いていると、OOの部分でワンステップ増えることは明らかなので、やっぱりやーめた的にいつも捨てられています。

    JavascriptもVBAもかすかにOOライクな部分がありますが、敢えてOOの話は出さなくても済んでいるので、そこでOO出しちゃうと面倒なんですよね。教えるのも教わるのも。

    といいつつ、現状で受講生の皆さんに人気がある言語はJavaですね。たとえHTMLのテーブル構造が満足に理解できてきなくても、Javaをマスターしたい、1ヶ月で!って思っている人はたくさんいます。

    ここでいうマスターってのは、仕事として使えるという意味です・・・さらに、1ヶ月ってのは、30日間勉強するって意味じゃなくて、1ヶ月の数日を教室に通ってって意味です・・・

    やっぱ、Javaは時間単価高いですからねー。C++よりも高かったりすることも多くて。これじゃあ、工数短くなっても開発コスト変わらんだろうって思うこともあります・・・
  • by SteppingWind (2654) on 2001年10月29日 10時22分 (#33537)

    この本は立ち読みして良いなと思って次に買いにいったら売り切れていた(しかも表紙のヒヨコしか覚えていなかったので探しようが無い)という苦い思い出のある本です.

    中学校から高校ぐらいまででコンピュータ教育を行うなら, こういう本を教科書に使うべきでしょう

  • by argon (3541) on 2001年10月29日 14時13分 (#33594) 日記
    >LET を省略しているから。

    COBOL なら COMPUTE でしょうか。じゃあ FORTRAN や C はどうなるのでしょう?
    まあ、そういうもんだと了解しないと先へ進めないのですが、
    Delphi なぞ使っているのはまだこだわりがあるのかもしれません :-)

  • by take0m (4948) on 2001年10月29日 15時55分 (#33621) 日記
    そういえば、MITかどっか、USの有名な情報科学系の大学では、入学後のプログラミング実習として、

    Scheme>LISP>C&etc

    って進んでいくらしいですなぁ。
    しかもLISPの課題はコンパイラの作成って聞いています。期間は半年くらいだっけかなぁ。もちろん講義はないので自学習らしいですけど。
  • > それともRubyの世界ではs/Visitor/Iterator/が普通なのかも知れないけど。

    確かに奇妙ですね。

    RD(Rubyのドキュメントフォーマット)の整形ツールなどえではVisitorはちゃんとVisitorとして使われているので、一時期用語の混乱があっただけじゃないかなぁと思うのですが。
    --
    "Quidquid latine dictum sit, altum videtur."
typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...