独学でPHPの勉強を始めましたが、思うようにうまくいきません。

大きな本を何冊も買ってがんばってはいるのですが、
難しいところは何度読み返しても、何冊読んでも理解できません。

はてなではPHPの話題はよく出ますし、簡単だとあるのですが、
はじめてプログラムを学習する私にとって、時間がかかるばかりで思うようにいきません。
大学とか専門学校に通わずプログラムを習得した人って本当にいるのでしょうか?

プログラミングを独学で学習するにあたり、
コツとか技術的なアドバイスとか経験談とか教えてください。
非常に漠然とした質問ですが、回答者さんの思いつくことであれば何でも結構です。

以上、よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/02/11 00:06:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答7件)

id:yoneto164 No.1

回答回数813ベストアンサー獲得回数94

ポイント18pt

私は独学でBASIC、CGI(Perl)、PHPを習得しました。

$から始まる変数に数値や文字列が代入されるという原理が分かれば、

それほど難しいことではないと思います。

簡単なプログラムから確実に理解していけば大丈夫だと思いますよ。

ダミーhttp://q.hatena.ne.jp/

id:taroemon

ご回答ありがとうございます。

単純な変数とかくらいだいだとさすがに理解できるですが、

ユーザー定義関数とか可変関数など、ちょっと難しくなるとお手上げです。


あと自分が作りたいと思ったプログラムに必要な関数とか

どうやって探せばよいかアドバイスいただけるとうれしいです。

たとえばPHPに関して下記のような質問を他にもしているのですが、

たくさんある関数の中からどれを使えばよいかを探す方法を教えてもらえるとうれしいです。

http://q.hatena.ne.jp/1202569301

http://q.hatena.ne.jp/1202557525

2008/02/10 02:42:37
id:tera-p No.2

回答回数92ベストアンサー獲得回数21

ポイント20pt

私の知り合いには,大学とか専門学校でプログラミングを習得した人はほとんどいません.また,大部分の人は独習に近い形でプログラミングを習得したのだと思います(初めて触れたきっかけは大学の演習などだったとしても).

というわけで,「大学とか専門学校で正規の教育を受けずにプログラミングを習得するなんて茨の道なんじゃないだろうか…」というのは杞憂だと思います.がんばりましょう.

さて,プログラミングの独習の方法ですが,王道はサンプルの「写経」だと思います.適切な入門書のサンプルコードを,「手で入力して」実行してみます.エラーが出たらどこで間違えたか間違い探しをします(これにより,イコールの数を間違えるなど「単純な間違いだけど見つけにくいバグ」が起こりやすいところを体で憶えることができます).サンプルコードが何を意味しているのか理解できなければ,ちょっと書き換えてみて振る舞いがどう変わるか見てみます.エラーメッセージは英語をがんばって読んで理解しようと試みます(とても大事です).

なお,どの入門書が適切かは人の好みによるところも大きいので,手持ちもしくは本屋でみつけた入門書の中で,なんとなく肌に合いそうなものの中からネットの書評などを見て一冊選べばよいと思います.入門書が適切であれば,きっと「よく使う関数」もサンプルの中に出てきているでしょうから,以後自分でプログラムを作る際に似たようなことをしたくなったときに,「そういえばこんな関数がサンプルにあったな」と探しやすくなります.

ただ,初めてのプログラミング言語が PHP というのは,個人的にはちょっとハードルが高めだと思います.確かに「初心者に簡単」と言われることが多いですが,「HTMLに埋め込みやすい」ということ以外に「初心者に簡単」の(まともな)理由を思いつきません.初心者に「簡単でない」理由ならいくつも挙げられますが…(ここらへんについては,Ruby 作者のまつもとさんの日記が最近話題になってます Matzにっき(2008-01-26)).

できれば,PHPではなく,Python や Ruby などの「情報が豊富で敷居が低く,よく設計された言語」でまずはプログラミングを憶えたほうが,プログラミングを習得するには効率的ではないのかな,と思います.

id:taroemon

経験談から来るご回答ありがとうございます。

ほとんどの人は独習なんですね。勘違いしてました。

そう聞くとだいぶ気分も休まりました。


エラーメッセージの英語は不慣れなこともあって、

びびってましたがなんとか理解できるようチャレンジしてみます。


やっぱりRubyの方が簡単なんですか?

実は勉強する前からどちらにしようか悩んでたんです。

でも今更変更できません。これでがんばってみようと思います。

2008/02/10 12:43:11
id:fortune-teller No.3

回答回数2ベストアンサー獲得回数0

ポイント20pt

私が初めて覚えたのは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

例を読めば大体分かりますよ。

id:taroemon

経験談からくるご回答参考になりました。

私の場合は相談する相手がいないので、パニックになってたかもしれません。

そういえばPHPを勉強し始めたのは今年の1/2からですから、

やっぱり時間が必要と言うことなんですね。

2008/02/10 12:46:41
id:HISI No.4

回答回数40ベストアンサー獲得回数4

ポイント20pt

私も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

id:taroemon

ご回答ありがとうございます。

ご指摘のデバッグなどのはまだ試してませんでした。

