まんじ

フリーランスなウェブエンジニアをしてますう。25歳からプログラミングを始めて27歳でフリーランスエンジニアになって生きてます

Pyhtonの実務レベルを解説だょ(実際、文法自体はあんま不要)

  • 2024/06/03
  • 2024/06/03
  1. Python
Pyhtonの実務レベルを解説だょ(実際、文法自体はあんま不要)

始めに

こんにちは!まんじです!

今回はPythonの実務レベルを解説だょということで書いておきたいと思います。

結論から書くとここらへんがPythonで実務レベルって言ってもいいのでは?ぐらいカナーと思います。

  • Pythonに限らずプログラミングで必要な基本的な概念を理解して使える
  • Pythonの関数型の処理などの少しニッチだけど便利な文法が使える
  • Pythonで単体テストが書ける
  • Pyhtonで実務するにあたって必要な関連知識を抑えてる
    • APIサイドならフレームワークとデータベースレイヤーとデータの流れを理解している
    • AWS側のLambda jobなどを書くならAWS周辺
    • スクレイピングなどのデータ処理を担当するならAPIやSQLやSeleniumなど
    • AI系の場合はデータ処理と機械学習に関する部分

基本的には実務で担当する役割に対して必要なところができるかってのが実務レベルです。

例えば、APIサイドならフレームワーク、データベース(マイグレーションやSQLなど)、APIたてる、APIテストするなどなどです。

Pythonに限らずプログラミングで必要な基本的な概念を理解して使える

Pythonを書くと言っても、他の言語と同様に基本的なプログラミング言語の共通概念を理解して問題なく使える必要があります。

  • 変数
  • 定数
  • 配列
  • 連想配列
  • メソッド(関数)
  • 文字列操作
  • オブジェクト指向
  • デコレータ
  • 型の概念
  • if文
  • forループ
  • whileループ
  • 正規表現
  • 例外処理

大体上記のような内容がプログラミングの基本的な概念というか文法です。

Pythonでも他の言語同様にこれらが必要です。

他の言語、例えばJavaScriptと比べるとPromiseとかは最初から登場しない(一応Pythonにもasyncはあるけど)ので、他の言語に比べると基本的な文法は実務レベルだとしても抑えやすいかなと思います。

Pythonの関数型の処理などの少しニッチだけど便利な文法が使える

関数型の処理はJavaScrioptではごく普通に使われるんですが、Pythonでも使われます。

  • リスト内包表記
  • map
  • filter
  • reduce
  • lambda

基本的にこれらの処理はforループとかで実装できるのでいらないっちゃいらないんですが、実務でこれらの文法を使う人もチラホラいる気がするので、ここらへんが必要です。

プログラミング入門してたの頃はmapにlambda(無名関数)とかを使う意味が分からないんですけど、慣れてくるとごくごく自然に使う意味とか意識せずに、なんか使うようになります。

ちなみに関数型の処理を使う理由はスコープの範囲を小さくしてバグを起こしにくくする的な意味合いなどがあります。

リスト内包表記に関しては処理速度が早いとか、便利とか、いろいろ言われています。

Pythonで単体テストが書ける

インテグレーションテストも含めなんですけど、実務だとバックエンド側のほうがテストがしっかり書かれるケースが多いです。

Pythonでコードを書いたら、それをテストしてあげる必要があります。

手動で実行して「動きます!!!」ってのもそうですし、pytestなどのユニットテストライブラリを使っていろんなケースで想定通り動くかをちゃんと試すというよりかは、動くことを保証するために書くという感じです。

自分1人でコードを書いてると特に書く必要性に迫られないんですけど、チーム開発だと必要になる確率が高めです。

実務に入る前に、テストの概念を多少抑えておくと実務でつらすぎて無理すぎる…みたいなことは減るかなと思います。

境界値テストや、異常値テストや、正常値テストなどなど呼び方はいろいろありますけど、そういったテストケースをなんとな〜く知って書ける必要があります。

入門レベルだとシンプルに関数のテストだけなんですけど、実務になってくるとMockとかSpyとかが出てきて関数のコールした回数やら引数やら一連の処理をテストすることになります。

Pyhtonで実務するにあたって必要な関連知識を抑えてる

Pythonで実務をするときはPython単体で書くことはほぼなくて、基本的に何かしらの目的のための手段として使われます。

なので、必ず関連知識というよりも目的の何かのためにそれをPythonで書いてあげる、みたくなります。

