(前半)ハッカーになる方法

Zach Alberico
Software Engineer in Palo Alto
 
この記事は、著者の許可を得て配信しています。
https://zalberico.com/essay/2020/04/19/how-to-become-a-hacker.html

次の記事 (後半)ハッカーになる方法

なぜこの記事を書くことに至ったのか

13歳で高校に入学した時、ESRのブログ記事「ハッカーになる方法」を読みました。私は、インターネットを介して一緒に色々なシステムを構築するプログラマーのコミュニティについて学ぶことに興奮し、Fedora Core 4と、最終的にはUbuntu 6.06をインストールしてみることになりました。自分の仕事においてもトラブルシューティングについて多く学べ、最終的には仕事でも役に立つ非常に重要なものだということが分かりました。私はPythonについて読み、つまらないプログラムを書いていましたが、コンピューターサイエンスを勉強して、コンピューターが実際にどのように動くのかを学びたいと思うようになりました。その記事は自分が何をしたいのか分からず道に迷っている時に、かなり影響を受けた記事でした。

ニューヨークのバッファロー郊外で育った私は、かなり孤立していました 。 そして、私の父は楽しみのために大学でApple IIをプログラミングしていたので(父の影響で私はバックグラウンドやハッカースピリットを持っていたのです)、幸運でしたが、父はよりモダンなソフトウェア開発については全く知識がありませんでした。私はコンピューターが好きで、よく遊んでいましたが、コンピューターを使って何が可能になるのか、もっと理解するためにはどういうことを勉強すればいいのか、などについてはあまり知りませんでした。検索範囲が非常に広く、未知のことがたくさんある場合、それを学ぶための良い情報源を見つけることさえ難しいかもしれません。優れた情報源を選ぶには、ある程度の知識が必要で、経験者の指導がないと難しいものです。インターネットが発達した今はそれでもまだマシになったとは思いますが、ある意味では昔よりも選択肢が増えたとも言えます。

16年後、ESRのオリジナルの内容を補足するために、「ハッカーになる方法」を自分がアレンジして書いてみたら面白いだろうと思いました。私が13歳の時に自分自身が読みたいと思っていたもので、私も役に立つと思っていた他の点にも言及した内容にしようと思いました。プログラミングや関連する記事の多くは、特定のプログラミング言語、フレームワーク、オペレーティングシステムなどを取り上げており、特定の方法を導入するように説得しようとするものです。この記事ではそのようなことはあまりせず、いくつかの提案をしていますが、よりやんわりとした見解を述べているだけにとどめています。この記事の目的は、私がESRのオリジナル記事の後に読みたいと思うもののニッチを埋めることです(そのためには、まず最初にそのオリジナル記事を読む必要があります)。

学ぶべきものは多い

最初の頃は、記事や本を読んでも、専門用語のほとんどを理解できませんでした。 これはいたって普通のことです。最初は理解できないように見えることも、そういった用語にたくさん触れていき、色々と調べていくうちに徐々に理解できるようになっていきます。そのためにはひたすら読み続けて、理解できない用語を調べて、可能であれば誰かに質問すると良いでしょう(ESRには良い質問をする方法についての分かりやすい投稿もあります)。

誰もが初めて何かを学ぶ場合、途中で基本をしっかりと理解できるようになり、知識が積み重なっていくものです。私は詳しい細かい事を理解していませんでした (例えば、ターミナルでコマンドを入力して実行することを知らなかったとか、cd が 「ディレクトリ変更」 の略であることなど)。こういったことは触れていくうちに分かるようになるものであり、ソフトウェアをいじればいじるほどそういう用語に接する機会が増えて経験値が蓄積されていきます。もしあなたの住む地域にソフトウェアに興味を持っている人たちのコミュニティがあるのであれば、あなたはとても幸運です。より早く色々な知識が身に付くからです。

理解できないということを恐れない

