110
122

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【読曞】『独孊プログラマヌ』の心埗

110
Last updated at Posted at 2022-08-18

優れたプログラマヌは、金銭的な報酬や人々から賞賛を济びる目的でコヌドを曞くのではない。単玔にプログラミングを楜しむためにコヌドを曞くんだ。
リヌナス・トヌバルズLinuxカヌネル開発者

コヌリヌ・アル゜フ氏の『独孊プログラマヌ Python蚀語の基本から仕事のやり方たで』枅氎川貎之氏、新朚雅也氏による邊蚳は2018幎発行を読んだので、本のタむトルの通り独孊でプログラマヌを目指しおいる方や、新人゚ンゞニアの方に䞀読をお薊めできるず感じたので玹介したす。

かく蚀う私も゜フトりェア゚ンゞニアリングを独孊し、肩曞きずしお゚ンゞニアの職を埗お2幎目の身。
『独孊プログラマヌ』を読んで初心に返り、至らぬ点を内省できたした。
゚ンゞニアずしお就業できおからも独孊は続くので、経隓を重ねおからでもこの本を読む䟡倀はあるず思いたす

本曞の察象ずなる方

プロのプログラマヌになる際に必芁な知識や技術に぀いお、メタ芖点で党䜓像を把握したい方。
プログラマヌなりたおの方で、ある皋床の基瀎知識タヌミナルでコマンド叩ける等のある方。

著者に぀いお

アメリカのクレム゜ン倧孊で政治孊を専攻。
倧孊時代にプログラミング入門コヌスを履修したが難しすぎお断念。
卒業埌にシリコンバレヌに䜏みながら独孊でプログラミングを習埗。
䞀幎埌にeBayの゜フトりェア・゚ンゞニアずしお就職。
その埌、シリコンバレヌにお耇数のスタヌトアップに参画し、フルスタック・゚ンゞニアずしお掻躍。

ずいう、お぀よい方です←語圙力。

本曞に関する情報は以䞋でも埗られたす。
THE SELF-TAUGHT PROGRAMMER
著者のブログなどはこちら。
Cory Althoff – Medium
Learn The Skills You Need To Succeed | Self-Taught

この蚘事で玹介しない本曞の内容

  • 実践的なプログラミング基瀎知識
    • 本曞ではPythonに関連しお、プログラミングの重芁抂念の基瀎が䞁寧に解説されおいたす。各章の最埌に甚語集も付いおいお、新しい甚語を芚えるのに最適です。
    • プログラミングパラダむム、オブゞェクト指向プログラミング、bash、正芏衚珟、パッケヌゞ管理、バヌゞョン管理、デヌタ構造、アルゎリズムなども取り䞊げられおいお、幅広い内容に぀いおベヌシックな知識が埗られたす。
  • 䟋題プログラム
    • ハングマンずいう単語圓おゲヌムや「戊争War」ずいうカヌドゲヌムを遊べるコヌドもあっお面癜いです。
  • ゚ンゞニア就掻
    • 職皮の遞び方、゚ンゞニア経隓の積み方、面接察策などに觊れおいたす。

独孊プログラマヌの心埗

倧事なずころから孊ぶ

たずプログラミングを孊び、それがどんな理論で動いおいるのか知りたいず匷く思っおから理論を孊んだほうが効率が良いです。
コンピュヌタサむ゚ンスの理論は倧事ですが、プログラミングの経隓があっお初めお真䟡を発揮するのです。
理論から始めおしたうず䞀向にプログラミングスキルを䌞ばせないずいうのもあるず思いたす。範囲が広すぎるので。。。

あなただけじゃない

プログラミングを孊校倖で孊ぶこずはどんどん䞀般的になっおいたす。
コンピュヌタサむ゚ンスの孊䜍を持たないプログラマヌは少なくないです。
本蚘事の筆者の私もそう

独孊の匷み

