miyasakura’s diary

日記です。

初心者からフルスタックのソフトウェアエンジニアになるには

はじめに

自分自身では「ソフトウェアエンジニア」とだけ名乗ってるんですが、他人に自分を紹介してもらうときに「フルスタックエンジニア」とか「なんでもできるエンジニア」とかでざっくりと表現してもらうことが増えてきました。

そんな中、若者に質問されるのがどうやって技術を身につけられるかということです。

これまでは「誠実に目の前の仕事に取り組むのが一番の近道だよ」と答えて来ましたが、これは一定の真実ではあるんですがそれだけで良いかというとそうじゃない気はします。

ということで、若者がこれから何でもできるエンジニアを目指そうとするならこうすれば良いんじゃないかなというのを言語化してみました。

1. 基礎知識を身に付ける

応用情報技術者試験レベルの知識を身に付ける

身につけるべき知識は死ぬほどあるんですが、最低限かつ体系的にまとまってるのは応用情報の試験かと思います。意外とこのレベルの内容もわからずにプログラミングスクールを出ただけで基礎力は身についていると認識している人もいるのでまずはエンジニアならこのレベルの試験は軽く通ってほしいなと思います。

高校数学の復習をする

フルスタックと思われるには「これできる?」に対して迷わず「できます」といえる必要がありますが、難しすぎてできませんでした、とならないようにしたいです。

sin, cos, tan, atanあたりはなんだかんだ使う機会ありますよね。機械学習とかの方面であれば線形代数も必須だと思います。大学の範囲だと偏微分くらいは理解しておいたほうが良いかも。

英語を学ぶ

最近エラーメッセージをスタックトレースも含めてGoogle翻訳にかけてエラーの内容がわからないと言っている新人を見たときは衝撃でした。

英語は読み書きは最低限できないと成長速度がどうしても遅くなってしまいます。

アルゴリズムを学ぶ、実装する

複雑なアルゴリズムを覚える必要は(Googleの入社試験を受けない限り)ないと思いますが、ある程度複雑なロジックを理解して実装する力は必要なのでその勉強として本一冊分くらいはアルゴリズムの勉強はしておいて損はありません。

Apple Payの実装とかOAuthの実装とかもいざやることになったときに適当に実装してしまうと7payのような話にもなるかもしれません。(自分は課金周りの実装をミスったことがあるので大きなことは言えないですが、、、)

2. 技術を身に付ける

Webサービス自宅サーバーでホストしてみる

PCを自分で組み立てて、その上で自分で開発したWebサービス(todoアプリでも何でも)をホスティングしてみましょう。ハードウェア、OS、Webサーバーなど広い知識を身につけることができます。

ちょっとデザインにこだわればPhotoShopなども使うことになるでしょう。

はじめのうちはググった内容を実行するだけで何をやっているかわからないと思いますが、4〜5回もやればだんだんと一つ一つの操作の意味がわかってくると思います。

Webサービスクラウドサービスでホストしてみる

なんだかんだ今はクラウドの知識は必須だと思うので、まずは一番王道なWebサービスホスティングクラウドでやってみましょう。

クライアントアプリを作る

Webサービスとはまた一つ感覚が異なるのがクライアントアプリケーションです。

Android/iOS/Mac/Windowsなんでも良いですが、いくつかのプラットフォームに対して実装してみると様々な知見が得られると思います。

作ったサービスやアプリを世の中に出す

マーケティングやカスタマーサポートの感覚を身につけるのも重要です。

自信作がクソアプリだという評価をつけられてもヘコまない精神を身につけることもできます。

得意言語を作る

ソフトウェアエンジニアとしてはインフラからインターネット一般の知識まで広い知見が必要ですが、やはり競争力の源泉はプログラミングの能力です。

一つの言語をある程度極めれば他の言語もすぐに使えるようになるので、まずは好きな言語を人に語れるくらい極めて見るのが良いでしょう。

3. 開発スタイルを身に付ける

ウォーターフォール開発を実践する

大規模システムを作るときは日本ではウォーターフォールがほとんどです。

やってもいないのにディスるのは頂けないですし、ちゃんとやった人であればウォーターフォールそれ自体をディスる人はいないでしょう。要は適材適所です。

