「専門スキルを伸ばす VS 幅広い領域に挑戦する」フリーランスの生存戦略討論
- スキル
- フリーランス/個人事業主
- 座談会
私はブログの読者から「プログラミング初心者へのアドバイスは何かありますか?」とよく質問されます。そこで、今回はそれについて私の考えをまとめてみました。
はじめに、簡単に自己紹介いたします。
- 大学時代にコンピューターサイエンスの授業を2つ受講。それ以外に独学でプログラミングを学ぶ
- その後、ソフトウェアエンジニアリングの短期インターンシップに参加
- 大学卒業後にWeb制作者として働きはじめ、はじめのうちはバックエンドを、次第にフロントエンドを担う
私のこの経歴は、決して特別なものではありません。差こそあれど、すべての開発者がある程度独学で勉強をして技術を身に付けているのです。実際のところ、「独学できる力」が、開発者としてもっとも大切なスキルのひとつかもしれません。
この記事では、私自身の経験に加え、ボランティアでコーディングを教えていく中で気づいた「初心者がプログラミングを勉強するための29のヒント」をご紹介します。ぜひ、独学でプログラミングを学ぶときの参考にしてください。
目次
そもそも、独学でプログラミングを習得することは可能なのでしょうか。プログラミングを初めて学習しようとしても、自力で技術を身に付けるのは難しそうですよね……。
実際のところ、独学でプログラミングを習得しようとした9割以上の人が、途中で挫折しているデータもあるほどです。
しかしそれは、自分に合った独学方法を知らないまま時間ばかりが経過してしまい、モチベーションが保てていないことが原因です。
効率のよい独学方法を知り、モチベーションを保つコツさえわかっていれば、プログラミングの基礎を独学で身に付けるのは可能です。
独学でプログラミングを習得するのは、初心者にとってハードルが高く思えるかもしれません。しかし自力で技術を習得するメリットもあります。具体的には以下の3点です。
プログラミングスクールに通えば、独学よりも早く技術を身に付けられるかもしれません。しかし、プログラミングの基礎はスクールに通わずとも習得できる可能性があります。理解できる範囲は自力で、応用部分はスクールで補うことで、よけいな出費がおさえられるでしょう。
本業が忙しくスクールに通えない場合や、すでに作りたいアプリやサービスがある人にとっても、独学はメリットだらけです。
一方で、「将来的にプログラマーとして就職したい!」「フリーランスとして仕事を得たい!」というように、プログラミングスキルを活用して就職や転職を見込んでいる場合はその限りではありません。
独学のみで仕事を受注するレベルまで到達するのは難しいでしょう。プログラミングを学習する目的・ゴールを明確にした上で、独学するかスクールに通うかを選んでください。
プログラミング言語にはさまざまな種類があります。途中で挫折しないためにも、初心者に分かりやすい言語を選びましょう。
自分の目的に合った言語を選ぶ基準は、大きく分けて2つあります。
すでに作りたいサービスやアプリがある場合は、それらに合った言語を選ぶのが近道です。たとえば、Webアプリを作りたいならPython、Webサービスを作りたいならPHPやRuby……といったように、作りたい成果物によって学ぶべき言語が違うからです。
またとくに作りたいサービス等はなく、プログラミングを学ぶことやプログラマーになることが目的の場合もあるでしょう。その場合は、求人を出している企業数を目安に選ぶのもひとつの手です。
求人数が多いということは、それだけ需要が高いということ。前述したPython、Ruby、PHPをはじめ、Java Scriptも需要が高いのでおすすめです。
ここからは、これらの言語の特徴について解説していきます。ぜひ言語選びの参考にしてみてください。
主に人工知能の開発に使われている言語「Python」。
人工知能と聞くと難しそうな印象を受けるかもしれませんが、シンプルな文法で初心者に分かりやすく、入門として人気の高い言語です。
人工知能の分野はこれからの時代さらに伸び盛りで、求人数も増えてくると期待されています。Webアプリ開発にも使える言語なので、ぜひおさえておきたいところ。
ただPythonを理解することはできても、人工知能の理論そのものを理解するのは簡単ではありません。Webアプリやゲームの開発よりも、分析や解析に興味がある人に向いている言語です。
フリーランスのPythonエンジニアの仕事や年収、需要などについて徹底解説!
Workship MAGAZINE
「JavaScript」はMac/WindowsどちらのOSでも問題なく動き、開発環境も必要ないため人気がある言語です。
WebサイトやWeb上で動くアプリケーションの開発には必須となっています。そのためWebデザイナーにも人気の言語です。
元々はフロントエンドと呼ばれるクライアント側の言語でしたが、Node.jsという言語の登場によりサーバーサイドでも使われるようになりました。
フリーランスのJavaエンジニアの仕事や年収、需要などについて徹底解説!
Workship MAGAZINE
開発者が日本人の「Ruby」。
日本語で書かれた学習サイトや開発者コミュニティが多く、学習していく中で疑問点があっても解決しやすいのがメリット。
ショッピングサイトやブログサービス、SNSなどのWebアプリシステムを作るのに長けている言語です。シンプルで分かりやすい点はPythonと似ています。
短い時間で構築でき、実行も速いため、Webアプリを作りたい方におすすめです。
フリーランスのRubyエンジニアの仕事や年収、需要などについて徹底解説!
Workship MAGAZINE
ECサイト、ブログサービス、ログイン機能や問い合わせフォームなど、ユーザーに合わせて表示を変える必要のあるWebサービスを作るには「PHP」という言語が必要です。
比較的ルールが少なく、覚えやすいのが特徴。そのため初心者におすすめですが、HTMLやJavaScriptなどの言語と一緒に使うことが多いため、覚えなければならない知識が増えるかもしれません。
求人数が安定しているため、将来プログラマーとして仕事をしたい人にはおすすめの言語です。
フリーランスのPHPエンジニアの仕事や年収、需要などについて徹底解説!
Workship MAGAZINE
初心者が自力でプログラミングを学ぼうとしたとき、入門書を用意する場合がもっとも多いでしょう。
自分のペースで読み進めながら学習でき、知識・技術が身に付いてからも辞書として使えるため、おすすめの勉強方法です。
入門書を購入する場合は、版数が最新であるか、発行年数が直近であるかを確認しましょう。
プログラミング業界は移り変わりが早いため、古い入門書では使い物にならない場合もあります。
プログラミングを無料で学習できるWebサイトもたくさんあります。
ある程度のレベル以上を目指すなら有料になってしまうこともありますが、基礎部分は無料の範囲で十分学べることも多いです。
ぜひ「プログラミング 学習サイト」で検索してみましょう。プログラミングを独学で習得するなら、自分で調べ解決する癖をつけることも大切です。
また以下の記事では、オンラインでプログラミングを学習できるサービスをご紹介しています。こちらもぜひ参考にしてみてください。
オンラインのプログラミング学習サービス27選
Workship MAGAZINE
動画で学習する一番のメリットは、圧倒的な分かりやすさです。
エラーが出てしまったとしても、映像や音声で確認できるため解決しやすいのが特徴。
また、移動中や用事の合間などのすきま時間に視聴できるため、忙しい社会人の方でも始めやすいです。
すきま時間を有効に使える学習方法といえば、Webアプリで学ぶやり方もあります。
プログラミングを独学で習得するには、基本的にPCでコードを書く練習を積んだほうが効率がいいです。しかし、空いた時間に要点を補う目的で、あくまでも補助としてWebアプリを利用すれば勉強の助けになります。
「独学ではどうしても無理!」という人は、スクールに通ってプログラミングを学ぶほうが時短になります。
なるべく早く就職したい、稼ぐ力を身に付けたい人は、近くに通いやすいスクールがないか探してみましょう。
以下の記事で東京都内でおすすめのプログラミングスクールをご紹介しています。興味がある方は参考にしてみてください! 2024年 東京都内の優良プログラミングスクール20選 Workship MAGAZINE
もしプログラミングの勉強をはじめるのなら、必ず理由を持ちましょう。「コードを書くのが好きだから」「もっと儲かる仕事に就きたいから」「エクセルでやってる仕事をプログラミングでより効率的にしたいから」など、理由はなんでも構いません。
そして、常にその理由に従って行動しましょう。プログラミングは決して簡単なものではないため、ときにはイライラすることもあります。プログラミングの独学を続けていくために、常にはじめた理由を思い出し、なんのために学ぶのかを頭に留めておくのがおすすめです。
付箋をパソコンに貼ったり、ホーム画面にノートを貼ったり、(私と同じように)マーカーで鏡に書いたりするのがよいでしょう。
コーディング学習に使えるリソースは、いまや非常に多くのものがあります。無料で利用できるリソースもあるため、まずはそこからはじめることをおすすめします。
無料のリソースでコードを書くのが好きだと確信したら、次に有料のリソースに進んだり、ブートキャンプなどの参加を検討してみたりするとよいでしょう。
私の好きな無料のリソースを以下にまとめたので、よろしければご覧ください。
【保存版】プログラミング初心者向け 無料おすすめ学習リソース24選
Workship MAGAZINE
プログラマーのコミュニティに所属するのも、プログラミングの勉強において役立ちます。コミュニティの中には、あなたと同じようにプログラミングをはじめたばかりの人がいるかもしれませんし、役立つリソースを教えてくれたり、励ましてくれたりする人もいるかもしれません。
コミュニティに参加する一番よい方法のひとつとして、あなたが住んでいる周辺で開催されているミートアップに参加することが挙げられます。どんなに小さな市や町でも、何かしらのグループが存在しているものです。
珍しいアドバイスかもしれませんが、プログラミングにおいて数学の基礎は本当に大切です。もし、しばらくのあいだ数学に触れていなかったのなら、コードを書きはじめる前に数学の教科書を用意しましょう。そして「代数」の考えを見直すとよいです。
関数や変数など、プログラミングのほとんどは代数の考えの上に成り立っています。これらの考えを理解しておくことは大切です。
「初心者はどのプログラミング言語を学ぶべきなのか?」そこに正解はありませんが、いくつか簡単に取り組みやすいものもあります。
私が思う初心者におすすめの言語は、Python、Ruby、JavaScriptの3つです。なぜなら、これらは大きなコミュニティがあり、構文が直接的で分かりやすく、インタプリタ型言語のためコンパイルプロセスを行う必要がないからです。
プログラミングにおいてもっとも重要なことのひとつが、大きな問題を解決可能なサイズにまで小分けにすることです。
もしあなたが何も書かれていないエディターの画面を見つめて、どこからスタートしたらいいのか分からないのなら、それはおそらくあなたが十分に課題を細分化できていないのでしょう。
プログラミングの基礎は非常に重要で、今後プログラミング関連ですること全てに活きてきます。ループや条件、関数、データの型、そしてほとんどの言語で使われるオブジェクト指向など、プログラミングに関する確かな知識を持つことに集中しましょう。
他の人が話しているようなすごいライブラリを学ぶのは、その後にしましょう。もし、基礎が本当に身に付いていれば、そのようなライブラリを学ぶのはとても簡単です。また、その基礎知識は言語をまたいで活用できるので、あとは言語特有の構文を学ぶだけで他の言語も使いこなせるようになります!
ひとつ前のポイントとも関係しているのですが、実際にコードを書きはじめる前に、簡易な言葉で実際にやりたいことを書き出してみるのも有効です。これを「擬似コーディング」と呼びます。
どんな形でも構いません。まずは紙に書き出し、場合によっては、問題解決に至るまでのステップを1つ1つ書いてみるとよいでしょう。
コードのパターンを覚えることは、もっとも重要なスキルのうちのひとつです。一般に、「DRY(Don’t Repeat Yourself:自分で再現できない)」コードを書くことは、コードのパターン化ができていないことを意味します。
私はパターン化を高めるために、Setというゲームをおすすめします。New York Times’ のウェブサイトで毎日プレイできるので、ぜひ挑戦してみてください!
プログラミングをはじめたばかりのときは、赤のエラーメッセージが恐ろしく感じられるかもしれません。しかし、エラーメッセージはとても役に立つものです。エラーメッセージをよく読み、理解し、今後の問題解決に役立てましょう!
実際、これらの有益なエラーメッセージよりも、エラーも出さずにわずかにどこかが間違っていて正しく動かないプログラムのほうが何倍も面倒だと、のちのち気がつくでしょう。
問題解決はプログラミングの背景にある基礎です。紙にコードを書いたり、問題を細分化することは、問題解決に非常に役立ちます。
初心者にときどき見られる傾向として、プログラミングの問題に関して検索すれば解決できるかのように考えていることが挙げられます。つまり、うまくグーグル検索を活用すれば、解決方法が見つかると思っているのです。
確かに、GoogleやStack Overflowは有益ですが、あなた自身の問題解決力に頼ることもときには大事です。検索する前に、いくつかの異なる方法を試してみましょう。
もしくは、問題全体の解決策を探すのではなく、問題の一部の解決策を探すようにしましょう。つまり、「stringとJavaScriptを入れ替える」ではなく「StringをJavaScriptの配列に変換する」と検索するのです。
疑問に対して、または新たな機能や言語やライブラリに対してよい回答を見つけるのも、プログラマーにとって大事なスキルの1つです。Googleを使うことももちろんですが、コミュニティに参加したり、リソースを購読したりすることも重要です。
私は普段、Googleで以下のようなフォーマットで検索しています。
問題 + 言語/フレームワーク/ライブラリ
以上のフォーマットに沿って、できる限り少ない言葉で検索します。たとえば、以下のようなものです。
セカンドキャリアのためにプログラミングを学習しようと考えているものの、しばらくのあいだ勉強という勉強をしてこなかった人は、まずは「学び方」を思い出しましょう。
また、学習のモチベーションには波があるものですが、それはごく当たり前のことです。学習をはじめる前に、その波を乗り越えなければならないことを覚悟してください。
早いうちにプログラミングを習慣化しておけば、簡単にきれいなコードを書けるようになります。一方で、悪い習慣を身につけてしまうと、修正するのは困難です。
よりきれいなコードを書くヒントがここに書いてあるので、よろしければ参考にしてください。
もしWeb開発をしているのなら、HTMLとCSSのバリデータを用いれば、どこを修正すればいいのか教えてくれます。
プログラミングにもたくさんの世界があるので、あなたがとくに好きで集中できる分野を1つ見つけましょう。
フロントエンドやバックエンド、コンパイル言語やインタプリタ言語、多種多様なテキストエディタや開発者向けツールをすべて学ぼうとするよりも、本当に興味のある分野に絞ってスペシャリストを目指しましょう。
学び方は人それぞれ違います。目で見て覚えるのが得意なタイプなのか、動画で学ぶのが得意なタイプなのか、誰かに頻繁に背中を押してもらう必要があるのか、ドキュメントが好きなのか。それぞれにあった学び方をすることが大事です。
自分にもっとも合う学習スタイルをみつけ、そのスタイルに適した学習リソースを使いましょう。
たとえば、私の場合はドキュメントとコードサンプルを読むことでもっとも効率的に学習できます。一方で私は、チュートリアルで学習するものにはすぐ飽きてしまいます。
学んでいるときに少しだけ苦しむのは、じつはとても重要です。なぜなら、そうすることで自分自身の問題を自分で解決し、既存のリソースを使って答えを見つけられるようになるからです。
しかし、あまりに長い時間苦しんでしまうと、非生産的でモチベーションが下がってしまうといわれています。数時間悩んでも解決しないのならば、誰かに助けを求めましょう。苦しむのはほどほどに!
プログラミングは難しく、すぐに正解を見つけられるものではありません。私がプログラマーとしてもっとも重要な経験となったもののひとつは、Sudoku solverというサービスを書くことに失敗したときでした。エラーメッセージを確認し、すべてを正しく直すのは混迷を極めましたが、プログラミングはほとんどそのような作業の連続です。
失敗を受け入れ、その都度対処していくことで、さらなるスキルアップが見込めるでしょう。
はじめのうちは、ひとつのことを深く学ぶほうが、多くのことを浅く学ぶよりもよいでしょう。その深い知識は、次の知識を学ぶときに楽にしてくれます。いま学んでいることをやめて新しいことに移りたい、といった気持ちにならないように、初心者のうちは他のことには目隠しをしておきましょう。
たくさんのコードチャレンジをすることは、プログラミングの基礎を確かなものするためにとても役立ちます。コードチャレンジは、問題解決の練習に最適です。
私は毎日Twitter上で、#CodingPuzzleというハッシュタグをつけて1つ投稿しています。よろしければ私と一緒にトライしてみてください!
プログラミングについて100%理解するのは不可能です。誰も、すべてのプログラミング言語やメソッド、ライブラリやフレームワーク、完璧な解決法を知っているわけではありません。
完璧であらねばと心配する必要はありません。いま知っていることと、その知見の深さ・幅を徐々に広げていくことに集中すればよいのです。
学習の過程で、スキルを磨いたり作品をつくったりするために、さまざまなプロジェクトを立ち上げるでしょう。そのときに、自分が面白いと思えるプロジェクトアイディアを考えるのがおすすめです。
興味のあるアイディアのほうがプロジェクトを完遂しやすくなります。また、多くの時間を割きたくなるものです。
きちんと終わらせたプロジェクトが少しでもあるほうが、中途半端で終わってしまったプロジェクトがたくさん残っているよりも断然よいでしょう。
コーディングを学んでいる人はたくさんいます。決して、あなたの進捗を他の人と比べないようにしましょう。
代わりに、以前の自分自身と比べて、自分自身の成長を確認するようにしましょう。
プログラミングを学ぶのは、とても大変なプロセスです。そのため、何かやり遂げることができたときは、たとえそれが小さなことでも、自分を褒めてあげましょう!
私は自分が成し遂げたことをGoogle Keepに記録しているので、気分が落ち込んだ日にはそれらを見返して、自分の成果を確認するようにしています。
プログラミングは本当に素晴らしいものです。なぜなら、あなたはモノを作ることができるのだから。
私はいつも、以下のSandi Metzの言葉を心に留めています。
ソフトウェアを書く仕事をしている人は、信じられないくらい幸せです。ソフトウェアを構築することは、純粋な喜びだから。私たちの創造的なエネルギーを、物事を完成させるために注ぎ込むことができるから。
私たちは、自分たちの書くコードが社会の役に立つことをよく知っており、また、だからこそ純粋にコードを書く行為を楽しめるのです。私たちは重要なものを作っています。私たちは現代の職人であり、現代の現実を作り上げているのです。レンガ職人や橋を作る人に劣らず、プライドを持つべき仕事を成し遂げているのです。
これはすべてのプログラマーが共有しています。もっとも情熱的な初心者から現役を引退した人まで、できたばかりのスタートアップで働いている人から、堅実で長い歴史を持つ会社で働いている人まで、すべからく共有していることなのです。
私たちは、最良の仕事をしたい。意義のある仕事がしたい。そして、それを楽しみたいのです。
Sandi Metz
(執筆:Ali Spittel 翻訳:Shimizu Yui 編集:Kitamura Yu、Kimura Yumi)
2024年 東京都内の優良プログラミングスクール20選
Workship MAGAZINE
エンジニア初心者が失敗しがち/間違えがちなこと7選
Workship MAGAZINE
初心者でも独学でフリーランスエンジニアになれる|具体的に勉強すべきスキル8選も
Workship MAGAZINE