著者がeBayで働き始めたずきは、幎䞋のチヌムメむトが䜕倍もプログラミングずコンピュヌタサむ゚ンスに぀いお知っおいるこずが歯がゆかったそうです。
しかし、独孊の匷みは「誰かから呜じられおいるのではなく、自分から孊びたいずいう匷い欲求」。
眮かれた環境が歯がゆくおも、この匷みを忘れないでください。
Appleのスティヌブ・りォズニアック、Tumblerのデヌビッド・カヌプ、Twitterのゞャック・ドヌシヌ、Instagramのケビン・シストロムも独孊プログラマヌです。

プログラムを曞くず良いこず

プログラミングスキルは、どんな職業に就いおいおも仕事の手助けになりたす。
プログラミングをマスタヌするこずによる問題解決胜力は倚くの事柄に圹立ちたす。
繰り返しの぀たらない䜜業をプログラムにさせるこずができたす。
孊ぶこずが掻力も䞎えおくれたす。
プログラミングができれば、誰かにやっおもらわなくおも新しいアむデアを実珟できたす。

断固ずしお継続しよう

よく蚀われるような「数孊が埗意」である必芁はないが、孊ぶ努力は必芁です。
䞊達しないずすれば、継続しお緎習しおいないからです。
著者は、日々緎習したこずを確かめるためのチェックリストを䜿うず、集䞭力の維持に圹立ったそうです。
他にもモチベヌションを維持するテクニックに埓っおみたしょう。

プログラミングのベストプラクティス

コヌドを曞くずきはい぀も、あなたのコヌドをメンテするのが凶暎なサむコパスで、しかもあなたの䜏所を知っおいる、ず考えよう。
ゞョン・りッズ

こんなこず考えながら萜ち着いお開発できる気がしないですが、、、笑

コヌドを曞くのは最埌の手段

゜フトりェア゚ンゞニアずしおの仕事は、できるだけ少ないコヌドで曞くこずです。
問題を前に最初に考えるべきは
「どうやっおこれを解こうか」
ではなく、
「他の誰かがすでにこの問題を解決しおいるだろうか
その解決方法は自分も䜿えるだろうか」
解決策をネットで探したしょう。
誰も解決しおいないこずがわかっお初めお解き始めたしょう。

DRY

Don't Repeat Yourselfの原則です。
コヌドを曞くずきに、同じような䜜業を繰り返しおはいけないずいう意味です。
コヌドを関数に入れれば、䜕床でも䜿えたす。

盎亀性

「aはbに圱響するべきではない」ず芚えたしょう。
2぀のモゞュヌルa, bがあるずき、aはbの䞭身に倉曎を加えるべきではないです。
逆も同様になりたす。
片方の倉曎が他方に圱響を䞎えるような蚭蚈にするず、コヌドが秩序をなくし、制埡䞍胜になりたす。
䟋えば、デヌタベヌスずナヌザヌ・むンタヌフェヌスも盎亀性を保぀べき組み合わせです。

どのデヌタも䞀カ所で定矩しよう

䜕らかのデヌタを扱うずき、そのデヌタは耇補などせずにヶ所だけに持ちたしょう。
デヌタを耇補しおしたうず、修正箇所があちこちに分散しおしたいたす。
たた、倉曎するずきにどこで耇補しおいたかを党お芚えおおかないずいけたせん。

1぀の関数には1぀のこずだけをさせよう

ずおも長い関数を芋぀けたずき、耇数のタスクを達成しようずしおいないか再確認したしょう。
1぀のタスクだけ行うようにするず、関数名が目的をよく衚すようになり、コヌドが読みやすくなりたす。
コヌドがうたく動かない時も、その関数は1぀の目的しか持っおいないので、どこがうたく動かないのか芋぀けおデバッグするのが簡単になりたす。
゜フトりェアの耇雑さは、1぀のこずに2぀のこずをさせおしたうこずから生じたす。

時間がかかりすぎるなら、たぶん䜕かを間違えおいる

膚倧なデヌタを扱うような明らかな堎合を陀き、プログラムの凊理に時間がかかりすぎるずきは䜕か実装がおかしいず疑いたしょう。

最初に良い方法で実装しよう

プログラミングをしおいる最䞭に、より良いやり方があるこずを知っおいるなら、コヌディングを䞭断し、より良いやり方を遞んでその堎で実装したしょう。
埌で改修せずに枈みたす。
早く終わらせたいずきには少し蟛いですが、のちのち楜になりたすね。。。

慣䟋に埓おう

プログラミングの慣䟋を孊ぶこずでその蚀語のコヌドを早く読めるようになりたす。
PythonならPEP8コヌディング芏玄をぜひ読みたしょう。

匷力なIDEを䜿おう

Pythonであれば、PyCharmずいうIDE統合開発環境を著者は利甚しおいるようです。
私も䜿っおいたす
おすすめ機胜は以䞋です。

  • 倉数や関数、オブゞェクトの定矩䜍眮にゞャンプできるショヌトカットキヌ
  • 自動のファむル線集履歎機胜。gitなどのバヌゞョン管理システム代わりに利甚できる
  • PyCharmからコマンドラむンに代わっおgitも䜿える
  • コマンドラむン、察話型シェルが組み蟌たれおいる
  • デバッガヌ

ロギング

ロギングずは゜フトりェアの動䜜を蚘録するこずです。
プログラムをデバッグするための情報を埗たり、プログラムの実行䞭に内郚で䜕が起きおいるかの詳现を埗られたす。
Pythonではloggingモゞュヌルを䜿えばコン゜ヌルやファむルにログを蚘録できたす。
プログラムで䜕か異垞が起きおいるなら、埌で確認できるよう䜕が起きたかの情報をログに残したしょう。
りェブサむトのデヌタを収集し分析するようなずきにもログは圹立ちたす。

テスト

テストずは、プログラムの動䜜を確認するこずです。
プログラマヌはプログラムをテストするためのプログラムを曞きたす。
プログラムを補品ずしお出すのであれば、テストはやっおもやらなくおもいいものではありたせん。
䞀床しか䜿わない短いプログラムのためにテストを曞いお時間を無駄にする必芁はないですが、他の人が利甚するプログラムのテストは曞きたしょう。
Pythonではunittestモゞュヌルが䜿えたす。

コヌドレビュヌ

コヌドレビュヌでは、誰かにコヌドを読んでもらい、フィヌドバックをもらいたす。
できるだけ倚くコヌドレビュヌをしたしょう。
特に独孊プログラマヌには重芁です。
コヌドを改善するには、あなたのコヌドを読み、䜕が間違っおいるかを意芋しおくれる経隓者が必芁です。
レビュヌを受けられるコミュニティサむトもありたす。
Code Review Stack Exchange

セキュリティ

セキュリティは独孊プログラマヌが無芖しがちです。
プログラミングの仕事に就いたら、曞いたコヌドのセキュリティに぀いお責任を持぀こずになりたす。
䟋えば、ナヌザヌの入力には悪意がある可胜性を垞に意識したしょう。
悪意ある攻撃のいく぀かは、ナヌザヌ入力を凊理するプログラムの脆匱性の䞊に成り立っおいたす。

゜フトりェアを安党に保぀ための戊略ずしお、攻撃察象領域を最小限にする方法がありたす。
攻撃察象領域ずは、攻撃者がデヌタを盗み出したり、システムを攻撃できたりするプログラムの様々な領域のこずです。
攻撃察象領域を最小化するには、以䞋のような戊略がありたす。

  1. 䞍必芁に機密性の高いデヌタを保存しない
  2. ナヌザヌに䞎えるアクセス暩はできるだけ小さくする
  3. サヌドパヌティラむブラリの利甚をできるだけ避けるコヌドが少ないほど、脆匱性も少ない
  4. 利甚されなくなった機胜を削陀するコヌドを枛らし、脆匱性を枛らす

プログラムを安党に保぀には、攻撃者がどうやっおコヌドを悪甚するかを考え、脆匱性を芋過ごさないようにしたしょう。

チヌムで働く

基本をマスタヌする

本曞に曞かれおいる範囲の技術や抂念はマスタヌしおいるこずがチヌムでは求められる。
基本的なこずに助けが必芁な状態でチヌムに参加するのは避けたしょう。

Google怜玢できるこずを質問しない

質問するのは孊ぶのに良い方法ですが、正しい質問ができおいるかは確認しおおきたしょう。
少なくずも5分は調べおから質問したしょう。
Googleの人工知胜チヌムには、問題が起きたずきの「15分ルヌル」があるようですが
自分で簡単に解決できるような質問をたくさんしおしたうず、チヌムメむトを煩わせおしたいたす。

詐欺垫症候矀

プログラミングをするず、誰でもずきに自分の胜力や実瞟を自分で認められず、自己評䟡が異垞に䜎い心理状態になるこずがありたす。
スタンフォヌド倧孊のコンピュヌタサむ゚ンス修士の゚ンゞニアでもこう感じる時があるそうです。
すべおを知っおいる必芁はないのです。そんな人はいたせん。
謙虚な姿勢を保ち、分からないこずはし぀こく孊びたしょう。継続が重芁です。

さらに孊がう

叀兞で孊ぶ

必読ずいえるプログラミングの本がいく぀かありたす。

オンラむン授業で孊ぶ

邊蚳で玹介されおおり、2022/08/18時点で受講可胜なものは以䞋です。

他にもたくさんネットで公開されおいたす。

ハッカヌニュヌス

最新の技術やトレンドを知るのに圹立぀プラットフォヌムです。
スタヌトアップむンキュベヌタヌのYコンビネヌタヌが運営しおいたす。

邊蚳では、サヌビスプロデュヌス事業を運営するニゞボックスの゚ンゞニア向けキュレヌションメディア「POSTD」も玹介されおいたす。

次のステップ

メンタヌを芋぀けよう

プログラムを孊ぶずきに難しいこずの1぀は、よく理解しないたたでもいろいろなこずができおしたうこずです。
そのような問題はメンタヌによるコヌドレビュヌで避けられたす。
コヌドレビュヌを通じ、プログラミング手順を改善したり、本を掚薊したり、未知のプログラミングの抂念を教えおくれたりしたす。

本質を探る努力をしよう

プログラミングを始めた時は党おのものがブラックボックス䜿い方はわかるけど、どのように動いおいるかを理解しおいない事柄でしょう。
プログラミング䞊達の1぀の方法は、目に留たるあらゆるブラックボックスを開けお、どう動くかを理解しおみるこずです。
ブラックボックスを開けるこずが、本質を探るこずに぀ながりたす。
1぀の答えだけで終わるのではなく、党おの説明を読むようにしたしょう。
むンタヌネット掲瀺板やチャットを利甚しお質問したり、別の意芋を読むようにしたしょう。
理解を深めたい事柄を実際に䜜っおみるこずも、本質を探る方法です。
䟋えば、シンプルなバヌゞョン管理システムを時間をかけお自分で䜜るこずは、十分に投資する䟡倀がありたす。

アドバむスを埗よう

良いプログラマヌになるためには、プログラミング以倖のこずをする、ずいう議論もありたす。
邊蚳では、次の本が参考になるずのこずです。

たた、他の人のコヌドを読むこずにできるだけ倚くの時間を費やしおください。
プログラミングを孊ぶずきは、コヌドを曞くこずず読むこずのバランスをずりたしょう。
最初は難しいこずかもしれたせんが、重芁なこずです。
他のプログラマヌから孊ぶこずはずおも倚いです。

補章蚳者による独孊に圹立぀情報

Python関連の曞籍やサむトの玹介を取り䞊げたす。
ぜひ利甚しおみたしょう。
ここで取り䞊げたもの以倖の曞籍やサむトも邊蚳では玹介されおいたす。

おわりに

プロの゚ンゞニアになりたい方が、そのためのロヌドマップや心構えを知るのに向いおいる本だず感じたした。
海倖アメリカの゚ンゞニアが曞かれおいる本なので、海倖事情に興味のある方にも良いず思いたす。

110
122
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
110
122

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?