例えば、データ処理系のエンジニアでやるなら、Pythonからデータベースを処理するためにPythonのORMなどを使うのでORMの知識とデータベースのクエリ言語(SQL)を理解して使える必要がある、みたいな感じです。

ジャンルごとに軽めに解説してみます。

APIサイドなら、フレームワークとデータベースレイヤーとデータの流れを理解している

APIサイドでウェブエンジニア(ソフトウェアエンジニア)としてバックエンド開発をする場合は、基本的には以下の知識が必ず最低でも必要です。厳密にはもっといろいろミドルウェアとかも入ってくるので必要。

  • フレームワークの知識(Djangoが使われてるならDjango)
  • データベースレイヤーの知識(SQLやデータベース)
  • データの流れ(フロントからサーバーからデータベースまでどうデータが行き来してるのか)

上に書いた3つは、未経験からエンジニア始めるぐらいの最低限の部分で、実際はもっといろいろ入ってきます。

Redisのキャッシュとか、AWSのS3とかlambdaとかと疎通したり、外部サービスと連携したり、さらにいろいろな開発知識が必要になります。

ただそこらへんに関して言うと、実際に実務しながら調整とキャッチアップをしていくようなイメージです。

Pythonベースでそこらへんの周辺知識をまるっと抑えられるぐらいになると時給単価で4000円ぐらいのエンジニア、さらにアーキテクチャとか含めてできるようになると単価で時給単価で5000円以上ぐらいになるかなーってのが個人的な感想です。

AWS側のLambda jobなどを書くならAWS周辺

バックエンドエンジニアだと基本的にはAWSらへんのクラウドの知識がある程度必要です。

EC2, S3, lambda, RDS, SQS, SNS, EKS, …etc

特にlambda jobらへんとかは結構使われてる印象なので、AWSの知識?経験?勉強?が必要になるケースも多いです。

フロントエンド担当の人よりもバックエンド担当の人のほうがクラウドは当然使えるよね感あります。

AWS以外だとGCPかFirebaseあたりが定番です。

スクレイピングなどのデータ処理を担当するならAPIやSQLやSeleniumなど

Pythonで実務をする場合、データエンジニアというポジションなんかもあります。

具体的にやることはスクレイピングしてSQLでつっこむとか、SQLでデータを整えるとかで、データサイドを担当する場合にはスクレイピング関連の知識とSQLが必要です。

スクレイピングに関してはSeleniumとか使ったり外部のAPIを呼ぶって部分が必要です。

SQLに関してはORMを使った場合から素のSQLを書くケースまであるので、SQLのやや深めな知識が必要になります。

データエンジニアの人からORMじゃなくて素のSQLが書けるかみたいな部分を技術面接で見てるおって少し前に飯食ってるときに教えてもらいました。

AI系の場合はデータ処理と機械学習に関する部分

データ処理は上のデータエンジニアとほぼ同じなんですけど、それに加えて機械学習の知識も追加で必要になります。

ある程度簡単なアルゴリズムを把握してただライブラリにつっこんでモデル作って簡単に使うケースから、もっと低レイヤーなところだとかなり学術的な内容になるので自分はそこは受ける企業によってレベルがマチマチだと思います。

学術レベルの論文が必要なところもあれば、すでにできたアルゴリズムを問題なく使ってデータモデル作ってデータつっこんでからアウトプットできればOKなどなど。

(専門ではないのであまり分からない)

AI系の場合はアプリケーションレイヤーのAPI側とかの知識はいらないんですけど、機械学習系やデータ処理の知識(Pythonではない)が必要と言う感じで、それをPythonでただ書いてあげるってイメージ。

まとめ

自分が実務で担当するであろう領域の部分を意識してPythonを勉強すると良いかもしれません。

基本的に実務入る前に実務レベルをカバーするのは無理なので、ある程度のところだけ抑えて、実務に入ってから必死こいてキャッチアップするほうが効率は良いです。

自分で勉強して「PythonのORMでSQLが使えるぜ!」みたく思っていても、実際実務だともっと複雑な要件のもとでテーブルをjoinしまくってその条件にサブクエリ書いて〜みたいな複雑なものも出てきたりします。

あとは書き方もこっちのがパフォーマンスが良いとか共通化するとかシビアなことも要求されるので、実務入り立ての頃は結構苦労します。

なので、ある程度最低限の勉強をしたらレッツ・実務をしてボコボコにされながら成長していく必要があります。

まんじ

フリーランスなウェブエンジニアをしてますう。25歳からプログラミングを始めて27歳でフリーランスエンジニアになって生きてます