がじぇったー

お金と電化製品とプログラミングの部屋

Udemyのシリコンバレー発講座でPythonを学び、月10万円を稼げるようになるまで

TL;DR(この記事で言っていること)

  • オライリーPythonを勉強するのは難易度が高い(挫折しやすい)ので辞めたほうがいいと思う

 

 

 

  • いきなりpythonで稼ぐ、とか無理なのでまずは身の回りの業務をPythonで自動化してツール作成の勘所とスキルを得るのが大事

 

  • フリーランス(副業)で案件を受注する際、Qiitaの記事がそのまま自己PRになったのでやはりアウトプットし続けることは大事

 

  • Cloud Worksは手数料で20%も持っていかれる(高すぎやろ)ので、あくまでも個別契約をしてくれるお客様を探す場、として割り切る

 

 

 

 

 

はじめに

 


副業でPythonの契約(月10万、プログラムの運用保守契約)を企業様とかわすことができたので、

自分がどういう形で学び、スキルアップしてきたか、記録を残す意味でも書いておこうと思います。


1年前に比べて年収が120万近くアップしました。

 

ちなみにもともとは文系出身で研修の簡単なプログラミングのテストで100点中16点をとったことがあるくらい、素養無しです。

 

以下の流れで月10万を達成しました。

 

 

Pythonの勉強(後ほど紹介するUdemyのPython講座)

↓↑

4~5つくらい身の回りの業務を自動化するプログラムを書く(詰まったらPython講座の該当する箇所を学び直す)

Cloud Worksで案件を受注(ここで10万くらい稼いだ)

Cloud Worksでプログラムを提供したお客様と運用保守契約を受注

 

それぞれのフェーズで何に気をつけてきたかをこの記事で書いていこうと思います。

 

 

 

 

WHO ARE YOU?


経済学部を卒業後、新卒でブラック目のIT企業に入り、そこで2年半近く働きうつ病になりかける。

 

その後、第二新卒というカードを使ってたまたま未経験でもOKな若手を募集していたWEB企業に転職、という経歴です。

 

現在も正社員でそこで働き(6年目)、副業で他の会社でプログラムの開発運用保守を行う、という働き方をしています。

 

 

 

何故プログラミングの勉強を始めたか?

頭悪い理由ですが、黒い画面でコーディングしている姿がかっこいいから、というのが一番の理由。

その次に重度の面倒臭がり屋で単純作業を行うとすぐ眠くなってしまう、プログラムを書いて楽をしよう!という不純極まりない理由から勉強をはじめました。

 

ただ、プログラマの三大美徳「短期・怠惰・傲慢」と言われてるので、割と向いていたかもしれません。


どうやって勉強したか?

 

結論から申し上げると、Udemyで勉強した後、実践ベースで身のまわりの業務をプログラムで自動化させていくことで勉強しました

 
progateやりまくっても、オライリー読みまくって写経しても、かけるようになはなりません。

 

とはいえ、inputが何も無し、常にgoogle任せでやるのは辛いと思います。ただのコピペエンジニアです。

 

私はUdemyの以下の酒井さんの講座を超おすすめします。

Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする

 

 

 

何故おすすめなのか?

めちゃくちゃシンプルな理由ですが、教材のクオリティボリュームがすごいです。あと安い(確か1200~1400円くらい)。そして買い切り

 

Progateやドットインストールもやったことありますが、この講座はクオリティが段違いで、講師が現役でシリコンバレーで働かれてるエンジニアなのでとても実践的です。

 

働かれてる企業(splunk)も我々の業界では超有名で、いいプロダクトです。

 

wordpress教材が12万、で炎上されてる方がいましたが、この教材が12万なら納得です。

 

 

オライリーでいうと、入門 Python3や、Effective Pythonで学ぶような幅広い内容が一つの講座に凝縮されています。

 

上記の本はどっちも色々なブログでいい!と紹介されてますが、自分は挫折しました。

オライリーって日本語わかりにくすぎるし、頭に入ってこないんですよね・・・。

 

入門 Python 3

入門 Python 3

 

 

 

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

 

 

 

 

 全部通しで一から勉強すると、結構なボリュームで3ヶ月くらいかかっちゃいます。なので、必要な箇所に絞って集中して勉強した方がいいと思います。

 

ここでは、副業で求められるスキル、という観点で話します。

 