新しいことを学ぶのはとても難しく感じてしまうものです。もしそれが簡単に感じるなら、それはあなたが既に知っていることかもしれませんし、自分の知識を試しているのではないかもしれません(物理学の問題の解き方を読むと「これは合理的だな」と簡単に思えますが、学んだばかりのツールを使って自分で問題を解くのは大変です)。そうやって四苦八苦しているのはいい兆候なのです。あなたが本当に学んでいることを意味しているからです。同じような種類の事柄に集中して取り組むことで、あなたのスキルもアップし、より簡単に感じられるはずです。

全く知識のないことを学ぶ場合も、メリットがあると思います。 少し経験を積むと、新しいことを学ぶよりも、すでに知っていることをやる方が簡単でやりやすくなります。これは、ギターで一曲しか弾けない人が、いつもその一曲だけ弾いているような、すでに知っていることを繰り返しやっているだけのプラトーから抜け出せなくなることにつながります。初めての人にとっては何もかもが難しいものなのです。

初めて難しいことを学ぶのは、少し苦痛に感じるはずです 。でも、それは良いことであり、あなたが成長していることを意味するので、その感覚に慣れるべきなのです。あなたが自分をバカになった気分がしても、それに怯えてはいけません。学ぶべきことが非常に多くあるので(コンピュータには、コンピュータグラフィックス、セキュリティ、機械学習、アルゴリズム、モバイル、ウェブ、インフラなど、色々なジャンルがあります)、新しいことを学ぶために自分自身が成長し、快適なゾーンから抜け出して新しいことを学ぶんだというマインドセットを持つことは非常に重要です。

プログラムを学ぶ - 実践から学ぶ

ただプログラミングに関する本を読んで、プログラミングを学ぼうとするのは、スカイダイビングに関する本を読むだけでスカイダイビングを学ぶようなものです。おそらくプログラミングに関する本を読む必要があるでしょう(最初のうちは本から入るべきかもしれません)。 しかし、それと並行して簡単なプログラムを実際に書いていかなければ、身に付きません。大工は物を作ることで上達し、作家は物を書くことで上達し、プログラマーは物をプログラミングすることで上達します。これは、本を読むべきではないという意味ではなく、良い本は非常に価値がないという意味でもありません(価値はあります)。しかし、自分で何もしないでプログラミングの本を読んでしまうと、本を読んだ方が簡単なので、頭でっかちになり、実際にプログラミングをしようとなると全く歯が立たないということになるのです。

私はESRの「Pythonは手始めに使うには良い言語だ」という意見に同意していますし、オンラインの「 learn Python the hard way 」というサイトがあります。このサイトでは、初心者向けで、練習問題を解きながらPythonについて学べます。

最初のうちはシンタクス(構文規則)を理解するのが難しく、学習しているときにはそればかりに時間が取られます。すべてのプログラミング言語は異なるシンタクスを持っているので、それらは全く違うもののように見えます。その後、構文を理解し始めると、問題がどのように解決されているか、どのようなデータ構造が使われているかといった一般的なシンタクスについての理解が深まります。最終的には、一般的なデータ構造に慣れてくると、より抽象度の高い、スケーリングで管理しやすくする、より一般的な設計やインフラストラクチャのことについても理解できるようになります。

言語の構文を理解し、簡単なプログラムを書くことができるようになった後の次のステップとして、大変重要なのが、データ構造について学ぶことです。コアとなるデータ構造がいくつかありますが、それは「 Cracking the Coding Interview (邦題:世界で闘うプログラミング力を鍛える本)」という本に詳しく書かれています(問題例も掲載されています)。紛らわしいことに、言語は同じデータ構造の実装に対して異なる名前を持つことはよくあります(Pythonは例えばハッシュテーブルを「ディクショナリ」と呼んでいます)が、ほとんどの言語はユニークな名前を持っていてもコアデータ構造の実装を保有しています。

トラブルシューティングやデバッグはプログラミングのコアスキルでもあります 。実際、プログラミングでは、ほとんどデバッグ処理です。なので、プログラミングのデバッグが好きな方にもってこいです。何かを理解しようと何度も検索したり、読んでいる記事が役に立たなかったり、予期せぬエラーが発生したりしても落ち込まないでください。それはよくあることです(あなたの能力が低いわけでは決してありませんから)。