SIerで学んだプロジェクトマネージメントはアジャイル開発を基本としている今でも周りの人よりもうまくこなすことができている一因だと思っています。

アジャイル開発を実践する

スクラムでなくてもそれ以外でも、ちゃんとしたアジャイル開発を学んで実践しましょう。

体系立てられたアジャイル手法があるのに最初から崩したスタイルでやる人たちもいますが、まずは教科書通りにやってみたいところです。

マネージメントをやってみる

開発にしか興味がなくても、一度は10人〜のチームのリーダーとして働いたほうが視野も広くなり、どのような開発チームに入ってもマネージャーの視点で動くことができるようになります。

複数の開発スタイルを経験するためには複数の会社で働く必要がありますが、あまりにジョブホップをしているとあくまで開発者のポジションに留まってしまって、マネージメントをする経験がなくなってしまうので注意です。

4. 技術に親しむ

家でも仕事のための勉強をするのか、というのは議論によく上がりますが、専門職というのは常に専門知識をアップデートし続けてこそ成り立ちます。医者や弁護士が大学時代の知識だけで仕事してても困りますよね。

技術ニュースを読む

はてぶのテクノロジーカテゴリを追うでも良いですし、TechCrunchの記事を読むでも良いのですが、日常的にニュースに触れると少なくとも単語単位ではトレンドを追えるので世の中の流れに置いていかれずに済みます。

技術について議論する

技術がわかる同僚、友人と様々なことについてディスカッションしましょう。

新しい知識を得られたり、話すことで自分の理解が深まったりといい事ずくめです。

まとめ

各論ではDDDのような開発手法やMVCフレームワーク関数型言語の知識など多くの人が必須だという知識は多々あるでしょう。しかしそれらを全て網羅するとそもそも時間が足りません。

「なんでもできる」と思われてても結局は「捨て方がうまい」くらいなのかもしれません。

何を捨てて何を活かすかというと、まずはここに書いてある内容くらいが自分的にはバランス感がある人材かなと思います。

ある程度基礎力ができると知識の吸収速度も上がるので、あとはとにかく色々やって経験したり本を読んで勉強したりで個別の知識を学んでいけばより良いエンジニアになれると思います。

そもそもフルスタックエンジニアを目指すべきなのか

なんでもできますというだけのエンジニアは実は市場価値が低いです。

お金がある会社は各技術要素に対して個々に専門的な人材を雇います。「なんでもできる」という人材を雇うのは各領域に対しての専門人材を雇う余裕がない企業ということなので、安い給料でしか仕事はできません。

技術の幅が広くても個人で実現できるものは小さく、多くの仕事は複数人で実現することになります。技術が一番わかっていても数十人をまとめる力がなければリーダーにはなれませんから、技術の素養が多少足りなくてもマネージメント能力の高い人間が上に行くことになります。

ということでどの仕事にも言えることですが何でも屋さんの立ち位置は実はすごく微妙です。

個人としてはフルスタックというワード自体は自分で名乗っているわけでもなく他の人から言われるだけなので良いのですが、結局は自分の売りというものがないとなかなか市場価値を上げられません。

私の場合は中学から20年以上プログラミングをやってきているので結局は設計力や開発のスピードが売りになっています。

それ以外はその開発力をサポートするための補助的なツールなのかなと今は思っています。

なので若者はまずは幅広く経験しながらも、その中で自分の好きな分野を見つけて専門性を伸ばしていくのが良いかもしれません。

2019年上半期振り返り

下半期に入ったので簡単に上半期を振り返ってメモ。

仕事

業務委託の新しい仕事

馴染みがない業界でプログラミングではなくコンサルティングに近いことをやっている。

一番の得意領域の開発以外でしかもコミュニケーション中心ということで比較的ストレスフルだけど最近ストレスなく働いていたのでたまには良いかと思っている。

単価(単金)を上げてみた

今まで自分のプロダクトで稼ぎたいという思いで単価を適当に考えてたけど少しずつ上げる方向に。

というかエージェント介してないわけでもっと強気の交渉を最初からやってよかったよねという。