さっそく勉強してみることにします。

今やるべきことがわかってきたような気がしてきました。

2008/02/10 12:54:39
id:hidering No.5

回答回数59ベストアンサー獲得回数3

ポイント20pt

私はPHPに関してはあまり詳しくありませんが、プログラムに関して言うと

最初のうちは詳しい人に聞くのが一番早い上達法だと思います。

ただし、聞いただけでプログラムをブラックボックス的に使用するのではなく

どうしてそうすれば上手くいくのかを理解する必要があります。

慣れればリファレンスを見てある程度解決しますが、

プロでもネットで調べますし、掲示板で質問をします。

聞いても分からないことは食い下がってさらに聞いてみて良いと思います。

関数は膨大な量があり一つ一つの関数の仕様を暗記する必要はありません。

(よく利用するのはそのうちに覚えていきますし。。。)

上達するには教えてもらった方法の中で利用している関数がどういった使われ方を

しているかを考えたり、その関数に類似した関数にどういったものがあるかを調べることです。

そしてこんな関数があるということを頭のすみに入れておきます。

その積み重ねです

私はリファレンスを見て分からないことがあるとまずサーチエンジンで調べます。

最初はどんな単語で調べればよいか分からないと思いますが、

いろいろな文献や掲示板、リファレンスを見ていくうちに

どのような単語で検索していけばよいかが分かってきます。

分からないうちはそれらしい単語をいれて検索してみましょう。

検索結果に適切だと思われる単語がでてくるときもあります。

そのときはその単語に置き換えて検索してみるといいでしょう。

私の場合、その繰り返しでたどり着く場合が多いです。

私がPHPで利用している掲示板を紹介します。

http://www.phppro.jp/qa/

掲示板で他の方が質問している内容に興味をもったら閲覧してみるのも上達の近道です。

id:taroemon

ご回答ありがとうございます。


>最初のうちは詳しい人に聞くのが一番早い上達法だと思います。

そういう人がまわりにいないんです。


やはり試行錯誤したり、調べたたりで時間がかかるのはみんな同じかもしれませんね。

ご紹介いただいた掲示板を活用させていただきます。

2008/02/10 12:58:18
id:ymlab No.6

回答回数508ベストアンサー獲得回数34

ポイント20pt

私もプログラムを独学で覚えました。

プログラム言語を習得するためのこつというものは、

これまでにたくさんの方があげている通りでございます。

特に、サンプルコードをただ、コピーアンドペーストするのではなく、

自分で打ち込んでいくと言うことが大切だと思います。

[実際にコードを売っていって、体に慣れさせることは、思いの外重要です。]

次に、自分でどんなソフトを作りたいのかを、考えることが大切です。

私は友人と、毎週木曜日とか、そういう感じで集まって勉強会をしていました。

そのときに、お互いが作ったプログラムを見せ合って、次に来週までに作ってくるネタを考える。

みたいな。

ネタを考えるのがかなり大変でしたが、いい勉強になったと思います。

周りにプログラムを勉強していそうな友達がいない場合、とりあえず掲示板なんかを作ってみると

よいのではないでしょうか。

掲示板は、ページ間の変数の受け渡しを勉強しないといけませんし、

下手をすると、セキュリティーホールを発生させることになりますので、

かなり、やりがいがあるかと思います。

また、ポケットリファレンスなどで、「こんな関数があるんだー」的にぱらぱら見ているとよいでしょう。

実際に覚えていなくても、「確か、こんなことできたよなー」というノリで、必要な時にポケットリファレンスを

見ればよいのです。

特にPHPは、なんでもありな言語ですので、理解できなくても強引に書いてしまうことができてしまいます。

わからなくても、とにかくコードを書く努力をすればよいでしょう。

がんばってください。

http://maxpatrol.jp.brothersoft.com/

[PHPのセキュリティーホールを発見してくれるソフト]

id:taroemon

経験から来るご回答参考になりました。

僕にも一緒に勉強している友達がいれば、

こんなに悩んだりしなかったかもしれませんね。


セキュリティホール発見ソフトのご紹介ありがとうございます。

PHPのセキュリティは特に気をつけねばと思ってた所なので、こういうのをさがしてました。


とりあえずプログラミングを皆さん独学で習得していて、

それにはそれなりの時間が必要なんだということがわかり、安心しました。

今後は技術的なアドバイス、コツ、便利なツールなどを

中心に教えていただけるとうれしいです。

2008/02/10 13:15:01
id:tezcello No.7

回答回数460ベストアンサー獲得回数69

ポイント20pt

先ずは適当な(ホントにどんなのでもいいと思います)入門書に載っているサンプルスクリプトを自力で入力してみる。

そのスクリプトについて解説してあると思うので、なにをやろうとしているのかをよく読み、プログラム全体の流れを把握する。

  一行毎に何をやっているか

  入力あるいは出力に同じ変数を使っている部分を一固まりとして、その辺りでなにをやっているか

  その辺りを囲っている { } の中(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の色分けや補完は出来ませんが)

http://www5f.biglobe.ne.jp/~t-susumu/index.html