ほとんどのソフトウェアは動作しませんし、ドキュメント化されていないエラーやバグ、小さな細部の修正が難しいものがでてくるのは普通の事です。例えば、Github上のほとんどのオープンソースプロジェクトは、ソフトウェアを実行するための設定を行うビルドシステムを持っています。これは、ディペンデンシー(動作するために必要な他のコード)をプルしたり、実際に動作させるために必要なコマンドを実行したりします。Github上の興味深いプロジェクトをダウンロードして実行しようとすると、途中で予期せぬエラーが発生し、ドキュメント化されていないことはよくあります。

これらのエラーを実行して問題を解決するのは普通のことで、経験豊富なプログラマも対処しなければならないことです(運が良ければ、以前にそのようなタイプの問題を見たことがあるでしょう)。このようなエラーに遭遇して、何か間違ったことをしていると思う人を見てきましたが、それはその人が悪いのではありません 。それは物事がどのようになっているかということで、対応が異なるということです。ビルドシステムに関連する者のなかで、競合するツールや業界がたくさんあり、ビルドシステムをより優れたものにしようとしています(実際には標準化されていないため、初心者にとってはより混乱を招く可能性がありますし、ソフトウェアを実行するための正しい設定方法は、プログラミング環境や言語によって異なります)。


コメントを読む

新着ピック  










山本 聡山本 聡9時間前フリーランスWebフロントエンドエンジニア




山本 聡山本 聡9時間前フリーランスWebフロントエンドエンジニア








新着ニュース

文書データ活用ソリューション「SPA」と手書き文字認識エンジン「DEEP READ」が連携したオンプレミス版を提供開始 | Ledge.ai

AIによるコンテンツ著作権侵害抑止サービス「RighTect」 | Ledge.ai

がんばっている企業を応援したい!最大3ヶ月無料『シフト作成応援キャンペーン』リリースのお知らせ | Ledge.ai

シリコンスタジオ、アイシン精機と「CEDEC2020」にて共同発表リアルタイム3DCGを用いた駐車場シミュレータ開発で協力 | Ledge.ai

ホークスを応援する四足歩行ロボ「Spot」とPepperのダンス、1分37秒の動画で見てみたら

新海誠監督の映画『天気の子』Ver.ピンクのスーパーカブが手に入るチャンス

セガから「アストロシティ ミニ」出ちゃうかもー!

ニコンが年内に新型ミラーレスカメラ、Z7sとZ6sを発表するかも

TikTokは米国での禁止に直面し、中国政府の統制が強まる香港からの撤退を発表 | TechCrunch Japan

オリィ研究所が分身ロボット利用の新しい働き方を開拓するプロジェクト公開、パイロットを募集 | TechCrunch Japan

JR東日本の公式アプリ、山手線駅の混雑予測に対応 まずは池袋・渋谷・秋葉原など27駅

ロボットが駅構内を消毒、荷物を搬送 JR東が高輪ゲートウェイ駅で実験

気象庁、公式サイトにWeb広告掲載で収益確保へ 「持続的・安定的な情報提供を維持するため」

AI+RPAで住宅チラシを自動作成 約2880時間分の作業を削減 オープンハウスが開発

[GCP]課金の有効化エラーに対応してみた | Developers.IO

[小ネタ] Cacooで描いた図を画像ファイルにエクスポートする際に「余白」を良い感じに付ける方法 | Developers.IO

1週間でスパコンを完全に理解する | Developers.IO

Fitbitのタッチ決済「Fitbit Pay」日本上陸--ソニー銀行のVisaデビットが対応

「わたしでもMEO対策ができた!」を実現する解析多機能ツールが本日発売 | Web担当者Forum

株式会社ブイキューブのHubSpot実践ノウハウ(第1回) 『失敗しないインバウンドマーケティングの始め方』 | Web担当者Forum

記事をPICKする
会員登録
Register
記事をPICKする

会員登録すると、もっと便利に利用できます。