最初から自分の単価はいくらです、って言ってから進めたほうが楽ということを学んだ。

仕事の仕方の工夫

フリーランス業務委託契約している会社が3社、それ以外で新規事業を手伝っているのが2社、自分でやりたいプロダクトもあり、となって時間管理が難しくなってきた。

業務委託で仕事をしていてお金をもらえていると満足感が出てしまったり、自宅作業だと甘えとかも出ちゃうので、良い時間の使い方ができていないなと気づいた。

改善にはまずは現状を知るところからということで毎日どの作業にどれくらい時間を使ったのか記録。(自動的に記録したいところだけど今のところは手作業)

そうしてみると自分の理想とはかけ離れているので、もうちょっとやらないといけないなと気づいて上半期は久々に少し真面目に働き始めた。計測や可視化って大事。

PC/iPhoneでの作業時間の計測にはRescueTimeも便利。

技術面

新しく得られた技術たち。全体的にデータ分析周りで色々勉強できた。

  • Vue.js
    • 単発で仕事受けつつ勉強
  • コンサルっぽい仕事の仕方をなんとなく学んだ
    • コンサルになれるわけではない
  • Tableau
    • グラフ作成からTableau Server構築まで一通りはできるように
  • AWS
    • 新しく触れたのは AWS Batch, Organizations, Redshift くらい
    • Solution Architect Professional を取った
  • Python
    • Scrapyを使った
    • Djangoも久々に触った
    • JupyterHub / Jupyter Notebookの環境を作った
  • Ruby
    • Rails力は少しずつついてきた気がする
  • PostgreSQL
    • 分析周りのデータベースで利用した

サービス作り

進んだような進んでないような。

プライベート

エンタメ系

新しいものに触れる時間が少なかったなと反省。

読んだ本

技術書以外で。相変わらずほとんど読んでない。

  • It Doesn't Have to Be Crazy at Work
  • データの見えざる手
  • 実践ブロックチェーンビジネス
  • トークンエコノミービジネスの教科書
  • 「納品」をなくせばうまくいく
  • 大前研一 世界を知る6つの特別講義

その他

婚約した。

名刺管理アプリmyBridge使ってみた

最近IT業界じゃない人との仕事が増えまして名刺のやり取りが増えてきたので名刺管理のサービスを探していました。

SNS機能は不要なのでsansan以外でいいものが無いか調べてみたところ

WantedlyWantedly People ・LINE の myBridge

が選択肢として良さそうです。

この中だとWantedlyは技術面では信頼していないかつただの文字認識っぽいので、人力での入力をしてくれるmyBridgeにしました。

myBridgeについて

myBridgeはLINEが2018年5月にリリースした名刺管理アプリです。

LINEグループとしては韓国の名刺管理アプリのRememberを買収しているみたいですね。

データを集めて何かしらのビジネスに使うことを考えているんでしょう。そこは許容するしか無いですね。

現在、「おまかせスキャン」というのをやっていて名刺を郵送すると無料でスキャンしてくれます。

おまかせスキャンを使ってみた

スキャンはLINEではなく株式会社うるるBPOというところが行っています。

GW前日の4/26の17時過ぎに申し込んだところ、返信が翌営業日の5/7でした。

そこに認証番号や発送方法がかかれていたので、5/13に発送して5/15に到着しました。

送料はかかるのかと思っていたら着払いでOKだったのが驚きです。

スキャン完了および名刺の返送が5/21と8日ほどかかりました。

完了通知がきたあと、しばらく名刺登録中の状態だったのですが半日後くらいに確認したら500枚ほどのデータがmyBridge上に登録されました。

感想

おまかせスキャンは非常に便利でした。

データの精度は高くもなく低くもなくというところでしょうか。

10枚ほど確認してみたのですが、2枚にミスがありました。

しばらく使ってみて不便だったらCSVエクスポートでデータだけ外に出せるのでひとまず使い始めてみます。

花粉症対策スギはまだ0.3%:すべて切り替わるまであと500年?

花粉にイラっとして情報を調べたのでメモ。

花粉症対策の杉も増えてきているので花粉の飛散が少しずつ減ることを期待しているのですがどうやらなかなか難しそうです。

