連載:エンジニアの「プロの所作」とは?
「自分はプログラミング学習に向いていないのではないか」
「プロのエンジニアとして働いている姿が想像できない」
そんなあなたに、ただコードを書くスキルだけではなく、普段プロのエンジニアがどのように考えて行動しているかをお伝えする連載です。
PyQは、Python学習者のあなたが「プロとして活躍できる」ということをサービス全体の目標として、 問題の作成、システムの構築、ユーザーの質問への回答、サポートを行っています。
そのサービス運営のポリシーを、Python学習者であるあなたと共有することで、 Python学習の先に目指しているものの一つ、「プロのエンジニア」という姿が明確になり、 不安が少しでも拭えればという思いで、連載を開始しました。
エンジニア「プロの所作」は14回の連載予定で、本記事はその1記事目です。
自分主体で考えて作る - まず自分で調べる
PyQは、「自分主体で考えて作る」を実践するのがプロのエンジニアと考えています。
私達が使う技術は日々進歩しています。
プロのエンジニアは常に新しい技術を学び、使っていくことを繰り返しています。
しかし、新しいことをすべて学習し暗記することは不可能です。必要なときに必要なことを調べて利用できるかが重要です。
まず自分で調べる
エンジニアは、わからないことがあった場合はまずは自分で調べます。
- 公式の情報があれば見る(公式の情報とはライブラリなどの作成元が書いたドキュメント)
- 「自分の知らないライブラリーや解決策があるのでは?」と考えて調べる。
- 可能なら自分ができる範囲で実装する。
しかし、数分調べてわかりそうにないときは、周りの人に頼りましょう。
- チーム、社内に詳しい人がいる場合は聞く。
- 外部に容易に聞ける場合は聞く。
プロのエンジニアはいつも知っていることだけで実装していません。 その都度、調べながら実装しているのです。
もちろん知っていることが多くなれば実装も早くなりますが、 最初から全て知っている人はいません。毎日の経験の積み重ねがエンジニアの知識を増やしていきます。 わからないことは調べる癖をつけましょう。
具体的な調べ方の例
わからないことがある時、プロがどのように調べていくのかの具体例を提示します。
例
以下のようなコードを見かけました。 range(*param)
の部分のアスタリスク( *
)の意味がわかりませんでした。
>>> param = [2, 10] >>> list(range(*param))
以下のように考えて、解決してみましょう。
1:検索する
まずはコードをコピー・アンド・ペーストして検索してみます。Pythonのコードなので先頭に「Python」をつけます。
コピーして検索してみましょう
Python range(*param)
良さそうな情報が見つからないので、range()は関数なので、関数とアスタリスク(*)で検索してみます
コピーして検索してみましょう
Python 関数 *
関数の引数に*
や**
を書く文法を解説しているブログ記事が見つかりました。関数定義の引数の話ばかりでてくるので呼び出し元の引数の意味を持つ「実引数」を追加します。**
のほうが*
よりも使われている意味が少なそうなので、**
にしてみます。
コピーして検索してみましょう
Python 実引数 **
説明しているブログが見つかりました。
[Python]常識ですよ?と言われないための引数入門 - くろのて
引数の展開 (Unpack arguments) 呼び出しの場合は *, ** は引数の展開を意味します。アンパックとも言います。 リスト(タプル)や辞書の内容をそのまま引数として展開(適用)することができます。 - *(アスタリスク1つ) はリスト(タプル)を「位置引数」「デフォルト引数」「可変長引数」に対して展開します。 - **(アスタリスク2つ) は辞書を「位置引数」「デフォルト引数」「キーワード可変長引数」に対して展開します。
「アンパック」と呼ばれる文法のようです。
コピーして検索してみましょう
Python アンパック
Pythonの公式ドキュメントが見つかりました。
4. その他の制御フローツール — Python 3.7.2 ドキュメント
2:サンプルを書いてみる
集めた情報を元に使い方を確認します。
集めた情報
実引数に
*
や**
がついているとリストや辞書を展開して関数を呼び出します。 range(*param) は range(2, 10) と同じ意味になります。
意味がわかったところで、実行してみます。情報の更新日が古く、自分が使っているPythonやライブラリのバージョンに合わない場合があるので手元で再現しましょう。
プログラムを動かしてみましょう
>>> param = [2, 10] >>> list(range(*param)) [2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(2, 10)) [2, 3, 4, 5, 6, 7, 8, 9]
range(2, 10)
と同じ結果が出力されているので動きの意味は間違いなさそうです。
調べる為のキーワードが見つからない時
上の例は「実引数」などのキーワードを知らない場合は見つからない可能性があります。 キーワードなどがどうしてもわからないときは周りに質問しましょう。周りに詳しい人がいない場合は、PyQなどの質問できるサービスが役に立ちます。
PyQのPython学習サポートについては、下記のドキュメントを参照してください。
学習サポートの活用方法は、PyQのクエストでも解説しています。 pyq.jp
最後に
「ここを調べれば解決する」という「調べ方」を身につけることが重要です。調べて、何かを学んだら、できるだけコードを書いて実行しましょう。実装すると記憶に残り、似たような問題あったときに対応できるようになります。
連載 エンジニアの「プロの所作」 について
プロの所作の概要と、他の項目については目次をご覧ください。