- 投稿日:2019-02-11T17:32:46+09:00
エンジニアになる為の学習ロードマップ -必須知識編-
背景
最近、何を学べば良いのか分からず迷走していたので、「Developer roadmap 2019」を参考に、ゼロベースで1つ1つ着実にスキルと知識を身につけようと思い、この記事を書きました。
筆者の学習ロードマップのポイントは以下の通りです。
- Required for any path/FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- その上で、参考になりそうな記事や書籍などをピックアップする。
- 但し、FE/BE/DevOpsを全て網羅的にマスターするには膨大な労力を要するので、挫折の可能性あり。
- 従い、これらについては個人的に興味があるものを学習する。
内容について、異論反論ある方もいらっしゃるかと思いますが、初心者が自分なりに考えたジャストアイデア的なものとして、温かくご査収いただければ幸いです。
※本記事では、導入のRequired for any pathのみを取り上げており、FE/BE/DevOpsについて触れておりませんので、予めご了承下さい。
対象読者
- プログラミング初学者で、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
目次
- Required for any path
- Git - Version Control
- Basic Terminal Usage
- Data Structures & Algorithms
- SOLID, KISS, YAGNI
- GitHub
- Licenses
- Semantic Versioning
- SSH
- HTTP/HTTPS and APIs
- Design Patterns
- Character Encodings
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルは以下(図の左側)の通りとされています。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
HTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
URLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
たとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
- Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
Webエンジニアになる為の学習ロードマップについて考える -必須知識編-
つまり、何について書いた記事か
Developer roadmap 2019をベースに、Webエンジニアになる為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
基本的な構成としては、以下の通りです。
- FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- 但し、全部を網羅的にマスターするには膨大な労力を要するので挫折してしまう。
- 従って、個人的に気になっているものをピックアップし、その上で参考になりそうな記事や書籍などをまとめた。
- また、可能な限りなぜそれを学ぶのかと名前の由来(意外と面白かったので)の2つの要素を盛り込んだ。
内容については色々とオブジェクションもあるかと思いますが、プログラミング初学者の筆者が自分なりにあれこれ考えたジャストアイデア的なものとしてご査収いただければ幸いです。
対象読者
- プログラミング初学者で、壁に行き詰っている方
- 未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
- サルでも分かるGit入門
- まずはGitの仕組みを理解することからオンライン学習ツール
- git入門 (全22回) - プログラミングならドットインストール書籍
- Git独習Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
- 【保存版】Macでターミナルで使える基本のコマンド8選書籍
- これから学ぶmacOSターミナルData Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
書籍
- アルゴリズムを、はじめようSOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
- 新人プログラマが知るべきプログラミングの原則6選!
- オブジェクト指向プログラミングの五つ原則 - S.O.L.I.D (S編)GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
- 【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践~とりあえず一緒に動かしてみようぜ!~書籍
- Web制作者のためのGitHubの教科書 チームの効率を最大化する共同開発ツール Web制作者のための教科書シリーズLicenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
- エンジニアは間違いなく知るべきOSSのきほんのき
- OSSのライセンスを理解する(「使用」と「利用」の違い、知っていますか?)Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
- SemVer(セマンティックバージョニング):Dev Basics/Keyword - @IT
- 「セマンティック バージョニング」を読んだのでバージョニングについてまとめたSSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
- SSHの仕組み!ぼんやりとした理解だったものをすっきりさせようの会
- インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
- http・httpsとは?仕組みと安全なWEB利用のための6ヶ条
- Webセキュリティ覚書 : "HTTPS" 編 [ 初学者向け ]
- WebAPIについての説明オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
- サルでも分かる逆引きデザインパターンCharacter Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
書籍
- 文字コード「超」研究 改訂第2版
- [改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
脱初学者する為の学習ロードマップ -必須知識編-
つまり、何について書いた記事か
Developer roadmap 2019をベースに、脱初学者する為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
基本的な構成としては、以下の通りです。
- FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- 但し、全部を網羅的にマスターするには膨大な労力を要するので挫折してしまう。
- 従って、個人的に気になっているものをピックアップし、その上で参考になりそうな記事や書籍などをまとめた。
- また、可能な限りなぜそれを学ぶのかと名前の由来(意外と面白かったので)の2つの要素を盛り込んだ。
内容については色々とオブジェクションもあるかと思いますが、プログラミング初学者の筆者が自分なりにあれこれ考えたジャストアイデア的なものとしてご査収いただければ幸いです。
対象読者
- プログラミング初学者で、壁に行き詰っている方
- 未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
- 【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践~とりあえず一緒に動かしてみようぜ!~書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
- SemVer(セマンティックバージョニング):Dev Basics/Keyword - @IT
- 「セマンティック バージョニング」を読んだのでバージョニングについてまとめたSSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
【初心者向け】脱初学者する為の学習ロードマップ -必須知識編-
つまり、何について書いた記事か
プログラミング初学者が脱初学者する為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
ポイントは以下の通りです。
- Required for any path/FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- その上で、その上で参考になりそうな記事や書籍などをまとめる。
- 但し、FE/BE/DevOpsを全て網羅的にマスターするには膨大な労力を要するので、挫折の可能性あり。
- 従い、これらについては個人的に興味があるものをピックアップして学習する。
内容について色々と異論反論もあるかとは思いますが、温かくご査収いただければ幸いです。
対象読者
- プログラミング初学者で、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
【初心者向け】プログラミング/脱初学者する為の学習ロードマップ -必須知識編-
つまり、何について書いた記事か
プログラミングに関して、脱初学者する為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
ポイントは以下の通りです。
- Required for any path/FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- その上で、その上で参考になりそうな記事や書籍などをまとめる。
- 但し、FE/BE/DevOpsを全て網羅的にマスターするには膨大な労力を要するので、挫折の可能性あり。
- 従い、これらについては個人的に興味があるものをピックアップして学習する。
内容について色々と異論反論もあるかとは思いますが、温かくご査収いただければ幸いです。
対象読者
- プログラミング初学者で、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
プログラミング初学者がエンジニアになる為の学習ロードマップ -必須知識編-
つまり、何について書いた記事か
プログラミング初学者がエンジニアになる為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
基本的な構成としては、以下の通りです。
- FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- 但し、全部を網羅的にマスターするには膨大な労力を要するので挫折してしまう。
- 従って、個人的に気になっているものをピックアップし、その上で参考になりそうな記事や書籍などをまとめた。
- また、可能な限りなぜそれを学ぶのかと名前の由来(意外と面白かったので)の2つの要素を盛り込んだ。
内容について色々と異論反論もあるかとは思いますが、プログラミング初学者の筆者が自分なりにあれこれ考えたジャストアイデア的なものとしてご査収いただければ幸いです。
対象読者
- プログラミング初学者で、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
脱初学者する為の学習ロードマップ -必須知識編-
つまり、何について書いた記事か
プログラミング初学者が脱初学者する為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
ポイントは以下の通りです。
- Required for any path/FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- その上で、その上で参考になりそうな記事や書籍などをまとめる。
- 但し、FE/BE/DevOpsを全て網羅的にマスターするには膨大な労力を要するので、挫折の可能性あり。
- 従い、これらについては個人的に興味があるものをピックアップして学習する。
内容について色々と異論反論もあるかとは思いますが、温かくご査収いただければ幸いです。
対象読者
- プログラミング初学者で、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
【初心者向け】エンジニアになる為の学習ロードマップ -必須知識編-
つまり、何について書いた記事か
Webエンジニアを目指すうえで、初学者が脱初学者する為に学ぶべきスキル・知識についてまとめたもの。
背景
最近、何を学べば良いのか分からず迷走していたので、先日触れた「Developer roadmap 2019」を参考にしながら、道筋を立てて学ぶべきスキル・知識をゼロベースで習得して行こうと考えたものです。
ポイントは以下の通りです。
- Required for any path/FE/BE/DevOpsの順番で網羅的に学んでいく前提。(良いか悪いかは別として)
- その上で、その上で参考になりそうな記事や書籍などをまとめる。
- 但し、FE/BE/DevOpsを全て網羅的にマスターするには膨大な労力を要するので、挫折の可能性あり。
- 従い、これらについては個人的に興味があるものをピックアップして学習する。
内容について色々と異論反論もあるかとは思いますが、温かくご査収いただければ幸いです。
対象読者
- プログラミング初学者で、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルについて見て行きます。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。 主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。
https://ja.wikipedia.org/wiki/Hypertext_Transfer_ProtocolHTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
HTTPS (Hypertext Transfer Protocol Secure) は、HTTPによる通信を安全に(セキュアに)行うためのプロトコルおよびURIスキームである。厳密に言えば、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルによって提供されるセキュアな接続の上でHTTP通信を行うことをHTTPSと呼んでいる。
https://ja.wikipedia.org/wiki/HTTPSURLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
https://ja.wikipedia.org/wiki/アプリケーションプログラミングインタフェースたとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、改めて別の記事で触れさせていただきます。
- 投稿日:2019-02-11T17:32:46+09:00
WebエンジニアになるためのDeveloper roadmap
はじめに
最近、何を学べば良いのか分からず迷走していたところ、「Developer roadmap 2019」が参考になったので、簡単に紹介したいと思います。
Developer roadmapとは
Kamran Ahmedse氏(ドバイのオンライン旅行予約サービス「tajawal」のリードエンジニア)が作成しているWebエンジニアのためのロードマップです。
その年によって、最新の技術や廃れてしまった技術が変わっていきますが、毎年更新されていてるので、最新のトレンドだったり、次に何を学べばいいのかの指針になります。対象読者
- エンジニアになりたいけど、何に手をつけたら良いか分からない方
- 実務未経験からエンジニアを目指している方
結局のところ、何について書いた記事か
ロードマップは、Required for any path(必須知識)、フロントエンド(FE)、バックエンド(BE)、DevOps(システム開発)を網羅したものですが、流石に全部をピックアップすることは無理なので、本記事では必須知識について紹介します。
とはいえ、プログラミング初学者の筆者が自分なりに調べてまとめた内容なので、間違っている点あるかもしれませんが温かくご査収いただければ幸いです。
Required for any path
FE/BE/DevOpsに関わらず、求められる必須知識・スキルは以下(図の左側)の通りとされています。
Git - Version Control
Gitは、プログラムのソースコードの変更記録と履歴を管理するバージョン管理システムのことです。
Gitを使うと誰が・いつ・どのファイルの・どこを・どのように変更したかが分かります。また、いつでもその状態に戻ることができるようになります。
なぜ、Gitを学ぶ必要があるのか?結論としては今やプロダクト開発に欠かせないツールとされているからです。
何が言いたいかと言うと、プロダクトは通常複数人で開発しますが、大掛かりなものは当然1日で全てが完成するものではなく、中長期間に渡って開発する為、ファイルの作成・更新・削除を果てしなく繰り返します。これをGitのようなバージョン管理ツール無しでやろうとすると大変ですよね。でも、Gitはこれを解決してくれます。ちなみに、Gitはイギリス英語のスラングで「愚か者」とかそう言う意味なんだとか。
Gitの生みの親であり、オープンソースOSの代表格であるLinuxの開発者でもあるリーナス・トーバルズが名付け親。Linus Torvalds has quipped about the name git, which is Irish/British slang for a child born out of wedlock, and these days commonly British English slang for a stupid or unpleasant person.
http://en.wikipedia.org/wiki/Git_(software)記事
オンライン学習ツール
書籍
Basic Terminal Usage
ターミナルは、キーボードからコマンドと呼ばれる命令文を打ち込んでコンピュータに命令をするアプリケーションのことです。
なぜ、ターミナルについて学ぶ必要があるか?結論としては、環境構築、サーバー接続といったシステム環境設定では出来ないような操作を行うことが可能で、エンジニアには欠かせないツールと言えるからです。
ターミナルの名前の由来は、コンピューターがケーブルの終端に位置していたことが由来なんだとか。
昔のコンピュータは「スクリーン/キーボード」つまり「端末」と、ホストコンピュータは遠隔接続されていた。つまり、ホストコンピュータからケーブルを伸ばして「スクリーン/キーボード」につなげていた。
で、ケーブルの終端 (terminal end) に位置していたため、端末(terminal)と呼ばれるようになったらしい。
https://plaza.rakuten.co.jp/bluearth/diary/201001180002/記事
書籍
Data Structures & Algorithms
データを格納する形式「データ構造」(ex.配列、リスト)と、問題を解くための手順「アルゴリズム」(ex.while、if)のことです。
もう少し分かりやすく例えるとすれば、自動車部品の名前とその量=データ、組み立ての手順=アルゴリズムです。(あくまでイメージです)
なぜ、データ構造とアルゴリズムを学ぶ必要があるのか?結論としては、高い処理効率を実現するためのプログラムを書くために必要だからです。例えば、同じような処理結果を求めるプログラムでも、ユーザー視点やコンピュータ・サーバーへの負担を鑑みると処理効率が優れている方が良いですよね。
正直名前からして取っ付きにくいですが、多分これが理解できているのと出来ていないのでは大きな差があると思うので、時間をかけてしっかり理解したいと思います。
記事
書籍
SOLID, KISS, YAGNI
SOLID, KISS,YAGNIは、プログラミングの3原則とされているものです。
初めて見た時は、何これ?と思いました。SOLIDなんかは、結構小難しいことが書いてあるので、まずはこう言う概念があると言うことだけ抑えておけば良いと思います。(個人的見解)
SOILD
S - 単一責任の原則 (Single Responsibility Principle)
O - 開放・閉鎖原則 (Open/closed principle)
L - リスコフ置換原則 (Liskov substitution principle)
I - インタフェース分離の原則 (Interface segregation principle)
D - 依存性逆転の原則 (Dependency inversion principle)1つのクラスや複数間、親子間のクラスを作る上での指針となる5つの原則集です。
KISS
Keep It Simple,Stupid
シンプルにしておけ、愚か者よコードはシンプルさを保ちなさい。複雑さはバグやコントロール不能なものを生み出しますと言うこと。
YAGNI
You Aren't Going to Need it.
それはきっと必要にならないコードは必要最低限にしなさい。要らない、使わない機能を作る必要はないと言うこと。
記事
GitHub
Githubは、Gitの仕組みを利用したウェブサービスのことです。
Gitとの違いについて超ざっくり言うと、Gitがツールであるのに対して、GithubはGitを利用したサービスです。(他にもあります)Githubには、大きく分けると次の5つの機能があります。
# 機能 詳細 1 閲覧・公開 ソースコードを閲覧・公開できる 2 Fork 他人のプログラムを丸ごとアカウント上にコピーできる 3 Clone 他人のプログラムを自分のPC上にコピーできる 4 Pull request Cloneしたプログラムに対して、修正を加えられる 5 Merger 誰かから来たPull requestを受け入れて反映させされる なぜ、Githubを学ぶ必要があるのか?結論としては、Gitと同様に開発に欠かせないだけでなく、採用の過程でGithub上のソースコードを1つの判断材料としたり、他人のコードを見て勉強したりと、エンジニアにとって非常にリーズナブルなサービスであるからと考えます。
ちなみに、Github社が開発したGitHubですが、18年にマイクロソフト社により買収(75億円規模)されました。
猫みたいなキャラクターは、OctCatと呼ばれ、正式には「モナリサ」と言うんだとか。原文:Once upon a time, there was a cat who's name was Monalisa. Monalisa and her owner went to the beach. When Monalisa got to the beach, her owner Kelly gave her goggles so Monalisa could swim and see what was in the ocean. When Monalisa went in the water she found lots of fish. When Monalisa was swimming she was so exited she opened her mouth and swouloed a coral that made you grow legs like a octapus but keep your normal face. So Monalisa grew legs and became Mrs. Monalisa octocat.
訳:むかしむかし、モナリサという猫がいました。モナリサと飼い主は、ある日ビーチに行きました。ビーチに到着すると、飼い主のKellyが海の中を泳いで見られるようにと、モナリサにゴーグルを渡しました。モナリサが水の中に潜ると、たくさんの魚が見えました。モナリサはとても興奮し口を開けると、サンゴが口の中に入ってしまいました。すると、サンゴが口の中に入った瞬間、まるでタコのように足が伸びました。しかし、顔はそのままでした。だからモナリサは、足が伸びた「Mrs. Monalisa octocat」(モナリサ・タコネコ)になったのです。
http://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html記事
書籍
Licenses
ライセンスは、権利です。Wikipedia先生では次のように定義されています。
ライセンス(米: license、英: licence)は、それが存在しなければ違法となる行為をすることを許可すること、あるいはその許可を証する書面のことをいう。訳語は免許、認可、許可、鑑札など。
例えば、ユーザーがベンダーから「ソフトウエアを購入する」といったときに、多くのケースでは、ソフトウエアの購入は「使用権を購入している」ことを意味しています。つまり、ソフトウエア自体の所有権はあくまでベンダー側にあって、ユーザー側が購入したのは、使う権利(ライセンス)のみとなります。
なぜ、ライセンスを学ぶ必要があるのか?結論としては、ライセンスを疎かにすると、知らない間に著作権に違反していたり、重大なコンプライアンスの問題につながり、ソフトウェア開発における大きなリスクになりかねいからです。
記事
Semantic Versioning
Semantic Versioning(セマンティックバージョニング)は、ソフトウェアのバージョン番号の付け方のルールのことです
直訳すると、意味的なバージョン管理という意味です。例えば、abc1.2.3というソフトウェアがあるとして、左から順番にメジャー、マイナー、パッチバージョンというものを表しています。
使い分けとしては、以下の通りです。APIの変更に互換性のない場合はメジャーバージョンを、
後方互換性があり機能性を追加した場合はマイナーバージョンを、
後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。
https://semver.org/lang/ja/なぜ、Semantic Versioningを学ぶ必要があるのか?結論としては、自身が公開しているライブラリやパッケージのコードを何かしら修正したら、それに伴いバージョンを上げるのが一般的とされているからです。
記事
SSH
SSHは、Secure Shell(セキュアシェル)の略で、安全な通信方法のことです。
直訳すると安全なシェルと言う意味で、シェルというのはOSが理解できるプログラム言語みたいなもので、コンピュータに出す指示だと思って下さい。何が安全かと言うと、やりとりするデータ(情報)を暗号化してくれるから、盗視とかの心配がなくなって良いということらしい。
なぜ、SSHを学ぶ必要があるのか?結論としてはインターネットを経由してデータ(情報)のやり取りを行う場合、悪意のある第三者に情報を盗み見される危険性がある為、これを防ぐ必要があるからです。個人情報が漏れるようなサービス使いたく無いですよね。
記事
HTTP/HTTPS and APIs
HTTP(Hyper Text Transfer Protocol)は、通信プロトコル(通信規約・手順)のことです。
HTTPS(Hypertext Transfer Protocol Secure)は、HTTPにセキュリティ機能を追加したもののことです。
URLは一般的にhttpからはじまりますが、ショッピングフォームやお問い合わせフォームを利用しているときは、多くのサイトがhttpsからはじまります。
API(Application Programming Interface)は、どのアプリーケーションでも共通で使える機能を提供する仕組みのことです。
たとえば、GoogleカレンダーをWebサイトに表示させたい場合、GoogleのAPIを使ってWebサイトと連携させることができます。
なぜ、HTTP/HTTPS/APIを学ぶ必要があるのか?結論としては、HTTP/HTTPSはネットワークプロトコルとWebセキュリティの基本であること、APIが使えるようになると開発の幅を広げることができるからです。
記事
オンライン学習ツール
- Google Maps API入門(全17回)- プログラミングならドットインストールDesign Patterns
デザインパターンは、JavaやRubyと言ったオブジェクト指向言語でよく使われる、プログラミングでよく経験する問題の解決法にわかりやすい名前を付けて、カタログ化(虎の巻化)したものです。
ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)デザインパターンの概念はGoF(Gang of Four(ギャング・オブ・フォー)と呼ばれる四天王的な人たち)が最初に提唱してから、開発の現場にとって欠かせないものとなっています。
なぜ、デザインパターンを学ぶ必要があるのか?結論としては、コンサルのフレームワーク的な感じで再現性があり、自分でプログラムの設計を考えるときの指針にもなり、設計力向上につながる為です
記事
書籍
Character Encodings
文字コードを意味するのか、文字エンコーディングを意味するのか迷ったので、両方について触れると、文字コードは文字に割り当てられた「数字」のことで、文字エンコーディングは文字と数字をマッピングする(関連づける)「方式」のことです。ネット記事を見るに、この2つは異なるものとされています。
例えば、ネットサーフィンだったりメールで誰もが遭遇したことがあるであろう「文字化け」、これも文字コードが関係しています。文字コードには、Shift_JIS、EUC-JP、UTF-8などと言ったものがありますが、例えば、Shift_JISで保存されたHTMLファイルを、ブラウザがUTF-8だと勘違いして表示してしまうと文字化けが発生するというものです。
なぜ、文字コード/文字エンコーディグを学ぶ必要があるのか?結論としては、これらに関する知識が身についていると、文字化けに遭遇したときでも落ち着いて素早く解決できるからです。
記事
書籍
総論
必須知識だけでも覚えることは山ほどありますが、何を学ぶべきか全体像を掴むことが出来ました。これから、スケジュールを組んで一つ一つしっかりとマスターしていきたいと思います。
正直、結構骨の折れる作業だったので、FE/BE/DevOSについては、機会があれば別の記事で触れたいと思います。