id:taroemon

丁寧なご回答ありがとうございます。

大変参考になりました。


これで質問を終了させていただきます。

なんだかやれそうな気がしてきました。

ご回答、コメントをいただいた皆さんありがとうございました。

2008/02/11 00:03:55
  • id:DASM
    大学でも、基本的な事は教えずに独学を要求されることはごく普通にあります。PHP は私も独学でした。
    今では、Google などで検索すれば PHP の入門やマニュアルサイトがすぐ見つかります。
    - http://jp2.php.net/manual/ja/funcref.php
    - http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3php.htm
    - http://www.phppro.jp/phpmanual/php/index.html

    http://q.hatena.ne.jp/1202569301 の質問でしたかった事は、array_filter という関数を使えばできますが、使わなくてもできます。
    関数を沢山覚えるだけだと、自分ができる事の幅に限界ができてしまいますので、自分で array_filter を実装する事から始めてみてはどうでしょうか?
    array_filter を実装しようと思ったら、正規表現を勉強する必要があるので、手近な教材としてはとてもいいと思います。

    ちなみに、"The first argument should be an array in..." は array_filter の第一引数が array でないというエラーです。第一引数の内容を書いてもらえれば、ヘルプできると思います。
  • id:yoneto164
    たくさんある関数の中からどれを使えばよいかについてですが、
    どの関数を使うかより、
    どう使うかのほうが大切なのではないかと私は考えています。

    同じ処理をする場合でも大抵複数の方法があり、
    どれか1つの関数だけでも可能な場合がありますよね。
    例えばforeachやwhileで行う処理はforでも可能だと思いますし、
    elsifを使わなくてもelseとifで処理は可能でしょう。

    私の場合はとにかく使い慣れた関数から使っていました。
    新しい関数を覚えるのはどうにもならなくなった時や時間の空いた時だけで、
    なるべく数少ない種類の関数を組み合わせています。
    今でも使ったことの無い関数は山のようにありますが、
    特に不自由はしていません。
  • id:KUROX
    >大学とか専門学校に通わずプログラムを習得した人って本当にいるのでしょうか?
    ゴロゴロいます。

    >ユーザー定義関数とか可変関数など、ちょっと難しくなるとお手上げです。

    可変関数はともかく、ユーザー定義関数は使えないと駄目ですね。
    変数のスコープとか、プログラムの構造化(余力があればクラス化)とか
    できないと、厳しいと思います。
  • id:yoneto164
    ユーザー定義関数も使えると便利ですが、
    私も最初は訳が分からず使えませんでした。
    今でも大きなシステムでない限り滅多に使いませんし、
    同じソースをコピペして行けば使う必要もないと思っています。
    ファイルの容量を減らせるというメリットはあるのですが、
    原則的には処理速度が速くなるというわけでもありません。
    ユーザー定義関数の中から更にユーザー定義関数を呼び出したりしていくと、
    私は頭の中を整理するのが難しくなってきます。

    スプリプトを配布している形態がユーザー定義関数であったり、
    複数の人間が手分けしてソースを組む場合には便利だと思いますが、
    最初から理解できなくても良いと思います。
    でもユーザー定義関数は代入して受け渡すということなので、
    分かってしまえば簡単ですよ。
  • id:KUROX
    >今でも大きなシステムでない限り滅多に使いませんし、
    >同じソースをコピペして行けば使う必要もないと思っています。

    正当な理由があるときはOKですが、
    ない場合は、そういうことをするとプログラムのレベルも上がりませんし
    保守性の低いっプログラムになります

    >私は頭の中を整理するのが難しくなってきます。
    頭の整理をしやすいように、関数化、モジュール化、クラス化をおこなうのです。

  • id:HISI
    とりあえず、まずは動くコードを書くことからはじまると思います。

    コーディングを繰り返していくことで
    だんだんとスマートな書き方を憶えていくものです。
    保守についても、自分なりの反省があってこそ、
    モジュール化やクラス化、インクルードファイルに追い出すことなどの利点が
    身に染みてくるものと思います。(自分がそうでした)
    どんな分野でもいえると思いますが、
    闇雲に教科書の真似をしても、形だけの理解になってしまう懸念があります。

    もっとも、共同開発や企業内で継続利用するソリューションであれば
    (特に企業サイトでインターネットにWeb公開するなどであれば、セキュリティ面は重要ですし)、
    より上流の部分を含め、共同開発者とコーディング規約を決めるなど
    少し事前の設計に注力をしたほうがよいでしょう。

    質問者のtaroemonさんには、まずは思ったとおりに動く喜びを
    沢山味わっていただきたいな、と思います。
  • id:taroemon
    質問者です。
    皆さんコメントありがとうございました。
    たくさんコメントいただいたので、
    ここにまとめてお返事書くことにします。

    この質問をしたとき、行き詰まっていて、
    悲観的でしたが、皆さんのコメントを拝見していく内に、
    だんだん自分でもやれるような気がしてきました。
    ちょっとづつがんばっていこうと思います。

    皆さんありがとうございました。
    今後も質問しますので、またいろいろ教えてください。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません