Sumirexxx

今日もiPhone片手に出かけます

女子プログラマーの私がプログラムを書くときに気がついたこと はてなブックマーク - 女子プログラマーの私がプログラムを書くときに気がついたこと

プログラミング

プログラムを書くということ

if分は書ける。目の前にあるプラグラムが、何をしようとしているかもわかる。try &catchも戻り値が分かれば書ける。メソッドも呼び出す側と呼び出される側のイメージがわけば書けるようになる。

けど書き方がわからない。必要なものはわかっているけど、その必要な情報をどうやって取ってきて、どうやって自分のやりたいことの素材として使えばいいのかが、わからない。

私がプログラムを書いていていつもわからないのはそういうところだ。『みんなどうやって、この情報をとる方法を見つけたんだろう?』と思いながら仕事をしている。

あるプロジェクトがあり、いろんな処理ががディレクトリごとに存在するようなプログラムを書いたことのある人には、ぜひ伝わってほしい。一言で言うとおそらく「接続する部分の書き方」なんだろうと分析している。

接続する部分とは何か?

何言ってんだ?という方もいるかもしれないけど今日は一気に書き続ける。専門用語ばかりになるからいつものブログとはちょっと違うかもしれない。

たとえばSQLを発行するために、DB接続する書き方。これは言語によっても現場によっても違うことがある。SQLクライアントによっても違うので、混乱しがち。

もうひとつは、ほかのファイルで用意されている内容を参照する場合。(オブジェクト思考を取り入れているプログラムであれば、この方法を多用していると思う)それはあるクラスで定義された定数とか、リストに入ってまとめられた設定値だったりする。

アクセス修飾子もいろいろある。publicはどこからでも見える、privateは自分からしか見えない、protectedは自分と、その子供からは見える。こんなことも、最初は混乱しがち。

クラスを利用するとき、extendsが必要な場合もある。同じ処理をファイルごとにする必要がある場合には、implementsを使うこともある。

implementsしたクラスでは、インターフェースを全部書きこまないといけないという決まりだったりする。自分がほしいものだけを書く、というわけにはいかない。(実際にはメソッドを書き込むだけで中身を書かなければOKだけど)

全部のメソッドを書いていない場合、怒られる。そういう決まりだから。

自分が欲しいものを知る

まず、自分がしたいことを明確にする必要がある。計算をしたい、とか、文字列を取得したい、とかだ。それくらいならそんなに困らずにできるけど、困るのはとにかく他のクラスの値を使おうとするときなのだ。

他のクラスで作ったオブジェクトを自分のクラスで使いたいときは、オブジェクトの生成が必要なんだろう。(話は変わるけどそういう延長で私はpostとgetもあまり好きではない。好きではないけどあまりに必要すぎる)その考え方がわかれば、言語はjavaだろうとPHPだろうとあまり変わらない。

いま書いてきたようなことの解説を、どれだけ読んできただろう。そして、どれだけ理解できただろう?

自分は何がほしいのか、まずわからないといけない。まるで人生みたい。人生はプログラミングと違って、決まった通りには動かないこともあるけど。

大切なことは?

私が思う、プログラミングをするときに大事だと思うこと。いまのところ、なので変わるかもしれないしこれが正しいかどうかは人それぞれです。

イヤイヤやるならやめる。

イヤイヤやっている間は、上達しない。プログラムに限らずなんでもそうだけど。自ら関わろうとした人にだけ、新しい理解や自分にとって価値ある情報が得られる。

逆に言えば、価値ある情報でも嫌々やっているときには気づかない。見つけても感動がない。理解しようと思ってみる目と、他人事の目では同じものでもまったくちがってみえてくると思う。

とにかく分解すること

私はプログラムを書くときは、いつも分解するようにしている。というか、そうしないと書けないだけだけど。一行ずつコツコツ作っていくのが楽しい。箱に例えるなら、箱を組み立てながら中身は入れない。

中身は袋に入れて仕分けし、箱は箱で用意してから1つずつ丁寧に詰めていく。この作業が好きだ。これは家事にも当てはまるところがあって、順番に1つずつやっていく、と思うと、膨大な洗濯物や洗い物もいつの間にか終わっていたりする。何事も、めんどくさいと思いながらやるとなかなか終わらない気がする。

「決め」には早めに気づく

「決め」とはなんだろう。私がここで言いたいのは、やっぱり参照する値についてになるだろう。とにかくプログラムには、「あんたいつ出てきた?」ってゆーやつがたまにいる。そういうやつは、自分のクラスにはいないやつで、絶対どっかから引っ張ってきているやつなのだ。(やつ、は値に置き換えてください)

つまりそういう「決め」で書かれている部分または「お借りしますね」という言葉を書かないと絶対に取れないような値には、早めに気がつかないと無駄に考える時間を使うことになってしまう。

前からいる人が親切に教えてくれればいいけど、社会人になったら何でもかんでも聞くわけにはいかない。(自分のことをなんにもわからない赤ちゃんみたいに感じることもあったけど。)しかも、前から知ってる人はどこに何があるのか当たり前になっていることが多いから、普通すぎて教えるのを忘れていることも多々ある。「あ、それそこにないよ」みたいなことはザラであるから、いちいち怒るのもバカらしくなる。できれば「教えられた中にはなさそうだな」くらいの検討は早めにできておいたほうがいい。

知ってそうな人に聞く

さっきの話と矛盾はするけど、やっぱりどーしたって聞かないでは進められない。至れり尽くせりなことはないから、自分でどうやって聞くかということには多少力を入れることになる。

良い聞き方、というのもこれまた人それぞれな気はするけど、まずは自分で試すこと。これは当たり前と言えば当たり前だけど、私が新人の頃は、書いてあることの意味がわからないから何もしないで聞いていたこともある。

新人と中途では、おのずと聞く内容も変わってくるかもしれないけど、1時間くらい手を動かし、悩んでわからなかったら聞く。どうしてもハマっちゃう時ってあるから。あと、経験がないとひらめくことすらできないことって絶対あると思うから。経験していくうちに、「待てよ、これがこうか…?」となんとなくのカンが当たるようになってくる気がする。

まとめ

ものすごく興奮して書いたので文章多め。この勢いを消したくないのであまり修正もしていません。

最近ソースばっかり書いてたから、なんかこういうことが頭に浮かびました。でもこの話には実はまだ続きがあります。もういいよ、って感じなんですけど、今日たまたまこれにつながることがあったので、次回はそれを書きたいと思います。

<