Flutter研修で得たプログラミングの問題解決のための10の方法【第24号】
こんにちは!
テクノシップブログです!!
今年梅雨なんてあったっけ?と思ってしまうほど、猛スピードで夏到来ですね。
みなさま体調には気をつけながら夏を乗り越えていきましょうね🌞🌞
さて、私は6/1よりエンジニアとしてのキャリアがスタートした訳ですが、
最初の1ヶ月は「研修期間」ということで、一つの言語を使った研修課題に取り
組みました。
研修も終わり、なんとか最初の1ヶ月を乗り越えることができましたが、
よくよく振り返ってみると、苦しくも学びの多い1ヶ月であったと思っています。
なんと言っても、「Flutter」という初めて体験するフレームワークを使用した
ものだったので、モバイルアプリ開発の経験すらない私にとっては未知の体験
だったのです。
しかし、たとえ初めてであっても、途中で出くわす問題に対して、どのように
対処すればいいのかということを自分なりに情報収集して考えながら過ごしてきた
つもりでいます。
ということで今回の記事では、私が素人なりに情報収集して考えて実行した
プログラミングに関する問題解決のための10の方法
を共有させていただきたいと思います!!
ぜひ参考になれば幸いです!!
分かりやすさに注力したので、ぜひ参考にしてみてください!!
1. プログラミングに関する問題解決のための10の方法
① エラー文を繰り返し読む
まずは何と言っても、自分が直面したエラーに関して、そのエラー文を
しっかりと理解することです。
言語によっては、エラーが起こった際に、どのようなところにエラーが起こって
いて、どうすれば解決できるのかということを指示してくれるものもあります。
そういったヒントを手がかりに、じっくりとエラー文の内容を読み込んでみる
ことが大切だと考えています。
英語が苦手な場合でも大丈夫です。今はGoogle翻訳などの優れた翻訳機能も
ありますし、しっかりと和訳すれば理解できるはずです。
この方法は、何もエラー対処だけに限ったことではありません。初めて触れる
コードを理解する力もつけることができます。
「何が問題なのか」、「何をしようとしているのか」という点を意識して理解
に努めることが重要だと思います。
② エラー文を検索にかける
これはエラー対処としては最も王道の方法だと思いますが、本当に効果があると
思います。なぜなら、自分がそのエラーに出くわしたということは、自分以外の
誰かも必ず同じエラーに出くわしている可能性が高いからです。
人気のある言語や実務でよく使われるフレームワークであればあるほど、日本語
での検索結果もヒットしますし、本当に役に立ちます。
ちなみにFlutterは、私の感覚ではあまり日本語の記事でヒットしたものはわずか
でした。今後私が自分で出会ったエラー対処法などを公開していくことで増やして
いきたいと考えています。
③ エディターのブレイクポイントやコンソールを利用して探索する
特に多くの変数を用いて、その値が更新されていくような処理を実装している
場合などは、この方法が特に役立つと思います。
私は研修で「電卓アプリ」を実装しました。電卓アプリを実装するには、
計算のロジックを組む場面で、数多くの変数を用意する必要がありました。
そして、それらに格納されている値がどのような動きをするのかという点にも注意
を払う必要がありました。
そのような時に、エディターに搭載されている「ブレイクポイント」と
「デバッグコンソール」が役に立ちました。やり方としては、以下のような手順
となります。
1. 調べたい位置にブレイクポイントを置く
例えば、上のコードの119行目の「getDisplayText」というメソッドで引数として
受け取る「value」の中身を調べたいとします。このメソッドはユーザーが数値の
ボタンを押したときに、その値を受け取り、画面上に表示するためのメソッド
です。
この時以下のようにメソッドの位置でブレイクポイントを打ちます。
そして、このメソッドを実行させるために何か数値ボタンを押すと、
ブレイクポイントを打った位置で処理が止まり、デバッグコンソールを利用して
値を調べることができるようになります。
今回は、「9」を入力したので、値を調べるために、コンソールに「value」と
入力すると、しっかりと「9」という値を受け取ることができているということを
確認することができました。
この方法は思い通りの挙動をしてくれない時などの原因調査に役立ちます。
私もこの方法を多用し、複雑な処理をなんとか実装することができました。
④ 同僚や先輩に話す
これは、決して「質問する」ということではありません。
自分がつまづいている箇所について、どうしてそうなったのか、どのように解決
したいのかをとにかく声に出して話してみるのです。
これが思いのほか効果的で、自分で話しているうちに解決策が浮かんでしまう
ということが沢山ありました。調べてみると、「ラバーダッキング」という方法
に近いらしく、声に出してアウトプットするうちに、脳内で情報が整理され、
アクションを見つけやすくなったり、記憶の定着が高まるというものらしいです。
ラバーダッキングについては、以下の記事が参考になりますよ!↓↓↓
また、ラーニングピラミッドというものもあり、やはり人に話すことは
効果絶大のようです。
⑤ 質問する
これも王道の方法ですね。
しかし、「どうすればいいですか?」や「ここが分かりません」のような
一言質問は絶対に禁句です!!
なぜこのような質問がダメなのかというと、もちろん相手の時間を無駄に使って
しまうということも挙げられますが、それ以上に、解決の経験をすぐに忘れて
しまうからです。
自分で悩みに悩んで、様々な解決策を試したけど、それでも上手くいかない時
に質問するように心がけましょう。
そうすることで、そもそも自分で散々悩んだという経験がインパクトになります
し、それなのに質問した相手が提示してくれた方法ですんなり解決することができ
れば、「なんだそんなことだったのか〜」や、「よかった、スッキリした!」
のような印象が残るはずです。
⑥ 普段から好奇心を持って物事を考える
これは直接はプログラミングの問題解決には繋がらないかもしれませんが、
大切な「論理的思考力」を鍛えることができます。
私は研修中にロジックの組み方がうまくいかず、先輩に質問しました。
「どうすればロジック力を鍛えることができますか?」
すると先輩は。
「好奇心を強く持って、身の回りの物事に関して「なぜ」を考えてみること」
だと言ってくれました。
「なぜ」を追求することで、物事の仕組みが分かっていきます。仕組みが
わかれば要素をどのように組み合わせるかだけなので、もちろんロジックを組む
力も上がってくるということなのかと私は解釈しました。
エンジニアとしては、身の回りのIT技術を使ったものに対して、
「なぜ?」を問いかけてみる癖をつけていきたいところです。
⑦ コンピュータの基礎からしっかりと考えてみる
自分の目の前の実装中の言語やフレームワークに対して、出くわした問題は
本当にその言語やフレームワーク特有のものなのでしょうか?
そのような場合もあるでしょうが、少なくとも私は初めて経験したFlutter
における諸問題に関して、Flutter特有の問題ではない部分がかなり多いように感じ
ました。
例えば、「条件分岐」の実装です。私は条件文をどのように組んだらいいか
分からず、悩んだ挙句先輩に質問したところ。
「コンピュータは「はい(1)」、「いいえ(0)」の2つしか判断できないんだよ」
と教えてくれました。つまり、「はい」か「いいえ」で答えられるように
条件文を書けばいいのかと納得することができ、よりシンプルな記述を行う
ことができるようになりました。
ここまでくると、もはや「コンピュータサイエンス」の領域のような気もします
が、このような基礎的な知識もしっかりと役立つんだということを実感させられた
経験でした。
⑧ 自分が実装したいことをコメントで書いてから実際にコードに落とし込む
私のような初心者は得手して、いきなりコードを書き始めてしまうものです。
最初はいいかもしれませんが、複雑な処理の実装ともなると頭が混乱して
何をやっているのかさえ分からなくなってしまうことも多々ありました。
そんな時に役に立ったのが、
「実装したいことをコメントに残し、一つ一つコード化していくこと」
まず、実装したいことをコメントアウト機能なりを使って言語化します。
ここでは、簡単な足し算を実行したいとしましょう。コメントを使って
処理手順を記載します。
そうして全体の流れを把握したところで、コードを書いていきます。
このようにすることで、今自分がどこの処理を実装しているのかなど、
頭を整理しながら実装しやすくなります。
ぜひ実践してみてください!!
⑨ 一晩おく
これは、悩みに悩んでも解決できないときは、思い切ってその日は終わりにし、
すぐに寝てしまうというものです。
実際に科学的な方法として認められており、「ツァイガルニク効果」
というそうです。人はキリ良く終えたことよりも、キリの悪いところで中断して
しまったことの方が、記憶に残りやすいというものですね。
これをプログラミングにも応用するわけです。
実際、私も一日中悩んでも解決せず、その日は終わりにして寝て、翌朝
再度取り組もうとしたらすぐに解決策が浮かんだということが何度もありました。
今後もテクニックとして使っていきたいですね。
⑩ 学習発信をする
最後はなんと言っても「学習発信」です。
私は必ずしも、「こういうことができるようになりました」や、「こんな効率的な
実装方法があります」などのような内容ではなくてもいいと思っています。
「こういうことができません」という内容でもいいと思います。この発信をする
工程で既に、頭の中の整理が済んでいるというパターンも多いにあります。
その上で、もし解決したら、「悩んでいた時」と「解決した後」のBefore After
を発信すれば、とても価値のある発信になると思います!
「出来ること」も大事ですが、「出来ないこと」にもしっかりと目を向けて
発信していけるといいですね!!
2. まとめ
今回は10個にまとめてみましたが、細かいことまで言えば、もっと方法が
あります。しかし、特に大事だと思ったことで、しかも実際に自分もやってみて
効果があったものを選定してご紹介したので、この記事を読んでくれたあなたの
ためになっていれば幸いです。
ちなみにこのような「10個の方法」というテーマにするにあたり、以下の記事を
参考にさせていただいたので、一応共有しておきます。
これからもお互いエンジニアとして頑張っていきましょう!!
3. テクノシップ第24号プチ編集後記
〜Flutterをやってみて、とても楽しくなり、今後極めていきたいと思うように
なりました。今後はFlutterエンジニアを目指していくのもありだななんて思った
りもします笑〜