@ug23 といいます。Twitterは @ug23_です。よろしくお願いします。
TechTrainではサーバサイドをメインでメンタリングしています。
本記事は【Mentor Ver.】TechTrain Advent Calendar 2019の16日目の記事です。
昨日は @kohey18 さんのNuxt.jsとcontentfulとNetlifyで作るWebサイトでした。
TL;DR
ここから始まる一連のツイートを読んでください。
1からプログラミングはじめた学生によく教えてるんだけど、1人開発だけどもこれらを口酸っぱく言ってた気がする
— ゆーじ / Yuji Imagawa (@ug23_) August 30, 2019
・自分が扱っているものが想定通りか確かめる
・少なくとも明日の自分が読めるように意味のある名前をつける
・自分が知っている方法に持ちこめるように問題を分割したり加工したりする
背景
これをツイートした当時、ちょうど勤務先でインターンに来ていた学生のメンターをやっていました。
プログラミング経験はUdemyをちょっとやった、ということでHello, worldを書いたり、かんたんな文法は覚えているようでした。
彼が統計や分析のためにWebスクレイピングをやるということで、Pythonのライブラリを用いながらコードを書いていましたが、プログラミング初心者が躓くであろうポイントにたくさん引っかかっていました。
ただ、「自分もそうだったなぁ…」と思いながら教えていたり、「ただコードが動くようにするだけでなく、なにか1つ覚えて帰ってもらおう」という気持ちでメンタリングしていたのでその後のTechTrainのメンタリングに役に立っている気がします。
今回はそうしたポイントについて説明します。
変数や関数の戻り値が自分の想定通りか確かめながら進めよう
自分のやりたいことを実現するためにQiitaや技術ブログでのコードをコピペして動かす、というケースはよくあると思います。
私もよく知らない技術や初めて触るライブラリなどはそういう雑なやり方をしがちです。
問題になるのはそれを自分の書いているコードにそれを生かす場合です。
慣れていれば「この人は最初に○○クラスなのをそのままxxメソッド使ってるから自分のコードならyyyかな?」と想像できますが、コピペしたらとりあえず動くだろう、写経して動かそうという気持ちだと動きません。
そうでなくてもよくわからないライブラリを使っていたりすると自分がなにをやっているのかわからなくなりがちです。
- Rails文脈なら
ActiveRecord::Relation
なのかmodelのインスタンスなのか? - PythonのBeautifulSoupではTagインスタンス(中のTagも走査可能)なのか、Stringの値なのか?
- ほかにも日付型なのか、日付を格納したただの文字列なのか?
いろんな場合があります。コードをコピペしたり、メソッドチェーンしながら自分のほしい値を取りたい場合**自分が扱っているものが想定通りか?**を考えてみましょう。
乗り越え方としてはこまめに(愚直に)printデバッグをしたり、型を確認するメソッドを使ったりするとよいかもしれません。
興味があればテスト駆動開発を実践するのもアリですね。
少なくとも明日の自分が読めるように意味のある名前をつけよう
「これって可能なのかな?」
「とりあえず動かしてみてから考えてみよう」
「動かない、こっちで試してみよう」
などとガチャガチャしてると自分で何をやってたかわからなくなりがちです。
変数名が a
とか aaa
とかになってると**どこまでうまくいっていたのか?もややこしくなりがちです。
ちょっと時間があいたり、明日出社したときに自分がなにをやっていたかわからなくなって最初からやり直す羽目になりがちです。
今のうちから変数名やメソッド名、クラス名にわかりやすい名前をつけるよう努力しましょう。特に、焦っているときほど。
もし、これからエンジニアを職業としてやっていきたい人は絶対名前をつける力が必要になるのでサボらずに鍛えましょう。
鍛え方としては以下の方法が考えられます。
- みんな大好きリーダブルコードを読んでみる
- 社内のコードを読んでみる: 名付けについて良いと思ったところ・意図がわからなかったものを書いた人に聞ければ聞いてみる
- 自分のコードを読んでもらってフィードバックをもらう
あとから思い出しやすくなっていると「調子どう?」と聞きにきた先輩に質問するとき楽だし、明日の自分も楽です。
質問される側としてはいちいち説明されるより、名前が読みやすい形になっている方がとてもありがたいです。
問題を分割したり変形したりして自分が使い慣れている形に持ち込もう
「このデータからこれを抜き出すにはこれをxxxしてyyyしないといけない。yyyの方法がわからない」
「yyyって○○ってことだからこないだのあそこでやったのをちょっと変えれば一緒だよ」
「あっ」
仕事って完全に同じ仕事は極めてまれですが、同じような仕事はよくあります。
直面している問題を少し変形したり、データの形をちょっと変えたりすれば自分が書いてきたコードや他で読んだコードと同じような処理で済むよ、ということはよくあります。現状の状況をうまく使ったり、問題をよりかんたんな変形できないか考えてみましょう。
こういう問題の組み換えみたいな脳、自分はどこで鍛えたんだって思いますが今思うと高校数学と大学1年生のときの数学だろうなと思いました。
もちろん、その形は実はあんまりよくないんだという話は後々出てくるかもしれませんが、一旦はスムーズにかける方で、レビューでより良い方法をもらえたら勉強がてらそっちに直すという動きはできると思います。
逆に言えばそういう得意なもの・慣れているものをある程度色々持っているとスムーズに実装できるし、自分のカンペみたいなのも作れて効率が上がるかもしれません。
最後に
こうしたポイントを考えながらプログラミングできると成長をより加速できるかもしれません。
それでもわからないことはTechTrainに登録して、私、あるいは他のメンターに聞いてみましょう。