{"componentChunkName":"component---src-templates-blog-post-tsx","path":"/blog/learning-programming-language/","result":{"data":{"site":{"siteMetadata":{"title":"Yasuhiro Ito Lab","author":"Yasuhiro Ito"}},"markdownRemark":{"id":"78e5bb57-a773-5183-9347-f6ebb819eb68","excerpt":"独学でプログラミングを勉強する方法。(第一回) 自己紹介 Web 系で必要な知識 フロントエンド フロントエンドで必要な知識 HTML/CSS (マークアップ言語) Javascript/Typescript (プログラミング言語) React/Vue…","html":"<h2>独学でプログラミングを勉強する方法。(第一回)</h2>\n<p class=\"mt-8 mb-8\">\nまずはプログラミング言語を決めよう。\n</p>\n<div class=\"mt-8 mb-8\">\n<nav class='blog-nav'> \n  <div class='inner'>\n    <p>目次</p>\n    <ol class=\"top-ol\">\n      <li class=\"top-li\">Web 系で必要な知識</li>\n      <li class=\"top-li\">スマホ系で必要な知識</li>\n    </ol>\n  </div>\n</nav>\n</div>\n<p class=\"mb-16\">\nプログラミングを学習する方法を紹介していきたいと思います。\n今回はその第一回です。\n</p>\n<p class=\"mb-16\">\n何かスポーツをする場合、まず種目をきめますよね。同じように、プログラムで何を作りたいか決めましょう。\nなぜなら、何を作りたいかによって、学ぶプログラミング言語が変わってくるからです。\n</p>\n<p class=\"mb-16\">\n今回は Web 系とスマホ系にジャンルを絞りました。実際はもっと種類があるのですが、それはまた別の機会に紹介します。\n</p>\n<h2>自己紹介</h2>\n<p class=\"mt-8 mb-8\">\n現役プログラマー。この道 15 年ですが、まだまだ現役を続けたいと思っています。\nバックエンドを担当していますが、たまにフロントを少しだけお手伝いします。\n</p>\n<h2>Web 系で必要な知識</h2>\n<p class=\"mt-8 mb-8\">\nWeb サイトやホームページと言われるものです。近年非常に需要が多い分野でもあります。\n</p>\n<p class=\"mb-16\">\n一言に Web 系と言ってもその形態は多様ですが、ここではフロントエンドとバックエンドに分けて話をしたいと思います。\n</p>\n<p class=\"mb-16\">\nラップトップやスマホに配置されるソフトウェアがフロントエンドで、データセンターに配置されるのがバックエンドです。\n</p>\n<p class=\"mb-16\">\nフロントエンドとバックエンドは、インターネットを仲介してやり取りします。それはそれで一つの記事がかけてしまいますので、別の記事で紹介します。\n</p>\n<p class=\"mb-16\">\n最初のうちは、フロントエンドとバックエンドは、両方学ぶのをオススメします。ただし、極める必要はありません。最終的にはどちらかに絞ることになると思いますが、両方分かってないとまともに設計するのが難しいです。\n</p>\n<h3>フロントエンド</h3>\n<p class=\"mt-8 mb-8\">\n皆さんが今まさに見ている、ブラウザの画面に表示されている部分です。\nそして、おそらく技術的な変化がもっとも激しい分野の一つではないかと私は思います。\n</p>\n<h4>フロントエンドで必要な知識</h4>\n<div class=\"mt-8 mb-8\">\n<ul>\n<li>HTML/CSS (マークアップ言語)</li>\n<li>Javascript/Typescript (プログラミング言語)</li>\n<li>React/Vue (フレームワーク)</li>\n</ul>\n</div>\n<p class=\"mb-16\">\nフロントエンドは技術的な変化が激しいので、これをやっておけば安心、とは言えません。ここに書いたのは 2021 年時点で比較的に人気な言語とフレームワークです。\n</p>\n<p class=\"mb-16\">\nフレームワークとは何ぞや？という説明はまた別の記事で書きたいと思います。今はフロントエンドを開発する上で便利なもの、という認識で OK です。\n</p>\n<h4>おすすめプログラミング言語</h4>\n<p class=\"mt-8 mb-8\">\nTypescript です。\n</p>\n<p class=\"mb-8\">\nTypescript は Javascript の上位互換であり、Typescript が分かれば Javascript も理解できます。\nそれに、Javascript は型が存在しないのでバグが混入しやすいこともあり、最近は Typescript を採用する企業も増えています。つまり、Typescript が触れると就職にも優位になるでしょう。\n</p>\n<p><a href=\"https://www.typescriptlang.org/\">Typescript の公式ページはこちら</a>。※英語です。</p>\n<h4>おすすめフレームワーク</h4>\n<p class=\"mt-8 mb-8\">\n日本で働くなら、Vue です。\n</p>\n<p class=\"mb-8\">\n国内だと Vue の方が日本語のドキュメントが充実していたという理由で人気があります。Vue/React ともにモダンなフレームワークであることから、若手が参入しやすいのでぜひ勉強して下さい。ちなみに海外だと React が支配的だと思われます。いずれ海外へ、と考えている方は React の方がいいかもです。ちなみにこのブログページは React + Gatsby で作られています。\n</p>\n<p><a href=\"https://jp.vuejs.org/\">Vue の公式ページはこちら</a>。</p>\n<h3>バックエンド</h3>\n<p class=\"mt-8 mb-8\">\nフロントエンドから受け取ったデータを加工して、データベースにいれたり、データベースから取り出したデータをフロントに送ったりするシステムです。\n</p>\n<p class=\"mb-8\">\nバックエンド、という名前が示すとおり、後ろにいるシステムです。重要なデータはバックエンドで取り扱われることが多いです。\n私が仕事で担当しているのもこのバックエンドです。\n</p>\n<h4>バックエンドで必要な知識</h4>\n<div class=\"mt-8 mb-8\">\n<ul>\n<li>Go/Python/Ruby/Node/Rust/PHP (プログラミング言語)</li>\n<li>AWS/Azure/GCP (クラウドサービス)</li>\n<li>MySQL/Postgress (RDMS)</li>\n<li>NoSQL</li>\n<li>Docker</li>\n</ul>\n</div>\n<p class=\"mb-8\">\n各項目ごとに複数列挙しましたが最初は一つ選んで、まずはそれを集中的に学習するのをオススメします。\n</p>\n<h4>バックエンドでオススメのプログラミング言語</h4>\n<p class=\"mt-8 mb-8\">\nGo を推薦します。需要が多い上に比較的学習しやすく、まだ歴史が浅い言語なので覚えておくと就職で有利だと思います。\n</p>\n<p class=\"mb-8\">\nちなみに、私が今使っている言語は、Typescript(Node)と Python です。\nNode と Python も採用している企業が多く、これからも採用が減ることはないと思われるので悪くない選択だと思います。\n</p>\n<p><a href=\"https://golang.org/\">Go の公式サイトはこちら</a>。※英語です。</p>\n<h4>バックエンドでオススメしないプログラミング言語</h4>\n<p class=\"mt-8 mb-8\">\nPHP、Ruby と Rust です。\n</p>\n<p class=\"mb-16\">\nPHP や Ruby は歴史が長く、多くのシステムで使われています。割合で言えば比較的古いシステムで使われている傾向が強いとも言えます。古いシステムということは、熟練者が頑張っているということです。つまり、初心者がなかなか活躍しにくい可能性があります。\n</p>\n<p class=\"mb-16\">\nRust は単純に学習が難しいというのが問題ですし、まだ本格的に採用している会社が少ない点です。逆に、そこを狙っていく手もありますが、その場合は覚悟を決めて学習してください。私もフルタイムで Rust 触ってましたが、他の言語と比べると調査してる時間がすごく長くなります。忍耐強くない人はやめておいた方がよい言語です。\n</p>\n<h4>クラウドサービス</h4>\n<p class=\"mt-8 mb-8\">\nAWS をオススメします。\n</p>\n<p class=\"mb-16\">\n単純に大きなシェア(30%くらい)をもっています。採用している企業も多いし、これからもっと増えると思います。\n無料枠があるので、少し遊びで触ってみるのもありです。\n</p>\n<p class=\"mb-16\">\nただし、何も考えずに使うと、とんでもなくお金がかかることもあるので、きちんと費用を見ながら触りましょう。\nそういう意味だと初心者の方にはやや敷居が高いかもしれません。お金が心配な方は安いさくらサーバーか、ローカルで Docker を使ってみるのがよいでしょう。\n</p>\n<p class=\"mb-8\">\nまた別の記事で AWS の使い方を紹介したいと思います。\n</p>\n<p><a href=\"https://aws.amazon.com/jp/\">AWS の公式サイトはこちら</a>。</p>\n<h4>NoSQL</h4>\n<p class=\"mt-8 mb-8\">\nNoSQL というのは SQL でないデータベースの総称であり、いろいろなデータベースがあります。\n一番有名所といえば、MongoDB でしょうか。ただし、AWS を触るのであれば、DynamoDB という素晴らしいものもあります。\n</p>\n<p class=\"mb-8\">\n歴史があまり長くないのでこれといったオススメはありません。無料で学習するなら MongoDB がよいでしょう。\n</p>\n<p><a href=\"https://www.mongodb.com/2\">MongoDB の公式サイトはこちら</a>。</p>\n<h4>Docker</h4>\n<p class=\"mt-8 mb-8\">\nDocker 社が提供する無料の仮想環境です。こちらもバックエンドではかなり使われているものなので、学習しておくのがよいです。\nただで使えるので、ぜひ自分のパソコンに入れてみてください。\n</p>\n<p><a href=\"https://www.docker.com/\">Docker の公式サイトはこちら</a>。</p>\n<h2>スマホ系</h2>\n<p class=\"mt-8 mb-8\">\n皆さんが普段触っているスマホアプリのことです。\n</p>\n<div class=\"mt-8 mb-8\">\n<ul>\n<li>iPhone アプリ</li>\n<li>アンドロイドアプリ</li>\n</ul>\n</div>\n<p class=\"mb-16\">\n実は言うと、スマホ系アプリも Web 系と同じようにフロントエンドとバックエンドに分けることができます。\nアプリの場合は、フロントエンドというか、クライアントと表現することが多いかもしれません。\n</p>\n<p class=\"mb-16\">\nFacebook や Youtube のように、ユーザーが何かを共有するシステムではバックエンドが必要になります。\n</p>\n<p class=\"mb-16\">\nスマホ系のバックエンドも、Web 系で紹介したバックエンドと基本的に同じと思っていただいて構いません。\n基本的にスマホを作る場合は Web も作ることが多いので、共通のバックエンドのシステムを利用することでしょう。\n</p>\n<p class=\"mb-8\">\nよってここでは、アプリ側だけを紹介します。\n</p>\n<h3>iPhone アプリで必要な知識</h3>\n<div class=\"mt-8 mb-8\">\n<ul>\n<li>swift (プログラミング言語)</li>\n<li>Xcode (開発ツール)</li>\n</ul>\n</div>\n<p class=\"mb-8\">\niPhone 向けアプリであれば、Mac で開発するのがよいでしょう。\nXcode もアプリを開発する上で重要なツールになりますので、使い方を覚えて行く必要があります。\nしかし、Web 系と違ってこれ一択なので、変な心配はないです。\n</p>\n<p><a href=\"https://developer.apple.com/jp/swift/\">Swift の公式サイトはこちら</a>。</p>\n<p><a href=\"https://developer.apple.com/jp/xcode/\">Xcode の公式サイトはこちら</a>。</p>\n<h3>アンドロイドアプリで必要な知識</h3>\n<div class=\"mt-8 mb-8\">\n<ul>\n<li>Kotlin (プログライング言語)</li>\n<li>Android Studio (開発ツール)</li>\n</ul>\n</div>\n<p class=\"mb-8\">\nKotlin は比較的新しい言語です。Java という言語でもアプリ開発が行われていますが、最近は Kotlin を採用するケースが多いようです。\nKotlin を勉強した後に、Java も学習してみるとよいでしょう。\n</p>\n<p><a href=\"https://kotlinlang.org/\">Kotlin の公式サイトはこちら</a>。</p>\n<p><a href=\"https://developer.android.com/studio/intro?hl=ja\">Andraoid Studio の公式サイトはこちら</a>。</p>","frontmatter":{"title":"独学でプログラミングを勉強する方法。(第一回)","date":"January 31, 2021","description":"独学でプログラミングを勉強。まずはプログラミング言語を決めよう","featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAECAwQF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAZq7QLzBCH//xAAaEAEAAwADAAAAAAAAAAAAAAACAAEDERIi/9oACAEBAAEFArelJaWG9ubBM7Ty5//EABYRAQEBAAAAAAAAAAAAAAAAAAASEf/aAAgBAwEBPwGdQ//EABYRAQEBAAAAAAAAAAAAAAAAAAASAf/aAAgBAgEBPwGsU//EABsQAAICAwEAAAAAAAAAAAAAAAABERICIWEx/9oACAEBAAY/Aq2HKfNCstwSl4MtnjLfT//EABsQAQEAAgMBAAAAAAAAAAAAAAERACExQVFh/9oACAEBAAE/IVNVuuMSXsBPb243QS5ZqrnNuOq3T7igSO6jP//aAAwDAQACAAMAAAAQyw//xAAXEQEBAQEAAAAAAAAAAAAAAAABABEx/9oACAEDAQE/EBjZ29v/xAAVEQEBAAAAAAAAAAAAAAAAAAAQUf/aAAgBAgEBPxCR/8QAHBABAQACAwEBAAAAAAAAAAAAAREAITFBUWGR/9oACAEBAAE/EA4dCDY/MJaabgI9GMUNB44kc7TTTluICIbuxZ5iyLBgOoE+Z//Z","aspectRatio":1.5037593984962405,"src":"/static/4e0ee6d7c41651b5a3ae53bcb635e933/0f3a1/code.jpg","srcSet":"/static/4e0ee6d7c41651b5a3ae53bcb635e933/f836f/code.jpg 200w,\n/static/4e0ee6d7c41651b5a3ae53bcb635e933/2244e/code.jpg 400w,\n/static/4e0ee6d7c41651b5a3ae53bcb635e933/0f3a1/code.jpg 500w","sizes":"(max-width: 500px) 100vw, 500px"}}}}}},"pageContext":{"next":{"fields":{"slug":"/learning-programming-language-2/"},"frontmatter":{"title":"独学でプログラミングを勉強する方法。(第二回)"}},"previous":{"fields":{"slug":"/how-important-iq-is-for-programming/"},"frontmatter":{"title":"プログラミングに才能は必要か？どんな才能が必要？"}},"slug":"/learning-programming-language/"}},"staticQueryHashes":["205017786","63159454"]}