2020年版 初心者向け プログラミング入門ガイド

>こちらの記事は、[Aphinya Dechalert](https://dottedsquirrel.com/users/members/dottedsquirrel/) 氏により2019年 12月に公開された『 [The 2020 Starter Guide To Breaking Into Programming for Beginners](https://dottedsquirrel.com/better-developer/programming-starter-guide/) 』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。


プログラミングは、取っ掛かりが難しい分野かもしれません。特に、この業界が初めての方にとっては、どこから始めたらよいかもわからないかもしれません。

ほんの10年ほど前までは、インターネットとそのリソース関連のコードは、現在のサイズと比べると、ほんの欠片程度のものでした。より多くの開発者がエコシステムへの貢献に時間を費やすにつれて、私たちの情報の相互接続性は過去10年間で計り知れないほど成長しました。

これは驚くべきことですが、圧倒されることもありえます。

ここでは、小難しいことは置いておき、とりあえずプログラミングを始めることに焦点をあてたガイドを提示します。

以下は、このガイドをナビゲートするのに役立つコンテンツを要約したものです。PCのブラウザを使用している場合は、「ctrl」 + 「f」の検索機能を使用して移動できます。

**＃ top**
**＃1：まず目標を決める**
**＃2：開発者になることの良い部分と悪い部分**
**＃3：予算**
**＃4：開発作業のさまざまな部分**
**＃5：最初のポートフォリオの構築**
**＃6：求人への応募**
**＃7 ：ここから先は？**


# ＃1：まず目標を決める
これがあなたのキャリアとなります。

キャリアに関して多くの人が見落としがちなことは、それが人生において不可欠なものである、ということです。これを実行することに、かなりの時間を費やすことになるでしょう。

目標を決めることで、必要なものを重点的に学習できるようになります。－正直、難解で気が遠くなるようなコードも存在するので。

プログラミングを身につけることで得られるかもしれない報酬に魅力を感じる人もいれば、プログラミングによる課題解決を身につけたい人もいるでしょう。私の場合、アイディアを具現化したかったのでプログラミングを始めました。私はいつもアイデアにあふれており、プログラミングは自分のゴールを達成するためのツールであり架け橋となるものです。

目標があれば、どういった理由、どういった成果のためにコーディングをしているのか、を定期的に思い出すことにも役立ちます。なぜなら、自身の仕事や上司、同僚、あるいは自分においても、本来の道から脱線することが往々にしてあるからです。

だから、目標を常に忘れないでください。－何を目的として開発の旅を始めたのか？なぜこの分野で学び、成長するために時間を投資することを決めたのか？


# ＃2：開発者になることの良い部分と悪い部分
どんなキャリアを選択するにしても、良い部分と悪い部分は存在します。開発者も例外ではありません。

メリット、デメリットのリストと、開発者として活躍するために考慮すべきことを以下に記載します。

### メリット：
-	**報酬** － 資金が潤沢にある会社で働いていない場合には数年はかかりますが、開発の世界では「6桁の給料」は神話ではありません。
<font color="red">※訳注－「6桁の給料」: 1,000万円プレイヤー、数千万円レベルの年収</font>
-	**リモートワークも可能** － 毎日、一日中オフィスにいる必要はありません。多くの企業は、リモートワークのアイデアに取り組んでいます。（「オフィスデイ」で定例会議などを行う）
-	**世界で通用するスキル** － あなたが持つノウハウは国境を越え、あなたが望むほとんどの場所に持っていくができます。国を移動しても、学んだことが通用します。
-	**高い需要** － 米国労働統計局によると、開発関係職の需要見通しは、2014年から2024年の間に17％成長すると予測されています。これは、他のセクターの平均成長率である7％と比較すると非常に高い値です。

### デメリット：
-	**競合相手** － 正直、何かを始めるときにそれが簡単であればあるほど、他の人も同じことをする可能性が高くなります。プログラミングの技術が他の人にとって、よりアクセスしやすくなるにつれて、競争レベルと競争相手は比例して増加します。
-	**ストレス** － 開発者になると、定期的に訪れる締め切り、意味をなさないバグ、他人から引き継いだコード、粗末なフレームワークと実装、深夜のデプロイメント、刻々と変化する環境についていくために止めることのできない継続的な学習の純粋なストレスなどがあります。
-	**長時間労働の可能性** － 家に帰っても仕事は止みません。あなたにつきまとうことが往々にしてあります。そんなとき遅れないように仕事を処理するために、学習の時間は一旦横に置いておく必要があります。新人開発者にとっては、労働時間が長くてつらい場合があります。
-	**座りがちなライフスタイル** － あなたの大半の時間は画面越しに過ぎていきます。これは、あなたがほとんど動いて​​いないことを意味し、長期的には健康に害となる場合もあります。

### 考慮すべきこと：
-	**自身の性格** － こだわりの強さは、開発者として成功すること、優れたコード作成のプロセスに必要なものです。特に学習プロセス中では、かなりの忍耐力が要求されます。また学習方法も重要です。多くのデジタル学習リソースがあり、それらの多くはリアルな人間関係と切り離され、自分のペースで行います。自分一人でも自発的に学習することがあまり得意でない場合、この分野で活躍するのは難しいかもしれません。
-	**社会および家庭における義務** － 地下室の世捨て人になることは無いかもしれませんが、コードを学習し、コードを実装する作業には多くの時間を費やします。注意しておかなければ、完全に孤立してしまう可能性があります。家族や友人は最初は理解できないかもしれませんが、あなたのキャリアに関して全員が同じ理解である必要があります。一部のパートナーは、あなたが、チュートリアルでNodeパッケージのバージョンが言及されていないため全然コンパイルできないコードにストレスを感じているのを見るよりも、あなたと映画を一緒に見る方が好きなのです。
-	**コミットメントの能力** － プログラミンを趣味から本格的なキャリアの選択肢に転換するとき、スキルと専門知識をずっと追求し続けるという、人生の長旅にもコミットすることになります。使える時間の中であなたがコミットできるものが何であるかを明確にし、積極的にその整合性を保つ必要があります。できなかった場合に、あなたの人生は邪魔され、遅れをとってしまうリスクがあるからです。あなたの人生の他の部分を邪魔されることの無いよう、スキルの向上にどれだけコミットできるかを明確にしてください。
-	**あなたが期待すること** － すべての人が「6桁の給料」で始まるわけではありません。ほとんどの場合、駆け出し開発者向けの報酬は、約45,000〜55,000ドルというのが一般的です。この額は、どの国で働いているか、どのような会社で働き続けるかによって様々です。スタートアップでは予算が少ない傾向にありますが、ビジネス内容次第では、報酬が加速度的に上がっていくチャンスもあります。

# ＃3：予算
コードの学習は投資です。時間に加えて、金銭的な要素の必要性などいくつかの考慮すべき事項があります。

### ハードウェア
これは多くの初心者が尋ねる質問ですが、実際には誰も適切に答えられません。物事の壮大な計画では、7コアチップを搭載したものなら何でも問題無いでしょう。当時2012年に購入した私の「Dell XPS i7」は、2019年の5月まで非常によく働いてくれました。現在、私はほとんどのコーディング作業で「ASUS Ryzen 7」のラップトップを使用しています。

過去、仕事場で数多くの作業用ラップトップを与えられてきました。5コアチップは、複数の画面とコンソールを実行しているときにラグが生じ、3つ以上開いた場合にはクラッシュしてしまう傾向があります。

メインの開発マシンとしてラップトップを選択する場合、「Android Studio」などの一部のプログラムはバッテリーを消耗し、RAMに大きな負荷がかかります。

開発マシンに大金を費やす必要はありません。私が最近見たものだと、マシン全体の厚さが薄くなるにつれて価格が上がる傾向があります。サイズに左右されず、代わりに実際のスペックを確認してください。7コア、1TBのストレージ、最小16GのRAMのラップトップであれば手頃な価格で入手でき、ほとんどのことを問題なくコーディングできます。
<font color="red">訳注：ここで記載している「5コア」、「7コア」などは “5-core”, “7-core” の直訳であり、おそらく 「Intel Core i5」や「Intel Core i7」のことを指していると思われます。</font>


### ソフトウェア
ほとんどの開発関連のソフトウェアは無料でオープンソースです。例えば、「Visual Studio Code」は、無料のコミュニティ主導の拡張機能を備えた、最も人気のあるコードエディターの1つです。

Windows vs Mac のOS論争については、コードで何を達成しようとしているかに大きく依存します。Apple のモバイルアプリ開発を始めたい場合は、Apple のコンピューターが必要になるでしょう。ただし、Windows マシンはそれ以外の開発作業をカバーできます。

### コース
開発者になるために、コンピューターサイエンスの学位の取得を考えることがよくあります。過去10年程の間で、この業界は生涯に渡る長年の学習者に対応するため、変容し、変化してきました。そして、従来の学位取得のような学習手段の代替としてブートキャンプやオンラインコースのようなものが誕生しました。

コンピューターサイエンスの学位の取得自体が間違っているわけではありませんが、今日では第一歩を踏み出すために存在する数多くの方法の1つであることを忘れないでください。

プログラミングのキャリアを始めるのに役立ついくつかの場所を以下に記載します。

#### [Udacity Nano Degree](https://www.udacity.com/nanodegree)
Udacity には、この分野でこれから学習を始めることを目的とした多数のコースが含まれており、よりすぐりのチューターが評価した実際のプロジェクトもあります。コースの構造は、自習型と時間指定型の組み合わせです。

「Nanodegree」の費用は、あなたが入学したコースを完了するために、いかに早く、いかに積極的であるかによります。これは、Udacity が毎月のサブスクリプションベースで課金されるためであり、予想学習時間の枠でコースを完了するモチベーションになるため、ある意味では良いことです。

#### [Coursera](https://www.coursera.org/browse/computer-science/software-development)
Coursera は、無料のプラットフォームであり、従来の大学でのコンピュータサイエンス学位取得の約半分の価格で認定学位を得ることや、認定証明書を得ることもできます。

コースは世界中の大学によって運営され、多くの場合、開始日は決まっており、キャンパスに通って取得するものと同品質の内容となっています。

#### [EdX](https://www.edx.org/course/subject/computer-science)
EdX は、ハーバード、プリンストン、ブラウン大学などのアイビーリーグメンバーの参加を含む、オンライン学習プラットフォームです。他のメンバーには、IBM、Microsoft、AWS などのベンダーが含まれます。

利用可能なコースは多くの場合、オープンで自己ペースで無料であり、有料で正式に認定を受けるオプションもあります。[MicroMasters](https://www.edx.org/micromasters)と呼ばれる利用可能な短いトラックがあります  。これらのトラックには、特定の主題またはトピックに関する詳細な知識を提供するために、いくつかの厳選されたコースが含まれていることがよくあります。

# ＃4：開発作業のさまざまな部分
一般的に「プログラマー」で連想するのは、ただのコーディングのことで、これ以上のものがあることを気にかけない。プログラミングの世界で遭遇するであろうさまざまな分野と、開発者として働き続けるかもしれない場所の概要を次に示します。

### フロントエンド
フロントエンドはあなたが見るものです。それはインターフェイスであり、一般的にコードにおいて、公開される対話の始まりです。

今日、多くの開発者、特に独学の初期段階ではフロントエンド開発から始まります。これは、そのほとんどが HTML、CSS、および何らかの形式の JavaScript に基づいているためです。

フロントエンドが簡単に始めやすいということは、多くの競合がいるということです。自分自身を差別化するために、デザイン、ユーザーエクスペリエンス、パターン、タイポグラフィなど、コーディング以外の関連トピックも探求する必要があります。

フロントエンドのコーディング手法を知るだけではもはや十分ではありません。少なくとも設計者と同じ言語で話せるようにする必要があるため、設計の理解は開発作業の不可欠な部分になっています。

### バックエンド
フロントエンドは、データソースに接続されていなければほとんど役に立ちません。バックエンドは、データをどのように保存、取得、フォーマットするかを決めて処理するブリッジとして機能します。

バックエンドとしては、上記の機能以外には特にありませんが、コードの肥大化、データ管理、セッションのための山ほどの方法論とアーキテクチャがあります。

バックエンド開発から始めると、フロントエンドを使いやすくする手段に過ぎないように思えるかもしれません。しかし、バックエンドの複雑さは、データとその永続化の方法を簡潔に処理する能力にあります。

### インフラストラクチャとアーキテクチャ
最も単純な場合、コードを Degital Ocean droplet または AWS EC2 インスタンスのようなクラウドボックスに配置することは、簡単なタスクに感じるかもしれません。スケーラビリティ、プロセス自動化、ホスティング費用を手に負えない価格にまで膨らませない方法について考える必要がある場合には、複雑さが生じます。

多くの場合、インフラストラクチャの認定を取得すると、Google Cloud、Microsoft Azure、Amazon AWS などの特定のクラウド製品の専門家になります。学習の開始時にインフラストラクチャやアーキテクチャを選択する人は多くはないため、これらの認定の取得は給与を大幅に引き上げる可能性があります。

なぜか？それは、フロントエンドやバックエンドほど派手さがなく、目に見えづらいものではありますが、企業が成長の加速段階を経て、そこで既存のコードとデータが需要を満たし続ける必要がある場合に、依然として必要なコンポーネントだからです。

### 言語とフレームワーク
選択肢として多くの言語とフレームワークがあります。現在最も人気があるのは JavaScript です。

それ自体「純粋な」プログラミング言語ではない、という議論の余地はありますが、その適用性とさまざまな領域での使いやすさから、1つのことを知るだけでも、多くのことを実現できるようになります。多くのWebテクノロジーと実装は、今日ではJavaScriptに帰着されています。

モバイルアプリの開発やゲームベースの開発を始めることに興味がある場合は、 Java と C++ から始めることをお勧めします。それらには、バックエンドで前処理されたフロントエンドを実装できるフレームワークも付属しています。

# ＃5：最初のポートフォリオの構築
特に過去ポートフォリオを作成したことがない方には、ポートフォリオに何を含めるべきかを判断するのは困難です。ポートフォリオを持っていれば、持っていない場合よりも仕事を早く見つけやすくなります。これは、履歴書でアピールしたことの裏付けとしてポートフォリオが役立つためです。

始めるためのヒントとアイデアをいくつか紹介します。

### フロントエンドの実装
すべてにインターフェースが必要です。簡潔かつ分かりやすい方法で HTML、CSS、および JavaScript を組み込んだ実装で、フロントエンドのスキルをアピールしましょう。

Angularのようなフレームワークや、Reactのようなライブラリを使用してシングルページアプリケーションを実装できます。todo リストはチュートリアルのはじめによく使われるので、何度も作成されています。

24時間で起動できるフロントエンドアプリのアイデアをいくつか紹介します。これは、todoリストアプリで学んだアイデアをあなたの独自アプリとして再コーディングします。

-	体重トラッカー
-	ノートアプリ
-	タイマーアプリ
-	家計簿アプリ
-	電卓アプリ
-	ウィッシュリストアプリ

ionic のようなフレームワークをラップすれば、モバイルアプリとしても機能します。

フロントエンドアプリを作成しているときは、誰かが書いたブートストラップや CSS に頼りすぎないようにしてください。迅速な開発のコンセプトには沿っていますが、初めてとりかかる場合は、自分がスキル範囲のどこにいるのかを適切に把握したいと思うでしょう。つまり、デザインとデザインコードの実装の多くを自分で行うことを意味します。

### バックエンド実装
上記のアイデアをさらに一歩進め、それらのデータベースとバックエンドを実装しましょう。

これは、独自のデータ構造を作成し、APIを介してフロントエンドからアクセス可能な方法で、クエリおよび処理するやり方を考えることを意味します。それをクラウドで実行すれば、インフラストラクチャテクノロジーのハンズオン体験が可能です。－ この経験は、履歴書に正当に書くことができます。

開発段階のバックエンドの多くは、あなたのローカルマシン上にあります。これは、非効率性を減らすために自動化されたプロセスフローを設定する能力と知識を意味します。手動で何かをしている場合、これは自動化できるか？ と自問自答してみてください。

答えはおそらく「イエス」だけども自動化の方法がわからないという場合、ググってみましょう。

### API を統合する
あなたのツールキットの一部としてバックエンドがない場合に、フロントエンドと連携する別の方法は、外部APIを統合することです。以下のような、いくつかのオープンで無料のAPIがあります。

[RapidAPI](https://rapidapi.com/collection/list-of-free-apis) には、彼らのプラットフォームでホストするための無料のAPIリストがあります。 [eBay](http://developer.ebay.com/common/api/) には、カテゴリの検索、出品、リストの表示に使用できるAPIもあります。

[アメリカ国勢調査局](http://www.census.gov/data/developers/data-sets.html)には、人口統計、人口、および経済データなどの国勢調査を通じてコン​​パイルされた情報にアクセス可能な選定 API があります。この種のデータで検索クエリとグラフを使用して、多くの楽しみを得ることができます。

おもしろいことに、  [Marvel Comics](https://developer.marvel.com/)  にも API があり、Marvelの70年分のコミック関連データに関する情報にアクセスできます。私はこれを個人的に確認していませんが、この種のデータから何か壮大なものを構築できるように感じます。

# ＃6：求人への応募
開発者の仕事に応募するのは、萎縮したり、長いプロセスとなるかもしれません。学習やコースを終えていることを要件とするような求人に応募したい場合は、プログラムの実施中に応募しておくのがベストです。

これは、選考、面接、および技術的テストのプロセスに、1〜3か月程かかることがあるためです。結果の連絡に時間がかかる会社もあります。

主なアドバイスは、できるだけ多くのポートフォリオを構築し、情報豊富な方法で履歴書を作成することですが、5ptフォントで端まで詰め込むようなことは避けてください。星やスキルの割合を使用しないでください（JavaScriptの85％のスキルを持っている、というような使い方です）。不必要にスペースを占有してしまいますし、雇用者はその数値を算出するために使用したメトリックに対して知らない可能性があるためです。

簡潔に情報を伝えましょう。関連する職務経験がない場合は、ポートフォリオを代用してください。あなたが専門とするスタックの範囲と、それをあなたの履歴書の大部分として強調しましょう。

しかし、求職プロセスのすべてにおいて最も重要なことは、落胆しないことです。他の雇用市場と同様に、業界に一旦入れば、そこから次に進むことも可能です。

# ＃7：ここから先は？
コースを1つまたは2つ修了したら、自分でいくつかのアプリを作成しましょう。チュートリアルの指示手順に従わなくてもコーディングできるようになれば、実際の世界でもコードを作成する準備が整っています。

向上心を持ち続けることは、仕事以外の時間を必要とすることが多く、また非常に長い間自分が初心者のように感じ続けるでしょう。これを克服するには、新しい知識ポイントを収集する必要があります。－主題や言語における幅の広さと深さの両面で

知識が身につければ身につけるほど、プロジェクトは簡単になり、問題をその場で解決できるようになっていくでしょう。初心者なので、ミスを恐れず、できる限り多くのコードを作成するように努めてください。非効率性を認識したり、プロジェクトのどこで問題が発生する可能性があるかを予測するのに役立ちます。

# 翻訳協力
Original Author:  **[Aphinya Dechalert](https://dottedsquirrel.com/users/members/dottedsquirrel/)** 
Thank you for letting us share your knowledge! 

この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: yumika tomita
翻訳担当: @upaldus
監査担当: takujio
公開担当: @upaldus

# ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか？
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。
みなさまのメッセージをお待ちしております。