Pythonの実務レベルを、基礎文法・関数型の処理・単体テスト・担当領域ごとの関連知識の観点から解説します。
まんじです〜
今回はPythonの実務レベルについて解説していきます。
結論から書くと、ここらへんができてれば「Pythonで実務レベル」って言ってもいいのでは?ぐらいのレベル感です。
- Pythonに限らずプログラミングで必要な基本的な概念を理解して使える(基礎文法)
- Pythonの関数型の処理などの少しニッチだけど便利な文法が使える
- Pythonで単体テストが書ける
- Pythonで実務するにあたって必要な関連知識を抑えてる
- APIサイドならフレームワークとデータベースレイヤーとデータの流れ
- AWS側のLambda jobなどを書くならAWS周辺
- スクレイピングなどのデータ処理を担当するならAPIやSQLやSeleniumなど
- AI系の場合はデータ処理と機械学習に関する部分
基本的には、実務で担当する役割に対して必要な実装ができるかってのが実務レベルです。
例えば、APIサイドならフレームワーク、データベース(マイグレーションやSQLなど)、APIたてる、APIテストする、フロントエンドとの連携を把握できる、などなどです。
ぶっちゃけ、実務レベルって言っても会社とか仕事とかポジション次第で、同じPythonでも要求されるレベルは結構変わるので、一概には言えないところではあります。
が、、、大体こんな感じなのでは?ってのはあるので、今回はそこらへんを解説します。
(1) プログラミングで必要な基本的な概念を理解して使える
Pythonを書くと言っても、他の言語と同様に、プログラミング言語の基本的な共通概念は普通に使える必要があります。
- 変数
- 定数
- 配列
- 連想配列
- メソッド(関数)
- 文字列操作
- オブジェクト指向
- デコレータ
- 型の概念
- if文
- forループ
- whileループ
- 正規表現
- 例外処理
こういうやつですね。ざっくりとした基礎文法です。
JavaScriptと比べるとPromiseみたいなやつが最初から登場しない(一応Pythonにもasyncはあるけど)ので、他の言語に比べると基礎文法は抑えやすいです。
JavaとかCとかGoだと、オブジェクト指向やらポインタやらが最初から出てきて感覚的に理解しにくいものも多いんですが、Pythonはそこがだいぶ楽です。
Pythonの基礎文法はドットインストールあたりの入門講座を1~2周軽くやれば、なんとなくは把握できます。
なんとなく把握できたら、あとはフレームワーク使ってウェブアプリなり何かしらを実際に作っていくと、文法の理解度が勝手に上がっていきます。
とりあえずまずは基礎文法、これは実務レベルでは必須です。
(2) 関数型の処理などの少しニッチだけど便利な文法が使える
関数型の処理はJavaScriptなんかだとごく普通に使われるんですが、Pythonでも使われます。
- リスト内包表記(これは関数型の処理かは不明...)
- map
- filter
- reduce
- lambda
基本的にこれらはforループでも実装できるので、いらないっちゃいらないんですけど、実務で使う人もチラホラいるので、チーム開発する以上は読めて書ける必要があります。
入門したての頃はmapにlambda(無名関数)を渡す意味が分からないんですけど、慣れてくるとごくごく自然に、意味とか意識せずになんか使うようになりますw
ちなみに関数型の処理を使う理由は、スコープの範囲を小さくしてバグを起こしにくくする的な意味合いなどがあります。
リスト内包表記に関しては、処理速度が早いとか便利とか、いろいろ言われています。
リスト内包表記以外の関数型処理は、Pythonだとそこまで積極的には使われないです。関数型の処理を身に付けたいなら、JavaScript(TypeScript)あたりでなんか作ってると、Pythonでも同じように書けるようになります。
関連記事: JavaScriptの実務レベルについて解説します
(3) 単体テストが書ける
インテグレーションテストも含めてなんですけど、実務だとバックエンド側のほうがテストがしっかり書かれるケースが多いです。
Pythonでコードを書いたら、それをテストしてあげる必要があります。
手動で実行して「動きます!!!」じゃなくて、pytestなどのユニットテストライブラリを使って、動くことを保証するために書くって感じです。
1人で書いてるとテストの必要性に迫られないんですけど、チーム開発だとほぼ必要になります。(そういうルールだからってのもあるし、バグが少なくなるからって理由もある。)
実務に入る前にテストの概念を多少抑えておくと、「実務つらすぎて無理...」みたいなことは減ります。
境界値テスト、異常値テスト、正常値テスト、呼び方はいろいろありますけど、そういったテストケースをなんとな〜く知って書ける必要があります。
入門レベルだとシンプルな関数のテストだけなんですが、実務になるとMockとかSpyとかが出てきて、関数のコール回数やら引数やら一連の処理をテストすることになります。
MockとかSpyは最初ちょい難しく感じがちなので、実務前のレベル感だと、pytestあたりで適当に雰囲気でちょいちょい書けるぐらいでいいのかなーと思います。
※ ユニットテスト覚えたての頃は全関数にテスト書こうとしちゃうけど、時間かかりすぎるので勉強段階ではある程度でOK
あと最近は、ユニットテストのコードはAIに書いてもらってチェックするだけでもいけるケースが多いです。MockとかSpyも、AIに聞いて1つ1つ理解していけば大丈夫です。
(4) 実務で必要な関連知識を抑えてる
Pythonで実務をするとき、Python単体で書くことはほぼなくて、基本的に何かしらの目的のための手段として使われます。
例えば、データ処理系のエンジニアなら、PythonからデータベースをいじるためにORMを使うので、ORMの知識とデータベースのクエリ言語(素のSQL)を理解して使える必要がある、みたいな感じです。
ジャンルごとに軽めに解説してみます。
APIサイドなら、フレームワークとデータベースレイヤーとデータの流れ
APIサイドでPythonのバックエンド開発をする場合は、最低でもこのへんが必要です。
- フレームワークの知識(Djangoが使われてるならDjango)
- データベースレイヤーの知識(SQLやデータベース)
- データの流れ(フロントからサーバーからデータベースまでどうデータが行き来してるのか)
これは未経験からエンジニア始めるぐらいの最低限の部分で、実際はもっといろいろ入ってきます。
Redisのキャッシュとか、AWSのS3とかLambdaとの統合とか、外部サービスと連携するためにAPIの仕様をドキュメント読んで把握したりとか、関連する開発知識が普通に必要になります。
ただそこらへんは、実際に実務しながらキャッチアップしていくしか道がほぼないです。
実務前に全部抑えちゃおうぜ系はほぼ無理(時間かかりすぎだし1人だと無理)なので、最低限のところだけやっておいて、実務で必死こいてキャッチアップしてレベルを上げていく感じになります。
Pythonベースでそこらへんの周辺知識をまるっと抑えられると時給単価4000円ぐらいのエンジニア、さらにアーキテクチャとかまでできると時給単価5000円以上ぐらいかなーってのが個人的な感想です。
関連記事: 直接契約と単価交渉してフリーランスエンジニア月収75万円(ぐらい)になった頃のお話
AWS側のLambda jobなどを書くならAWS周辺
バックエンドエンジニアだと、基本的にAWSらへんのクラウドの知識がある程度必要です。
EC2, S3, Lambda, RDS, SQS, SNS, EKS, ...etc
特にLambda jobらへんは結構使われてる印象なので、AWSの知識?経験?が必要になるケースも多いです。
フロントエンド担当よりバックエンド担当のほうが、クラウドは当然使えるよね感があります。
AWS以外だとGCPかFirebaseあたりが定番ですが、AWSが1番使われてます。
AWSが関わってくると、大体EKSとかのクラスタあたりも理解して、サービスの全体像も把握してる人が多い印象です。(自分はフロントエンドメインなのでよくわからん)
スクレイピングなどのデータ処理ならAPIやSQLやSeleniumなど
Pythonで実務をする場合、データエンジニアというポジションもあります。
具体的にはスクレイピングしてSQLでつっこむとか、SQLでデータを整えるとかで、データサイドを担当するならスクレイピング関連の知識とSQLが必要です。
スクレイピングはSeleniumを使ったり、外部のAPIを呼んだりする部分ですね。
SQLはORM経由から素のSQLを書くケースまであるので、やや深めの知識が必要になります。
少し前に飯食ってるときに、データエンジニアの人から「技術面接では、ORMじゃなくて素のSQLが書けるかを見てる」って教えてもらいました。
AI系ならデータ処理と機械学習に関する部分
データ処理は上のデータエンジニアとほぼ同じで、それに加えて機械学習の知識が必要になります。
簡単なアルゴリズムを把握してライブラリにつっこんでモデル作って使うケースから、もっと低レイヤーでかなり学術的な内容まで、受ける企業によってレベルはマチマチです。
学術レベルの論文が必要なところもあれば、既存のアルゴリズムを問題なく使ってデータつっこんでアウトプットできればOKなところもあります。
(自分は専門ではないのであまり分からない)
AI系の場合はアプリケーションレイヤーのAPI側の知識はいらないんですけど、機械学習やデータ処理の知識(Pythonではない部分)が本体で、それをPythonでただ書いてあげるってイメージです。
まとめ
実務で担当するであろう領域を意識してPythonを勉強すると良いです。
厳密にはPythonを勉強するというより、Pythonの文法を使った実装範囲の知識をカバーしていくイメージで、Python単体を実務で使うことはほぼありません。
(JavaScriptで仕事したい、も一緒で、実際はJavaScriptという言語を使ってReactとかで何かしらを実装する、になります。)
そんでもって、実務に入る前に実務レベルを全部カバーするのは無理なので、最低限のところだけ抑えて、実務に入ってから必死こいてキャッチアップするほうが効率は良いです。
独学で「PythonのORMでSQL使えるぜ!」と思ってても、実務だと複雑な要件でテーブルをjoinしまくってサブクエリ書いて〜みたいなのが普通に出てきますし、パフォーマンスとか共通化とかシビアなことも要求されるので、実務入りたての頃は結構苦労します。
なので、自分が仕事でやりたい領域の最低限の部分だけ勉強して、さっさと仕事に応募して、実務でボコボコにされながら成長していくのがおすすめです。
ということで終わりです〜。


