大きな本を何冊も買ってがんばってはいるのですが、
難しいところは何度読み返しても、何冊読んでも理解できません。
はてなではPHPの話題はよく出ますし、簡単だとあるのですが、
はじめてプログラムを学習する私にとって、時間がかかるばかりで思うようにいきません。
大学とか専門学校に通わずプログラムを習得した人って本当にいるのでしょうか?
プログラミングを独学で学習するにあたり、
コツとか技術的なアドバイスとか経験談とか教えてください。
非常に漠然とした質問ですが、回答者さんの思いつくことであれば何でも結構です。
以上、よろしくお願いします。
私は独学でBASIC、CGI(Perl)、PHPを習得しました。
$から始まる変数に数値や文字列が代入されるという原理が分かれば、
それほど難しいことではないと思います。
簡単なプログラムから確実に理解していけば大丈夫だと思いますよ。
私の知り合いには,大学とか専門学校でプログラミングを習得した人はほとんどいません.また,大部分の人は独習に近い形でプログラミングを習得したのだと思います(初めて触れたきっかけは大学の演習などだったとしても).
というわけで,「大学とか専門学校で正規の教育を受けずにプログラミングを習得するなんて茨の道なんじゃないだろうか…」というのは杞憂だと思います.がんばりましょう.
さて,プログラミングの独習の方法ですが,王道はサンプルの「写経」だと思います.適切な入門書のサンプルコードを,「手で入力して」実行してみます.エラーが出たらどこで間違えたか間違い探しをします(これにより,イコールの数を間違えるなど「単純な間違いだけど見つけにくいバグ」が起こりやすいところを体で憶えることができます).サンプルコードが何を意味しているのか理解できなければ,ちょっと書き換えてみて振る舞いがどう変わるか見てみます.エラーメッセージは英語をがんばって読んで理解しようと試みます(とても大事です).
なお,どの入門書が適切かは人の好みによるところも大きいので,手持ちもしくは本屋でみつけた入門書の中で,なんとなく肌に合いそうなものの中からネットの書評などを見て一冊選べばよいと思います.入門書が適切であれば,きっと「よく使う関数」もサンプルの中に出てきているでしょうから,以後自分でプログラムを作る際に似たようなことをしたくなったときに,「そういえばこんな関数がサンプルにあったな」と探しやすくなります.
ただ,初めてのプログラミング言語が PHP というのは,個人的にはちょっとハードルが高めだと思います.確かに「初心者に簡単」と言われることが多いですが,「HTMLに埋め込みやすい」ということ以外に「初心者に簡単」の(まともな)理由を思いつきません.初心者に「簡単でない」理由ならいくつも挙げられますが…(ここらへんについては,Ruby 作者のまつもとさんの日記が最近話題になってます Matzにっき(2008-01-26)).
できれば,PHPではなく,Python や Ruby などの「情報が豊富で敷居が低く,よく設計された言語」でまずはプログラミングを憶えたほうが,プログラミングを習得するには効率的ではないのかな,と思います.
経験談から来るご回答ありがとうございます。
ほとんどの人は独習なんですね。勘違いしてました。
そう聞くとだいぶ気分も休まりました。
エラーメッセージの英語は不慣れなこともあって、
びびってましたがなんとか理解できるようチャレンジしてみます。
やっぱりRubyの方が簡単なんですか?
実は勉強する前からどちらにしようか悩んでたんです。
でも今更変更できません。これでがんばってみようと思います。
私が初めて覚えたのはBASICでした(それまでにFORTRANを教わってたが)。
大学の研究室に新しいPCが納入されたとき、誰もいじらないから、おっかなびっくりで
マニュアルを見ながら最もわかりやすいコマンドを打ち込みました。
circle(100,100),100,2
CRT上に赤い円が描画されました。これが面白くて、その日徹夜で日章旗(後光のあるやつ)を作り、マニュアルにあるコマンドをあらかた試してみました。理解できなかったのはファイルの概念ぐらいでした。ファイルは理解するまで1ヶ月ほど掛かりました。どうも、バインダを思い出してしまい、イメージがつかめなかった。自分の心に思い描いているイメージとプログラムの概念というのは必ずしも一致しませんからね。
FORTRANを教わったときも、代入のイコール(=)の理解に時間がかかった。理系の私にとって、イコールは恒等式の成立を意味し、変数が別な変数と等しいと定義(a=bみたいなもの、実際は定義でなく、単なる値のだいにゅう)されると常に、値がシンクロしていそうなきがしていました(先の例で言うと、a=bとしてはじめはbが100で、この代入のあとでbに50を足すとaも150になっていそうで・・・、まあ、Cで言おうところの参照渡しみたいなことですね)。
時間がたてば自然に理解できるのでは。
私は、PHPポケットリファレンスを使っています。
http://gihyo.jp/book/2003/4-7741-1668-8
例を読めば大体分かりますよ。
経験談からくるご回答参考になりました。
私の場合は相談する相手がいないので、パニックになってたかもしれません。
そういえばPHPを勉強し始めたのは今年の1/2からですから、
やっぱり時間が必要と言うことなんですね。
私もyoneto164さんのように独学でPHPを憶えました。(以前PHPに似た、ColdFusionを少々かじったことがあります。こちらも独学で)
自分がずばり使いたい関数を探すために
とりあえず公式マニュアル首っ引きになることやネット上からサンプルや情報を得てPGするのはやむを得ないと思います。
書籍からは、PHP言語を俯瞰する程度の情報を得るにとどめて、
PGの都度都度で
ファイルI/Oなら、とりあえずファイルシステム関数にあるだろう、
文字列操作なら文字列関数にあるだろう、といった目星をつけることから、
やがてそれぞれ得意な関数を心得ていけば、いろいろなシーンで流用できるようになると思います。
PHPはMicrosoftの.NET Frameworkのように関数がてんこ盛りですから
(PHP4から5になって増えていますし。
たとえばファイルを全部読みだす処理で、PHP5でfile()という一発関数が用意されました。
PHP6で、さらに用意されていくことでしょう。)
端から端まで自分で憶えてからPGをすると、頭がパンクしてしまいそうに思います。
正規表現などの機能も持っていますし、スマートなコードはどこまでも追求できるでしょうが
とりあえず動かすことを目的にごりごり書くのもやむをえないと思います。
ご存知かもしれませんが...PHP自身にもデバッグ向けの関数を用意してあります。
PHPは、変数型が厳格でないために意図しない方法の演算をすることがあり、デバッグログなどは重要です。
配列の添え字の順序はややこしいですが、print_r()で変数の構造を捉えると便利です。
(配列変数のつもりが配列でなかったり、添え字の順序が逆であったりすることも分かります。)
あとは定番ですが、phpinfo()も有用です。
ブレイクポイントと変数ウォッチができるデバッガを用意できれば便利なのですけど。。
あとはこのようなWEBページから、機能の分野ごとに俯瞰してみるのもよいかもしれません。
SAK Streets - PHP 開発言語資料 (Y.SAKさん提供)
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3php.htm
配列:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k08.htm
ご回答ありがとうございます。
ご指摘のデバッグなどのはまだ試してませんでした。
さっそく勉強してみることにします。
今やるべきことがわかってきたような気がしてきました。
私はPHPに関してはあまり詳しくありませんが、プログラムに関して言うと
最初のうちは詳しい人に聞くのが一番早い上達法だと思います。
ただし、聞いただけでプログラムをブラックボックス的に使用するのではなく
どうしてそうすれば上手くいくのかを理解する必要があります。
慣れればリファレンスを見てある程度解決しますが、
プロでもネットで調べますし、掲示板で質問をします。
聞いても分からないことは食い下がってさらに聞いてみて良いと思います。
関数は膨大な量があり一つ一つの関数の仕様を暗記する必要はありません。
(よく利用するのはそのうちに覚えていきますし。。。)
上達するには教えてもらった方法の中で利用している関数がどういった使われ方を
しているかを考えたり、その関数に類似した関数にどういったものがあるかを調べることです。
そしてこんな関数があるということを頭のすみに入れておきます。
その積み重ねです
私はリファレンスを見て分からないことがあるとまずサーチエンジンで調べます。
最初はどんな単語で調べればよいか分からないと思いますが、
いろいろな文献や掲示板、リファレンスを見ていくうちに
どのような単語で検索していけばよいかが分かってきます。
分からないうちはそれらしい単語をいれて検索してみましょう。
検索結果に適切だと思われる単語がでてくるときもあります。
そのときはその単語に置き換えて検索してみるといいでしょう。
私の場合、その繰り返しでたどり着く場合が多いです。
私がPHPで利用している掲示板を紹介します。
掲示板で他の方が質問している内容に興味をもったら閲覧してみるのも上達の近道です。
ご回答ありがとうございます。
>最初のうちは詳しい人に聞くのが一番早い上達法だと思います。
そういう人がまわりにいないんです。
やはり試行錯誤したり、調べたたりで時間がかかるのはみんな同じかもしれませんね。
ご紹介いただいた掲示板を活用させていただきます。
私もプログラムを独学で覚えました。
プログラム言語を習得するためのこつというものは、
これまでにたくさんの方があげている通りでございます。
特に、サンプルコードをただ、コピーアンドペーストするのではなく、
自分で打ち込んでいくと言うことが大切だと思います。
[実際にコードを売っていって、体に慣れさせることは、思いの外重要です。]
次に、自分でどんなソフトを作りたいのかを、考えることが大切です。
私は友人と、毎週木曜日とか、そういう感じで集まって勉強会をしていました。
そのときに、お互いが作ったプログラムを見せ合って、次に来週までに作ってくるネタを考える。
みたいな。
ネタを考えるのがかなり大変でしたが、いい勉強になったと思います。
周りにプログラムを勉強していそうな友達がいない場合、とりあえず掲示板なんかを作ってみると
よいのではないでしょうか。
掲示板は、ページ間の変数の受け渡しを勉強しないといけませんし、
下手をすると、セキュリティーホールを発生させることになりますので、
かなり、やりがいがあるかと思います。
また、ポケットリファレンスなどで、「こんな関数があるんだー」的にぱらぱら見ているとよいでしょう。
実際に覚えていなくても、「確か、こんなことできたよなー」というノリで、必要な時にポケットリファレンスを
見ればよいのです。
特にPHPは、なんでもありな言語ですので、理解できなくても強引に書いてしまうことができてしまいます。
わからなくても、とにかくコードを書く努力をすればよいでしょう。
がんばってください。
http://maxpatrol.jp.brothersoft.com/
[PHPのセキュリティーホールを発見してくれるソフト]
経験から来るご回答参考になりました。
僕にも一緒に勉強している友達がいれば、
こんなに悩んだりしなかったかもしれませんね。
セキュリティホール発見ソフトのご紹介ありがとうございます。
PHPのセキュリティは特に気をつけねばと思ってた所なので、こういうのをさがしてました。
とりあえずプログラミングを皆さん独学で習得していて、
それにはそれなりの時間が必要なんだということがわかり、安心しました。
今後は技術的なアドバイス、コツ、便利なツールなどを
中心に教えていただけるとうれしいです。
先ずは適当な(ホントにどんなのでもいいと思います)入門書に載っているサンプルスクリプトを自力で入力してみる。
そのスクリプトについて解説してあると思うので、なにをやろうとしているのかをよく読み、プログラム全体の流れを把握する。
一行毎に何をやっているか
入力あるいは出力に同じ変数を使っている部分を一固まりとして、その辺りでなにをやっているか
その辺りを囲っている { } の中(if for などで使われている)で何をやっているか
それらが関数として使われていたら、この関数は何をやっているか
のように細かい所から積み上げていくのがいいかなと思います。
解説を読むだけじゃなく、リストをプリントして、
「この if は○○が△△であるか□□であるかの条件分け」のように書き込んで
何をやっているというのを自分なりの表現で書き出してみる。
(できれば2〜3日間を置いて、どんなスクリプトだったか忘れた頃に)書き出したのを見ながら自分で考えて書いてみる。(PHPポケットリファレンスなど、どんな事をするにはどんな関数を使うかを調べるものは手近にあると便利ですね。)
http://www.php.net/manual/ja/ こちらに関数のリファレンスがありますが、関数名が(あるいはその分類が)分かっていないと調べれないですよね。
サンプルと同じような動作をするまで書き直すと勉強にはなりますが、メゲてしまう前にサンプルと見比べて上手く動かない原因を探った方がいいかも知れませんね。
単なる文法ミスか考え方が間違っているか...
その際、サンプルが唯一の正解ではないので、考え方が合っていると思えればOKです。
これを何回か繰り返すと、こんな事がしたい時はこんな感じに書くというのが何となく分かるのでは?
PHPのスクリプトを配布しているサイトもたくさんあるので、同じような機能のもの(例えば掲示板)を別な所からもらって来て、よく読み比べると興味深いですよ。理解が深まれば自分ならこうしようとか、こちらの機能とあちらの機能のいいとこ取りをするにはどうするかとか、別な機能を組み込むにはどうしたらいいのかとかが見えてくると思います。
スクリプトを書く時は Windows から書く事が多い(ブラウザで確認しながら書いてます)ので、こちらのエディタを使う事も多いです。
http://phpspot.net/php/pg%82o%82g%82o%83G%83f%83B%83%5E_standalo...
UTF-8 で記述する事がほとんどですのでメモ帳を使う事は無いですね。
チョットした修正(PHPじゃない関連ファイルも一緒に変更する場合も)だったら、フリーのエディタを使っています。
こちらの TeraPad が気に入っています。(PHPの色分けや補完は出来ませんが)
丁寧なご回答ありがとうございます。
大変参考になりました。
これで質問を終了させていただきます。
なんだかやれそうな気がしてきました。
ご回答、コメントをいただいた皆さんありがとうございました。
ご回答ありがとうございます。
単純な変数とかくらいだいだとさすがに理解できるですが、
ユーザー定義関数とか可変関数など、ちょっと難しくなるとお手上げです。
あと自分が作りたいと思ったプログラムに必要な関数とか
どうやって探せばよいかアドバイスいただけるとうれしいです。
たとえばPHPに関して下記のような質問を他にもしているのですが、
たくさんある関数の中からどれを使えばよいかを探す方法を教えてもらえるとうれしいです。
http://q.hatena.ne.jp/1202569301
http://q.hatena.ne.jp/1202557525