下記ページにQ&Aがあるのですが、

www.rinya.maff.go.jp

「あと何年あればすべて植え替えられるの?」という質問に「単純に計算しても〜相当の長期間を要することが想定されます」となっていて、計算できるなら数値だせよ、って思うんですがおそらく明言したくない数値なのかと。

最近の下記の記事を見つけました。

www.fnn.jp

花粉症対策の杉になっているのは杉の人工林のうち0.3%とのこと。

更に、

www.rinya.maff.go.jp

の数値を見ると花粉症対策スギ苗木は平成28年度までに2102万本の苗木が生産されています。(表の年度以前の数値は無視してます。)

ここに上記のニュースをみると平成29年度が約1000万本ということで、平成29年までの合計は約3100万本と考えられます。

これでやっと0.3%なので1000万本で杉の人工林の面積0.1%分ということです。

年間2000万本程度の苗木が生産されていて、今後これが全て花粉症対策スギ苗木になったとしても、年間0.2%ずつしか花粉症対策の杉に転換できないということになります。

このペースだとスギの人工林の10%を植え替えるのに50年、半数の50%で250年、全て植え替えるのに500年かかります。

少なくともあと数十年という単位では花粉症に悩まされることになのでちょっと絶望感ある、という話でした。

※適当な計算なので、スギの生産量=伐採量と仮定してます。伐採した杉を広葉樹などに植え替えているのであれば上記よりは早いペースで杉は減っていることになりますがそれでも500年が50年になるわけではないと思うので絶望することには違いはないかと

※人が影響を受ける範囲だけであればもっと効率よくできそうではあるけど300kmとか飛散するみたいなのであまり対象は絞れない気がしている

※花粉を減らす薬を散布する方法も開発されてるみたいなので、そういった方面で一気に解決できると嬉しい

受験レポート: AWS 認定ソリューションアーキテクト – プロフェッショナル (SAP-C01版)

2019年2月に試験がリニューアルされたようで、情報が少なかったので簡単にまとめてみます。

受けたきっかけ

2年前の4月にアソシエイト3種類を受けたので切れる前に、と思ったんですがいつのまにか認定の有効期間が3年に延びていたので今じゃなくても良かった…。それでもこういうのは勢いが大事なので申し込み。

試験申し込み

AWS認定のサイトから申し込む形になります。いくつか戸惑うポイントがあったので、電話で問い合わせて確認してしまいました。

  • 2つある同名の試験のうち180分の試験の方を選ぶ
    • 特に説明なく二種類あった。旧試験はChineseとKoreanのみしか選択できないので結果間違えはしないものの不安になる。過渡期だけなので放置しているのだとは思うが説明は欲しい。
  • 身分証明書について「署名があるもの」とあるが署名は特に不要
    • 免許証と保険証でOKでした
  • リマインダーメールで姓と名が逆になって送られてくる(間違ってると受験できないよという注意つきで)
    • メールが間違っているだけで、実際の登録内容は問題ないとのこと

※ 二回ほど電話したのですが二度目の電話は昼休みの時間帯だったためか英語の人だったので驚いてガチャ切りしてしまいました。落ち着いて電話かけ直して日本語分かる人にコールバックしてもらって、無事日本語でやりとりできました。

試験内容

おおよそ下記の通りです。詳細は試験ガイド(AWS 認定ソリューションアーキテクト – プロフェッショナル)を参照。

  • 試験時間 180分
  • 問題数 75問
  • 分野
    • 1.組織の複雑さに対応する設計(12.5%)
    • 2.新しいソリューションの設計(31%)
    • 3.移行の計画(15%)
    • 4.コスト管理(12.5%)
    • 5.既存のソリューションの継続的な改善(29%)
  • 試験結果は 100~1000 点の範囲で最低合格スコアは 750 点

勉強方法

3/9(土)に思い立って3/13(水)に受験なのであまり勉強できずでしたが合計10時間くらいは勉強したと思います。

必要な勉強時間は気になるところですが個々人のスキルによるので人それぞれですね。ちゃんとしたインフラの知識があって普段からAWS使っていればそこまで大変じゃないのかなと思います。自分の場合はAWS SummitやJAWS DAYSを見てそれほど自分の知識が遅れてない気がしたので特攻でも行けるかなと。。