Pythonフリーランス案件で依頼が多いプログラムは、

  1. スクレイピングで特定のURLから特定の情報を抜き出す
  2. 業務の自動化

 系だと思います。

 

①も②も、xpathやbeautiful sourpの使い方だけでなく、基本的なPythonの文法の理解が必須です。

 

スクレイピングで取得した情報を変数にいれ、その変数を配列になおし、ファイルに吐き出す等、基礎がおさえられてなければ、上記の案件を受注しても苦労するでしょう。

苦労というか、そもそもできないと思います。

 

 

 

ではどのポイントを注力して勉強するか

 

このコースのなかで自分は以下の赤字の箇所を優先して勉強した方が良いと思います。

 

優先度"高"のと箇所ができていれば、他は案件に応じて勉強、で良いと思います

 

ちなみにこのコースをめっちゃおすすめしてるのは、悩みどころであるコードスタイルロギングなどの絶対必要だけど、ベストプラクティスがわからない、というところに対し、しっかりフォローされている点です。お客様にプログラムを提供する以上、この辺は必ず抑えておいた方がいいです。

 
じゃないとprint文まみれの標準出力、何を行なっているかわからない関数、などとお客様につっこまれます。
 
目次 優先度 備考
ここから開始しましょう。 個人的にはvscodeの方が使いやすい
Python環境の設定  
Pythonの基本 基本的な文法の使い方などで、マスト。
データー構造 特にリストと辞書型はよく使うので、要確認
制御フローとコード構造 基本的にif,for,while等がこの章。rangeや内包表記、zip,enumerateなどなど大事な項目が続きます。例外処理もしっかり抑えたい
モジュールとパッケージ

人に提供するプログラムならこの辺はマスト

モジュール化の方法がこの章です。

オブジェクトとクラス クラスを使うほどの案件はないかな
ファイル操作とシステム ファイルの読み込み、ファイルの書き込みの部分はマスト
入門編の終了 応用編に行く前に簡単なアプリケーションの演習 MVCは後でもよい。Django案件はそんな無い。webアプリケーションを作りたい人は抑える
コードスタイル

お客様に提供するプログラムなので、この辺はマスト

ここら辺の項目に対してこうするべき!と取り扱ってくださっているのが有難い

コンフィグとロギング
データーベース  
WEBとネットワーク Jsonの扱いやスクレイピングはこの章
テスト もちろんやったほうがいいが優先度は他に劣る
並列化  
暗号化  
インフラ構築自動化 Ansibleの案件はそんなない
Pythonの便利なライブラリやツールや豆知識 正規表現はマスト
グラフィックス  
データ解析  
キューイングシステム  
非同期処理 asynico  
最後に  

 

勉強の仕方は動画に合わせて写経し、実際にプログラムを実行していく方法がおすすめです。手を動かさないと頭に入りません。

 

 ただ、写経してもわかった気になってしまうので、さっと概要を抑えた後、この後のプログラム作成で迷ったら適宜みる、という勉強の仕方がおすすめです。

 

 

自分の身の回りの業務を自動化するプログラムを作る

次のステップでは、自分の身の回りにある業務を自動化するプログラムを作っていきます。

inputとoutputが必要なプログラムがおすすめです。

例えば、

  • csvファイルを読み込んでjsonファイルに書き出す
  • Excelのデータを読み込み、textデータを吐き出す
  • csvを読み込み、jsonファイルに吐き出し、特定のサービスにリクエストを投げる
  • urlが記載されている、textファイルを読み込み、そのtextファイルに記載されているurlをスクレイピングし、必要なデータをtextにまとめ吐き出す

ナドナド、実践でも使えるような業務があれば、それを自動化するのがおすすめです。

 

個人的には普段の面倒な業務を自動化の対象にしたほうがモチベーションが続きやすいのでおすすめです。

 

プログラムの構成ですが、自分はいつも以下のような構成で作っています。

 

main.pyに大元の流れの処理をかき、個々の細かい処理はmain.pyからscripts配下のプログラムを読み込むようにしています。(需要があれば別記事に・・・)

 

$ tree -L 3
.
├── README.md # 説明
├── input_files # input元のファイルを格納するディレクト
├── logging.ini # logの出力設定を記載
├── main.py # メインプログラム。本ファイルからscripts配下のモジュールを呼び出す
├── scripts
│ ├── *.py # メインプログラムから呼び出す個々のスクリプト
├── output_files
│ ├── *.csv #

 

