まとめはじめにフロントエンド編の続きです。Roadmap2019でチェ...https://one-it-thing.com/1795はじめに最近、日々の学習の成果や転職の際の履歴書代わりにポートフォリオを作るのが流行っていますね。今現在自分が保持するスキルセットを明確に把握するのは安心感や向上心に繋がり、今後やるべきことが見えて来たりします。ざっくばらんに状況把握をし始め...自分のスキルがどれだけ時代にキャッチアップ出来ているか確認していきます。Ahmedさんのスキルロードマップに従って追って行きます。Kamran.チェック時のルール青い実線に沿って進んでいき、破線の選択肢から経験済みのものをリストアップ。仕事で使ったことがなくても勉強したことがあるものはカウントしてOK。載っている技術要素だけチョイス。チェック開始サーバサイドはフロントエンドと違い、技術要素というよりはスキル習得の仕方のロードマップになっています。意訳ベースで内容を確認していき、自分の場合はどうなのか当てはめていきます。GolangRust私の場合、リストの中で普段使いしている言語はこれくらいです。勉強したことを練習し、選んだ言語でコマンドラインアプリケーションをいくつか作成します。redditのポストを取り出して保存する。ディレクトリ構造のJSONを扱う。それらのJSONを読み込み、ディレクター構造を作成する。毎日行っているタスクを自動化する。覚えたら使いたくなるのでこれはやりますね。データフォーマットはJSON推しです。Manager「選んだ言語のパッケージマネージャについて学ぶ」PHPにはcomposer、Node.jsにはnpmとyarn、Pythonにはpip、Rubyにはgemなどがあります。パッケージマネージャを使用すると、アプリケーションに外部の依存関係を取り入れたり、独自のパッケージを配布したりできます。どの言語にもライブラリ追加する仕組みがあって使わない方が難しいです。使っている内に自然と覚えてしまうことが殆どかと。Plactices「標準とベストプラクティスを学ぶ」それぞれの言語には、独自の標準とベストプラクティスがあります。それらを勉強してください。PHPにはPHP-FIGとPSRがあり、Node.jsには、コミュニティーなどに運営される多くの異なるものがあります。Node.jsも一時期io.jsに分裂したりしてどっちが正になるのか分からない時期がありました。派生したプロジェクトやよく用いられないパターンよりもまず基本を抑えた方が良い、ということでしょう。Library「パッケージやライブラリを作って公開する」いくつかのパッケージ/ライブラリを作成して配布するパッケージを作成して配布し、他の人が使用できるようにします。これまでに学んだ標準とベストプラクティスに従うようにしてください。作ったライブラリを公開する際も社内的であればNexus3を立ち上げることで、多くの言語をカバーするリポジトリになってくれます。テストについて学ぶ」テストの種類はいくつかありますが、ここでは選択した言語で単体テストと統合テストを記述する方法について学びます。モック、スタブなどのさまざまなテスト用語を理解しましょう境界値、回帰テスト、同値分割、カバレッジ、ユニットテスト、結合テスト等々の意味が分かっていれば大丈夫ということですかね。採用した言語で使われるテストツールのマジョリティも把握しておくべきですね。先に進み、前の手順で実装した実用的なタスクのための単体テストを書いてください。カバレッジの穴埋めゲームとして楽しんでます。Databases「リレーショナルデータベースを学ぶ」いくつかの選択肢がありますが、一つのデータベースを学べば他のデータベースもかなり簡単に理解できるようになります。選択出来なければ取りあえずMySQLを選んでください。それらの違いやユースケースも学んでください。PostgreSQLMSSQL私の場合はクリティカルな案件はOracleが多くて、今はそれらもコスト面からPostgreSQLに移行させてるような状況です。Time「実践する」これまでに学んだことすべてを使用して簡単なアプリケーションを作成します。登録、ログイン、そしてCRUDが必要です。誰でも公開プロフィールページを登録して取得でき、投稿を作成、更新、削除します。公開ページには、作成した投稿が表示されます。この手の実践はTODOメモなんかも多いですね。選択したプロジェクトと言語に応じて、フレームワークが必要な場合と必要でない場合があります。いくつかの異なるオプションがありますPHPならLaravel、Symphony。Node.jsならExpress.js、Hapi.js。KamranさんはGoはフレームワーク使わない方が好みだそう。私は仮想的なホテル予約サイトを作っていて、各言語のマジョリティフレームワークで同じように実装してみる、とかやっています。Time「実践する」9で作ったアプリケーションを10で選んだフレームワークで作成する。最初はServletを直書きして作っていたものをStrutsやSpringを使って作り変える、とか確かに自然とやってきました。便利だなと思うだけでなくフレームワークがブラックボックスにならないようにしたいです。Databaseを学ぶ」まず、それらが何であるか、それらがリレーショナルデータベースとどう違うのか、そしてなぜそれらが必要なのかを理解してください。いくつかの異なる選択肢があります。さまざまな選択肢を見て、それらがどのように異なるかを見てください。MongoDBRethinkDBCassandraCouchbaseMongoDBしか使ったことないです。一時期経営難が噂されていましたが2018年末には株価が上がり、経営も大分回復したみたいです。Redis自分で使わなくてもGitLab他が使っていて知らずに使っていたりします。Fieldingの元の論文からRESTに関する部分を必ず読んでください。Architectureshttps://www.ics.uci.edu/~fielding/pubs/dissertation/top.htmこの論文のCHAPTER5、CHAPTER6当たりですね。「RESTはレガシーシステムをラップする目的にも使えるよ」みたいなことも書いてあります。違いについて知り、それらの実装方法を学びましょう。JWTOpenID認証:あなたは~さんですね。認可:あなたは~していいですよ。Brokersメッセージブローカーについて学び、「なぜ」を理解して1つ選ぶ。複数の選択肢がありますが、私はRabbitMQまたはKafkaを選びます。あなたが1つを選びたいならば、今のところRabbitMQの使い方を学びましょう。RabbitMQKafkaJMSやActiveMQなら「処理時間のかかる別システムへのリクエスト」「システム間の相互監視」用途で採用したことがあります。QueueとTopicの違いと基本的な書き方を知っていれば大丈夫かと思います。Engine「検索エンジンについて学ぶ」アプリケーションが大きくなるにつれ、データベースに対する単純なクエリではうまくいきません。検索エンジンを使用する必要があります。複数の選択肢があり、それぞれに違いがあります。SolrSphinxSphinxはドキュメント生成にしか使ったことが有りませんでした。DBや文書の全文検索にFessを使っているのでESとSolrは自然に使っています。Docker「Dockerの使い方を学ぶ」インフラ屋さんだけでなくソフトウェアエンジニアにも必須になりましたね。一度自分で構築した経験があるミドルなら二度目からはDockerイメージを探すようになりました。Servers「Webサーバの知識」いくつかの異なる選択肢があります、異なる選択肢を見、それらの違いと制限を理解しましょう。IISCaddyはHTTP2サーバらしいです。使うことないかな・・・。Socketsの使い方を学ぶ」サーバ側で時間が掛かる処理の進捗をクライアントに伝える為に使ったりしています。GraphQL必須ではありませんが、気軽に見て、その内容と新しいRESTと呼ばれる理由を確認してください。イマドキ要素が出てきました。来年あたりにやるプロジェクトでは導入したいと思って勉強中です。Databaseが提供しするものについて少し理解するべきです。勉強もまだしていません。使いどころがまだ分からないというか。above「上記で述べていない全てのこと」プロファイリング、静的解析、データドリブン開発、SOAP。それだけ幅広い知識が必要ということですかね。まとめサーバサイドは技術ピックアップではなくスキル習得の仕方を教えてくれました。フロントエンドに比べて流行り廃りが少なく、デファクトスタンダードはある程度決まっています。「おっ」と目を引くようなビジュアルを作るのがフロントエンド学習のモチベーションとするなら、特定分野の知識を掘り下げ、技術を使ってプロダクトを実現したり問題を解決するのがサーバサイド学習のモチベーションでしょうか。何かの裏付けを取りたくて自分でシェアの調査をする時があったりします。ITプロジェクトに限らず、上司部下関わらず、他人と仕事をしているとこんな状態になることがあります。PayのWeb決済を開発する為にSandboxテスターを作ってiPhoneに設定2020/01/10Android版ChromiumをVirtualBoxにインストールしたUbuntuでビルドしてみるプロフィールshingo.7k24東京在勤、職歴20年越え中年ITエンジニアです。開発現場で頑張っています。19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。