具体的には下記の内容です。

模擬試験:60分+復習3時間くらい

これは受けたほうが良いやつです。アソシエイトの合格特典で無料で受けられるらしいですがそんなことは知らず普通にお金を払ってしまいました。

ややググりながらスクショ取りつつ結果は下記。

総合スコア: 70%

トピックレベルスコア:
1.0  Design for Organizational Complexity: 66%
2.0  Design for New Solutions: 83%
3.0  Migration Planning: 100%
4.0  Cost Control: 50%
5.0  Continuous Improvement for Existing Solutions: 60%

ギリギリ合格ラインですかね。。

個別の問題の解答や正解不正解は教えてくれないので、復習としては一つ一つの問題を確信できるレベルまで調べて答えを出しました。

問題の癖というか文章のどこに注目するのかみたいなのがなんとなくわかったのが大きかったです。

あと日本語訳がひどすぎるときに英語に切り替えられるとかそういった試験のやり方についても確認できるのは大事ですね。

Pass4trainingの問題集(Dump):1時間

意味なしでした。

ぶっつけ本番のつもりでしたがどうも怖くなってしまって買ってみたのですが、SAP-C01の内容には全く対応していませんでした。

最初の20問ほど解いただけですが明らかに解答が間違っているものが2問もありました。

模擬試験では Organization とか SSM とか Container などが中心的に出てきていたのにそういったキーワードが0だったのもあり、これ以上やる意味は無いなと判断しました。

Udemyの模擬試験:2時間

www.udemy.com

これはちゃんとした問題集なのでやる価値がありました。とはいえ試験前日に発見したので30問ほどしかやっていませんが…。

クーポンコード TUTORIALSDOJO で80%オフなので1,200円で300問はかなりお得です。

しかも上記のPass4Trainingなど海外の試験対策問題集にありがちな「どこから手に入れたのかわからないけど本番の問題そのまま」というものではないので、誠実に試験を受けたい人におすすめです。

Udemy内のメッセージで

We are currently transitioning to the new (Feb 2019) exam version so kindly expect frequent updates to the question bank this month. There is a focus on important domains like Design for New Solutions and Continuous Improvement for Existing Solutions hence, these topics have more questions than other domains.

というのが届いていたので、問題は更にアップデートされていくようです。

AWS training のトレーニングビデオ:1時間

www.aws.training

当日の朝微妙に時間があったので馴染みない分野のビデオを見て時間を潰しました。初めて見ましたが質が高くて良いですね。

  • Monitoring the AWS Storage Gateway Cache and Upload Buffer
  • Migrating and Tiering Storage to AWS
  • Introduction to Amazon EC2 Systems Manager

試験当日

模擬試験よりは日本語がわかりやすい問題が多かったですが、英語じゃないと解けない問題もいくつかありました。

解き終わったら残り10分で見直しの時間はあまり取れず。

それでも不安な問題としてチェックをつけたのが1/3ほどなので合格ラインには届きそうかなと少し安心。一応ギリギリまで見直しつつ残り30秒で試験を終了しました。

その後簡単なアンケートに答えたら結果が表示されてなんとか合格。

試験結果

17時に試験が終わって、詳細なレポートは翌日の22時くらいに確認したら見れるようになっていました。

結果は 837 点。合格者平均はこのくらいなのかな。。

分野ごとに見れる評価は「十分な知識を有する」「再学習の必要あり」の二種類だけなのですが、すべて「十分な知識を有する」になっていました。

感想

短い勉強時間でしたがそれでも新しい知識は結構得られたので、受験した価値はあったかなと思います。

それはそれとして新試験になったことで情報が間違っていて不安なところもあったのでAWSさんしっかりしてくれという気持ち。

次は DevOps を受験予定。

賃貸マンションの契約を個人から法人にして社宅扱いにしてみたよ

相変わらずフリーランスやってますが法人をたててしまったので、税金対策も色々とできるようになりました。

抜け道を使ったり経費計上を頑張ったりとかはしない方針ですが、問題なく認められる範囲はやるべきかなというスタンスです。

