ゼロから未経験でも這いつくばってでもプログラマになりたいあなたへの助言
はじめに
今回の記事では、プログラミング未経験だった筆者が、プログラマとしてキャリアを形成し、一企業のリードエンジニアとして活躍するまでに至った経験をもとに、プログラミング未経験者がプログラマになるための方法を紹介します。
早速ですが、仕事でプログラミングしている奴らは別にプログラマでもなんでもないと思います。それは労働者です。プログラミングの話をするときに業務の話をしている人間は私からすればはっきりいって意味不明です。まあ別にプログラマを名乗るのは自由だからとやかくは言わないけどもそういう精神と源流のプログラミング文化はむしろ直交するものだと思います。私が言ってるのはハッカー精神の話です。
プログラミングをする人間はふたつです。ハッカーか否かです。
早速口が悪いことをいいますが正直言って巷に落ちてるプログラミングについての言説はゴミカス以下と言わざるを得ない状態になっており、初心者の方においてもどの方向を目指して勉強すればいいか分からなくて疲労困憊なさっていると思います。
この記事では現役でOSSを作っている(コントリビュートしている)側のプログラマからの過激な思想をそのまま出力しました。
プログラマになる方法
プログラミング未経験者がプログラマになるためには、どのような方法があるのでしょうか。筆者は、プログラミング未経験者がプログラマになるためには、以下の3つの方法があると考えています。
大学で学ぶ
専門学校で学ぶ
独学で学ぶ
筆者は大学に入る前から独学でプログラミングを身につけ、大学を中退して引き抜かれてエンジニアとして従業してきました。その後、プログラマとしてのキャリアを積み、いまは一企業のCTOとして活躍しています。
プログラマとして成功したいにもかかわらず、迂遠な勉強ばかりしていませんか?
まず、はっきり言ってしまうと1と2は論外です。プログラミングは人から教わるものではなくて自分で考えるものだからです。つまり独学以外最初から選択肢はないです。稀に運が良くて知り合いにエンジニアがいる人がいるかもしれませんが、彼らの手を借りる前に一回この文書を通して読んでください。
とはいっても誰しもがパソコンに触る機会を均等に与えられてきたわけではありませんから、まずはパソコンを所有することから始めなければならないでしょう。パソコンを所有していない人は、まずはパソコンを購入することから始めましょう。
さて、プログラマのなりかたですが、プログラムを書けばプログラマになります。とりあえずプログラムをせかせかと作りましょう。プログラムを作ることで、プログラミングの基礎を身につけることができます。
しかしプログラムを作るとはいっても何を作らなければならないのかわからない人もいるでしょう。そんな人は、まずは書籍を――とはなりません。書籍に頼ってはいけません。
まずは一体あなたがなりたいのはなんなのかについてよく考えましょう。プログラマとはそもそもなんですか? プログラムを書く人です。それ以上でもそれ以下でもありません。職業としてプログラムを書いているかどうかなどは関係ありません。
基本情報処理技術者試験は必要ありません。プログラムを書けばいいんですから。具体的にプログラムが想像付かない人間はそもそも想像力が貧困なので、そこから改める必要があります。
プログラマに憧れている人間は作りたいもののイメージがとにかく希薄です。プログラムがなんなのかまず考えるべきです。
今すぐLinuxをいれろ
まずあなたがやるべきことは今すぐWindowsを窓から放り投げてLinuxを導入することです。Mac?なんですかそれは。Linuxです。プログラマの典型的な像をイメージしてください。そいつはWindowsを使っていません。Linuxを使っています。
イケてるエンジニアはLinuxを使います。イケてるからです。
Linuxをインストールするに当たってどれにするか悩むと思いますが、UbuntuかArchLinuxがおすすめです。Ubuntuは初心者向けですが、ArchLinuxは初心者向けではありません。
でもArchLinuxをインストールすることは代えがたい体験になります。
ArchLinuxをインストールするには、まずArchLinuxの公式サイトを見てください。ArchLinuxの公式サイトには、ArchLinuxのインストール方法が書かれています。
面倒だったらUbuntu、やる気があったらArchLinuxを入れろ。ということです。
Windows上でプログラミングをしようなんて考えると非常に面倒くさいことになるので初心者にはかえっておすすめしません。Linuxを使いましょう。Subsystemは面倒くさいだけです。
OSを変えましたか?OSを変えてください。原神ができない? 知るか。ゲームはなしです。あなたには今後プログラマになる呪いがかけられています。もしくはLinuxでゲームを作ればいいじゃんねえ。
GitHubに登録せよ
では次に、まずGitHubに登録しましょう。GitHubはプログラムを公開するためのサービスです。GitHubに登録することで、プログラムを公開することができます。GitHubを通じて世界のプログラマと交流できるのが21世紀というものです。
GitHubの使い方については省略します。
プログラマとして成り上がるなら上達するコツがあります。それは「手順を飛ばさない」ということです。取扱説明書を順序通りに組めれば最初のうちは同じ要領でプログラミングをすることが可能です。
逆に言えばおおよそ思い浮かべるようなプログラムに関しては手順はすべて公開されているので、手順通りにできないというのはプログラマとしての適性がないことに等しいと思います。
とにかくググるかChatGPTに聞け
わからないことは自己解決が基本です。冗談に聞こえるかもしれないけれどプログラミングができない人の大半はマジでこれができていない。
英語を勉強しろ
英語は必要か不要かですが、はっきり回答すると必須です。英語ができないのにプログラミングができるという人は正直見たことがなく、プログラミングの本質であるところの「名付け」に関わってくるので、基本的には英語ができないとプログラミングはできないと思って良いでしょう。TOEIC800以上は最低ラインとして確保しましょう。
今やるべき言語
結局どのプログラミング言語を学べばいいのか。ここは著者なりの見解を述べておきますが、基本的には自分の思想に合うプログラミング言語ならなんでもいいと思います。逆に言えば思想が合わない言語はどんなに頑張っても身につかない気がします。
ここで言う身につく身につかないのラインはもちろん読める読めないのレベルではなくて自分の思考と一致するかどうかのレベルです。単に読めるだけのプログラミング言語なら十年やってれば十個は読める、ということになるでしょうが、実際のところどれを用いるかというのはまた別の話になると思います。
TypeScriptとC++とRustとHaskellはやってよかったなと思いました。というかこれだけできればほかは慣れの問題になってくるので、言語仕様の勉強はこれくらいでいいでしょう。あとはライブラリの勉強をすることになると思います。
プログラミング言語の基本を理解した後は、さまざまなライブラリやフレームワークについて学ぶことが重要です。これにより、より実践的で複雑なプロジェクトに取り組む準備が整います。
ソフトウェアをインストールしまくれ
とにかくソフトウェアをインストールしまくりましょう。未知のものに対する恐怖心を減らすのが大事です。色々なソフトウェアをインストールしてパソコンをバンバンぶっ壊すつもりでやっていきましょう。
ジョークみたいに聞こえるかもしれないがインストールしたプログラムの数だけプログラマとしてのセンスが上がります。でもこれ画家とかだったら普通の話で、要するに感性を身に着けろという話です。
実際に取り組め
基本的なプログラミングスキルとライブラリの使用方法を身につけたら、実際のプロジェクトに取り組むことが重要です。個人的なプロジェクト、オープンソースプロジェクトへの貢献、または小さなフリーランスの仕事などが良いスタートポイントです。これにより、実際の作業環境での課題解決能力を養うことができます。
プログラミングコミュニティに参加することで、他のプログラマと知識を共有し、学習する機会を増やすことができます。オンラインフォーラム、ローカルのミートアップ、カンファレンスへの参加は、ネットワーキングと学習の両方に役立ちます。
日本のコミュニティについて
正直な話をするのですが、日本のコミュニティは閉鎖的でだめです。あと職業で学ぶプログラミングはカスだと思っています。
職業で学ぶプログラミングの技術はたいてい無能に合わせてチューニングされた凡人用の技術なのではっきりいってどうでもいいです。本ばかり書いているプログラマもどきとかザラにいます。意味不明ですが。
真の学習と成長は、実践と実験から得られることが多いです。自分でプロジェクトを立ち上げ、問題を解決し、失敗から学ぶことが、プログラミングスキルを磨く上で非常に重要です。これにより、独自の解決策を生み出し、技術の新しい用途を発見することができます。
学習のプロセスを自分自身でコントロールすることが、創造性とイノベーションにつながります。カリキュラムに縛られず、自分の興味や必要に応じて学ぶことが、個人の能力を最大限に引き出すことにつながります。
プログラミングの世界にはハッカー文化が存在し、これはしばしば伝統的な教育システムとは異なる価値観を持っています。この文化に参加し、その価値観を理解することは、技術の新しい側面を発見し、より深い理解を得るのに役立ちます。
とにかく、重要なのは頭を柔らかくすることです。能書きをたれてるだけのエセエンジニアになりたくなければソースコードをかけ、プログラムをどんどんインストールして実行しろ、試せ、挑戦して死ね、です。
頭が硬い老害みたいなエンジニアも死ぬほどいます。
プログラマという生き物
プログラマは怠惰な生き物だと言いますが、実際は怠惰とは真逆の存在でしょう。プログラマは常に新しい技術を追い求め、新しい技術を学び、新しい技術を実践することで、自分の能力を高めていく存在です。
あと、最初のうちは頭を使わずに既存のプロジェクトにコミットすることが大事だと思います。英語を通じたコミュニケーションによって学ぶことは大きいと思います。
とにかく、筆者から伝えたいメッセージは「手を動せ、今すぐに」という一言に付きます。
さいごに: ポストChatGPT時代のプログラマ生存戦略
最後にChatGPT時代のプログラミングについて軽く述べておきます。まず間違いなく今後プログラミングの需要は減ることはないが、プログラマ自身に求められるスキルもまた一定ではないということが言えると思います。
というか写真ができても画家の需要は減らないじゃないですか。そういうアーティスティックな側面が今後重視されてくるのは間違いないんじゃないですかね。左脳だけでプログラミングしてた連中はざまあみろという感じです。時代は水平思考。
論理的思考能力自体の需要は減らないです。筆者がプログラマやっててよかったことが在るとすれば論理的思考能力が身についたことだと思います。それも他の人とは比にならないレベルに。そしてプログラミング的な論理性のなかにもアーティスティックな要素が存在しているのだと理解しましょう。
以上です。いかがでしたか。言いたいことはわかります。あなたが仮に職業プログラマだとしても怒らないでください。これはかなりの程度理想論です。たしかに、でも実際、この記事の大半は事実であることを多くの人が認めざるを得ないと思います。それでも頑なに認めない人はやっぱり別文化圏のひとなのでしょう、という感じがします。
気軽にクリエイターの支援と、記事のオススメができます!