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

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

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

実際コンピューターはどのように動くのか?

私は、コンピューターが実際にどのように機能するのかについての情報がなかなか見つけられずに、イライラしていたのを覚えています。私が探したものはすべて、役に立たないほど単純化された説明(例えば、ディスクは「ファイルのためのファイリングキャビネット」であるというような説明)を用いてコンピューターについて語っているものでしたが、実際にどのように動くのかが把握できるものはありませんでした。これはソフトウェアというよりも電気工学やコンピューター工学の話ですが、ハードウェアの側面を理解するのは、本当に価値があるのです(そして、その分野は勉強するととても面白いんです!)。

この本で一番のお勧めは、Charles Petzold著の「 Code(邦題:CODE コードから見たコンピューターのからくり) 」です。電気的なビットから始まり、ブール論理と回路設計の歴史から始まり、簡単な回路やメモリにビットを格納する方法など、基本的なことが書かれています。発見の歴史的背景の中で、小型のCPUを構築できるようになるまでの流れが書かれています。また、アセンブリと基本的なコンピュータグラフィックスにも触れています。著者の説明がとても明確であり、著者自身、教師でもあるので、とても細かい内容が書かれているのにも関わらず、驚くほど読みやすい本になっています。

より歴史的な内容に関して書かれている本としては、M. Mitchell Waldrop の「 The Dream Machine 」と Hackers by Steven Levy著の「 Hackers 」をお勧めします。語り口調の物語になっているので、物事を学び、記憶するのが簡単になり、コンテキストの発見は、物事が実際にどのように機能するかを学ぶのに役立つと思います。

ソフトウェアツール - コードエディター、プログラミング環境

ツールは楽しいし、自分のツールを知るのは良いことですが、いつまでもカスタマイズに時間を費やしたり、実際にはそれほど重要ではない些細なことにひっかかったりすることもあるでしょう。しかし、ツールのカスタマイズは、最初の段階では楽しく学べるのでいいと思います。問題を解決するために実際にプログラムを書いたり、一般的なプログラミングの技術を学んだりすることに比べて、比較的価値のないことに膨大な時間を費やしている人を見てきました(こういったことについて書かれている本で「 Designing Data Intensive Applications 」という本があるのですがおすすめです)。ツールをカスタマイズすることに焦点を当てすぎると、先に進めないことがあるので注意してください。

Vim や Emacs のようなツールや、使用している OS を気にしすぎる必要はありません 。コアなスキルはどこでも学べます (この点においては、ESR の投稿とは反対の考えを持っています)。とはいえ、Linuxで遊んだことは、トラブルシューティングについて多くのことを学ぶ上で本当に貴重な経験でした。 なぜなら、Linuxはあまりうまく動作せず、ワイヤレスインターネットを機能させようとしたり、ラップトップを正常にサスペンドさせたり、UIを表示させたりするのに何時間もかけなければならなかったからです(今は少し良くなっています)。

私はGentooをインストールすることから始めました(実際には成功しませんでしたが)。このトラブルシューティングのスキルは、今の職場に採用されるときにも、とても役立ちました。もし皆さんが色々なOSをいじってみるのが好きなのであれば、どんどんやってみてください。絶対にしないといけないものではありませんが。macOSやLinuxで学ぶ方が簡単かもしれません。というのも、既存のツールのほとんどがこれらの環境をターゲットにしており、ほとんどのプログラマーはこれら2つのうちのどちらか1つを使用しているからです。

特筆すべきツールとしては、バージョン管理、特に git があります。基本的なことに慣れるためには時間がかかりますが、その価値はあります。ただし、プログラミングを少し経験してからでないと集中して取り組むべきものではないでしょう。

永遠に調べ続けない

プロジェクトを始める前に、いつまでもオプションを「リサーチ」することで先延ばしにしてしまいがちです。何が使えるのか調べるのは楽しいし、少しならいいのですが、それを永遠にし続けるのはやめましょう。迷ったら、しばらく前からある人気のあるプロジェクトを選んで、それを使ってください。人気のあるプロジェクトであれば、おそらくそこから学べるまともなコミュニティを持っているだろうし、しばらく前からあるプロジェクトであれば、おそらくより安定したものであるはずです(あるいは少なくとも、より充実したものになるだろうし、途中で中止になる可能性も低くなるでしょう)。

コンピューターサイエンス

コンピューターサイエンスを勉強するのは本当に楽しかったですし、おそらく今でも一番チャンスの多い方法だと思います(特に私のような郊外に住んでいて、周りにソフトウェア関係の人があまりいない場合は)。可能であれば、最高のCSプログラムに入ってみるのもいいかもしれません。オンラインで受けられる優れたプログラムのクラスがたくさんありますが、私の高校時代のような状況でなければ、そういったクラスを利用するのは難しいかもしれません。

プログラミングの面接

勉強することが良い成績を取るためのナイーブソリューションだとしたら、クールなプログラミングプロジェクトに取り組むことは、プログラミングの面接で良い結果を得るためのナイーブソリューションだと言えます。競争力のある企業のプログラミングの面接で、有利な立場にいるためには、leetcode や「Cacking the Coding Interview」という本に載っている問題に非常に慣れておく必要があります。プログラミングの面接は、多くの練習を必要とし、そうやって練習することで、しっかりとしたスキルを身につけることができます。