その一つとして賃貸を法人契約にして社宅として貸し出すという方法があります。

No.2600 役員に社宅などを貸したとき|国税庁

家賃の1〜3割程度を給与から貰うだけで賃貸費用をそのまま経費に参入できます。個人事業主で家賃を経費にする形だと3割くらいの経費だと思うのでだいぶ違いますね。

今の家はすぐ引っ越しそうなので次の賃貸契約のときかなと思っていたのですが、しばらくこのまま住みそうなので不動産会社に連絡して契約変更してみました。

手続きの流れは、

  1. 管理会社に法人契約にしたい旨を連絡する
  2. 管理会社に登記簿謄本などの必要書類を郵送する
  3. 家主さんと管理会社側で相談および審査
  4. 契約書のドラフトの家主と自分それぞれで確認
  5. 契約

という流れ。意外とスムーズでした。

費用としては仲介手数料として家賃の1ヶ月分がかかっています。

ただ契約日が2019/3/1からになることで更新日が2019/12→2021/03に伸びたので、実質0.5ヶ月分の更新料が浮いています。(実際には更新日は以前のままにしたいと言われたのですが、ほんの少しごねたら通りました)

実質0.5ヶ月分の費用なので、これくらいであればすぐ取り返せそうです。

社宅にするとどれだけ得するのか

ということでこれによってどれくらい得になるのかということを考えます。

いろいろと考え方はありますが、例えば10万円の家賃を払った上で20万を手元に残すだけの給料を自分に支払うケースを考えます。

個人契約のままだった場合

全て給与として払うことになります。ものすごく適当な概算で社会保険を20%(労使折半で個人負担は半分)、所得税住民税を20%として3割ほど天引きされるとしてざっくり計算すると、

額面給与42万+社会保険会社負担分4万=46万

を会社が支払う必要があります。

社宅にする場合

固定資産評価額次第ではありますが、賃貸料相当額を20%とすると手取り22万から2万を家賃として会社がもらえば良いことになります。とすると、

額面給与31万 + 社会保険会社負担分3万 - 賃貸料相当額2万= 32万

が給与周りの会社負担額となります。これに加えて家賃10万を負担するので合計 42 万が会社負担です。(賃貸料相当額が10%で済めば41万まで減ります。)

差額

上記をまとめると法人としての負担が46万から42万まで減るので毎月4万円ほど法人の利益が増えることになります。家賃の4割というのはかなり大きいですね。これを原資に給与にしても良いですし、会社にそのまま残すのも良いでしょう。

実際には個人としての年金受給額が減るのでもう少し考慮する必要がありますが、貰えるかわからない年金のことはそれほど気にしなくていいかなという方針です。

個人事業主だと10万の家賃のうち3割を経費にしても税率3割で1万ほどお得になるだけなので結構違いますね。

まとめ

法人契約に切り替えるのはかなりお得なようです。

※考え方間違ってたら教えてください

ビックカメラで買ったiPad Proが届いた

先月使ったpaypayのポイントが月初に付与されたので1/16にビックカメラiPad購入したんですが本日やっと届きました。

Webで公開されてるApple製品の在庫状況をみると在庫はあるはずなのに一週間ほど進捗がないので電話で問い合わせたら慌てて送ってきました。

iPadの箱にはApple側の発送日が貼ってあったんですがこれは1/5になっていて、中国からの発送で一週間かかったとしてもどう考えても購入時点であった在庫なので、単純に発送業務が間に合っていなかっただけなんでしょう。

ツイートとか見るとビックカメラに在庫を回さないAppleのせいっぽい雰囲気になっていたけど実際にはビックカメラでスタックしてたということです。

在庫あるものから順次発送って言っててほぼ最初からApple Pencilは在庫あったのに送られてないからそんなことだろうとは思ってました。

問い合わせをしなかったらいつになっていたのか。

店舗に取りに行くパターンだとまた違うのかもしれないけど待たされている人は電話したらどうにかなるかも。

ビックカメラは安いところ以外はもともとそれほど好きじゃないのでこれで評価が下がることもないけどもうちょっとこういうところ頑張ってほしい。