そうすることでプログラム全体の見通しがよくなります

 

自分でも、もっといい構成があると思っているので、githubなどで実際のPythonでできているSaasのプログラムを見るのがいいのかな、と思っております。

 Datadogとかよく参考にしてます。

 

 

 

クラウドワークスで案件を受注を目指す

 

続いてクラウドワークスで案件を受注を目指します。

 

 

ここでの目的はあくまでもお客様を探すためです。

クラウドワークスやランサーズは手数料で20%も持っていかれるので、ずっと使いづけることはおすすめしません。

毎回毎回コンペになるので、負担も大きいです。

 

自分は初めてすぐに2件案件を受注し、現在も5万円と3万円の案件を受注しています。

 計15マンくらい受注していることになります。

 

f:id:gadgeterkun:20190610165727p:plain

 

案件受注のポイント

 

ランサーズやクラウドワークスは競合が多いです。10人超えはざらです。

そのなかで受注を目指すには何が一番大事でしょうか。

 

逆の立場(発注者側)で考えると答えはシンプルです。

 

その人は要件通りに案件に対応できるか??

 

というポイントです。

 

発注者側は企業に属していることが多いです。その人の一番のリスクは変な人に頼んでしまい、納期までに間に合わなかったこと、です。

 

受注するためには実績が一番です。

 

自分はQiitaのアカウントでよく技術の記事を書いているのですが、案件の内容と似たようなことをやったことがあれば、そのURLを貼り付け、

 

「自分はできますし、この要件に対する解決方法を知っています。なぜなら似たようなことをやったことがあるからです。と返します。」

 

また自分の得意な範囲ではなくても、事前に調べ、詳細に「こういう手順でやります」、というのを伝えます。

 

下記はpythonの案件ではありませんが、例えば以下のようなレベルで、手順まで落とし込んでこうすればできます。やらせてください、ということを伝えます。

 

 

f:id:gadgeterkun:20190610230652p:plain

 

 

受注できたら、最初に3日が大事

自分は最初の3日が大事だと思っています。

案件受注後、発注者のお客様は進捗が全く報告されなかったらどう思うでしょうか?

 

普通にあの人大丈夫かな・・・・?と心配になります。

 

私は必ず

  • 毎日、または隔日の進捗報告
  • 入出力部分を先に作ってプログラムのイメージを合わせる

 

ということをやっています。

進捗報告はいわずもがなですが、

  • 入出力部分を先に作ってプログラムのイメージを合わせる

ということがとても大事です。

 

これはどういうことかというと、例えば

textデータを読み込んで特定の文字列を置換(変換ルールは10個)してcsvに出力する

 

という案件があるとします。

 

自分はまず、

  • textデータの読み込み
  • 変換ルールの作成(一個だけ)
  • ファイル出力

部分だけを素早く作ってお客様に渡して確認してもらいます。

 

入出力のイメージを合わせるということはプログラム作成において非常に重要で、ここの認識をしっかり合わせられていれば、一番怖い手戻りを防ぐことができます。

 

関数のコメントをちゃんと書く

これは酒井さんの講座のdocstringあたりで講義されているところですが、

関数が何をやっているか、という情報は非常に大事です。

Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする

例えば以下のように関数には必ず説明、引数、返り値を書く、というのはあとで読み返す自分にとっても非常に大事です。 

 
def create_json(series):
""" Create Dict Object(intents) from Input CSV Data
Args:
series: 行データ(Series object)
Returns:
dict: 辞書データを作成し、呼び出し元に返す
"""

 

案件終了後に依頼者をフォロー、保守契約の提案

 

案件終了後は連絡先を添えて、必ず以下のようなメッセージを残すようにしています。

 

ご確認有難う御座いました。
バグ対応は納品後も迅速に、もちろん無償で行いますので、何かありましたら遠慮なくご連絡ください。
今後とも宜しくお願い致します。

 

また、案件を依頼してくれた方は必ずフォローしておきましょう。

 

二件目も頼んでくれたら、その方は自分の仕事を認めてくれた、ということです。

 

保守契約を提案したら、高い確率で個人契約を結べると思います。

 

 

 

参考

 

Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする

 

please follow me