あなたは、CS(コンピュータサイエンス)の学位を取得しても、まだプログラミングの方法をまだ完全に理解できていません。また、CSの学位を取得しても、まだプログラミングの面接を受けられないということもあります(これらの両方はおそらくデフォルトのケースです)。プログラミングを学び、プログラミングの面接でうまくやるためには、自分で集中的に時間をかけて学習する必要があります。CSは、方向性を決め、プロジェクト(Lambda スクールは、おそらくプログラミングに関して、こういった面において優れており、おそらく全体的に良い結果になるでしょう)にフォーカスを当てています。が、あなたは自分自身で学習し、たくさんのCSの知識を持っている必要があります。

役割と仕事

「ソフトウェアエンジニア」以外にも、さまざまな仕事があります。SRE (サイトリライアビリティエンジニア) は、コードが実行されているインフラストラクチャに焦点を当て、それに焦点を当てたソフトウェアを書く仕事です。内部ツールとdevops が存在します。ソフトウェアの構築とテストを自動化するために必要なすべてのツールに焦点を当てた開発者のことです(これについては、「 Phoenix Project 」をお読みください。イラストも交えて楽しく読めます)。開発者サポートエンジニアのように、ユーザーとのやりとりを重視する役割もあります(APIを使ってユーザーを助けたり、バグや設定の問題を解決したりします)。ゲームエンジンに特化したエンジニア、VRやコンピュータグラフィックスに特化したエンジニアもいます。新しいコンピューター言語や新しいコンパイラを書くエンジニアもいます。

それぞれの役割において、どのような製品が使われているか、新しい問題を解決するためにどのような新しいツールが作られているかによって、さらに専門性が増しています。コンピュータセキュリティもまた、私があまり知らない興味深い分野ですが、ESRの記事ではあまりにも軽視されているように思われました。物事がどのようにして壊れてしまうのかを知るには、物がどのように動くのかについての既存の理解が必要であるため、ここから始めるのは難しいでしょう。私は早い時期にこの本を手に取りましたが、当時は理解するには十分な知識が全くありませんでした。Hacking: The Art of Exploitation

もちろん、自分で会社を立ち上げて、創業者として業種を作り上げていくこともあります。

(繰り返しになりますが)学ぶべきことは膨大である

一生は長いし、自分の専門分が永遠に存在し続けるわけではないので、いろいろなことに挑戦してみましょう 。 楽しみながら新しいことに挑戦していけばいいのです。

おまけ:コミュニティ

ESRの記事ではローカルの Linux ユーザグループに参加することについても話題に出ていますが、少なくとも私にとっては、その投稿を読んだときにはそれは現実的ではありませんでした。そういったグループも多くはなかったし、幼くて車で移動ができず遠くのグループには参加できなかったからです。今では面白いと思うオンラインコミュニティがいくつかあります。当時であれば、私も参加できるのであればしたかったです。

Hacker News:Ycombinatorのニュースサイト(ベイエリアのスタートアップインキュベーター)です。コメントは当たり外れがありますが、良い記事は本当に質が高く、業界の多くの人も利用している。Paul Graham氏 と Jessica Livingston氏 は Ycombinator の創設者であり、Paul は多くの興味深いエッセイを書いています。

Twitter:誰をフォローしているかに大きく左右されますが、とても素晴らしいツールです。誰をフォローしていいのか分からなくなることもありますが、まずは私がフォローしている人全員のツイートを見てみるのもいいかもしれません。

Less Wrong: プログラミングに焦点を当てたものではありませんが、合理性のあるコミュニティとプログラミングコミュニティの間には重複する部分が多くあり、私はそこに書かれている文章のほとんどが、とても気に入っています。ここでは、私がとても気に入っている投稿の例を紹介します。こちらの Disputing Definitions という記事です。

連絡先

私のことについて書かれているページには、私が気に入った記事や本のリンクが貼られています。

私がESRの投稿を読んだ頃、Fedora Core 4 で iPod を動作させるために私が送ったメールに ESR が返信してくれたのを覚えていますし、私が送ったメールに Richard Stallman 氏が返信してくれたのも、ちょうどその頃だと思います。私はとても嬉しく思いました。もし聞きたい質問があれば、遠慮なく私に連絡してください。


コメントを読む

新着ピック  










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




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








新着ニュース

Ryzen 3000 XTシリーズを試す - Ryzen 9 3900XT/ 7 3800XT/ 5 3600XT 比較レビュー (1) Ryzenの「XT」は普通のRyzenと何が違う?

Ryzen 3000 XTシリーズを試す - Ryze...

マイナビニュース / 31分前


Ryzen 3000 XTシリーズの国内発売日と価格が判明 - 日本では7月18日発売

15.6型ノートPCが税別43,980円から - パソコン工房「サマーセール」

15.6型ノートPCが税別43,980円から - パソ...

マイナビニュース / 1時間前


「ゴールド、お疲れ様!」で仮想通貨ビットコインに追い風?83トンの偽ゴールドが中国で発覚

オスプレイ最恐。シャーク?を鷲掴みで飛ぶド迫力映像に全米震撼

薄さ7mm! 超コンパクトな牛革財布「理 kotowari™」を使ってみた

[Rust] try_unfoldで複数ページに分割されたレスポンスを非同期ストリームにする | Developers.IO

液晶ディスプレイを21インチから24インチに買い変えた際に調べたことを書いてみた | Developers.IO

文書データ活用ソリューション「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東が高輪ゲートウェイ駅で実験

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

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